Module:ClangDiags/DiagsLongData8: Difference between revisions

Jump to navigation Jump to search
no edit summary
(Created page with "local a="message"; local b="commit"; local c="category"; local d="prefix"; local e="regex3"; local f="type"; local g="title"; local h="regex2"; local i="regex1"; local j="(?:warning|error|fatal error)\\: "; local k="source"; local l="Warning"; local m="warning: "; local n="maingroup"; local o="groups"; local p="defaultactive"; local q="Semantic Issue"; local r="c++98-compat-pedantic"; local s="c++98-compat"; local t="c++11-compat-pedantic"; local u=""; local v="c++14-com...")
 
No edit summary
Line 209: Line 209:
[c]=q,
[c]=q,
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{F,9609,"/// 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  } else if (ConvType->isVoidType()) {\n    Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used) << ClassType << ConvType;"}}
[k]={{F,11180,"/// 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  } else if (ConvType->isVoidType()) {\n    Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used) << ClassType << ConvType;"}}
},
},
["warn_coroutine_handle_address_invalid_return_type"]={
["warn_coroutine_handle_address_invalid_return_type"]={
Line 223: Line 223:
[c]="Coroutines Issue",
[c]="Coroutines Issue",
[b]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata"},
[b]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata"},
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",306,"// See if return type is coroutine-handle and if so, invoke builtin coro-resume\n// on its address. This is to enable the support for coroutine-handle\n// returning await_suspend that results in a guaranteed tail call to the target\n// coroutine.\nstatic Expr *maybeTailCall(Sema &S, QualType RetType, Expr *E, SourceLocation Loc) {\n  // Check that the type of AddressExpr is void*\n  if (!JustAddress->getType().getTypePtr()->isVoidPointerType())\n    S.Diag(cast<CallExpr>(JustAddress)->getCalleeDecl()->getLocation(), diag::warn_coroutine_handle_address_invalid_return_type) << JustAddress->getType();"}}
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",350,"// See if return type is coroutine-handle and if so, invoke builtin coro-resume\n// on its address. This is to enable the support for coroutine-handle\n// returning await_suspend that results in a guaranteed tail call to the target\n// coroutine.\nstatic Expr *maybeTailCall(Sema &S, QualType RetType, Expr *E, SourceLocation Loc) {\n  // Check that the type of AddressExpr is void*\n  if (!JustAddress->getType().getTypePtr()->isVoidPointerType())\n    S.Diag(cast<CallExpr>(JustAddress)->getCalleeDecl()->getLocation(), diag::warn_coroutine_handle_address_invalid_return_type) << JustAddress->getType();"}}
},
},
["warn_coroutine_promise_unhandled_exception_required_with_exceptions"]={
["warn_coroutine_promise_unhandled_exception_required_with_exceptions"]={
Line 237: Line 237:
[c]="Coroutines Issue",
[c]="Coroutines Issue",
[b]={"a9fdb346dbc6",1490229213,"[coroutines] Implement unhandled_exception changes."},
[b]={"a9fdb346dbc6",1490229213,"[coroutines] Implement unhandled_exception changes."},
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",1487,"bool CoroutineStmtBuilder::makeOnException() {\n  if (!lookupMember(S, \"unhandled_exception\", PromiseRecordDecl, Loc)) {\n    auto DiagID = RequireUnhandledException ? diag::err_coroutine_promise_unhandled_exception_required : diag::warn_coroutine_promise_unhandled_exception_required_with_exceptions;"}}
[k]={{"clang/lib/Sema/SemaCoroutine.cpp",1681,"bool CoroutineStmtBuilder::makeOnException() {\n  if (!lookupMember(S, \"unhandled_exception\", PromiseRecordDecl, Loc)) {\n    auto DiagID = RequireUnhandledException ? diag::err_coroutine_promise_unhandled_exception_required : diag::warn_coroutine_promise_unhandled_exception_required_with_exceptions;"}}
},
},
["warn_correct_comment_command_name"]={
["warn_correct_comment_command_name"]={
Line 252: Line 252:
[c]=kb,
[c]=kb,
[b]={"6c7a16666dbb",1368040860,"documentation parsing. Patch to do typo correction for "},
[b]={"6c7a16666dbb",1368040860,"documentation parsing. Patch to do typo correction for "},
[k]={{"clang/lib/AST/CommentLexer.cpp",389,"void Lexer::lexCommentText(Token &T) {\n  case \'@\': {\n    if (!Info) {\n      if ((Info = Traits.getTypoCorrectCommandInfo(CommandName))) {\n        Diag(Loc, diag::warn_correct_comment_command_name) << FullRange << CommandName << CorrectedName << FixItHint::CreateReplacement(CommandRange, CorrectedName);"}}
[k]={{"clang/lib/AST/CommentLexer.cpp",411,"void Lexer::lexCommentText(Token &T) {\n  case \'@\': {\n    if (!Info) {\n      if ((Info = Traits.getTypoCorrectCommandInfo(CommandName))) {\n        Diag(Loc, diag::warn_correct_comment_command_name) << FullRange << CommandName << CorrectedName << FixItHint::CreateReplacement(CommandRange, CorrectedName);"}}
},
},
["warn_cstruct_memaccess"]={
["warn_cstruct_memaccess"]={
Line 266: Line 266:
[c]=q,
[c]=q,
[b]={"2be0441e770d",1523992421,"[Sema] Warn about memcpy\'ing non-trivial C structs."},
[b]={"2be0441e770d",1523992421,"[Sema] Warn about memcpy\'ing non-trivial C structs."},
[k]={{w,11261,"/// 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    else if (const auto *RT = PointeeTy->getAs<RecordType>()) {\n      if ((BId == Builtin::BImemset || BId == Builtin::BIbzero) && RT->getDecl()->isNonTrivialToPrimitiveDefaultInitialize()) {\n        DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_cstruct_memaccess) << ArgIdx << FnName << PointeeTy << 0);"},{w,11264,"/// 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    else if (const auto *RT = PointeeTy->getAs<RecordType>()) {\n      if ((BId == Builtin::BImemset || BId == Builtin::BIbzero) && RT->getDecl()->isNonTrivialToPrimitiveDefaultInitialize()) {\n      } else if ((BId == Builtin::BImemcpy || BId == Builtin::BImemmove) && RT->getDecl()->isNonTrivialToPrimitiveCopy()) {\n        DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_cstruct_memaccess) << ArgIdx << FnName << PointeeTy << 1);"}}
[k]={{w,12587,"/// 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    else if (const auto *RT = PointeeTy->getAs<RecordType>()) {\n      if ((BId == Builtin::BImemset || BId == Builtin::BIbzero) && RT->getDecl()->isNonTrivialToPrimitiveDefaultInitialize()) {\n        DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_cstruct_memaccess) << ArgIdx << FnName << PointeeTy << 0);"},{w,12593,"/// 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    else if (const auto *RT = PointeeTy->getAs<RecordType>()) {\n      if ((BId == Builtin::BImemset || BId == Builtin::BIbzero) && RT->getDecl()->isNonTrivialToPrimitiveDefaultInitialize()) {\n      } else if ((BId == Builtin::BImemcpy || BId == Builtin::BImemmove) && RT->getDecl()->isNonTrivialToPrimitiveCopy()) {\n        DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_cstruct_memaccess) << ArgIdx << FnName << PointeeTy << 1);"}}
},
},
["warn_cstyle_param"]={
["warn_cstyle_param"]={
Line 280: Line 280:
[c]=ib,
[c]=ib,
[b]={"45337f53df65",1340304188,"objective-c: deprecated C-like parameters in Objective-C "},
[b]={"45337f53df65",1340304188,"objective-c: deprecated C-like parameters in Objective-C "},
[k]={{"clang/lib/Parse/ParseObjc.cpp",1404,"///  objc-method-decl:\n///    objc-selector\n///    objc-keyword-selector objc-parmlist[opt]\n///    objc-type-name objc-selector\n///    objc-type-name objc-keyword-selector objc-parmlist[opt]\n///\n///  objc-keyword-selector:\n///    objc-keyword-decl\n///    objc-keyword-selector objc-keyword-decl\n///\n///  objc-keyword-decl:\n///    objc-selector \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    objc-selector \':\' objc-keyword-attributes[opt] identifier\n///    \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    \':\' objc-keyword-attributes[opt] identifier\n///\n///  objc-parmlist:\n///    objc-parms objc-ellipsis[opt]\n///\n///  objc-parms:\n///    objc-parms , parameter-declaration\n///\n///  objc-ellipsis:\n///    , ...\n///\n///  objc-keyword-attributes:        [OBJC2]\n///    __attribute__((unused))\n///\nDecl *Parser::ParseObjCMethodDecl(SourceLocation mLoc, tok::TokenKind mType, tok::ObjCKeywordKind MethodImplKind, bool MethodDefinition) {\n  // Parse the (optional) parameter list.\n  while (Tok.is(tok::comma)) {\n    if (!cStyleParamWarned) {\n      Diag(Tok, diag::warn_cstyle_param);"}}
[k]={{"clang/lib/Parse/ParseObjc.cpp",1528,"///  objc-method-decl:\n///    objc-selector\n///    objc-keyword-selector objc-parmlist[opt]\n///    objc-type-name objc-selector\n///    objc-type-name objc-keyword-selector objc-parmlist[opt]\n///\n///  objc-keyword-selector:\n///    objc-keyword-decl\n///    objc-keyword-selector objc-keyword-decl\n///\n///  objc-keyword-decl:\n///    objc-selector \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    objc-selector \':\' objc-keyword-attributes[opt] identifier\n///    \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    \':\' objc-keyword-attributes[opt] identifier\n///\n///  objc-parmlist:\n///    objc-parms objc-ellipsis[opt]\n///\n///  objc-parms:\n///    objc-parms , parameter-declaration\n///\n///  objc-ellipsis:\n///    , ...\n///\n///  objc-keyword-attributes:        [OBJC2]\n///    __attribute__((unused))\n///\nDecl *Parser::ParseObjCMethodDecl(SourceLocation mLoc, tok::TokenKind mType, tok::ObjCKeywordKind MethodImplKind, bool MethodDefinition) {\n  // Parse the (optional) parameter list.\n  while (Tok.is(tok::comma)) {\n    if (!cStyleParamWarned) {\n      Diag(Tok, diag::warn_cstyle_param);"}}
},
},
["warn_ctad_maybe_unsupported"]={
["warn_ctad_maybe_unsupported"]={
Line 295: Line 295:
[c]=q,
[c]=q,
[b]={"73b51ae160af",1547761464,"Add -Wctad-maybe-unsupported to diagnose CTAD on types with no user defined deduction guides."},
[b]={"73b51ae160af",1547761464,"Add -Wctad-maybe-unsupported to diagnose CTAD on types with no user defined deduction guides."},
[k]={{fb,9219,"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(TSInfo->getTypeLoc().getBeginLoc(), diag::warn_ctad_maybe_unsupported) << TemplateName;"}}
[k]={{fb,10917,"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(TSInfo->getTypeLoc().getBeginLoc(), diag::warn_ctad_maybe_unsupported) << TemplateName;"}}
},
},
["warn_ctor_parm_shadows_field"]={
["warn_ctor_parm_shadows_field"]={
Line 310: Line 310:
[c]=q,
[c]=q,
[b]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields"},
[b]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields"},
[k]={{G,2054,"void Sema::ActOnPopScope(SourceLocation Loc, Scope *S) {\n  for (auto *TmpD : S->decls()) {\n    if (ShadowI != ShadowingDecls.end()) {\n      if (const auto *FD = dyn_cast<FieldDecl>(ShadowI->second)) {\n        addDiagWithPrev(D->getLocation(), FD->getLocation(), PDiag(diag::warn_ctor_parm_shadows_field) << D << FD << FD->getParent());"}}
[k]={{G,2281,"void Sema::ActOnPopScope(SourceLocation Loc, Scope *S) {\n  for (auto *TmpD : S->decls()) {\n    if (ShadowI != ShadowingDecls.end()) {\n      if (const auto *FD = dyn_cast<FieldDecl>(ShadowI->second)) {\n        addDiagWithPrev(D->getLocation(), FD->getLocation(), PDiag(diag::warn_ctor_parm_shadows_field) << D << FD << FD->getParent());"}}
},
},
["warn_ctu_incompat_triple"]={
["warn_ctu_incompat_triple"]={
Line 324: Line 324:
[c]=u,
[c]=u,
[b]={"32aff2eb793c",1544200363,"[CTU] Add triple/lang mismatch handling"},
[b]={"32aff2eb793c",1544200363,"[CTU] Add triple/lang mismatch handling"},
[k]={{"clang/lib/CrossTU/CrossTranslationUnit.cpp",319,"void CrossTranslationUnitContext::emitCrossTUDiagnostics(const IndexError &IE) {\n  case index_error_code::triple_mismatch:\n    Context.getDiagnostics().Report(diag::warn_ctu_incompat_triple) << IE.getFileName() << IE.getTripleToName() << IE.getTripleFromName();"}}
[k]={{"clang/lib/CrossTU/CrossTranslationUnit.cpp",386,"void CrossTranslationUnitContext::emitCrossTUDiagnostics(const IndexError &IE) {\n  case index_error_code::triple_mismatch:\n    Context.getDiagnostics().Report(diag::warn_ctu_incompat_triple) << IE.getFileName() << IE.getTripleToName() << IE.getTripleFromName();"}}
},
},
["warn_cuda_attr_lambda_position"]={
["warn_cuda_attr_lambda_position"]={
Line 338: Line 338:
[c]=A,
[c]=A,
[b]={"e46ea72d97e5",1475265355,"[CUDA] Emit a warning if a CUDA host/device/global attribute is placed after \'(...)\'."},
[b]={"e46ea72d97e5",1475265355,"[CUDA] Emit a warning if a CUDA host/device/global attribute is placed after \'(...)\'."},
[k]={{Rb,1197,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  // Helper to emit a warning if we see a CUDA host/device/global attribute\n  // after \'(...)\'. nvcc doesn\'t accept this.\n  auto WarnIfHasCUDATargetAttr = [&] {\n    if (getLangOpts().CUDA)\n      for (const ParsedAttr &A : Attributes)\n        if (A.getKind() == ParsedAttr::AT_CUDADevice || A.getKind() == ParsedAttr::AT_CUDAHost || A.getKind() == ParsedAttr::AT_CUDAGlobal)\n          Diag(A.getLoc(), diag::warn_cuda_attr_lambda_position) << A.getAttrName()->getName();"}}
[k]={{Rb,1323,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  // Helper to emit a warning if we see a CUDA host/device/global attribute\n  // after \'(...)\'. nvcc doesn\'t accept this.\n  auto WarnIfHasCUDATargetAttr = [&] {\n    if (getLangOpts().CUDA)\n      for (const ParsedAttr &A : Attributes)\n        if (A.getKind() == ParsedAttr::AT_CUDADevice || A.getKind() == ParsedAttr::AT_CUDAHost || A.getKind() == ParsedAttr::AT_CUDAGlobal)\n          Diag(A.getLoc(), diag::warn_cuda_attr_lambda_position) << A.getAttrName()->getName();"}}
},
},
["warn_cxx11_compat_binary_literal"]={
["warn_cxx11_compat_binary_literal"]={
Line 353: Line 353:
[c]=N,
[c]=N,
[b]={"c5c27f2a1f26",1366404440,"Note that we support (and in fact have supported since the dawn of time itself)"},
[b]={"c5c27f2a1f26",1366404440,"Note that we support (and in fact have supported since the dawn of time itself)"},
[k]={{Wc,1193,"/// ParseNumberStartingWithZero - This method is called when the first character\n/// of the number is found to be a zero.  This means it is either an octal\n/// number (like \'04\') or a hex number (\'0x123a\') a binary number (\'0b1010\') or\n/// a floating point number (01239.123e4).  Eat the prefix, determining the\n/// radix etc.\nvoid NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {\n  // Handle simple binary numbers 0b01010\n  if ((c1 == \'b\' || c1 == \'B\') && (s[1] == \'0\' || s[1] == \'1\')) {\n    Diags.Report(TokLoc, LangOpts.CPlusPlus14 ? diag::warn_cxx11_compat_binary_literal : LangOpts.CPlusPlus ? diag::ext_binary_literal_cxx14 : diag::ext_binary_literal);"}}
[k]={{Wc,1347,"/// ParseNumberStartingWithZero - This method is called when the first character\n/// of the number is found to be a zero.  This means it is either an octal\n/// number (like \'04\') or a hex number (\'0x123a\') a binary number (\'0b1010\') or\n/// a floating point number (01239.123e4).  Eat the prefix, determining the\n/// radix etc.\nvoid NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {\n  // Handle simple binary numbers 0b01010\n  if ((c1 == \'b\' || c1 == \'B\') && (s[1] == \'0\' || s[1] == \'1\')) {\n    Diags.Report(TokLoc, LangOpts.CPlusPlus14 ? diag::warn_cxx11_compat_binary_literal : LangOpts.CPlusPlus ? diag::ext_binary_literal_cxx14 : diag::ext_binary_literal);"}}
},
},
["warn_cxx11_compat_constexpr_body_invalid_stmt"]={
["warn_cxx11_compat_constexpr_body_invalid_stmt"]={
Line 368: Line 368:
[c]=q,
[c]=q,
[b]={ud,1366644711,Gd},
[b]={ud,1366644711,Gd},
[k]={{F,1949,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (Kind == Sema::CheckConstexprKind::CheckValid) {\n  } else if (Cxx2bLoc.isValid()) {\n  } else if (Cxx2aLoc.isValid()) {\n  } else if (Cxx1yLoc.isValid()) {\n    SemaRef.Diag(Cxx1yLoc, SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl);"}}
[k]={{F,2300,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (Kind == Sema::CheckConstexprKind::CheckValid) {\n  } else if (Cxx2bLoc.isValid()) {\n  } else if (Cxx2aLoc.isValid()) {\n  } else if (Cxx1yLoc.isValid()) {\n    SemaRef.Diag(Cxx1yLoc, SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["warn_cxx11_compat_constexpr_body_multiple_return"]={
["warn_cxx11_compat_constexpr_body_multiple_return"]={
Line 383: Line 383:
[c]=q,
[c]=q,
[b]={ud,1366644711,Gd},
[b]={ud,1366644711,Gd},
[k]={{F,2028,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  } else {\n    if (ReturnStmts.empty()) {\n    } else if (ReturnStmts.size() > 1) {\n      case Sema::CheckConstexprKind::Diagnose:\n        SemaRef.Diag(ReturnStmts.back(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_body_multiple_return : diag::ext_constexpr_body_multiple_return);"}}
[k]={{F,2399,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  } else {\n    if (ReturnStmts.empty()) {\n    } else if (ReturnStmts.size() > 1) {\n      case Sema::CheckConstexprKind::Diagnose:\n        SemaRef.Diag(ReturnStmts.back(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_body_multiple_return : diag::ext_constexpr_body_multiple_return);"}}
},
},
["warn_cxx11_compat_constexpr_body_no_return"]={
["warn_cxx11_compat_constexpr_body_no_return"]={
Line 398: Line 398:
[c]=q,
[c]=q,
[b]={ud,1366644711,Gd},
[b]={ud,1366644711,Gd},
[k]={{F,2012,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  } else {\n    if (ReturnStmts.empty()) {\n      case Sema::CheckConstexprKind::Diagnose:\n        SemaRef.Diag(Dcl->getLocation(), OK ? diag::warn_cxx11_compat_constexpr_body_no_return : diag::err_constexpr_body_no_return) << Dcl->isConsteval();"}}
[k]={{F,2378,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  } else {\n    if (ReturnStmts.empty()) {\n      case Sema::CheckConstexprKind::Diagnose:\n        SemaRef.Diag(Dcl->getLocation(), OK ? diag::warn_cxx11_compat_constexpr_body_no_return : diag::err_constexpr_body_no_return) << Dcl->isConsteval();"}}
},
},
["warn_cxx11_compat_constexpr_local_var"]={
["warn_cxx11_compat_constexpr_local_var"]={
Line 413: Line 413:
[c]=q,
[c]=q,
[b]={ud,1366644711,Gd},
[b]={ud,1366644711,Gd},
[k]={{F,1679,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    case Decl::Decomposition: {\n      if (Kind == Sema::CheckConstexprKind::Diagnose) {\n        SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_local_var : diag::ext_constexpr_local_var) << isa<CXXConstructorDecl>(Dcl);"}}
[k]={{F,1971,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    case Decl::Decomposition: {\n      if (Kind == Sema::CheckConstexprKind::Diagnose) {\n        SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_local_var : diag::ext_constexpr_local_var) << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["warn_cxx11_compat_constexpr_type_definition"]={
["warn_cxx11_compat_constexpr_type_definition"]={
Line 428: Line 428:
[c]=q,
[c]=q,
[b]={ud,1366644711,Gd},
[b]={ud,1366644711,Gd},
[k]={{F,1634,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    case Decl::CXXRecord:\n      // C++1y allows types to be defined, not just declared.\n      if (cast<TagDecl>(DclIt)->isThisDeclarationADefinition()) {\n        if (Kind == Sema::CheckConstexprKind::Diagnose) {\n          SemaRef.Diag(DS->getBeginLoc(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_type_definition : diag::ext_constexpr_type_definition) << isa<CXXConstructorDecl>(Dcl);"}}
[k]={{F,1906,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    case Decl::CXXRecord:\n      // C++1y allows types to be defined, not just declared.\n      if (cast<TagDecl>(DclIt)->isThisDeclarationADefinition()) {\n        if (Kind == Sema::CheckConstexprKind::Diagnose) {\n          SemaRef.Diag(DS->getBeginLoc(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_type_definition : diag::ext_constexpr_type_definition) << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["warn_cxx11_compat_decltype_auto_type_specifier"]={
["warn_cxx11_compat_decltype_auto_type_specifier"]={
Line 443: Line 443:
[c]=A,
[c]=A,
[b]={"74aeef50a0cc",1366992935,"Implement C++1y decltype(auto)."},
[b]={"74aeef50a0cc",1366992935,"Implement C++1y decltype(auto)."},
[k]={{db,959,"/// ParseDecltypeSpecifier - Parse a C++11 decltype specifier.\n///\n/// \'decltype\' ( expression )\n/// \'decltype\' ( \'auto\' )      [C++1y]\n///\nSourceLocation Parser::ParseDecltypeSpecifier(DeclSpec &DS) {\n  if (Tok.is(tok::annot_decltype)) {\n  } else {\n    // Check for C++1y \'decltype(auto)\'.\n    if (Tok.is(tok::kw_auto) && NextToken().is(tok::r_paren)) {\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_decltype_auto_type_specifier : diag::ext_decltype_auto_type_specifier);"}}
[k]={{db,1104,"/// ParseDecltypeSpecifier - Parse a C++11 decltype specifier.\n///\n/// \'decltype\' ( expression )\n/// \'decltype\' ( \'auto\' )      [C++1y]\n///\nSourceLocation Parser::ParseDecltypeSpecifier(DeclSpec &DS) {\n  if (Tok.is(tok::annot_decltype)) {\n  } else {\n    // Check for C++1y \'decltype(auto)\'.\n    if (Tok.is(tok::kw_auto) && NextToken().is(tok::r_paren)) {\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_decltype_auto_type_specifier : diag::ext_decltype_auto_type_specifier);"}}
},
},
["warn_cxx11_compat_deduced_return_type"]={
["warn_cxx11_compat_deduced_return_type"]={
Line 458: Line 458:
[c]=q,
[c]=q,
[b]={"218538ebe952",1535656595,"Add missing -Wc++11-compat / -Wc++14-compat warnings for:"},
[b]={"218538ebe952",1535656595,"Add missing -Wc++11-compat / -Wc++14-compat warnings for:"},
[k]={{Cb,3286,"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    } else if (Auto && D.getContext() != DeclaratorContext::LambdaExpr) {\n      SemaRef.Diag(AutoRange.getBegin(), D.getContext() == DeclaratorContext::LambdaExprParameter ? diag::warn_cxx11_compat_generic_lambda : IsDeducedReturnType ? diag::warn_cxx11_compat_deduced_return_type : diag::warn_cxx98_compat_auto_type_specifier) << AutoRange;"},{Cb,4598,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n          if (!S.getLangOpts().CPlusPlus14) {\n          } else {\n            S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), diag::warn_cxx11_compat_deduced_return_type);"}}
[k]={{Cb,3750,"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    } else if (Auto && D.getContext() != DeclaratorContext::LambdaExpr) {\n      SemaRef.Diag(AutoRange.getBegin(), D.getContext() == DeclaratorContext::LambdaExprParameter ? diag::warn_cxx11_compat_generic_lambda : IsDeducedReturnType ? diag::warn_cxx11_compat_deduced_return_type : diag::warn_cxx98_compat_auto_type_specifier) << AutoRange;"},{Cb,5205,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    case DeclaratorChunk::Function: {\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n          if (!S.getLangOpts().CPlusPlus14) {\n          } else {\n            S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), diag::warn_cxx11_compat_deduced_return_type);"}}
},
},
["warn_cxx11_compat_digit_separator"]={
["warn_cxx11_compat_digit_separator"]={
Line 473: Line 473:
[c]=N,
[c]=N,
[b]={"fde948529789",1380166386,"Implement C++1y digit separator proposal (\' as a digit separator). This is not"},
[b]={"fde948529789",1380166386,"Implement C++1y digit separator proposal (\' as a digit separator). This is not"},
[k]={{vb,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);"}}
[k]={{vb,1962,"/// 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_cxx11_compat_generic_lambda"]={
["warn_cxx11_compat_generic_lambda"]={
Line 488: Line 488:
[c]=vc,
[c]=vc,
[b]={"218538ebe952",1535656595,"Add missing -Wc++11-compat / -Wc++14-compat warnings for:"},
[b]={"218538ebe952",1535656595,"Add missing -Wc++11-compat / -Wc++14-compat warnings for:"},
[k]={{Cb,3286,"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    } else if (Auto && D.getContext() != DeclaratorContext::LambdaExpr) {\n      SemaRef.Diag(AutoRange.getBegin(), D.getContext() == DeclaratorContext::LambdaExprParameter ? diag::warn_cxx11_compat_generic_lambda : IsDeducedReturnType ? diag::warn_cxx11_compat_deduced_return_type : diag::warn_cxx98_compat_auto_type_specifier) << AutoRange;"}}
[k]={{Cb,3748,"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    } else if (Auto && D.getContext() != DeclaratorContext::LambdaExpr) {\n      SemaRef.Diag(AutoRange.getBegin(), D.getContext() == DeclaratorContext::LambdaExprParameter ? diag::warn_cxx11_compat_generic_lambda : IsDeducedReturnType ? diag::warn_cxx11_compat_deduced_return_type : diag::warn_cxx98_compat_auto_type_specifier) << AutoRange;"}}
},
},
["warn_cxx11_compat_init_capture"]={
["warn_cxx11_compat_init_capture"]={
Line 503: Line 503:
[c]=vc,
[c]=vc,
[b]={"5b013f505068",1380346707,"Add compat/extension warnings for init captures."},
[b]={"5b013f505068",1380346707,"Add compat/extension warnings for init captures."},
[k]={{td,921,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Init.isUsable()) {\n      Diag(C->Loc, getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_init_capture : diag::ext_init_capture);"}}
[k]={{td,1071,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Init.isUsable()) {\n      Diag(C->Loc, getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_init_capture : diag::ext_init_capture);"}}
},
},
["warn_cxx11_compat_reserved_user_defined_literal"]={
["warn_cxx11_compat_reserved_user_defined_literal"]={
Line 518: Line 518:
[c]=N,
[c]=N,
[b]={"0df56f4a9000",1331174361,"Implement C++11 [lex.ext]p10 for string and character literals: a ud-suffix not"},
[b]={"0df56f4a9000",1331174361,"Implement C++11 [lex.ext]p10 for string and character literals: a ud-suffix not"},
[k]={{vb,1815,"/// LexUDSuffix - Lex the ud-suffix production for user-defined literal suffixes\n/// in C++11, or warn on a ud-suffix in C++98.\nconst char *Lexer::LexUDSuffix(Token &Result, const char *CurPtr, bool IsStringLiteral) {\n  if (!LangOpts.CPlusPlus11) {\n    if (!isLexingRawMode())\n      Diag(CurPtr, C == \'_\' ? diag::warn_cxx11_compat_user_defined_literal : diag::warn_cxx11_compat_reserved_user_defined_literal) << FixItHint::CreateInsertion(getSourceLocation(CurPtr), \" \");"}}
[k]={{vb,2007,"/// LexUDSuffix - Lex the ud-suffix production for user-defined literal suffixes\n/// in C++11, or warn on a ud-suffix in C++98.\nconst char *Lexer::LexUDSuffix(Token &Result, const char *CurPtr, bool IsStringLiteral) {\n  if (!LangOpts.CPlusPlus11) {\n    if (!isLexingRawMode())\n      Diag(CurPtr, C == \'_\' ? diag::warn_cxx11_compat_user_defined_literal : diag::warn_cxx11_compat_reserved_user_defined_literal) << FixItHint::CreateInsertion(getSourceLocation(CurPtr), \" \");"}}
},
},
["warn_cxx11_compat_user_defined_literal"]={
["warn_cxx11_compat_user_defined_literal"]={
Line 533: Line 533:
[c]=N,
[c]=N,
[b]={"3e4a60a2cd88",1331089980,"Add -Wc++11-compat warning for string and character literals followed by"},
[b]={"3e4a60a2cd88",1331089980,"Add -Wc++11-compat warning for string and character literals followed by"},
[k]={{vb,1815,"/// LexUDSuffix - Lex the ud-suffix production for user-defined literal suffixes\n/// in C++11, or warn on a ud-suffix in C++98.\nconst char *Lexer::LexUDSuffix(Token &Result, const char *CurPtr, bool IsStringLiteral) {\n  if (!LangOpts.CPlusPlus11) {\n    if (!isLexingRawMode())\n      Diag(CurPtr, C == \'_\' ? diag::warn_cxx11_compat_user_defined_literal : diag::warn_cxx11_compat_reserved_user_defined_literal) << FixItHint::CreateInsertion(getSourceLocation(CurPtr), \" \");"}}
[k]={{vb,2006,"/// LexUDSuffix - Lex the ud-suffix production for user-defined literal suffixes\n/// in C++11, or warn on a ud-suffix in C++98.\nconst char *Lexer::LexUDSuffix(Token &Result, const char *CurPtr, bool IsStringLiteral) {\n  if (!LangOpts.CPlusPlus11) {\n    if (!isLexingRawMode())\n      Diag(CurPtr, C == \'_\' ? diag::warn_cxx11_compat_user_defined_literal : diag::warn_cxx11_compat_reserved_user_defined_literal) << FixItHint::CreateInsertion(getSourceLocation(CurPtr), \" \");"}}
},
},
["warn_cxx11_compat_variable_template"]={
["warn_cxx11_compat_variable_template"]={
Line 548: Line 548:
[c]=q,
[c]=q,
[b]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som..."},
[b]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som..."},
[k]={{G,6797,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (TemplateParams) {\n      if (!TemplateParams->size() && D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n      } else {\n        if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {\n        } else { // if (TemplateParams->size() > 0)\n          Diag(D.getIdentifierLoc(), getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_variable_template : diag::ext_variable_template);"}}
[k]={{G,7652,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (TemplateParams) {\n      if (!TemplateParams->size() && D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n      } else {\n        if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {\n        } else { // if (TemplateParams->size() > 0)\n          Diag(D.getIdentifierLoc(), getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_variable_template : diag::ext_variable_template);"}}
},
},
["warn_cxx11_gnu_attribute_on_type"]={
["warn_cxx11_gnu_attribute_on_type"]={
Line 562: Line 562:
[c]=q,
[c]=q,
[b]={"368ca52cd91b",1358149981,"Accept [[gnu::*]] for all __attribute__((*))s which are:"},
[b]={"368ca52cd91b",1358149981,"Accept [[gnu::*]] for all __attribute__((*))s which are:"},
[k]={{Cb,7553,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  for (ParsedAttr &attr : AttrsCopy) {\n    if (attr.isStandardAttributeSyntax() || attr.isRegularKeywordAttribute()) {\n      // [[gnu::...]] attributes are treated as declaration attributes, so may\n      // not appertain to a DeclaratorChunk. If we handle them as type\n      // attributes, accept them in that position and diagnose the GCC\n      // incompatibility.\n      if (attr.isGNUScope()) {\n        if (TAL == TAL_DeclChunk) {\n          state.getSema().Diag(attr.getLoc(), IsTypeAttr ? diag::warn_gcc_ignores_type_attr : diag::warn_cxx11_gnu_attribute_on_type) << attr;"}}
[k]={{Cb,8546,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  for (ParsedAttr &attr : AttrsCopy) {\n    if (attr.isStandardAttributeSyntax() || attr.isRegularKeywordAttribute()) {\n      // [[gnu::...]] attributes are treated as declaration attributes, so may\n      // not appertain to a DeclaratorChunk. If we handle them as type\n      // attributes, accept them in that position and diagnose the GCC\n      // incompatibility.\n      if (attr.isGNUScope()) {\n        if (TAL == TAL_DeclChunk) {\n          state.getSema().Diag(attr.getLoc(), IsTypeAttr ? diag::warn_gcc_ignores_type_attr : diag::warn_cxx11_gnu_attribute_on_type) << attr;"}}
},
},
["warn_cxx11_keyword"]={
["warn_cxx11_keyword"]={
Line 577: Line 577:
[c]=N,
[c]=N,
[b]={"4dd85d6fa114",1318363072,"Add a -Wc++0x-compat warning for C++11 keywords used as identifiers when in"},
[b]={"4dd85d6fa114",1318363072,"Add a -Wc++0x-compat warning for C++11 keywords used as identifiers when in"},
[k]={{"clang/lib/Basic/IdentifierTable.cpp",870,"#include \"clang/Basic/TokenKinds.def\"\n  if (LangOpts.CPlusPlus) {\n    if ((Flags & KEYCXX11) == KEYCXX11)\n      return diag::warn_cxx11_keyword;"}}
[k]={{"clang/lib/Basic/IdentifierTable.cpp",907,"#include \"clang/Basic/TokenKinds.def\"\n  if (LangOpts.CPlusPlus) {\n    if ((Flags & KEYCXX11) == KEYCXX11)\n      return diag::warn_cxx11_keyword;"}}
},
},
["warn_cxx11_right_shift_in_template_arg"]={
["warn_cxx11_right_shift_in_template_arg"]={
Line 591: Line 591:
[c]=A,
[c]=A,
[b]={"d25fb725cf9a",1373821314,"Change cxx0x to cxx11 in diagnostic name."},
[b]={"d25fb725cf9a",1373821314,"Change cxx0x to cxx11 in diagnostic name."},
[k]={{qc,559,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  while (true) {\n    if (!LHS.isInvalid()) {\n      // Combine the LHS and RHS into the LHS (e.g. build AST).\n      if (TernaryMiddle.isInvalid()) {\n        // If we\'re using \'>>\' as an operator within a template\n        // argument list (in C++98), suggest the addition of\n        // parentheses so that the code remains well-formed in C++0x.\n        if (!GreaterThanIsOperator && OpToken.is(tok::greatergreater))\n          SuggestParentheses(OpToken.getLocation(), diag::warn_cxx11_right_shift_in_template_arg, SourceRange(Actions.getExprRange(LHS.get()).getBegin(), Actions.getExprRange(RHS.get()).getEnd()));"}}
[k]={{qc,627,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  while (true) {\n    if (!LHS.isInvalid()) {\n      // Combine the LHS and RHS into the LHS (e.g. build AST).\n      if (TernaryMiddle.isInvalid()) {\n        // If we\'re using \'>>\' as an operator within a template\n        // argument list (in C++98), suggest the addition of\n        // parentheses so that the code remains well-formed in C++0x.\n        if (!GreaterThanIsOperator && OpToken.is(tok::greatergreater))\n          SuggestParentheses(OpToken.getLocation(), diag::warn_cxx11_right_shift_in_template_arg, SourceRange(Actions.getExprRange(LHS.get()).getBegin(), Actions.getExprRange(RHS.get()).getEnd()));"}}
},
},
["warn_cxx14_compat_class_template_argument_deduction"]={
["warn_cxx14_compat_class_template_argument_deduction"]={
Line 606: Line 606:
[c]=q,
[c]=q,
[b]={"218538ebe952",1535656595,"Add missing -Wc++11-compat / -Wc++14-compat warnings for:"},
[b]={"218538ebe952",1535656595,"Add missing -Wc++11-compat / -Wc++14-compat warnings for:"},
[k]={{fb,8938,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // Can\'t deduce from dependent arguments.\n  if (Expr::hasAnyTypeDependentArguments(Inits)) {\n    Diag(TSInfo->getTypeLoc().getBeginLoc(), diag::warn_cxx14_compat_class_template_argument_deduction) << TSInfo->getTypeLoc().getSourceRange() << 0;"},{fb,9214,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  Diag(TSInfo->getTypeLoc().getBeginLoc(), diag::warn_cxx14_compat_class_template_argument_deduction) << TSInfo->getTypeLoc().getSourceRange() << 1 << DeducedType;"}}
[k]={{fb,10585,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // Can\'t deduce from dependent arguments.\n  if (Expr::hasAnyTypeDependentArguments(Inits)) {\n    Diag(TSInfo->getTypeLoc().getBeginLoc(), diag::warn_cxx14_compat_class_template_argument_deduction) << TSInfo->getTypeLoc().getSourceRange() << 0;"},{fb,10910,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  Diag(TSInfo->getTypeLoc().getBeginLoc(), diag::warn_cxx14_compat_class_template_argument_deduction) << TSInfo->getTypeLoc().getSourceRange() << 1 << DeducedType;"}}
},
},
["warn_cxx14_compat_constexpr_if"]={
["warn_cxx14_compat_constexpr_if"]={
Line 621: Line 621:
[c]=A,
[c]=A,
[b]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature."},
[b]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature."},
[k]={{Yb,1358,"/// ParseIfStatement\n///      if-statement: [C99 6.8.4.1]\n///        \'if\' \'(\' expression \')\' statement\n///        \'if\' \'(\' expression \')\' statement \'else\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement \'else\' statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement \'else\' statement\n///\nStmtResult Parser::ParseIfStatement(SourceLocation *TrailingElseLoc) {\n  if (Tok.is(tok::kw_constexpr)) {\n    Diag(Tok, getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_constexpr_if : diag::ext_constexpr_if);"}}
[k]={{Yb,1469,"/// ParseIfStatement\n///      if-statement: [C99 6.8.4.1]\n///        \'if\' \'(\' expression \')\' statement\n///        \'if\' \'(\' expression \')\' statement \'else\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement \'else\' statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement \'else\' statement\n///\nStmtResult Parser::ParseIfStatement(SourceLocation *TrailingElseLoc) {\n  if (Tok.is(tok::kw_constexpr)) {\n    Diag(Tok, getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_constexpr_if : diag::ext_constexpr_if);"}}
},
},
["warn_cxx14_compat_constexpr_not_const"]={
["warn_cxx14_compat_constexpr_not_const"]={
Line 635: Line 635:
[c]=q,
[c]=q,
[b]={"dd69ef38dba7",1408463755,"C++1y is now C++14!"},
[b]={"dd69ef38dba7",1408463755,"C++1y is now C++14!"},
[k]={{G,10293,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  if (!getLangOpts().CPlusPlus14 && MD && MD->isConstexpr() && !MD->isStatic() && !isa<CXXConstructorDecl>(MD) && !isa<CXXDestructorDecl>(MD) && !MD->getMethodQualifiers().hasConst()) {\n    if (!OldMD || !OldMD->isStatic()) {\n      // Warn that we did this, if we\'re not performing template instantiation.\n      // In that case, we\'ll have warned already when the template was defined.\n      if (!inTemplateInstantiation()) {\n        Diag(MD->getLocation(), diag::warn_cxx14_compat_constexpr_not_const) << FixItHint::CreateInsertion(AddConstLoc, \" const\");"}}
[k]={{G,11810,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  if (!getLangOpts().CPlusPlus14 && MD && MD->isConstexpr() && !MD->isStatic() && !isa<CXXConstructorDecl>(MD) && !isa<CXXDestructorDecl>(MD) && !MD->getMethodQualifiers().hasConst()) {\n    if (!OldMD || !OldMD->isStatic()) {\n      // Warn that we did this, if we\'re not performing template instantiation.\n      // In that case, we\'ll have warned already when the template was defined.\n      if (!inTemplateInstantiation()) {\n        Diag(MD->getLocation(), diag::warn_cxx14_compat_constexpr_not_const) << FixItHint::CreateInsertion(AddConstLoc, \" const\");"}}
},
},
["warn_cxx14_compat_constexpr_on_lambda"]={
["warn_cxx14_compat_constexpr_on_lambda"]={
Line 650: Line 650:
[c]=A,
[c]=A,
[b]={"a734ab980865",1459008697,"[Cxx1z-constexpr-lambda-P0170R1]  Support parsing of constexpr specifier (and its inference) on lamb..."},
[b]={"a734ab980865",1459008697,"[Cxx1z-constexpr-lambda-P0170R1]  Support parsing of constexpr specifier (and its inference) on lamb..."},
[k]={{Rb,1117,"static void addConstexprToLambdaDeclSpecifier(Parser &P, SourceLocation ConstexprLoc, DeclSpec &DS) {\n  if (ConstexprLoc.isValid()) {\n    P.Diag(ConstexprLoc, !P.getLangOpts().CPlusPlus17 ? diag::ext_constexpr_on_lambda_cxx17 : diag::warn_cxx14_compat_constexpr_on_lambda);"}}
[k]={{Rb,1228,"static void addConstexprToLambdaDeclSpecifier(Parser &P, SourceLocation ConstexprLoc, DeclSpec &DS) {\n  if (ConstexprLoc.isValid()) {\n    P.Diag(ConstexprLoc, !P.getLangOpts().CPlusPlus17 ? diag::ext_constexpr_on_lambda_cxx17 : diag::warn_cxx14_compat_constexpr_on_lambda);"}}
},
},
["warn_cxx14_compat_decomp_decl"]={
["warn_cxx14_compat_decomp_decl"]={
Line 665: Line 665:
[c]=q,
[c]=q,
[b]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z"},
[b]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z"},
[k]={{F,670,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  Diag(Decomp.getLSquareLoc(), !getLangOpts().CPlusPlus17 ? diag::ext_decomp_decl : D.getContext() == DeclaratorContext::Condition ? diag::ext_decomp_decl_cond : diag::warn_cxx14_compat_decomp_decl) << Decomp.getSourceRange();"}}
[k]={{F,755,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  Diag(Decomp.getLSquareLoc(), !getLangOpts().CPlusPlus17 ? diag::ext_decomp_decl : D.getContext() == DeclaratorContext::Condition ? diag::ext_decomp_decl_cond : diag::warn_cxx14_compat_decomp_decl) << Decomp.getSourceRange();"}}
},
},
["warn_cxx14_compat_fold_expression"]={
["warn_cxx14_compat_fold_expression"]={
Line 680: Line 680:
[c]=A,
[c]=A,
[b]={"0f0af19b0581",1415423236,"[c++1z] N4295: fold-expressions."},
[b]={"0f0af19b0581",1415423236,"[c++1z] N4295: fold-expressions."},
[k]={{qc,3132,"/// Parse A C++1z fold-expression after the opening paren and optional\n/// left-hand-side expression.\n///\n/// \\verbatim\n///  fold-expression:\n///      ( cast-expression fold-operator ... )\n///      ( ... fold-operator cast-expression )\n///      ( cast-expression fold-operator ... fold-operator cast-expression )\nExprResult Parser::ParseFoldExpression(ExprResult LHS, BalancedDelimiterTracker &T) {\n  Diag(EllipsisLoc, getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_fold_expression : diag::ext_fold_expression);"}}
[k]={{qc,3454,"/// Parse A C++1z fold-expression after the opening paren and optional\n/// left-hand-side expression.\n///\n/// \\verbatim\n///  fold-expression:\n///      ( cast-expression fold-operator ... )\n///      ( ... fold-operator cast-expression )\n///      ( cast-expression fold-operator ... fold-operator cast-expression )\nExprResult Parser::ParseFoldExpression(ExprResult LHS, BalancedDelimiterTracker &T) {\n  Diag(EllipsisLoc, getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_fold_expression : diag::ext_fold_expression);"}}
},
},
["warn_cxx14_compat_init_statement"]={
["warn_cxx14_compat_init_statement"]={
Line 695: Line 695:
[c]=A,
[c]=A,
[b]={"fccb5128b201",1476822436,"Add missing warning for use of C++1z init-statements in C++14 and before."},
[b]={"fccb5128b201",1476822436,"Add missing warning for use of C++1z init-statements in C++14 and before."},
[k]={{Rb,1876,"/// ParseCXXCondition - if/switch/while condition expression.\n///\n///      condition:\n///        expression\n///        type-specifier-seq declarator \'=\' assignment-expression\n/// [C++11] type-specifier-seq declarator \'=\' initializer-clause\n/// [C++11] type-specifier-seq declarator braced-init-list\n/// [Clang] type-specifier-seq ref-qualifier[opt] \'[\' identifier-list \']\'\n///            brace-or-equal-initializer\n/// [GNU]  type-specifier-seq declarator simple-asm-expr[opt] attributes[opt]\n///            \'=\' assignment-expression\n///\n/// In C++1z, a condition may in some contexts be preceded by an\n/// optional init-statement. This function will parse that too.\n///\n/// \\param InitStmt If non-null, an init-statement is permitted, and if present\n/// will be parsed and stored here.\n///\n/// \\param Loc The location of the start of the statement that requires this\n/// condition, e.g., the \"for\" in a for loop.\n///\n/// \\param MissingOK Whether an empty condition is acceptable here. Otherwise\n/// it is considered an error to be recovered from.\n///\n/// \\param FRI If non-null, a for range declaration is permitted, and if\n/// present will be parsed and stored here, and a null result will be returned.\n///\n/// \\param EnterForConditionScope If true, enter a continue/break scope at the\n/// appropriate moment for a \'for\' loop.\n///\n/// \\returns The parsed condition.\nSema::ConditionResult Parser::ParseCXXCondition(StmtResult *InitStmt, SourceLocation Loc, Sema::ConditionKind CK, bool MissingOK, ForRangeInfo *FRI, bool EnterForConditionScope) {\n  const auto WarnOnInit = [this, &CK] { Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_init_statement : diag::ext_init_statement) << (CK == Sema::ConditionKind::Switch); };"}}
[k]={{Rb,2074,"/// ParseCXXCondition - if/switch/while condition expression.\n///\n///      condition:\n///        expression\n///        type-specifier-seq declarator \'=\' assignment-expression\n/// [C++11] type-specifier-seq declarator \'=\' initializer-clause\n/// [C++11] type-specifier-seq declarator braced-init-list\n/// [Clang] type-specifier-seq ref-qualifier[opt] \'[\' identifier-list \']\'\n///            brace-or-equal-initializer\n/// [GNU]  type-specifier-seq declarator simple-asm-expr[opt] attributes[opt]\n///            \'=\' assignment-expression\n///\n/// In C++1z, a condition may in some contexts be preceded by an\n/// optional init-statement. This function will parse that too.\n///\n/// \\param InitStmt If non-null, an init-statement is permitted, and if present\n/// will be parsed and stored here.\n///\n/// \\param Loc The location of the start of the statement that requires this\n/// condition, e.g., the \"for\" in a for loop.\n///\n/// \\param MissingOK Whether an empty condition is acceptable here. Otherwise\n/// it is considered an error to be recovered from.\n///\n/// \\param FRI If non-null, a for range declaration is permitted, and if\n/// present will be parsed and stored here, and a null result will be returned.\n///\n/// \\param EnterForConditionScope If true, enter a continue/break scope at the\n/// appropriate moment for a \'for\' loop.\n///\n/// \\returns The parsed condition.\nSema::ConditionResult Parser::ParseCXXCondition(StmtResult *InitStmt, SourceLocation Loc, Sema::ConditionKind CK, bool MissingOK, ForRangeInfo *FRI, bool EnterForConditionScope) {\n  const auto WarnOnInit = [this, &CK] { Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_init_statement : diag::ext_init_statement) << (CK == Sema::ConditionKind::Switch); };"}}
},
},
["warn_cxx14_compat_inline_variable"]={
["warn_cxx14_compat_inline_variable"]={
Line 710: Line 710:
[c]=q,
[c]=q,
[b]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a"},
[b]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a"},
[k]={{G,6855,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (D.getDeclSpec().isInlineSpecified()) {\n    if (!getLangOpts().CPlusPlus) {\n    } else if (CurContext->isFunctionOrMethod()) {\n    } else {\n      Diag(D.getDeclSpec().getInlineSpecLoc(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_inline_variable : diag::ext_inline_variable);"}}
[k]={{G,7731,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (D.getDeclSpec().isInlineSpecified()) {\n    if (!getLangOpts().CPlusPlus) {\n    } else if (CurContext->isFunctionOrMethod()) {\n    } else {\n      Diag(D.getDeclSpec().getInlineSpecLoc(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_inline_variable : diag::ext_inline_variable);"}}
},
},
["warn_cxx14_compat_nested_namespace_definition"]={
["warn_cxx14_compat_nested_namespace_definition"]={
Line 725: Line 725:
[c]=A,
[c]=A,
[b]={"13307f5f2429",1415425054,"[c++1z] Implement nested-namespace-definitions."},
[b]={"13307f5f2429",1415425054,"[c++1z] Implement nested-namespace-definitions."},
[k]={{db,162,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  if (ExtraNSs.empty()) {\n  } else if (InlineLoc.isValid()) {\n  } else if (getLangOpts().CPlusPlus20) {\n    Diag(ExtraNSs[0].NamespaceLoc, diag::warn_cxx14_compat_nested_namespace_definition);"},{db,166,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  if (ExtraNSs.empty()) {\n  } else if (InlineLoc.isValid()) {\n  } else if (getLangOpts().CPlusPlus20) {\n  } else if (getLangOpts().CPlusPlus17) {\n    Diag(ExtraNSs[0].NamespaceLoc, diag::warn_cxx14_compat_nested_namespace_definition);"}}
[k]={{db,175,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  if (ExtraNSs.empty()) {\n  } else if (InlineLoc.isValid()) {\n  } else if (getLangOpts().CPlusPlus20) {\n    Diag(ExtraNSs[0].NamespaceLoc, diag::warn_cxx14_compat_nested_namespace_definition);"},{db,181,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  if (ExtraNSs.empty()) {\n  } else if (InlineLoc.isValid()) {\n  } else if (getLangOpts().CPlusPlus20) {\n  } else if (getLangOpts().CPlusPlus17) {\n    Diag(ExtraNSs[0].NamespaceLoc, diag::warn_cxx14_compat_nested_namespace_definition);"}}
},
},
["warn_cxx14_compat_ns_enum_attribute"]={
["warn_cxx14_compat_ns_enum_attribute"]={
Line 740: Line 740:
[c]=A,
[c]=A,
[b]={"40e202f7d996",1507942584,"Fix backwards warning for use of C++17 attributes-on-namespaces-and-enumerators feature."},
[b]={"40e202f7d996",1507942584,"Fix backwards warning for use of C++17 attributes-on-namespaces-and-enumerators feature."},
[k]={{Mb,4702,"/// ParseEnumBody - Parse a {} enclosed enumerator-list.\n///      enumerator-list:\n///        enumerator\n///        enumerator-list \',\' enumerator\n///      enumerator:\n///        enumeration-constant attributes[opt]\n///        enumeration-constant attributes[opt] \'=\' constant-expression\n///      enumeration-constant:\n///        identifier\n///\nvoid Parser::ParseEnumBody(SourceLocation StartLoc, Decl *EnumDecl) {\n  // Parse the enumerator-list.\n  while (Tok.isNot(tok::r_brace)) {\n    if (isAllowedCXX11AttributeSpecifier()) {\n      if (getLangOpts().CPlusPlus)\n        Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_ns_enum_attribute : diag::ext_ns_enum_attribute) << 1 /*enumerator*/;"},{db,89,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  auto ReadAttributes = [&] {\n    do {\n      if (getLangOpts().CPlusPlus11 && isCXX11AttributeSpecifier()) {\n        Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_ns_enum_attribute : diag::ext_ns_enum_attribute) << 0 /*namespace*/;"}}
[k]={{Mb,5202,"/// ParseEnumBody - Parse a {} enclosed enumerator-list.\n///      enumerator-list:\n///        enumerator\n///        enumerator-list \',\' enumerator\n///      enumerator:\n///        enumeration-constant attributes[opt]\n///        enumeration-constant attributes[opt] \'=\' constant-expression\n///      enumeration-constant:\n///        identifier\n///\nvoid Parser::ParseEnumBody(SourceLocation StartLoc, Decl *EnumDecl) {\n  // Parse the enumerator-list.\n  while (Tok.isNot(tok::r_brace)) {\n    if (isAllowedCXX11AttributeSpecifier()) {\n      if (getLangOpts().CPlusPlus)\n        Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_ns_enum_attribute : diag::ext_ns_enum_attribute) << 1 /*enumerator*/;"},{db,93,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  auto ReadAttributes = [&] {\n    do {\n      if (getLangOpts().CPlusPlus11 && isCXX11AttributeSpecifier()) {\n        Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_ns_enum_attribute : diag::ext_ns_enum_attribute) << 0 /*namespace*/;"}}
},
},
["warn_cxx14_compat_star_this_lambda_capture"]={
["warn_cxx14_compat_star_this_lambda_capture"]={
Line 755: Line 755:
[c]=vc,
[c]=vc,
[b]={"dc6b596ebbd3",1458552337,"[Cxx1z] Implement Lambda Capture of *this by Value as [=,*this] (P0018R3)"},
[b]={"dc6b596ebbd3",1458552337,"[Cxx1z] Implement Lambda Capture of *this by Value as [=,*this] (P0018R3)"},
[k]={{td,880,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      if (C->Kind == LCK_StarThis)\n        Diag(C->Loc, !getLangOpts().CPlusPlus17 ? diag::ext_star_this_lambda_capture_cxx17 : diag::warn_cxx14_compat_star_this_lambda_capture);"}}
[k]={{td,1023,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      if (C->Kind == LCK_StarThis)\n        Diag(C->Loc, !getLangOpts().CPlusPlus17 ? diag::ext_star_this_lambda_capture_cxx17 : diag::warn_cxx14_compat_star_this_lambda_capture);"}}
},
},
["warn_cxx14_compat_static_assert_no_message"]={
["warn_cxx14_compat_static_assert_no_message"]={
Line 770: Line 770:
[c]=A,
[c]=A,
[b]={"dd69ef38dba7",1408463755,"C++1y is now C++14!"},
[b]={"dd69ef38dba7",1408463755,"C++1y is now C++14!"},
[k]={{db,869,"/// 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      DiagVal = diag::warn_cxx14_compat_static_assert_no_message;"}}
[k]={{db,1005,"/// 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      DiagVal = diag::warn_cxx14_compat_static_assert_no_message;"}}
},
},
["warn_cxx14_compat_template_nontype_parm_auto_type"]={
["warn_cxx14_compat_template_nontype_parm_auto_type"]={
Line 785: Line 785:
[c]=q,
[c]=q,
[b]={"5f274389d1d9",1475106927,"P0127R2: Support type deduction for types of non-type template parameters in"},
[b]={"5f274389d1d9",1475106927,"P0127R2: Support type deduction for types of non-type template parameters in"},
[k]={{wb,1311,"NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, unsigned Depth, unsigned Position, SourceLocation EqualLoc, Expr *Default) {\n  if (const auto *T = TInfo->getType()->getContainedDeducedType())\n    if (isa<AutoType>(T))\n      Diag(D.getIdentifierLoc(), diag::warn_cxx14_compat_template_nontype_parm_auto_type) << QualType(TInfo->getType()->getContainedAutoType(), 0);"}}
[k]={{wb,1556,"NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, unsigned Depth, unsigned Position, SourceLocation EqualLoc, Expr *Default) {\n  if (const auto *T = TInfo->getType()->getContainedDeducedType())\n    if (isa<AutoType>(T))\n      Diag(D.getIdentifierLoc(), diag::warn_cxx14_compat_template_nontype_parm_auto_type) << QualType(TInfo->getType()->getContainedAutoType(), 0);"}}
},
},
["warn_cxx14_compat_template_template_param_typename"]={
["warn_cxx14_compat_template_template_param_typename"]={
Line 800: Line 800:
[c]=A,
[c]=A,
[b]={"dd69ef38dba7",1408463755,"C++1y is now C++14!"},
[b]={"dd69ef38dba7",1408463755,"C++1y is now C++14!"},
[k]={{"clang/lib/Parse/ParseTemplate.cpp",825,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n  // Generate a meaningful error if the user forgot to put class before the\n  // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n  // or greater appear immediately or after \'struct\'. In the latter case,\n  // replace the keyword with \'class\'.\n  if (!TryConsumeToken(tok::kw_class)) {\n    if (Tok.is(tok::kw_typename)) {\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_template_template_param_typename : diag::ext_template_template_param_typename) << (!getLangOpts().CPlusPlus17 ? FixItHint::CreateReplacement(Tok.getLocation(), \"class\") : FixItHint());"}}
[k]={{"clang/lib/Parse/ParseTemplate.cpp",934,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n  // Generate a meaningful error if the user forgot to put class before the\n  // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n  // or greater appear immediately or after \'struct\'. In the latter case,\n  // replace the keyword with \'class\'.\n  if (!TryConsumeToken(tok::kw_class)) {\n    if (Tok.is(tok::kw_typename)) {\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_template_template_param_typename : diag::ext_template_template_param_typename) << (!getLangOpts().CPlusPlus17 ? FixItHint::CreateReplacement(Tok.getLocation(), \"class\") : FixItHint());"}}
},
},
["warn_cxx14_compat_u8_character_literal"]={
["warn_cxx14_compat_u8_character_literal"]={
Line 815: Line 815:
[c]=N,
[c]=N,
[b]={"3e3a705062fe",1415426922,"[c++1z] Support for u8 character literals."},
[b]={"3e3a705062fe",1415426922,"[c++1z] Support for u8 character literals."},
[k]={{vb,2091,"/// 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    else if (Kind == tok::utf8_char_constant)\n      Diag(BufferPtr, diag::warn_cxx14_compat_u8_character_literal);"}}
[k]={{vb,2306,"/// 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    else if (Kind == tok::utf8_char_constant)\n      Diag(BufferPtr, diag::warn_cxx14_compat_u8_character_literal);"}}
},
},
["warn_cxx14_compat_using_attribute_ns"]={
["warn_cxx14_compat_using_attribute_ns"]={
Line 830: Line 830:
[c]=A,
[c]=A,
[b]={"b7d7a046d8e0",1466770512,"Using for attributes voted into C++17."},
[b]={"b7d7a046d8e0",1466770512,"Using for attributes voted into C++17."},
[k]={{db,3955,"/// 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_using)) {\n    Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_using_attribute_ns : diag::ext_using_attribute_ns);"}}
[k]={{db,4539,"/// 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_using)) {\n    Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_using_attribute_ns : diag::ext_using_attribute_ns);"}}
},
},
["warn_cxx17_compat_adl_only_template_id"]={
["warn_cxx17_compat_adl_only_template_id"]={
Line 845: Line 845:
[c]=q,
[c]=q,
[b]={"b23c5e8c3df8",1557372687,"[c++20] Implement P0846R0: allow (ADL-only) calls to template-ids whose"},
[b]={"b23c5e8c3df8",1557372687,"[c++20] Implement P0846R0: allow (ADL-only) calls to template-ids whose"},
[k]={{M,6080,"ExprResult Sema::ActOnCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig) {\n  // Diagnose uses of the C++20 \"ADL-only template-id call\" feature in earlier\n  // language modes.\n  if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(Fn)) {\n    if (ULE->hasExplicitTemplateArgs() && ULE->decls_begin() == ULE->decls_end()) {\n      Diag(Fn->getExprLoc(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_adl_only_template_id : diag::ext_adl_only_template_id) << ULE->getName();"}}
[k]={{M,7044,"ExprResult Sema::ActOnCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig) {\n  // Diagnose uses of the C++20 \"ADL-only template-id call\" feature in earlier\n  // language modes.\n  if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(Fn)) {\n    if (ULE->hasExplicitTemplateArgs() && ULE->decls_begin() == ULE->decls_end()) {\n      Diag(Fn->getExprLoc(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_adl_only_template_id : diag::ext_adl_only_template_id) << ULE->getName();"}}
},
},
["warn_cxx17_compat_aggregate_init_paren_list"]={
["warn_cxx17_compat_aggregate_init_paren_list"]={
Line 860: Line 860:
[c]=q,
[c]=q,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{fb,4795,"static void TryOrBuildParenListInitialization(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result = nullptr) {\n  if (VerifyOnly) {\n  } else if (Result) {\n    S.Diag(Kind.getLocation(), diag::warn_cxx17_compat_aggregate_init_paren_list) << Kind.getLocation() << SR << ResultType;"}}
[k]={{fb,5658,"static void TryOrBuildParenListInitialization(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result = nullptr) {\n  if (VerifyOnly) {\n  } else if (Result) {\n    S.Diag(Kind.getLocation(), diag::warn_cxx17_compat_aggregate_init_paren_list) << Kind.getLocation() << SR << ResultType;"}}
},
},
["warn_cxx17_compat_bitfield_member_init"]={
["warn_cxx17_compat_bitfield_member_init"]={
Line 875: Line 875:
[c]=A,
[c]=A,
[b]={"6b8e3c02ca44",1503880094,"[c++2a] P0683R1: Permit default member initializers for bit-fields."},
[b]={"6b8e3c02ca44",1503880094,"[c++2a] P0683R1: Permit default member initializers for bit-fields."},
[k]={{db,2609,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  while (true) {\n    if (Tok.isOneOf(tok::equal, tok::l_brace) && PureSpecLoc.isInvalid()) {\n      // DRXXXX: Anonymous bit-fields cannot have a brace-or-equal-initializer.\n      if (BitfieldSize.isUsable() && !DeclaratorInfo.hasName()) {\n      } else if (DeclaratorInfo.isDeclarationOfFunction()) {\n      } else if (DeclaratorInfo.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static && DeclaratorInfo.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef && !DS.isFriendSpecified()) {\n        // It\'s a default member initializer.\n        if (BitfieldSize.get())\n          Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_bitfield_member_init : diag::ext_bitfield_member_init);"}}
[k]={{db,3036,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  while (true) {\n    if (Tok.isOneOf(tok::equal, tok::l_brace) && PureSpecLoc.isInvalid()) {\n      // DRXXXX: Anonymous bit-fields cannot have a brace-or-equal-initializer.\n      if (BitfieldSize.isUsable() && !DeclaratorInfo.hasName()) {\n      } else if (DeclaratorInfo.isDeclarationOfFunction()) {\n      } else if (DeclaratorInfo.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static && DeclaratorInfo.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef && !DS.isFriendSpecified()) {\n        // It\'s a default member initializer.\n        if (BitfieldSize.get())\n          Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_bitfield_member_init : diag::ext_bitfield_member_init);"}}
},
},
["warn_cxx17_compat_capture_binding"]={
["warn_cxx17_compat_capture_binding"]={
Line 890: Line 890:
[c]=q,
[c]=q,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{M,16668,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  if (isa<BindingDecl>(Var)) {\n    if (!IsLambda || !S.getLangOpts().CPlusPlus) {\n    } else if (Diagnose && S.getLangOpts().CPlusPlus) {\n      S.Diag(Loc, S.LangOpts.CPlusPlus20 ? diag::warn_cxx17_compat_capture_binding : diag::ext_capture_binding) << Var;"}}
[k]={{M,19209,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  if (isa<BindingDecl>(Var)) {\n    if (!IsLambda || !S.getLangOpts().CPlusPlus) {\n    } else if (Diagnose && S.getLangOpts().CPlusPlus) {\n      S.Diag(Loc, S.LangOpts.CPlusPlus20 ? diag::warn_cxx17_compat_capture_binding : diag::ext_capture_binding) << Var;"}}
},
},
["warn_cxx17_compat_constexpr_body_invalid_stmt"]={
["warn_cxx17_compat_constexpr_body_invalid_stmt"]={
Line 905: Line 905:
[c]=q,
[c]=q,
[b]={"5c1399a58237",1544468592,"[constexpr][c++2a] Try-catch blocks in constexpr functions"},
[b]={"5c1399a58237",1544468592,"[constexpr][c++2a] Try-catch blocks in constexpr functions"},
[k]={{F,1947,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (Kind == Sema::CheckConstexprKind::CheckValid) {\n  } else if (Cxx2bLoc.isValid()) {\n  } else if (Cxx2aLoc.isValid()) {\n    SemaRef.Diag(Cxx2aLoc, SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt_cxx20) << isa<CXXConstructorDecl>(Dcl);"}}
[k]={{F,2294,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (Kind == Sema::CheckConstexprKind::CheckValid) {\n  } else if (Cxx2bLoc.isValid()) {\n  } else if (Cxx2aLoc.isValid()) {\n    SemaRef.Diag(Cxx2aLoc, SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt_cxx20) << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["warn_cxx17_compat_constexpr_ctor_missing_init"]={
["warn_cxx17_compat_constexpr_ctor_missing_init"]={
Line 920: Line 920:
[c]=q,
[c]=q,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{F,1738,"/// Check that the given field is initialized within a constexpr constructor.\n///\n/// \\param Dcl The constexpr constructor being checked.\n/// \\param Field The field being checked. This may be a member of an anonymous\n///        struct or union nested within the class being checked.\n/// \\param Inits All declarations, including anonymous struct/union members and\n///        indirect members, for which any initialization was provided.\n/// \\param Diagnosed Whether we\'ve emitted the error message yet. Used to attach\n///        multiple notes for different members to the same error.\n/// \\param Kind Whether we\'re diagnosing a constructor as written or determining\n///        whether the formal requirements are satisfied.\n/// \\return \\c false if we\'re checking for validity and the constructor does\n///        not satisfy the requirements on a constexpr constructor.\nstatic bool CheckConstexprCtorInitializer(Sema &SemaRef, const FunctionDecl *Dcl, FieldDecl *Field, llvm::SmallSet<Decl *, 16> &Inits, bool &Diagnosed, Sema::CheckConstexprKind Kind) {\n  if (!Inits.count(Field)) {\n    if (Kind == Sema::CheckConstexprKind::Diagnose) {\n      if (!Diagnosed) {\n        SemaRef.Diag(Dcl->getLocation(), SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_ctor_missing_init : diag::ext_constexpr_ctor_missing_init);"}}
[k]={{F,2044,"/// Check that the given field is initialized within a constexpr constructor.\n///\n/// \\param Dcl The constexpr constructor being checked.\n/// \\param Field The field being checked. This may be a member of an anonymous\n///        struct or union nested within the class being checked.\n/// \\param Inits All declarations, including anonymous struct/union members and\n///        indirect members, for which any initialization was provided.\n/// \\param Diagnosed Whether we\'ve emitted the error message yet. Used to attach\n///        multiple notes for different members to the same error.\n/// \\param Kind Whether we\'re diagnosing a constructor as written or determining\n///        whether the formal requirements are satisfied.\n/// \\return \\c false if we\'re checking for validity and the constructor does\n///        not satisfy the requirements on a constexpr constructor.\nstatic bool CheckConstexprCtorInitializer(Sema &SemaRef, const FunctionDecl *Dcl, FieldDecl *Field, llvm::SmallSet<Decl *, 16> &Inits, bool &Diagnosed, Sema::CheckConstexprKind Kind) {\n  if (!Inits.count(Field)) {\n    if (Kind == Sema::CheckConstexprKind::Diagnose) {\n      if (!Diagnosed) {\n        SemaRef.Diag(Dcl->getLocation(), SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_ctor_missing_init : diag::ext_constexpr_ctor_missing_init);"}}
},
},
["warn_cxx17_compat_constexpr_function_try_block"]={
["warn_cxx17_compat_constexpr_function_try_block"]={
Line 935: Line 935:
[c]=q,
[c]=q,
[b]={"5c1399a58237",1544468592,"[constexpr][c++2a] Try-catch blocks in constexpr functions"},
[b]={"5c1399a58237",1544468592,"[constexpr][c++2a] Try-catch blocks in constexpr functions"},
[k]={{F,1923,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (isa<CXXTryStmt>(Body)) {\n    case Sema::CheckConstexprKind::Diagnose:\n      SemaRef.Diag(Body->getBeginLoc(), !SemaRef.getLangOpts().CPlusPlus20 ? diag::ext_constexpr_function_try_block_cxx20 : diag::warn_cxx17_compat_constexpr_function_try_block) << isa<CXXConstructorDecl>(Dcl);"}}
[k]={{F,2259,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (isa<CXXTryStmt>(Body)) {\n    case Sema::CheckConstexprKind::Diagnose:\n      SemaRef.Diag(Body->getBeginLoc(), !SemaRef.getLangOpts().CPlusPlus20 ? diag::ext_constexpr_function_try_block_cxx20 : diag::warn_cxx17_compat_constexpr_function_try_block) << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["warn_cxx17_compat_constexpr_local_var_no_init"]={
["warn_cxx17_compat_constexpr_local_var_no_init"]={
Line 950: Line 950:
[c]=q,
[c]=q,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{F,1671,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    case Decl::Decomposition: {\n      if (VD->isThisDeclarationADefinition()) {\n        if (!VD->getType()->isDependentType() && !VD->hasInit() && !VD->isCXXForRangeDecl()) {\n          if (Kind == Sema::CheckConstexprKind::Diagnose) {\n            SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_local_var_no_init : diag::ext_constexpr_local_var_no_init) << isa<CXXConstructorDecl>(Dcl);"}}
[k]={{F,1959,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    case Decl::Decomposition: {\n      if (VD->isThisDeclarationADefinition()) {\n        if (!VD->getType()->isDependentType() && !VD->hasInit() && !VD->isCXXForRangeDecl()) {\n          if (Kind == Sema::CheckConstexprKind::Diagnose) {\n            SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_local_var_no_init : diag::ext_constexpr_local_var_no_init) << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["warn_cxx17_compat_constexpr_union_ctor_no_init"]={
["warn_cxx17_compat_constexpr_union_ctor_no_init"]={
Line 965: Line 965:
[c]=q,
[c]=q,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{F,1963,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n    // DR1359:\n    // - every non-variant non-static data member and base class sub-object\n    //  shall be initialized;\n    // DR1460:\n    // - if the class is a union having variant members, exactly one of them\n    //  shall be initialized;\n    if (RD->isUnion()) {\n      if (Constructor->getNumCtorInitializers() == 0 && RD->hasVariantMembers()) {\n        if (Kind == Sema::CheckConstexprKind::Diagnose) {\n          SemaRef.Diag(Dcl->getLocation(), SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_union_ctor_no_init : diag::ext_constexpr_union_ctor_no_init);"}}
[k]={{F,2321,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n    // DR1359:\n    // - every non-variant non-static data member and base class sub-object\n    //  shall be initialized;\n    // DR1460:\n    // - if the class is a union having variant members, exactly one of them\n    //  shall be initialized;\n    if (RD->isUnion()) {\n      if (Constructor->getNumCtorInitializers() == 0 && RD->hasVariantMembers()) {\n        if (Kind == Sema::CheckConstexprKind::Diagnose) {\n          SemaRef.Diag(Dcl->getLocation(), SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_union_ctor_no_init : diag::ext_constexpr_union_ctor_no_init);"}}
},
},
["warn_cxx17_compat_constexpr_virtual"]={
["warn_cxx17_compat_constexpr_virtual"]={
Line 980: Line 980:
[c]=q,
[c]=q,
[b]={"5c5be6b2f7fc",1557733330,"[c++20] P1064R0: Allow virtual function calls in constant expression"},
[b]={"5c5be6b2f7fc",1557733330,"[c++20] P1064R0: Allow virtual function calls in constant expression"},
[k]={{F,1544,"// 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        if (Kind == CheckConstexprKind::Diagnose)\n          Diag(Method->getLocation(), diag::warn_cxx17_compat_constexpr_virtual);"}}
[k]={{F,1808,"// 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        if (Kind == CheckConstexprKind::Diagnose)\n          Diag(Method->getLocation(), diag::warn_cxx17_compat_constexpr_virtual);"}}
},
},
["warn_cxx17_compat_decomp_decl_spec"]={
["warn_cxx17_compat_decomp_decl_spec"]={
Line 995: Line 995:
[c]=q,
[c]=q,
[b]={"13bf9892dc2a",1558554775,"Part of P1091R3: permit structured bindings to be declared \'static\' and"},
[b]={"13bf9892dc2a",1558554775,"Part of P1091R3: permit structured bindings to be declared \'static\' and"},
[k]={{F,722,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  {\n    if (!BadSpecifiers.empty()) {\n    } else if (!CPlusPlus20Specifiers.empty()) {\n      auto &&Warn = Diag(CPlusPlus20SpecifierLocs.front(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_decomp_decl_spec : diag::ext_decomp_decl_spec);"}}
[k]={{F,812,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  {\n    if (!BadSpecifiers.empty()) {\n    } else if (!CPlusPlus20Specifiers.empty()) {\n      auto &&Warn = Diag(CPlusPlus20SpecifierLocs.front(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_decomp_decl_spec : diag::ext_decomp_decl_spec);"}}
},
},
["warn_cxx17_compat_defaulted_comparison"]={
["warn_cxx17_compat_defaulted_comparison"]={
Line 1,010: Line 1,010:
[c]=q,
[c]=q,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{F,15277,"void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {\n  // Issue compatibility warning. We already warned if the operator is\n  // \'operator<=>\' when parsing the \'<=>\' token.\n  if (DefKind.isComparison() && DefKind.asComparison() != DefaultedComparisonKind::ThreeWay) {\n    Diag(DefaultLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_defaulted_comparison : diag::ext_defaulted_comparison);"}}
[k]={{F,17883,"void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {\n  // Issue compatibility warning. We already warned if the operator is\n  // \'operator<=>\' when parsing the \'<=>\' token.\n  if (DefKind.isComparison() && DefKind.asComparison() != DefaultedComparisonKind::ThreeWay) {\n    Diag(DefaultLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_defaulted_comparison : diag::ext_defaulted_comparison);"}}
},
},
["warn_cxx17_compat_defaulted_method_type_mismatch"]={
["warn_cxx17_compat_defaulted_method_type_mismatch"]={
Line 1,025: Line 1,025:
[c]=q,
[c]=q,
[b]={"9b2c5e7c44fd",1538097403,"[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only"},
[b]={"9b2c5e7c44fd",1538097403,"[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only"},
[k]={{F,6647,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n      if (ShouldDeleteForTypeMismatch && !HadError) {\n        Diag(MD->getLocation(), diag::warn_cxx17_compat_defaulted_method_type_mismatch) << CSM;"}}
[k]={{F,7784,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n      if (ShouldDeleteForTypeMismatch && !HadError) {\n        Diag(MD->getLocation(), diag::warn_cxx17_compat_defaulted_method_type_mismatch) << CSM;"}}
},
},
["warn_cxx17_compat_designated_init"]={
["warn_cxx17_compat_designated_init"]={
Line 1,040: Line 1,040:
[c]=q,
[c]=q,
[b]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated"},
[b]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated"},
[k]={{M,6740,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n  if (FirstDesignator.isValid()) {\n    // Only diagnose designated initiaization as a C++20 extension if we didn\'t\n    // already diagnose use of (non-C++20) C99 designator syntax.\n    if (getLangOpts().CPlusPlus && !DiagnosedArrayDesignator && !DiagnosedNestedDesignator && !DiagnosedMixedDesignator) {\n      Diag(FirstDesignator, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_designated_init : diag::ext_cxx_designated_init);"}}
[k]={{M,7831,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n  if (FirstDesignator.isValid()) {\n    // Only diagnose designated initiaization as a C++20 extension if we didn\'t\n    // already diagnose use of (non-C++20) C99 designator syntax.\n    if (getLangOpts().CPlusPlus && !DiagnosedArrayDesignator && !DiagnosedNestedDesignator && !DiagnosedMixedDesignator) {\n      Diag(FirstDesignator, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_designated_init : diag::ext_cxx_designated_init);"}}
},
},
["warn_cxx17_compat_equals_this_lambda_capture"]={
["warn_cxx17_compat_equals_this_lambda_capture"]={
Line 1,055: Line 1,055:
[c]=vc,
[c]=vc,
[b]={"8194a3e975e5",1503114187,"[c++2a] Implement P0409R2 - Allow lambda capture [=,this] (by hamzasood)"},
[b]={"8194a3e975e5",1503114187,"[c++2a] Implement P0409R2 - Allow lambda capture [=,this] (by hamzasood)"},
[k]={{td,896,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      // C++20 [expr.prim.lambda]p8:\n      //  If a lambda-capture includes a capture-default that is =,\n      //  each simple-capture of that lambda-capture shall be of the form\n      //  \"&identifier\", \"this\", or \"* this\". [ Note: The form [&,this] is\n      //  redundant but accepted for compatibility with ISO C++14. --end note ]\n      if (Intro.Default == LCD_ByCopy && C->Kind != LCK_StarThis)\n        Diag(C->Loc, !getLangOpts().CPlusPlus20 ? diag::ext_equals_this_lambda_capture_cxx20 : diag::warn_cxx17_compat_equals_this_lambda_capture);"}}
[k]={{td,1044,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      // C++20 [expr.prim.lambda]p8:\n      //  If a lambda-capture includes a capture-default that is =,\n      //  each simple-capture of that lambda-capture shall be of the form\n      //  \"&identifier\", \"this\", or \"* this\". [ Note: The form [&,this] is\n      //  redundant but accepted for compatibility with ISO C++14. --end note ]\n      if (Intro.Default == LCD_ByCopy && C->Kind != LCK_StarThis)\n        Diag(C->Loc, !getLangOpts().CPlusPlus20 ? diag::ext_equals_this_lambda_capture_cxx20 : diag::warn_cxx17_compat_equals_this_lambda_capture);"}}
},
},
["warn_cxx17_compat_exception_spec_in_signature"]={
["warn_cxx17_compat_exception_spec_in_signature"]={
Line 1,069: Line 1,069:
[c]=q,
[c]=q,
[b]={"b115e5dda202",1502667449,"Rename cxx1z -> cxx17 across all diagnostic IDs."},
[b]={"b115e5dda202",1502667449,"Rename cxx1z -> cxx17 across all diagnostic IDs."},
[k]={{G,10514,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  if (getLangOpts().CPlusPlus) {\n    // C++1z [dcl.fct]p6:\n    //  [...] whether the function has a non-throwing exception-specification\n    //  [is] part of the function type\n    //\n    // This results in an ABI break between C++14 and C++17 for functions whose\n    // declared type includes an exception-specification in a parameter or\n    // return type. (Exception specifications on the function itself are OK in\n    // most cases, and exception specifications are not permitted in most other\n    // contexts where they could make it into a mangling.)\n    if (!getLangOpts().CPlusPlus17 && !NewFD->getPrimaryTemplate()) {\n      if (AnyNoexcept)\n        Diag(NewFD->getLocation(), diag::warn_cxx17_compat_exception_spec_in_signature) << NewFD;"}}
[k]={{G,12057,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  if (getLangOpts().CPlusPlus) {\n    // C++1z [dcl.fct]p6:\n    //  [...] whether the function has a non-throwing exception-specification\n    //  [is] part of the function type\n    //\n    // This results in an ABI break between C++14 and C++17 for functions whose\n    // declared type includes an exception-specification in a parameter or\n    // return type. (Exception specifications on the function itself are OK in\n    // most cases, and exception specifications are not permitted in most other\n    // contexts where they could make it into a mangling.)\n    if (!getLangOpts().CPlusPlus17 && !NewFD->getPrimaryTemplate()) {\n      if (AnyNoexcept)\n        Diag(NewFD->getLocation(), diag::warn_cxx17_compat_exception_spec_in_signature) << NewFD;"}}
},
},
["warn_cxx17_compat_explicit_bool"]={
["warn_cxx17_compat_explicit_bool"]={
Line 1,084: Line 1,084:
[c]=A,
[c]=A,
[b]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[b]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[k]={{Mb,3664,"/// 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_explicit: {\n      if (Tok.is(tok::l_paren)) {\n        if (getLangOpts().CPlusPlus20 || isExplicitBool() == TPResult::True) {\n          Diag(Tok.getLocation(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_explicit_bool : diag::ext_explicit_bool);"}}
[k]={{Mb,4047,"/// 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_explicit: {\n      if (Tok.is(tok::l_paren)) {\n        if (getLangOpts().CPlusPlus20 || isExplicitBool() == TPResult::True) {\n          Diag(Tok.getLocation(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_explicit_bool : diag::ext_explicit_bool);"}}
},
},
["warn_cxx17_compat_for_range_init_stmt"]={
["warn_cxx17_compat_for_range_init_stmt"]={
Line 1,099: Line 1,099:
[c]=A,
[c]=A,
[b]={"8baa50013c86",1538160249,"[cxx2a] P0614R1: Support init-statements in range-based for loops."},
[b]={"8baa50013c86",1538160249,"[cxx2a] P0614R1: Support init-statements in range-based for loops."},
[k]={{Yb,2017,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // Parse the second part of the for specifier.\n  if (!ForEach && !ForRangeInfo.ParsedForRangeDecl() && !SecondPart.isInvalid()) {\n    // Parse the second part of the for specifier.\n    if (Tok.is(tok::semi)) { // for (...;;\n    } else if (Tok.is(tok::r_paren)) {\n    } else {\n      if (getLangOpts().CPlusPlus) {\n        if (ForRangeInfo.ParsedForRangeDecl()) {\n          Diag(FirstPart.get() ? FirstPart.get()->getBeginLoc() : ForRangeInfo.ColonLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_for_range_init_stmt : diag::ext_for_range_init_stmt) << (FirstPart.get() ? FirstPart.get()->getSourceRange() : SourceRange());"}}
[k]={{Yb,2171,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // Parse the second part of the for specifier.\n  if (!ForEach && !ForRangeInfo.ParsedForRangeDecl() && !SecondPart.isInvalid()) {\n    // Parse the second part of the for specifier.\n    if (Tok.is(tok::semi)) { // for (...;;\n    } else if (Tok.is(tok::r_paren)) {\n    } else {\n      if (getLangOpts().CPlusPlus) {\n        if (ForRangeInfo.ParsedForRangeDecl()) {\n          Diag(FirstPart.get() ? FirstPart.get()->getBeginLoc() : ForRangeInfo.ColonLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_for_range_init_stmt : diag::ext_for_range_init_stmt) << (FirstPart.get() ? FirstPart.get()->getSourceRange() : SourceRange());"}}
},
},
["warn_cxx17_compat_implicit_typename"]={
["warn_cxx17_compat_implicit_typename"]={
Line 1,114: Line 1,114:
[c]=q,
[c]=q,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{G,335,"/// If the identifier refers to a type name within this scope,\n/// return the declaration of that type.\n///\n/// This routine performs ordinary name lookup of the identifier II\n/// within the given scope, with optional C++ scope specifier SS, to\n/// determine whether the name refers to a type. If so, returns an\n/// opaque pointer (actually a QualType) corresponding to that\n/// type. Otherwise, returns NULL.\nParsedType Sema::getTypeName(const IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec *SS, bool isClassName, bool HasTrailingDot, ParsedType ObjectTypePtr, bool IsCtorOrDtorName, bool WantNontrivialTypeSourceInfo, bool IsClassTemplateDeductionContext, ImplicitTypenameContext AllowImplicitTypename, IdentifierInfo **CorrectedII) {\n  if (ObjectTypePtr) {\n  } else if (SS && SS->isNotEmpty()) {\n    if (!LookupCtx) {\n      if (isDependentScopeSpecifier(*SS)) {\n        if (IsImplicitTypename) {\n          if (getLangOpts().CPlusPlus20)\n            Diag(QualifiedLoc, diag::warn_cxx17_compat_implicit_typename);"},{wb,3475,"TypeResult Sema::ActOnTemplateIdType(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, IdentifierInfo *TemplateII, SourceLocation TemplateIILoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, bool IsCtorOrDtorName, bool IsClassName, ImplicitTypenameContext AllowImplicitTypename) {\n  if (!IsCtorOrDtorName && !IsClassName && SS.isSet()) {\n    // C++ [temp.res]p3:\n    //  A qualified-id that refers to a type and in which the\n    //  nested-name-specifier depends on a template-parameter (14.6.2)\n    //  shall be prefixed by the keyword typename to indicate that the\n    //  qualified-id denotes a type, forming an\n    //  elaborated-type-specifier (7.1.5.3).\n    if (!LookupCtx && isDependentScopeSpecifier(SS)) {\n      // C++2a relaxes some of those restrictions in [temp.res]p5.\n      if (AllowImplicitTypename == ImplicitTypenameContext::Yes) {\n        if (getLangOpts().CPlusPlus20)\n          Diag(SS.getBeginLoc(), diag::warn_cxx17_compat_implicit_typename);"}}
[k]={{G,372,"/// If the identifier refers to a type name within this scope,\n/// return the declaration of that type.\n///\n/// This routine performs ordinary name lookup of the identifier II\n/// within the given scope, with optional C++ scope specifier SS, to\n/// determine whether the name refers to a type. If so, returns an\n/// opaque pointer (actually a QualType) corresponding to that\n/// type. Otherwise, returns NULL.\nParsedType Sema::getTypeName(const IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec *SS, bool isClassName, bool HasTrailingDot, ParsedType ObjectTypePtr, bool IsCtorOrDtorName, bool WantNontrivialTypeSourceInfo, bool IsClassTemplateDeductionContext, ImplicitTypenameContext AllowImplicitTypename, IdentifierInfo **CorrectedII) {\n  if (ObjectTypePtr) {\n  } else if (SS && SS->isNotEmpty()) {\n    if (!LookupCtx) {\n      if (isDependentScopeSpecifier(*SS)) {\n        if (IsImplicitTypename) {\n          if (getLangOpts().CPlusPlus20)\n            Diag(QualifiedLoc, diag::warn_cxx17_compat_implicit_typename);"},{wb,4147,"TypeResult Sema::ActOnTemplateIdType(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, IdentifierInfo *TemplateII, SourceLocation TemplateIILoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, bool IsCtorOrDtorName, bool IsClassName, ImplicitTypenameContext AllowImplicitTypename) {\n  if (!IsCtorOrDtorName && !IsClassName && SS.isSet()) {\n    // C++ [temp.res]p3:\n    //  A qualified-id that refers to a type and in which the\n    //  nested-name-specifier depends on a template-parameter (14.6.2)\n    //  shall be prefixed by the keyword typename to indicate that the\n    //  qualified-id denotes a type, forming an\n    //  elaborated-type-specifier (7.1.5.3).\n    if (!LookupCtx && isDependentScopeSpecifier(SS)) {\n      // C++2a relaxes some of those restrictions in [temp.res]p5.\n      if (AllowImplicitTypename == ImplicitTypenameContext::Yes) {\n        if (getLangOpts().CPlusPlus20)\n          Diag(SS.getBeginLoc(), diag::warn_cxx17_compat_implicit_typename);"}}
},
},
["warn_cxx17_compat_init_capture_pack"]={
["warn_cxx17_compat_init_capture_pack"]={
Line 1,129: Line 1,129:
[c]=vc,
[c]=vc,
[b]={"b2997f579a8b",1558469450,"[c++20] P0780R2: Support pack-expansion of init-captures."},
[b]={"b2997f579a8b",1558469450,"[c++20] P0780R2: Support pack-expansion of init-captures."},
[k]={{td,637,"QualType Sema::buildLambdaInitCaptureInitialization(SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc, std::optional<unsigned> NumExpansions, IdentifierInfo *Id, bool IsDirectInit, Expr *&Init) {\n  if (EllipsisLoc.isValid()) {\n    if (Init->containsUnexpandedParameterPack()) {\n      Diag(EllipsisLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_init_capture_pack : diag::ext_init_capture_pack);"}}
[k]={{td,728,"QualType Sema::buildLambdaInitCaptureInitialization(SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc, std::optional<unsigned> NumExpansions, IdentifierInfo *Id, bool IsDirectInit, Expr *&Init) {\n  if (EllipsisLoc.isValid()) {\n    if (Init->containsUnexpandedParameterPack()) {\n      Diag(EllipsisLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_init_capture_pack : diag::ext_init_capture_pack);"}}
},
},
["warn_cxx17_compat_inline_nested_namespace_definition"]={
["warn_cxx17_compat_inline_nested_namespace_definition"]={
Line 1,144: Line 1,144:
[c]=A,
[c]=A,
[b]={"53f391dcb323",1542043188,"Implement P1094R2 (nested inline namespaces)"},
[b]={"53f391dcb323",1542043188,"Implement P1094R2 (nested inline namespaces)"},
[k]={{db,164,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  if (ExtraNSs.empty()) {\n  } else if (InlineLoc.isValid()) {\n  } else if (getLangOpts().CPlusPlus20) {\n    if (FirstNestedInlineLoc.isValid())\n      Diag(FirstNestedInlineLoc, diag::warn_cxx17_compat_inline_nested_namespace_definition);"}}
[k]={{db,178,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  if (ExtraNSs.empty()) {\n  } else if (InlineLoc.isValid()) {\n  } else if (getLangOpts().CPlusPlus20) {\n    if (FirstNestedInlineLoc.isValid())\n      Diag(FirstNestedInlineLoc, diag::warn_cxx17_compat_inline_nested_namespace_definition);"}}
},
},
["warn_cxx17_compat_lambda_def_ctor_assign"]={
["warn_cxx17_compat_lambda_def_ctor_assign"]={
Line 1,159: Line 1,159:
[c]=vc,
[c]=vc,
[b]={"864949bda1db",1538088424,"[cxx2a] P0624R2: Lambdas with no capture-default are"},
[b]={"864949bda1db",1538088424,"[cxx2a] P0624R2: Lambdas with no capture-default are"},
[k]={{M,293,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    // Lambdas are only default-constructible or assignable in C++2a onwards.\n    if (MD->getParent()->isLambda() && ((isa<CXXConstructorDecl>(MD) && cast<CXXConstructorDecl>(MD)->isDefaultConstructor()) || MD->isCopyAssignmentOperator() || MD->isMoveAssignmentOperator())) {\n      Diag(Loc, diag::warn_cxx17_compat_lambda_def_ctor_assign) << !isa<CXXConstructorDecl>(MD);"}}
[k]={{M,321,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    // Lambdas are only default-constructible or assignable in C++2a onwards.\n    if (MD->getParent()->isLambda() && ((isa<CXXConstructorDecl>(MD) && cast<CXXConstructorDecl>(MD)->isDefaultConstructor()) || MD->isCopyAssignmentOperator() || MD->isMoveAssignmentOperator())) {\n      Diag(Loc, diag::warn_cxx17_compat_lambda_def_ctor_assign) << !isa<CXXConstructorDecl>(MD);"}}
},
},
["warn_cxx17_compat_lambda_template_parameter_list"]={
["warn_cxx17_compat_lambda_template_parameter_list"]={
Line 1,174: Line 1,174:
[c]=A,
[c]=A,
[b]={"8205a814a691",1556966986,"[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas"},
[b]={"8205a814a691",1556966986,"[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas"},
[k]={{Rb,1202,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  if (Tok.is(tok::less)) {\n    Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_lambda_template_parameter_list : diag::ext_lambda_template_parameter_list);"}}
[k]={{Rb,1330,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  if (Tok.is(tok::less)) {\n    Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_lambda_template_parameter_list : diag::ext_lambda_template_parameter_list);"}}
},
},
["warn_cxx17_compat_missing_varargs_arg"]={
["warn_cxx17_compat_missing_varargs_arg"]={
Line 1,189: Line 1,189:
[c]=N,
[c]=N,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{"clang/lib/Lex/PPMacroExpansion.cpp",939,"/// 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 (NumActuals < MinArgsExpected) {\n    // There are several cases where too few arguments is ok, handle them now.\n    if (NumActuals == 0 && MinArgsExpected == 1) {\n    } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected ||          // A(x, ...) -> A(X)\n      // Varargs where the named vararg parameter is missing: OK as extension.\n      //  #define A(x, ...)\n      //  A(\"blah\")\n      //\n      // If the macro contains the comma pasting extension, the diagnostic\n      // is suppressed; we know we\'ll get another diagnostic later.\n      if (!MI->hasCommaPasting()) {\n        Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_missing_varargs_arg : diag::ext_missing_varargs_arg);"}}
[k]={{"clang/lib/Lex/PPMacroExpansion.cpp",1000,"/// 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 (NumActuals < MinArgsExpected) {\n    // There are several cases where too few arguments is ok, handle them now.\n    if (NumActuals == 0 && MinArgsExpected == 1) {\n    } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected ||          // A(x, ...) -> A(X)\n      // Varargs where the named vararg parameter is missing: OK as extension.\n      //  #define A(x, ...)\n      //  A(\"blah\")\n      //\n      // If the macro contains the comma pasting extension, the diagnostic\n      // is suppressed; we know we\'ll get another diagnostic later.\n      if (!MI->hasCommaPasting()) {\n        Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_missing_varargs_arg : diag::ext_missing_varargs_arg);"}}
},
},
["warn_cxx17_compat_multi_using_declaration"]={
["warn_cxx17_compat_multi_using_declaration"]={
Line 1,204: Line 1,204:
[c]=A,
[c]=A,
[b]={"b115e5dda202",1502667449,"Rename cxx1z -> cxx17 across all diagnostic IDs."},
[b]={"b115e5dda202",1502667449,"Rename cxx1z -> cxx17 across all diagnostic IDs."},
[k]={{db,750,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  if (DeclsInGroup.size() > 1)\n    Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx17_compat_multi_using_declaration : diag::ext_multi_using_declaration);"}}
[k]={{db,854,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  if (DeclsInGroup.size() > 1)\n    Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx17_compat_multi_using_declaration : diag::ext_multi_using_declaration);"}}
},
},
["warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue"]={
["warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue"]={
Line 1,219: Line 1,219:
[c]=q,
[c]=q,
[b]={"2592327dae05",1503625675,"[c++2a] P0704R1: Allow pointers to const& member functions to be called on rvalues."},
[b]={"2592327dae05",1503625675,"[c++2a] P0704R1: Allow pointers to const& member functions to be called on rvalues."},
[k]={{Sb,5250,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // C++0x [expr.mptr.oper]p6:\n  //  In a .* expression whose object expression is an rvalue, the program is\n  //  ill-formed if the second operand is a pointer to member function with\n  //  ref-qualifier &. In a ->* expression or in a .* expression whose object\n  //  expression is an lvalue, the program is ill-formed if the second operand\n  //  is a pointer to member function with ref-qualifier &&.\n  if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) {\n    case RQ_LValue:\n      if (!isIndirect && !LHS.get()->Classify(Context).isLValue()) {\n        // C++2a allows functions with ref-qualifier & if their cv-qualifier-seq\n        // is (exactly) \'const\'.\n        if (Proto->isConst() && !Proto->isVolatile())\n          Diag(Loc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue : diag::ext_pointer_to_const_ref_member_on_rvalue);"}}
[k]={{Sb,6091,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // C++0x [expr.mptr.oper]p6:\n  //  In a .* expression whose object expression is an rvalue, the program is\n  //  ill-formed if the second operand is a pointer to member function with\n  //  ref-qualifier &. In a ->* expression or in a .* expression whose object\n  //  expression is an lvalue, the program is ill-formed if the second operand\n  //  is a pointer to member function with ref-qualifier &&.\n  if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) {\n    case RQ_LValue:\n      if (!isIndirect && !LHS.get()->Classify(Context).isLValue()) {\n        // C++2a allows functions with ref-qualifier & if their cv-qualifier-seq\n        // is (exactly) \'const\'.\n        if (Proto->isConst() && !Proto->isVolatile())\n          Diag(Loc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue : diag::ext_pointer_to_const_ref_member_on_rvalue);"}}
},
},
["warn_cxx17_compat_spaceship"]={
["warn_cxx17_compat_spaceship"]={
Line 1,234: Line 1,234:
[c]=N,
[c]=N,
[b]={"edbf5972a4c9",1512090430,"[c++2a] P0515R3: lexer support for new <=> token."},
[b]={"edbf5972a4c9",1512090430,"[c++2a] P0515R3: lexer support for new <=> token."},
[k]={{vb,3852,"LexStart:\n  case \'<\':\n    if (ParsingFilename) {\n    } else if (Char == \'<\') {\n    } else if (Char == \'=\') {\n      if (After == \'>\') {\n        if (LangOpts.CPlusPlus20) {\n          if (!isLexingRawMode())\n            Diag(BufferPtr, diag::warn_cxx17_compat_spaceship);"}}
[k]={{vb,4120,"LexStart:\n  case \'<\':\n    if (ParsingFilename) {\n    } else if (Char == \'<\') {\n    } else if (Char == \'=\') {\n      if (After == \'>\') {\n        if (LangOpts.CPlusPlus20) {\n          if (!isLexingRawMode())\n            Diag(BufferPtr, diag::warn_cxx17_compat_spaceship);"}}
},
},
["warn_cxx17_compat_template_nontype_parm_type"]={
["warn_cxx17_compat_template_nontype_parm_type"]={
Line 1,249: Line 1,249:
[c]=q,
[c]=q,
[b]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"},
[b]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"},
[k]={{wb,1251,"QualType Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {\n  Diag(Loc, diag::warn_cxx17_compat_template_nontype_parm_type) << T;"}}
[k]={{wb,1488,"QualType Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {\n  Diag(Loc, diag::warn_cxx17_compat_template_nontype_parm_type) << T;"}}
},
},
["warn_cxx17_compat_unicode_type"]={
["warn_cxx17_compat_unicode_type"]={
Line 1,264: Line 1,264:
[c]=q,
[c]=q,
[b]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type."},
[b]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type."},
[k]={{dc,1230,"/// 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 (TypeSpecType == TST_char8)\n    S.Diag(TSTLoc, diag::warn_cxx17_compat_unicode_type);"}}
[k]={{dc,1375,"/// 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 (TypeSpecType == TST_char8)\n    S.Diag(TSTLoc, diag::warn_cxx17_compat_unicode_type);"}}
},
},
["warn_cxx17_compat_using_decl_class_member_enumerator"]={
["warn_cxx17_compat_using_decl_class_member_enumerator"]={
Line 1,279: Line 1,279:
[c]=q,
[c]=q,
[b]={Kc,1615397021,zc},
[b]={Kc,1615397021,zc},
[k]={{F,11232,"/// 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    Diag(NameLoc, Cxx20Enumerator ? diag::warn_cxx17_compat_using_decl_class_member_enumerator : diag::err_using_decl_can_not_refer_to_class_member) << SS.getRange();"}}
[k]={{F,13056,"/// 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    Diag(NameLoc, Cxx20Enumerator ? diag::warn_cxx17_compat_using_decl_class_member_enumerator : diag::err_using_decl_can_not_refer_to_class_member) << SS.getRange();"}}
},
},
["warn_cxx17_compat_using_decl_non_member_enumerator"]={
["warn_cxx17_compat_using_decl_non_member_enumerator"]={
Line 1,294: Line 1,294:
[c]=q,
[c]=q,
[b]={Kc,1615397021,zc},
[b]={Kc,1615397021,zc},
[k]={{F,11299,"/// 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  // The current scope is a record.\n  if (!NamedContext->isRecord()) {\n    Diag(SS.getBeginLoc(), Cxx20Enumerator ? diag::warn_cxx17_compat_using_decl_non_member_enumerator : diag::err_using_decl_nested_name_specifier_is_not_class) << SS.getScopeRep() << SS.getRange();"},{F,11319,"/// 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 (getLangOpts().CPlusPlus11) {\n    if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(cast<CXXRecordDecl>(NamedContext))) {\n      if (Cxx20Enumerator) {\n        Diag(NameLoc, diag::warn_cxx17_compat_using_decl_non_member_enumerator) << SS.getRange();"}}
[k]={{F,13140,"/// 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  // The current scope is a record.\n  if (!NamedContext->isRecord()) {\n    Diag(SS.getBeginLoc(), Cxx20Enumerator ? diag::warn_cxx17_compat_using_decl_non_member_enumerator : diag::err_using_decl_nested_name_specifier_is_not_class) << SS.getScopeRep() << SS.getRange();"},{F,13164,"/// 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 (getLangOpts().CPlusPlus11) {\n    if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(cast<CXXRecordDecl>(NamedContext))) {\n      if (Cxx20Enumerator) {\n        Diag(NameLoc, diag::warn_cxx17_compat_using_decl_non_member_enumerator) << SS.getRange();"}}
},
},
["warn_cxx17_compat_using_decl_scoped_enumerator"]={
["warn_cxx17_compat_using_decl_scoped_enumerator"]={
Line 1,309: Line 1,309:
[c]=q,
[c]=q,
[b]={Kc,1615397021,zc},
[b]={Kc,1615397021,zc},
[k]={{F,11212,"/// 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 (NamedContext) {\n    if (auto *ED = dyn_cast<EnumDecl>(NamedContext)) {\n      // C++14 [namespace.udecl]p7:\n      // A using-declaration shall not name a scoped enumerator.\n      // C++20 p1099 permits enumerators.\n      if (EC && R && ED->isScoped())\n        Diag(SS.getBeginLoc(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_using_decl_scoped_enumerator : diag::ext_using_decl_scoped_enumerator) << SS.getRange();"}}
[k]={{F,13031,"/// 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 (NamedContext) {\n    if (auto *ED = dyn_cast<EnumDecl>(NamedContext)) {\n      // C++14 [namespace.udecl]p7:\n      // A using-declaration shall not name a scoped enumerator.\n      // C++20 p1099 permits enumerators.\n      if (EC && R && ED->isScoped())\n        Diag(SS.getBeginLoc(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_using_decl_scoped_enumerator : diag::ext_using_decl_scoped_enumerator) << SS.getRange();"}}
},
},
["warn_cxx17_compat_using_declaration_pack"]={
["warn_cxx17_compat_using_declaration_pack"]={
Line 1,324: Line 1,324:
[c]=A,
[c]=A,
[b]={"b115e5dda202",1502667449,"Rename cxx1z -> cxx17 across all diagnostic IDs."},
[b]={"b115e5dda202",1502667449,"Rename cxx1z -> cxx17 across all diagnostic IDs."},
[k]={{db,583,"/// Parse a using-declarator (or the identifier in a C++11 alias-declaration).\n///\n///    using-declarator:\n///      \'typename\'[opt] nested-name-specifier unqualified-id\n///\nbool Parser::ParseUsingDeclarator(DeclaratorContext Context, UsingDeclarator &D) {\n  if (TryConsumeToken(tok::ellipsis, D.EllipsisLoc))\n    Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx17_compat_using_declaration_pack : diag::ext_using_declaration_pack);"}}
[k]={{db,661,"/// Parse a using-declarator (or the identifier in a C++11 alias-declaration).\n///\n///    using-declarator:\n///      \'typename\'[opt] nested-name-specifier unqualified-id\n///\nbool Parser::ParseUsingDeclarator(DeclaratorContext Context, UsingDeclarator &D) {\n  if (TryConsumeToken(tok::ellipsis, D.EllipsisLoc))\n    Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx17_compat_using_declaration_pack : diag::ext_using_declaration_pack);"}}
},
},
["warn_cxx17_compat_using_enum_declaration"]={
["warn_cxx17_compat_using_enum_declaration"]={
Line 1,339: Line 1,339:
[c]=A,
[c]=A,
[b]={md,1612659633,nd},
[b]={md,1612659633,nd},
[k]={{db,617,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n    Diag(UELoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_using_enum_declaration : diag::ext_using_enum_declaration);"}}
[k]={{db,701,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n    Diag(UELoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_using_enum_declaration : diag::ext_using_enum_declaration);"}}
},
},
["warn_cxx17_hex_literal"]={
["warn_cxx17_hex_literal"]={
Line 1,354: Line 1,354:
[c]=N,
[c]=N,
[b]={"b115e5dda202",1502667449,"Rename cxx1z -> cxx17 across all diagnostic IDs."},
[b]={"b115e5dda202",1502667449,"Rename cxx1z -> cxx17 across all diagnostic IDs."},
[k]={{Wc,1182,"/// ParseNumberStartingWithZero - This method is called when the first character\n/// of the number is found to be a zero.  This means it is either an octal\n/// number (like \'04\') or a hex number (\'0x123a\') a binary number (\'0b1010\') or\n/// a floating point number (01239.123e4).  Eat the prefix, determining the\n/// radix etc.\nvoid NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {\n  // Handle a hex number like 0x1234.\n  if ((c1 == \'x\' || c1 == \'X\') && (isHexDigit(s[1]) || s[1] == \'.\')) {\n    // A binary exponent can appear with or with a \'.\'. If dotted, the\n    // binary exponent is required.\n    if (*s == \'p\' || *s == \'P\') {\n      if (!LangOpts.HexFloats)\n      else if (LangOpts.CPlusPlus17)\n        Diags.Report(TokLoc, diag::warn_cxx17_hex_literal);"}}
[k]={{Wc,1332,"/// ParseNumberStartingWithZero - This method is called when the first character\n/// of the number is found to be a zero.  This means it is either an octal\n/// number (like \'04\') or a hex number (\'0x123a\') a binary number (\'0b1010\') or\n/// a floating point number (01239.123e4).  Eat the prefix, determining the\n/// radix etc.\nvoid NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {\n  // Handle a hex number like 0x1234.\n  if ((c1 == \'x\' || c1 == \'X\') && (isHexDigit(s[1]) || s[1] == \'.\')) {\n    // A binary exponent can appear with or with a \'.\'. If dotted, the\n    // binary exponent is required.\n    if (*s == \'p\' || *s == \'P\') {\n      if (!LangOpts.HexFloats)\n      else if (LangOpts.CPlusPlus17)\n        Diags.Report(TokLoc, diag::warn_cxx17_hex_literal);"}}
},
},
["warn_cxx20_alias_in_init_statement"]={
["warn_cxx20_alias_in_init_statement"]={
Line 1,369: Line 1,369:
[c]=A,
[c]=A,
[b]={md,1612659633,nd},
[b]={md,1612659633,nd},
[k]={{Rb,1812,"Parser::DeclGroupPtrTy Parser::ParseAliasDeclarationInInitStatement(DeclaratorContext Context, ParsedAttributes &Attrs) {\n  Diag(DeclStart, !getLangOpts().CPlusPlus23 ? diag::ext_alias_in_init_statement : diag::warn_cxx20_alias_in_init_statement) << SourceRange(DeclStart, DeclEnd);"}}
[k]={{Rb,2004,"Parser::DeclGroupPtrTy Parser::ParseAliasDeclarationInInitStatement(DeclaratorContext Context, ParsedAttributes &Attrs) {\n  Diag(DeclStart, !getLangOpts().CPlusPlus23 ? diag::ext_alias_in_init_statement : diag::warn_cxx20_alias_in_init_statement) << SourceRange(DeclStart, DeclEnd);"}}
},
},
["warn_cxx20_compat_aggregate_init_with_ctors"]={
["warn_cxx20_compat_aggregate_init_with_ctors"]={
Line 1,384: Line 1,384:
[c]=q,
[c]=q,
[b]={Ic,1576908663,Bc},
[b]={Ic,1576908663,Bc},
[k]={{fb,932,"/// Check whether the range of the initializer \\p ParentIList from element\n/// \\p Index onwards can be used to initialize an object of type \\p T. Update\n/// \\p Index to indicate how many elements of the list were consumed.\n///\n/// This also fills in \\p StructuredList, from element \\p StructuredIndex\n/// onwards, with the fully-braced, desugared form of the initialization.\nvoid InitListChecker::CheckImplicitInitList(const InitializedEntity &Entity, InitListExpr *ParentIList, QualType T, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (StructuredSubobjectInitList) {\n    if (!VerifyOnly && CXXRD && CXXRD->hasUserDeclaredConstructor()) {\n      SemaRef.Diag(StructuredSubobjectInitList->getBeginLoc(), diag::warn_cxx20_compat_aggregate_init_with_ctors) << StructuredSubobjectInitList->getSourceRange() << T;"},{fb,1056,"/// Check whether the initializer \\p IList (that was written with explicit\n/// braces) can be used to initialize an object of type \\p T.\n///\n/// This also fills in \\p StructuredList with the fully-braced, desugared\n/// form of the initialization.\nvoid InitListChecker::CheckExplicitInitList(const InitializedEntity &Entity, InitListExpr *IList, QualType &T, InitListExpr *StructuredList, bool TopLevelObject) {\n  if (!VerifyOnly) {\n    if (CXXRD && CXXRD->hasUserDeclaredConstructor()) {\n      if (!HasEquivCtor) {\n        SemaRef.Diag(IList->getBeginLoc(), diag::warn_cxx20_compat_aggregate_init_with_ctors) << IList->getSourceRange() << T;"}}
[k]={{fb,1163,"/// Check whether the range of the initializer \\p ParentIList from element\n/// \\p Index onwards can be used to initialize an object of type \\p T. Update\n/// \\p Index to indicate how many elements of the list were consumed.\n///\n/// This also fills in \\p StructuredList, from element \\p StructuredIndex\n/// onwards, with the fully-braced, desugared form of the initialization.\nvoid InitListChecker::CheckImplicitInitList(const InitializedEntity &Entity, InitListExpr *ParentIList, QualType T, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (StructuredSubobjectInitList) {\n    if (!VerifyOnly && CXXRD && CXXRD->hasUserDeclaredConstructor()) {\n      SemaRef.Diag(StructuredSubobjectInitList->getBeginLoc(), diag::warn_cxx20_compat_aggregate_init_with_ctors) << StructuredSubobjectInitList->getSourceRange() << T;"},{fb,1314,"/// Check whether the initializer \\p IList (that was written with explicit\n/// braces) can be used to initialize an object of type \\p T.\n///\n/// This also fills in \\p StructuredList with the fully-braced, desugared\n/// form of the initialization.\nvoid InitListChecker::CheckExplicitInitList(const InitializedEntity &Entity, InitListExpr *IList, QualType &T, InitListExpr *StructuredList, bool TopLevelObject) {\n  if (!VerifyOnly) {\n    if (CXXRD && CXXRD->hasUserDeclaredConstructor()) {\n      if (!HasEquivCtor) {\n        SemaRef.Diag(IList->getBeginLoc(), diag::warn_cxx20_compat_aggregate_init_with_ctors) << IList->getSourceRange() << T;"}}
},
},
["warn_cxx20_compat_auto_expr"]={
["warn_cxx20_compat_auto_expr"]={
Line 1,399: Line 1,399:
[c]=q,
[c]=q,
[b]={Rc,1620118562,Qc},
[b]={Rc,1620118562,Qc},
[k]={{Sb,1342,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (getLangOpts().CPlusPlus23) {\n      if (Ty->getAs<AutoType>())\n        Diag(TyBeginLoc, diag::warn_cxx20_compat_auto_expr) << FullRange;"}}
[k]={{Sb,1521,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  } else if (Deduced && !Deduced->isDeduced()) {\n    if (getLangOpts().CPlusPlus23) {\n      if (Ty->getAs<AutoType>())\n        Diag(TyBeginLoc, diag::warn_cxx20_compat_auto_expr) << FullRange;"}}
},
},
["warn_cxx20_compat_consteval"]={
["warn_cxx20_compat_consteval"]={
Line 1,414: Line 1,414:
[c]=A,
[c]=A,
[b]={"796ed03b8412",1560502580,"[C++20] add Basic consteval specifier"},
[b]={"796ed03b8412",1560502580,"[C++20] add Basic consteval specifier"},
[k]={{Rb,1127,"static void addConstevalToLambdaDeclSpecifier(Parser &P, SourceLocation ConstevalLoc, DeclSpec &DS) {\n  if (ConstevalLoc.isValid()) {\n    P.Diag(ConstevalLoc, diag::warn_cxx20_compat_consteval);"},{dc,1236,"/// 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 (getConstexprSpecifier() == ConstexprSpecKind::Constexpr)\n  else if (getConstexprSpecifier() == ConstexprSpecKind::Consteval)\n    S.Diag(ConstexprLoc, diag::warn_cxx20_compat_consteval);"}}
[k]={{Rb,1242,"static void addConstevalToLambdaDeclSpecifier(Parser &P, SourceLocation ConstevalLoc, DeclSpec &DS) {\n  if (ConstevalLoc.isValid()) {\n    P.Diag(ConstevalLoc, diag::warn_cxx20_compat_consteval);"},{dc,1382,"/// 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 (getConstexprSpecifier() == ConstexprSpecKind::Constexpr)\n  else if (getConstexprSpecifier() == ConstexprSpecKind::Consteval)\n    S.Diag(ConstexprLoc, diag::warn_cxx20_compat_consteval);"}}
},
},
["warn_cxx20_compat_consteval_if"]={
["warn_cxx20_compat_consteval_if"]={
Line 1,429: Line 1,429:
[c]=A,
[c]=A,
[b]={md,1612659633,nd},
[b]={md,1612659633,nd},
[k]={{Yb,1367,"/// ParseIfStatement\n///      if-statement: [C99 6.8.4.1]\n///        \'if\' \'(\' expression \')\' statement\n///        \'if\' \'(\' expression \')\' statement \'else\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement \'else\' statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement \'else\' statement\n///\nStmtResult Parser::ParseIfStatement(SourceLocation *TrailingElseLoc) {\n  if (Tok.is(tok::kw_constexpr)) {\n  } else {\n    if (Tok.is(tok::kw_consteval)) {\n      Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_consteval_if : diag::ext_consteval_if);"}}
[k]={{Yb,1479,"/// ParseIfStatement\n///      if-statement: [C99 6.8.4.1]\n///        \'if\' \'(\' expression \')\' statement\n///        \'if\' \'(\' expression \')\' statement \'else\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement \'else\' statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement \'else\' statement\n///\nStmtResult Parser::ParseIfStatement(SourceLocation *TrailingElseLoc) {\n  if (Tok.is(tok::kw_constexpr)) {\n  } else {\n    if (Tok.is(tok::kw_consteval)) {\n      Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_consteval_if : diag::ext_consteval_if);"}}
},
},
["warn_cxx20_compat_constexpr_body_invalid_stmt"]={
["warn_cxx20_compat_constexpr_body_invalid_stmt"]={
Line 1,444: Line 1,444:
[c]=q,
[c]=q,
[b]={Rc,1620118562,Qc},
[b]={Rc,1620118562,Qc},
[k]={{F,1945,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (Kind == Sema::CheckConstexprKind::CheckValid) {\n  } else if (Cxx2bLoc.isValid()) {\n    SemaRef.Diag(Cxx2bLoc, SemaRef.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt_cxx23) << isa<CXXConstructorDecl>(Dcl);"}}
[k]={{F,2288,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (Kind == Sema::CheckConstexprKind::CheckValid) {\n  } else if (Cxx2bLoc.isValid()) {\n    SemaRef.Diag(Cxx2bLoc, SemaRef.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt_cxx23) << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["warn_cxx20_compat_constexpr_var"]={
["warn_cxx20_compat_constexpr_var"]={
Line 1,459: Line 1,459:
[c]=q,
[c]=q,
[b]={Rc,1620118562,Qc},
[b]={Rc,1620118562,Qc},
[k]={{F,1658,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    case Decl::Decomposition: {\n      if (VD->isThisDeclarationADefinition()) {\n        if (VD->isStaticLocal()) {\n          if (Kind == Sema::CheckConstexprKind::Diagnose) {\n            SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_constexpr_var : diag::ext_constexpr_static_var) << isa<CXXConstructorDecl>(Dcl) << (VD->getTLSKind() == VarDecl::TLS_Dynamic);"},{F,1664,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    case Decl::Decomposition: {\n      if (VD->isThisDeclarationADefinition()) {\n        if (SemaRef.LangOpts.CPlusPlus23) {\n          CheckLiteralType(SemaRef, Kind, VD->getLocation(), VD->getType(), diag::warn_cxx20_compat_constexpr_var, isa<CXXConstructorDecl>(Dcl),"}}
[k]={{F,1934,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    case Decl::Decomposition: {\n      if (VD->isThisDeclarationADefinition()) {\n        if (VD->isStaticLocal()) {\n          if (Kind == Sema::CheckConstexprKind::Diagnose) {\n            SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_constexpr_var : diag::ext_constexpr_static_var) << isa<CXXConstructorDecl>(Dcl) << (VD->getTLSKind() == VarDecl::TLS_Dynamic);"},{F,1944,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    case Decl::Decomposition: {\n      if (VD->isThisDeclarationADefinition()) {\n        if (SemaRef.LangOpts.CPlusPlus23) {\n          CheckLiteralType(SemaRef, Kind, VD->getLocation(), VD->getType(), diag::warn_cxx20_compat_constexpr_var, isa<CXXConstructorDecl>(Dcl),"}}
},
},
["warn_cxx20_compat_constinit"]={
["warn_cxx20_compat_constinit"]={
Line 1,474: Line 1,474:
[c]=q,
[c]=q,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{dc,1238,"/// 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 (getConstexprSpecifier() == ConstexprSpecKind::Constexpr)\n  else if (getConstexprSpecifier() == ConstexprSpecKind::Consteval)\n  else if (getConstexprSpecifier() == ConstexprSpecKind::Constinit)\n    S.Diag(ConstexprLoc, diag::warn_cxx20_compat_constinit);"}}
[k]={{dc,1384,"/// 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 (getConstexprSpecifier() == ConstexprSpecKind::Constexpr)\n  else if (getConstexprSpecifier() == ConstexprSpecKind::Consteval)\n  else if (getConstexprSpecifier() == ConstexprSpecKind::Constinit)\n    S.Diag(ConstexprLoc, diag::warn_cxx20_compat_constinit);"}}
},
},
["warn_cxx20_compat_decl_attrs_on_lambda"]={
["warn_cxx20_compat_decl_attrs_on_lambda"]={
Line 1,489: Line 1,489:
[c]=A,
[c]=A,
[b]={md,1612659633,nd},
[b]={md,1612659633,nd},
[k]={{Rb,1232,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  // Implement WG21 P2173, which allows attributes immediately before the\n  // lambda declarator and applies them to the corresponding function operator\n  // or operator template declaration. We accept this as a conforming extension\n  // in all language modes that support lambdas.\n  if (isCXX11AttributeSpecifier()) {\n    Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_decl_attrs_on_lambda : diag::ext_decl_attrs_on_lambda) << Tok.getIdentifierInfo() << Tok.isRegularKeywordAttribute();"}}
[k]={{Rb,1367,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  // Implement WG21 P2173, which allows attributes immediately before the\n  // lambda declarator and applies them to the corresponding function operator\n  // or operator template declaration. We accept this as a conforming extension\n  // in all language modes that support lambdas.\n  if (isCXX11AttributeSpecifier()) {\n    Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_decl_attrs_on_lambda : diag::ext_decl_attrs_on_lambda) << Tok.getIdentifierInfo() << Tok.isRegularKeywordAttribute();"}}
},
},
["warn_cxx20_compat_explicit_bool"]={
["warn_cxx20_compat_explicit_bool"]={
Line 1,504: Line 1,504:
[c]=A,
[c]=A,
[b]={"1b3f1f443670",1587580095,"Rename warning identifiers from cxx2a to cxx20; NFC."},
[b]={"1b3f1f443670",1587580095,"Rename warning identifiers from cxx2a to cxx20; NFC."},
[k]={{Mb,3678,"/// 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_explicit: {\n      if (Tok.is(tok::l_paren)) {\n        if (getLangOpts().CPlusPlus20 || isExplicitBool() == TPResult::True) {\n        } else {\n          Diag(Tok.getLocation(), diag::warn_cxx20_compat_explicit_bool);"}}
[k]={{Mb,4063,"/// 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_explicit: {\n      if (Tok.is(tok::l_paren)) {\n        if (getLangOpts().CPlusPlus20 || isExplicitBool() == TPResult::True) {\n        } else {\n          Diag(Tok.getLocation(), diag::warn_cxx20_compat_explicit_bool);"}}
},
},
["warn_cxx20_compat_label_end_of_compound_statement"]={
["warn_cxx20_compat_label_end_of_compound_statement"]={
Line 1,519: Line 1,519:
[c]=A,
[c]=A,
[b]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl."},
[b]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl."},
[k]={{Yb,1010,"void Parser::DiagnoseLabelAtEndOfCompoundStatement() {\n  if (getLangOpts().CPlusPlus) {\n    Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_label_end_of_compound_statement : diag::ext_cxx_label_end_of_compound_statement);"}}
[k]={{Yb,1076,"void Parser::DiagnoseLabelAtEndOfCompoundStatement() {\n  if (getLangOpts().CPlusPlus) {\n    Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_label_end_of_compound_statement : diag::ext_cxx_label_end_of_compound_statement);"}}
},
},
["warn_cxx20_compat_operator_overload_static"]={
["warn_cxx20_compat_operator_overload_static"]={
Line 1,534: Line 1,534:
[c]=q,
[c]=q,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{F,13791,"/// CheckOverloadedOperatorDeclaration - Check whether the declaration\n/// of this overloaded operator is well-formed. If so, returns false;\n/// otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {\n  // C++ [over.oper]p7:\n  //  An operator function shall either be a member function or\n  //  be a non-member function and have at least one parameter\n  //  whose type is a class, a reference to a class, an enumeration,\n  //  or a reference to an enumeration.\n  // Note: Before C++23, a member function could not be static. The only member\n  //      function allowed to be static is the call operator function.\n  if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {\n    if (MethodDecl->isStatic()) {\n      if (Op == OO_Call || Op == OO_Subscript)\n        Diag(FnDecl->getLocation(), (LangOpts.CPlusPlus23 ? diag::warn_cxx20_compat_operator_overload_static : diag::ext_operator_overload_static)) << FnDecl;"}}
[k]={{F,16151,"/// CheckOverloadedOperatorDeclaration - Check whether the declaration\n/// of this overloaded operator is well-formed. If so, returns false;\n/// otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {\n  // C++ [over.oper]p7:\n  //  An operator function shall either be a member function or\n  //  be a non-member function and have at least one parameter\n  //  whose type is a class, a reference to a class, an enumeration,\n  //  or a reference to an enumeration.\n  // Note: Before C++23, a member function could not be static. The only member\n  //      function allowed to be static is the call operator function.\n  if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {\n    if (MethodDecl->isStatic()) {\n      if (Op == OO_Call || Op == OO_Subscript)\n        Diag(FnDecl->getLocation(), (LangOpts.CPlusPlus23 ? diag::warn_cxx20_compat_operator_overload_static : diag::ext_operator_overload_static)) << FnDecl;"}}
},
},
["warn_cxx20_compat_size_t_suffix"]={
["warn_cxx20_compat_size_t_suffix"]={
Line 1,549: Line 1,549:
[c]=u,
[c]=u,
[b]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals"},
[b]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals"},
[k]={{"clang/lib/Lex/PPExpressions.cpp",310,"/// 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    // \'z/uz\' literals are a C++23 feature.\n    if (Literal.isSizeT)\n      PP.Diag(PeekTok, PP.getLangOpts().CPlusPlus ? PP.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_size_t_suffix : diag::ext_cxx23_size_t_suffix : diag::err_cxx23_size_t_suffix);"},{M,3546,"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    // \'z/uz\' literals are a C++23 feature.\n    if (Literal.isSizeT)\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus ? getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_size_t_suffix : diag::ext_cxx23_size_t_suffix : diag::err_cxx23_size_t_suffix);"}}
[k]={{"clang/lib/Lex/PPExpressions.cpp",331,"/// 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    // \'z/uz\' literals are a C++23 feature.\n    if (Literal.isSizeT)\n      PP.Diag(PeekTok, PP.getLangOpts().CPlusPlus ? PP.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_size_t_suffix : diag::ext_cxx23_size_t_suffix : diag::err_cxx23_size_t_suffix);"},{M,4058,"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    // \'z/uz\' literals are a C++23 feature.\n    if (Literal.isSizeT)\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus ? getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_size_t_suffix : diag::ext_cxx23_size_t_suffix : diag::err_cxx23_size_t_suffix);"}}
},
},
["warn_cxx20_compat_spaceship"]={
["warn_cxx20_compat_spaceship"]={
Line 1,563: Line 1,563:
[c]=N,
[c]=N,
[b]={"1b3f1f443670",1587580095,"Rename warning identifiers from cxx2a to cxx20; NFC."},
[b]={"1b3f1f443670",1587580095,"Rename warning identifiers from cxx2a to cxx20; NFC."},
[k]={{vb,3860,"LexStart:\n  case \'<\':\n    if (ParsingFilename) {\n    } else if (Char == \'<\') {\n    } else if (Char == \'=\') {\n      if (After == \'>\') {\n        // Suggest adding a space between the \'<=\' and the \'>\' to avoid a\n        // change in semantics if this turns up in C++ <=17 mode.\n        if (LangOpts.CPlusPlus && !isLexingRawMode()) {\n          Diag(BufferPtr, diag::warn_cxx20_compat_spaceship) << FixItHint::CreateInsertion(getSourceLocation(CurPtr + SizeTmp, SizeTmp2), \" \");"}}
[k]={{vb,4129,"LexStart:\n  case \'<\':\n    if (ParsingFilename) {\n    } else if (Char == \'<\') {\n    } else if (Char == \'=\') {\n      if (After == \'>\') {\n        // Suggest adding a space between the \'<=\' and the \'>\' to avoid a\n        // change in semantics if this turns up in C++ <=17 mode.\n        if (LangOpts.CPlusPlus && !isLexingRawMode()) {\n          Diag(BufferPtr, diag::warn_cxx20_compat_spaceship) << FixItHint::CreateInsertion(getSourceLocation(CurPtr + SizeTmp, SizeTmp2), \" \");"}}
},
},
["warn_cxx20_compat_static_lambda"]={
["warn_cxx20_compat_static_lambda"]={
Line 1,578: Line 1,578:
[c]=A,
[c]=A,
[b]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[b]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()"},
[k]={{Rb,1107,"static void addStaticToLambdaDeclSpecifier(Parser &P, SourceLocation StaticLoc, DeclSpec &DS) {\n  if (StaticLoc.isValid()) {\n    P.Diag(StaticLoc, !P.getLangOpts().CPlusPlus23 ? diag::err_static_lambda : diag::warn_cxx20_compat_static_lambda);"}}
[k]={{Rb,1211,"static void addStaticToLambdaDeclSpecifier(Parser &P, SourceLocation StaticLoc, DeclSpec &DS) {\n  if (StaticLoc.isValid()) {\n    P.Diag(StaticLoc, !P.getLangOpts().CPlusPlus23 ? diag::err_static_lambda : diag::warn_cxx20_compat_static_lambda);"}}
},
},
["warn_cxx20_compat_use_of_unaddressable_function"]={
["warn_cxx20_compat_use_of_unaddressable_function"]={
Line 1,592: Line 1,592:
[c]=q,
[c]=q,
[b]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[b]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[k]={{M,18795,"/// Check for operands with placeholder types and complain if found.\n/// Returns ExprError() if there was an error and no recovery was possible.\nExprResult Sema::CheckPlaceholderExpr(Expr *E) {\n  case BuiltinType::BuiltinFn: {\n    if (DRE) {\n      if (Context.BuiltinInfo.isInStdNamespace(BuiltinID)) {\n        Diag(E->getBeginLoc(), getLangOpts().CPlusPlus20 ? diag::err_use_of_unaddressable_function : diag::warn_cxx20_compat_use_of_unaddressable_function);"}}
[k]={{M,21621,"/// Check for operands with placeholder types and complain if found.\n/// Returns ExprError() if there was an error and no recovery was possible.\nExprResult Sema::CheckPlaceholderExpr(Expr *E) {\n  case BuiltinType::BuiltinFn: {\n    if (DRE) {\n      if (Context.BuiltinInfo.isInStdNamespace(BuiltinID)) {\n        Diag(E->getBeginLoc(), getLangOpts().CPlusPlus20 ? diag::err_use_of_unaddressable_function : diag::warn_cxx20_compat_use_of_unaddressable_function);"}}
},
},
["warn_cxx20_compat_utf8_string"]={
["warn_cxx20_compat_utf8_string"]={
Line 1,607: Line 1,607:
[c]=q,
[c]=q,
[b]={Ic,1576908663,Bc},
[b]={Ic,1576908663,Bc},
[k]={{M,1709,"/// ActOnStringLiteral - The specified tokens were lexed as pasted string\n/// fragments (e.g. \"foo\" \"bar\" L\"baz\").  The result string has to handle string\n/// concatenation ([C99 5.1.1.2, translation phase #6]), so it may come from\n/// multiple tokens.  However, the common case is that StringToks points to one\n/// string.\n///\nExprResult Sema::ActOnStringLiteral(ArrayRef<Token> StringToks, Scope *UDLScope) {\n  // Warn on initializing an array of char from a u8 string literal; this\n  // becomes ill-formed in C++2a.\n  if (getLangOpts().CPlusPlus && !getLangOpts().CPlusPlus20 && !getLangOpts().Char8 && Kind == StringLiteral::UTF8) {\n    Diag(StringTokLocs.front(), diag::warn_cxx20_compat_utf8_string);"}}
[k]={{M,1991,"/// ActOnStringLiteral - The specified tokens were lexed as pasted string\n/// fragments (e.g. \"foo\" \"bar\" L\"baz\").  The result string has to handle string\n/// concatenation ([C99 5.1.1.2, translation phase #6]), so it may come from\n/// multiple tokens.  However, the common case is that StringToks points to one\n/// string.\n///\nExprResult Sema::ActOnStringLiteral(ArrayRef<Token> StringToks, Scope *UDLScope) {\n  // Warn on initializing an array of char from a u8 string literal; this\n  // becomes ill-formed in C++2a.\n  if (getLangOpts().CPlusPlus && !getLangOpts().CPlusPlus20 && !getLangOpts().Char8 && Kind == StringLiteral::UTF8) {\n    Diag(StringTokLocs.front(), diag::warn_cxx20_compat_utf8_string);"}}
},
},
["warn_cxx20_keyword"]={
["warn_cxx20_keyword"]={
Line 1,622: Line 1,622:
[c]=N,
[c]=N,
[b]={"1b3f1f443670",1587580095,"Rename warning identifiers from cxx2a to cxx20; NFC."},
[b]={"1b3f1f443670",1587580095,"Rename warning identifiers from cxx2a to cxx20; NFC."},
[k]={{"clang/lib/Basic/IdentifierTable.cpp",876,"#include \"clang/Basic/TokenKinds.def\"\n  if (LangOpts.CPlusPlus) {\n    // char8_t is not modeled as a CXX20_KEYWORD because it\'s not\n    // unconditionally enabled in C++20 mode. (It can be disabled\n    // by -fno-char8_t.)\n    if (((Flags & KEYCXX20) == KEYCXX20) || ((Flags & CHAR8SUPPORT) == CHAR8SUPPORT))\n      return diag::warn_cxx20_keyword;"}}
[k]={{"clang/lib/Basic/IdentifierTable.cpp",914,"#include \"clang/Basic/TokenKinds.def\"\n  if (LangOpts.CPlusPlus) {\n    // char8_t is not modeled as a CXX20_KEYWORD because it\'s not\n    // unconditionally enabled in C++20 mode. (It can be disabled\n    // by -fno-char8_t.)\n    if (((Flags & KEYCXX20) == KEYCXX20) || ((Flags & CHAR8SUPPORT) == CHAR8SUPPORT))\n      return diag::warn_cxx20_keyword;"}}
},
},
["warn_cxx23_compat_defaulted_comparison_constexpr_mismatch"]={
["warn_cxx23_compat_defaulted_comparison_constexpr_mismatch"]={
Line 1,637: Line 1,637:
[c]=q,
[c]=q,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{F,7634,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // C++2a [dcl.fct.def.default]p3 [P2002R0]:\n  //  An explicitly-defaulted function that is not defined as deleted may be\n  //  declared constexpr or consteval only if it is constexpr-compatible.\n  // C++2a [class.compare.default]p3 [P2002R0]:\n  //  A defaulted comparison function is constexpr-compatible if it satisfies\n  //  the requirements for a constexpr function [...]\n  // The only relevant requirements are that the parameter and return types are\n  // literal types. The remaining conditions are checked by the analyzer.\n  //\n  // We support P2448R2 in language modes earlier than C++23 as an extension.\n  // The concept of constexpr-compatible was removed.\n  // C++23 [dcl.fct.def.default]p3 [P2448R2]\n  //  A function explicitly defaulted on its first declaration is implicitly\n  //  inline, and is implicitly constexpr if it is constexpr-suitable.\n  // C++23 [dcl.constexpr]p3\n  //  A function is constexpr-suitable if\n  //    - it is not a coroutine, and\n  //    - if the function is a constructor or destructor, its class does not\n  //      have any virtual base classes.\n  if (FD->isConstexpr()) {\n    if (CheckConstexprReturnType(*this, FD, CheckConstexprKind::Diagnose) && CheckConstexprParameterTypes(*this, FD, CheckConstexprKind::Diagnose) && !Info.Constexpr) {\n      Diag(FD->getBeginLoc(), getLangOpts().CPlusPlus23 ? diag::warn_cxx23_compat_defaulted_comparison_constexpr_mismatch : diag::ext_defaulted_comparison_constexpr_mismatch) << FD->isImplicit() << (int)DCK << FD->isConsteval();"}}
[k]={{F,8967,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // C++2a [dcl.fct.def.default]p3 [P2002R0]:\n  //  An explicitly-defaulted function that is not defined as deleted may be\n  //  declared constexpr or consteval only if it is constexpr-compatible.\n  // C++2a [class.compare.default]p3 [P2002R0]:\n  //  A defaulted comparison function is constexpr-compatible if it satisfies\n  //  the requirements for a constexpr function [...]\n  // The only relevant requirements are that the parameter and return types are\n  // literal types. The remaining conditions are checked by the analyzer.\n  //\n  // We support P2448R2 in language modes earlier than C++23 as an extension.\n  // The concept of constexpr-compatible was removed.\n  // C++23 [dcl.fct.def.default]p3 [P2448R2]\n  //  A function explicitly defaulted on its first declaration is implicitly\n  //  inline, and is implicitly constexpr if it is constexpr-suitable.\n  // C++23 [dcl.constexpr]p3\n  //  A function is constexpr-suitable if\n  //    - it is not a coroutine, and\n  //    - if the function is a constructor or destructor, its class does not\n  //      have any virtual base classes.\n  if (FD->isConstexpr()) {\n    if (CheckConstexprReturnType(*this, FD, CheckConstexprKind::Diagnose) && CheckConstexprParameterTypes(*this, FD, CheckConstexprKind::Diagnose) && !Info.Constexpr) {\n      Diag(FD->getBeginLoc(), getLangOpts().CPlusPlus23 ? diag::warn_cxx23_compat_defaulted_comparison_constexpr_mismatch : diag::ext_defaulted_comparison_constexpr_mismatch) << FD->isImplicit() << (int)DCK << FD->isConsteval();"}}
},
},
["warn_cxx23_compat_pp_directive"]={
["warn_cxx23_compat_pp_directive"]={
Line 1,652: Line 1,652:
[c]=N,
[c]=N,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{pd,700,"/// 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          DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive : diag::ext_cxx23_pp_directive;"},{pd,3162,"/// 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      DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive : diag::ext_cxx23_pp_directive;"}}
[k]={{pd,768,"/// 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          DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive : diag::ext_cxx23_pp_directive;"},{pd,3454,"/// 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      DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive : diag::ext_cxx23_pp_directive;"}}
},
},
["warn_cxx23_compat_warning_directive"]={
["warn_cxx23_compat_warning_directive"]={
Line 1,667: Line 1,667:
[c]=N,
[c]=N,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{pd,1159,"/// 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        Diag(Result, LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_warning_directive : diag::ext_pp_warning_directive) << /*C++23*/ 1;"}}
[k]={{pd,1277,"/// 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        Diag(Result, LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_warning_directive : diag::ext_pp_warning_directive) << /*C++23*/ 1;"}}
},
},
["warn_cxx23_delimited_escape_sequence"]={
["warn_cxx23_delimited_escape_sequence"]={
Line 1,682: Line 1,682:
[c]=N,
[c]=N,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{vb,3099,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (Delimited && PP) {\n    Diag(SlashLoc, PP->getLangOpts().CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*delimited*/ 0 << (PP->getLangOpts().CPlusPlus ? 1 : 0);"},{vb,3174,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (Diagnose && Match)\n    Diag(SlashLoc, PP->getLangOpts().CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*named*/ 1 << (PP->getLangOpts().CPlusPlus ? 1 : 0);"},{Wc,322,"/// ProcessCharEscape - Parse a standard C escape sequence, which can occur in\n/// either a character or a string literal.\nstatic unsigned ProcessCharEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, bool &HadError, FullSourceLoc Loc, unsigned CharWidth, DiagnosticsEngine *Diags, const LangOptions &Features, StringLiteralEvalMethod EvalMethod) {\n  if (Delimited && Diags) {\n    if (!EndDelimiterFound)\n    else if (!HadError) {\n      Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, Features.CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*delimited*/ 0 << (Features.CPlusPlus ? 1 : 0);"},{Wc,585,"/// 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  if ((IsDelimitedEscapeSequence || IsNamedEscapeSequence) && Diags)\n    Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, Features.CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << (IsNamedEscapeSequence ? 1 : 0) << (Features.CPlusPlus ? 1 : 0);"}}
[k]={{vb,3353,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (Delimited && PP) {\n    Diag(SlashLoc, PP->getLangOpts().CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*delimited*/ 0 << (PP->getLangOpts().CPlusPlus ? 1 : 0);"},{vb,3441,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (Diagnose && Match)\n    Diag(SlashLoc, PP->getLangOpts().CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*named*/ 1 << (PP->getLangOpts().CPlusPlus ? 1 : 0);"},{Wc,356,"/// ProcessCharEscape - Parse a standard C escape sequence, which can occur in\n/// either a character or a string literal.\nstatic unsigned ProcessCharEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, bool &HadError, FullSourceLoc Loc, unsigned CharWidth, DiagnosticsEngine *Diags, const LangOptions &Features, StringLiteralEvalMethod EvalMethod) {\n  if (Delimited && Diags) {\n    if (!EndDelimiterFound)\n    else if (!HadError) {\n      Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, Features.CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*delimited*/ 0 << (Features.CPlusPlus ? 1 : 0);"},{Wc,699,"/// 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  if ((IsDelimitedEscapeSequence || IsNamedEscapeSequence) && Diags)\n    Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, Features.CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << (IsNamedEscapeSequence ? 1 : 0) << (Features.CPlusPlus ? 1 : 0);"}}
},
},
["warn_cxx98_compat_alias_declaration"]={
["warn_cxx98_compat_alias_declaration"]={
Line 1,697: Line 1,697:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{db,766,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_alias_declaration : diag::ext_alias_declaration);"}}
[k]={{db,878,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_alias_declaration : diag::ext_alias_declaration);"}}
},
},
["warn_cxx98_compat_alignas"]={
["warn_cxx98_compat_alignas"]={
Line 1,712: Line 1,712:
[c]=A,
[c]=A,
[b]={"f679b5b6a6cb",1318625307,"-Wc++98-compat: warn on C++11 attributes and alignas."},
[b]={"f679b5b6a6cb",1318625307,"-Wc++98-compat: warn on C++11 attributes and alignas."},
[k]={{db,3926,"/// 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    else\n      Diag(Tok.getLocation(), diag::warn_cxx98_compat_alignas);"}}
[k]={{db,4506,"/// 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    else\n      Diag(Tok.getLocation(), diag::warn_cxx98_compat_alignas);"}}
},
},
["warn_cxx98_compat_alignof"]={
["warn_cxx98_compat_alignof"]={
Line 1,727: Line 1,727:
[c]=A,
[c]=A,
[b]={xc,1318892780,wc},
[b]={xc,1318892780,wc},
[k]={{qc,2252,"/// 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    Diag(OpTok, diag::warn_cxx98_compat_alignof);"}}
[k]={{qc,2495,"/// 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    Diag(OpTok, diag::warn_cxx98_compat_alignof);"}}
},
},
["warn_cxx98_compat_array_size_conversion"]={
["warn_cxx98_compat_array_size_conversion"]={
Line 1,742: Line 1,742:
[c]=q,
[c]=q,
[b]={Wb,1318970984,Vb},
[b]={Wb,1318970984,Vb},
[k]={{Sb,1845,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n      if (!ConvertedSize.isInvalid() && (*ArraySize)->getType()->getAs<RecordType>())\n        Diag(StartLoc, diag::warn_cxx98_compat_array_size_conversion) << (*ArraySize)->getType() << 0 << \"\'size_t\'\";"},{Sb,1866,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        SemaDiagnosticBuilder diagnoseConversion(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_array_size_conversion : diag::ext_array_size_conversion) << T << ConvTy->isEnumeralType() << ConvTy; }"}}
[k]={{Sb,2135,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n      if (!ConvertedSize.isInvalid() && (*ArraySize)->getType()->getAs<RecordType>())\n        Diag(StartLoc, diag::warn_cxx98_compat_array_size_conversion) << (*ArraySize)->getType() << 0 << \"\'size_t\'\";"},{Sb,2186,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        SemaDiagnosticBuilder diagnoseConversion(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_array_size_conversion : diag::ext_array_size_conversion) << T << ConvTy->isEnumeralType() << ConvTy; }"}}
},
},
["warn_cxx98_compat_attribute"]={
["warn_cxx98_compat_attribute"]={
Line 1,757: Line 1,757:
[c]=A,
[c]=A,
[b]={"f679b5b6a6cb",1318625307,"-Wc++98-compat: warn on C++11 attributes and alignas."},
[b]={"f679b5b6a6cb",1318625307,"-Wc++98-compat: warn on C++11 attributes and alignas."},
[k]={{db,3943,"/// 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 (getLangOpts().CPlusPlus) {\n    Diag(OpenLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_attribute : diag::warn_ext_cxx11_attributes);"}}
[k]={{db,4524,"/// 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 (getLangOpts().CPlusPlus) {\n    Diag(OpenLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_attribute : diag::warn_ext_cxx11_attributes);"}}
},
},
["warn_cxx98_compat_auto_type_specifier"]={
["warn_cxx98_compat_auto_type_specifier"]={
Line 1,772: Line 1,772:
[c]=q,
[c]=q,
[b]={"e41fac231c9d",1318657321,"Add -Wc++98-compat warning for deduced \'auto\' type specifier."},
[b]={"e41fac231c9d",1318657321,"Add -Wc++98-compat warning for deduced \'auto\' type specifier."},
[k]={{Cb,3286,"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    } else if (Auto && D.getContext() != DeclaratorContext::LambdaExpr) {\n      SemaRef.Diag(AutoRange.getBegin(), D.getContext() == DeclaratorContext::LambdaExprParameter ? diag::warn_cxx11_compat_generic_lambda : IsDeducedReturnType ? diag::warn_cxx11_compat_deduced_return_type : diag::warn_cxx98_compat_auto_type_specifier) << AutoRange;"}}
[k]={{Cb,3751,"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    } else if (Auto && D.getContext() != DeclaratorContext::LambdaExpr) {\n      SemaRef.Diag(AutoRange.getBegin(), D.getContext() == DeclaratorContext::LambdaExprParameter ? diag::warn_cxx11_compat_generic_lambda : IsDeducedReturnType ? diag::warn_cxx11_compat_deduced_return_type : diag::warn_cxx98_compat_auto_type_specifier) << AutoRange;"}}
},
},
["warn_cxx98_compat_cast_fn_obj"]={
["warn_cxx98_compat_cast_fn_obj"]={
Line 1,787: Line 1,787:
[c]=q,
[c]=q,
[b]={Wb,1318970984,Vb},
[b]={Wb,1318970984,Vb},
[k]={{"clang/lib/Sema/SemaCast.cpp",2216,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (SrcType->isFunctionPointerType()) {\n    Self.Diag(OpRange.getBegin(), Self.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_cast_fn_obj : diag::ext_cast_fn_obj) << OpRange;"},{"clang/lib/Sema/SemaCast.cpp",2222,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (DestType->isFunctionPointerType()) {\n    Self.Diag(OpRange.getBegin(), Self.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_cast_fn_obj : diag::ext_cast_fn_obj) << OpRange;"}}
[k]={{"clang/lib/Sema/SemaCast.cpp",2559,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (SrcType->isFunctionPointerType()) {\n    Self.Diag(OpRange.getBegin(), Self.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_cast_fn_obj : diag::ext_cast_fn_obj) << OpRange;"},{"clang/lib/Sema/SemaCast.cpp",2568,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  if (DestType->isFunctionPointerType()) {\n    Self.Diag(OpRange.getBegin(), Self.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_cast_fn_obj : diag::ext_cast_fn_obj) << OpRange;"}}
},
},
["warn_cxx98_compat_constexpr"]={
["warn_cxx98_compat_constexpr"]={
Line 1,802: Line 1,802:
[c]=q,
[c]=q,
[b]={xc,1318892780,wc},
[b]={xc,1318892780,wc},
[k]={{dc,1234,"/// 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 (getConstexprSpecifier() == ConstexprSpecKind::Constexpr)\n    S.Diag(ConstexprLoc, diag::warn_cxx98_compat_constexpr);"}}
[k]={{dc,1380,"/// 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 (getConstexprSpecifier() == ConstexprSpecKind::Constexpr)\n    S.Diag(ConstexprLoc, diag::warn_cxx98_compat_constexpr);"}}
},
},
["warn_cxx98_compat_ctor_list_init"]={
["warn_cxx98_compat_ctor_list_init"]={
Line 1,817: Line 1,817:
[c]=q,
[c]=q,
[b]={"2b349aee5b6f",1334818680,"Add missing -Wc++98-compat warnings for initializer list initializations which"},
[b]={"2b349aee5b6f",1334818680,"Add missing -Wc++98-compat warnings for initializer list initializations which"},
[k]={{fb,7709,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    case SK_ConstructorInitializationFromList: {\n      S.Diag(InitList->getExprLoc(), diag::warn_cxx98_compat_ctor_list_init) << InitList->getSourceRange();"}}
[k]={{fb,9060,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    case SK_ConstructorInitializationFromList: {\n      S.Diag(InitList->getExprLoc(), diag::warn_cxx98_compat_ctor_list_init) << InitList->getSourceRange();"}}
},
},
["warn_cxx98_compat_decltype"]={
["warn_cxx98_compat_decltype"]={
Line 1,832: Line 1,832:
[c]=A,
[c]=A,
[b]={xc,1318892780,wc},
[b]={xc,1318892780,wc},
[k]={{db,945,"/// ParseDecltypeSpecifier - Parse a C++11 decltype specifier.\n///\n/// \'decltype\' ( expression )\n/// \'decltype\' ( \'auto\' )      [C++1y]\n///\nSourceLocation Parser::ParseDecltypeSpecifier(DeclSpec &DS) {\n  if (Tok.is(tok::annot_decltype)) {\n  } else {\n    if (Tok.getIdentifierInfo()->isStr(\"decltype\"))\n      Diag(Tok, diag::warn_cxx98_compat_decltype);"}}
[k]={{db,1086,"/// ParseDecltypeSpecifier - Parse a C++11 decltype specifier.\n///\n/// \'decltype\' ( expression )\n/// \'decltype\' ( \'auto\' )      [C++1y]\n///\nSourceLocation Parser::ParseDecltypeSpecifier(DeclSpec &DS) {\n  if (Tok.is(tok::annot_decltype)) {\n  } else {\n    if (Tok.getIdentifierInfo()->isStr(\"decltype\"))\n      Diag(Tok, diag::warn_cxx98_compat_decltype);"}}
},
},
["warn_cxx98_compat_defaulted_deleted_function"]={
["warn_cxx98_compat_defaulted_deleted_function"]={
Line 1,847: Line 1,847:
[c]=A,
[c]=A,
[b]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select."},
[b]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select."},
[k]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",59,"/// ParseCXXInlineMethodDef - We parsed and verified that the specified\n/// Declarator is a well formed C++ inline method definition. Now lex its body\n/// and store its tokens for parsing after the C++ class is complete.\nNamedDecl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS, const ParsedAttributesView &AccessAttrs, ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, const VirtSpecifiers &VS, SourceLocation PureSpecLoc) {\n  if (TryConsumeToken(tok::equal)) {\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 1 /* deleted */;"},{"clang/lib/Parse/ParseCXXInlineMethods.cpp",66,"/// ParseCXXInlineMethodDef - We parsed and verified that the specified\n/// Declarator is a well formed C++ inline method definition. Now lex its body\n/// and store its tokens for parsing after the C++ class is complete.\nNamedDecl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS, const ParsedAttributesView &AccessAttrs, ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, const VirtSpecifiers &VS, SourceLocation PureSpecLoc) {\n  if (TryConsumeToken(tok::equal)) {\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n    } else if (TryConsumeToken(tok::kw_default, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 0 /* defaulted */;"},{tc,1247,"/// 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  if (TryConsumeToken(tok::equal)) {\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 1 /* deleted */;"},{tc,1250,"/// 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  if (TryConsumeToken(tok::equal)) {\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n    } else if (TryConsumeToken(tok::kw_default, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 0 /* defaulted */;"}}
[k]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",71,"/// ParseCXXInlineMethodDef - We parsed and verified that the specified\n/// Declarator is a well formed C++ inline method definition. Now lex its body\n/// and store its tokens for parsing after the C++ class is complete.\nNamedDecl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS, const ParsedAttributesView &AccessAttrs, ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, const VirtSpecifiers &VS, SourceLocation PureSpecLoc) {\n  if (TryConsumeToken(tok::equal)) {\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 1 /* deleted */;"},{"clang/lib/Parse/ParseCXXInlineMethods.cpp",81,"/// ParseCXXInlineMethodDef - We parsed and verified that the specified\n/// Declarator is a well formed C++ inline method definition. Now lex its body\n/// and store its tokens for parsing after the C++ class is complete.\nNamedDecl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS, const ParsedAttributesView &AccessAttrs, ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, const VirtSpecifiers &VS, SourceLocation PureSpecLoc) {\n  if (TryConsumeToken(tok::equal)) {\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n    } else if (TryConsumeToken(tok::kw_default, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 0 /* defaulted */;"},{tc,1367,"/// 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  if (TryConsumeToken(tok::equal)) {\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 1 /* deleted */;"},{tc,1373,"/// 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  if (TryConsumeToken(tok::equal)) {\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n    } else if (TryConsumeToken(tok::kw_default, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 0 /* defaulted */;"}}
},
},
["warn_cxx98_compat_delegating_ctor"]={
["warn_cxx98_compat_delegating_ctor"]={
Line 1,862: Line 1,862:
[c]=q,
[c]=q,
[b]={Wb,1318970984,Vb},
[b]={Wb,1318970984,Vb},
[k]={{F,3931,"MemInitResult Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init, CXXRecordDecl *ClassDecl) {\n  Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);"}}
[k]={{F,4622,"MemInitResult Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init, CXXRecordDecl *ClassDecl) {\n  Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);"}}
},
},
["warn_cxx98_compat_empty_fnmacro_arg"]={
["warn_cxx98_compat_empty_fnmacro_arg"]={
Line 1,877: Line 1,877:
[c]=N,
[c]=N,
[b]={Vc,1318641536,Tc},
[b]={Vc,1318641536,Tc},
[k]={{"clang/lib/Lex/PPMacroExpansion.cpp",851,"/// 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  while (Tok.isNot(tok::r_paren)) {\n    // Empty arguments are standard in C99 and C++0x, and are supported as an\n    // extension in other modes.\n    if (ArgTokens.size() == ArgTokenStart && !getLangOpts().C99)\n      Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_empty_fnmacro_arg : diag::ext_empty_fnmacro_arg);"}}
[k]={{"clang/lib/Lex/PPMacroExpansion.cpp",904,"/// 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  while (Tok.isNot(tok::r_paren)) {\n    // Empty arguments are standard in C99 and C++0x, and are supported as an\n    // extension in other modes.\n    if (ArgTokens.size() == ArgTokenStart && !getLangOpts().C99)\n      Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_empty_fnmacro_arg : diag::ext_empty_fnmacro_arg);"}}
},
},
["warn_cxx98_compat_empty_scalar_initializer"]={
["warn_cxx98_compat_empty_scalar_initializer"]={
Line 1,892: Line 1,892:
[c]=q,
[c]=q,
[b]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2."},
[b]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2."},
[k]={{fb,1306,"void InitListChecker::CheckScalarType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (Index >= IList->getNumInits()) {\n    if (!VerifyOnly) {\n      if (SemaRef.getLangOpts().CPlusPlus) {\n        if (DeclType->isSizelessBuiltinType())\n        else\n          SemaRef.Diag(IList->getBeginLoc(), SemaRef.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_empty_scalar_initializer : diag::err_empty_scalar_initializer) << IList->getSourceRange();"}}
[k]={{fb,1638,"void InitListChecker::CheckScalarType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (Index >= IList->getNumInits()) {\n    if (!VerifyOnly) {\n      if (SemaRef.getLangOpts().CPlusPlus) {\n        if (DeclType->isSizelessBuiltinType())\n        else\n          SemaRef.Diag(IList->getBeginLoc(), SemaRef.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_empty_scalar_initializer : diag::err_empty_scalar_initializer) << IList->getSourceRange();"}}
},
},
["warn_cxx98_compat_empty_sizeless_initializer"]={
["warn_cxx98_compat_empty_sizeless_initializer"]={
Line 1,907: Line 1,907:
[c]=q,
[c]=q,
[b]={Ic,1576908663,Bc},
[b]={Ic,1576908663,Bc},
[k]={{fb,1304,"void InitListChecker::CheckScalarType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (Index >= IList->getNumInits()) {\n    if (!VerifyOnly) {\n      if (SemaRef.getLangOpts().CPlusPlus) {\n        if (DeclType->isSizelessBuiltinType())\n          SemaRef.Diag(IList->getBeginLoc(), SemaRef.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_empty_sizeless_initializer : diag::err_empty_sizeless_initializer) << DeclType << IList->getSourceRange();"}}
[k]={{fb,1632,"void InitListChecker::CheckScalarType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (Index >= IList->getNumInits()) {\n    if (!VerifyOnly) {\n      if (SemaRef.getLangOpts().CPlusPlus) {\n        if (DeclType->isSizelessBuiltinType())\n          SemaRef.Diag(IList->getBeginLoc(), SemaRef.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_empty_sizeless_initializer : diag::err_empty_sizeless_initializer) << DeclType << IList->getSourceRange();"}}
},
},
["warn_cxx98_compat_enum_fixed_underlying_type"]={
["warn_cxx98_compat_enum_fixed_underlying_type"]={
Line 1,922: Line 1,922:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{Mb,4479,"/// ParseEnumSpecifier\n///      enum-specifier: [C99 6.7.2.2]\n///        \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU]  \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\' attributes[opt]\n/// [MS]    \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\'\n///        \'enum\' identifier\n/// [GNU]  \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\'  \'}\'\n///\n///      enum-head: [C++11]\n///        enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n///        enum-key attribute-specifier-seq[opt] nested-name-specifier\n///            identifier enum-base[opt]\n///\n///      enum-key: [C++11]\n///        \'enum\'\n///        \'enum\' \'class\'\n///        \'enum\' \'struct\'\n///\n///      enum-base: [C++11]\n///        \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++]  \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Parse the fixed underlying type.\n  if (Tok.is(tok::colon)) {\n    if (CanBeBitfield && !isEnumBase(CanBeOpaqueEnumDeclaration)) {\n    } else if (CanHaveEnumBase || !ColonIsSacred) {\n      if (!getLangOpts().ObjC) {\n        if (getLangOpts().CPlusPlus11)\n          Diag(ColonLoc, diag::warn_cxx98_compat_enum_fixed_underlying_type) << BaseRange;"}}
[k]={{Mb,4940,"/// ParseEnumSpecifier\n///      enum-specifier: [C99 6.7.2.2]\n///        \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU]  \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\' attributes[opt]\n/// [MS]    \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\'\n///        \'enum\' identifier\n/// [GNU]  \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\'  \'}\'\n///\n///      enum-head: [C++11]\n///        enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n///        enum-key attribute-specifier-seq[opt] nested-name-specifier\n///            identifier enum-base[opt]\n///\n///      enum-key: [C++11]\n///        \'enum\'\n///        \'enum\' \'class\'\n///        \'enum\' \'struct\'\n///\n///      enum-base: [C++11]\n///        \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++]  \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n  // Parse the fixed underlying type.\n  if (Tok.is(tok::colon)) {\n    if (CanBeBitfield && !isEnumBase(CanBeOpaqueEnumDeclaration)) {\n    } else if (CanHaveEnumBase || !ColonIsSacred) {\n      if (!getLangOpts().ObjC) {\n        if (getLangOpts().CPlusPlus11)\n          Diag(ColonLoc, diag::warn_cxx98_compat_enum_fixed_underlying_type) << BaseRange;"}}
},
},
["warn_cxx98_compat_enum_friend"]={
["warn_cxx98_compat_enum_friend"]={
Line 1,937: Line 1,937:
[c]=q,
[c]=q,
[b]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2."},
[b]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2."},
[k]={{F,14673,"/// Perform semantic analysis of the given friend type declaration.\n///\n/// \\returns A friend declaration that.\nFriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, SourceLocation FriendLoc, TypeSourceInfo *TSInfo) {\n  // C++03 [class.friend]p2:\n  //  An elaborated-type-specifier shall be used in a friend declaration\n  //  for a class.*\n  //\n  //  * The class-key of the elaborated-type-specifier is required.\n  if (!CodeSynthesisContexts.empty()) {\n  } else {\n    if (!T->isElaboratedTypeSpecifier()) {\n    } else if (T->getAs<EnumType>()) {\n      Diag(FriendLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_enum_friend : diag::ext_enum_friend) << T << TypeRange;"}}
[k]={{F,17228,"/// Perform semantic analysis of the given friend type declaration.\n///\n/// \\returns A friend declaration that.\nFriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, SourceLocation FriendLoc, TypeSourceInfo *TSInfo) {\n  // C++03 [class.friend]p2:\n  //  An elaborated-type-specifier shall be used in a friend declaration\n  //  for a class.*\n  //\n  //  * The class-key of the elaborated-type-specifier is required.\n  if (!CodeSynthesisContexts.empty()) {\n  } else {\n    if (!T->isElaboratedTypeSpecifier()) {\n    } else if (T->getAs<EnumType>()) {\n      Diag(FriendLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_enum_friend : diag::ext_enum_friend) << T << TypeRange;"}}
},
},
["warn_cxx98_compat_enum_nested_name_spec"]={
["warn_cxx98_compat_enum_nested_name_spec"]={
Line 1,952: Line 1,952:
[c]=q,
[c]=q,
[b]={"91c7bbde4b6d",1319081327,"Add -Wc++98-compat warning for enumerations in nested name specifiers."},
[b]={"91c7bbde4b6d",1319081327,"Add -Wc++98-compat warning for enumerations in nested name specifiers."},
[k]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",648,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///      \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  if (AcceptSpec) {\n    if (T->isEnumeralType())\n      Diag(IdInfo.IdentifierLoc, diag::warn_cxx98_compat_enum_nested_name_spec);"}}
[k]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",718,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///      \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  if (AcceptSpec) {\n    if (T->isEnumeralType())\n      Diag(IdInfo.IdentifierLoc, diag::warn_cxx98_compat_enum_nested_name_spec);"}}
},
},
["warn_cxx98_compat_enumerator_list_comma"]={
["warn_cxx98_compat_enumerator_list_comma"]={
Line 1,967: Line 1,967:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{Mb,4752,"/// ParseEnumBody - Parse a {} enclosed enumerator-list.\n///      enumerator-list:\n///        enumerator\n///        enumerator-list \',\' enumerator\n///      enumerator:\n///        enumeration-constant attributes[opt]\n///        enumeration-constant attributes[opt] \'=\' constant-expression\n///      enumeration-constant:\n///        identifier\n///\nvoid Parser::ParseEnumBody(SourceLocation StartLoc, Decl *EnumDecl) {\n  // Parse the enumerator-list.\n  while (Tok.isNot(tok::r_brace)) {\n    // If comma is followed by r_brace, emit appropriate warning.\n    if (Tok.is(tok::r_brace) && CommaLoc.isValid()) {\n      if (!getLangOpts().C99 && !getLangOpts().CPlusPlus11)\n      else if (getLangOpts().CPlusPlus11)\n        Diag(CommaLoc, diag::warn_cxx98_compat_enumerator_list_comma) << FixItHint::CreateRemoval(CommaLoc);"}}
[k]={{Mb,5262,"/// ParseEnumBody - Parse a {} enclosed enumerator-list.\n///      enumerator-list:\n///        enumerator\n///        enumerator-list \',\' enumerator\n///      enumerator:\n///        enumeration-constant attributes[opt]\n///        enumeration-constant attributes[opt] \'=\' constant-expression\n///      enumeration-constant:\n///        identifier\n///\nvoid Parser::ParseEnumBody(SourceLocation StartLoc, Decl *EnumDecl) {\n  // Parse the enumerator-list.\n  while (Tok.isNot(tok::r_brace)) {\n    // If comma is followed by r_brace, emit appropriate warning.\n    if (Tok.is(tok::r_brace) && CommaLoc.isValid()) {\n      if (!getLangOpts().C99 && !getLangOpts().CPlusPlus11)\n      else if (getLangOpts().CPlusPlus11)\n        Diag(CommaLoc, diag::warn_cxx98_compat_enumerator_list_comma) << FixItHint::CreateRemoval(CommaLoc);"}}
},
},
["warn_cxx98_compat_explicit_conversion_functions"]={
["warn_cxx98_compat_explicit_conversion_functions"]={
Line 1,982: Line 1,982:
[c]=q,
[c]=q,
[b]={Wb,1318970984,Vb},
[b]={Wb,1318970984,Vb},
[k]={{F,9575,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++0x explicit conversion operators.\n  if (DS.hasExplicitSpecifier() && !getLangOpts().CPlusPlus20)\n    Diag(DS.getExplicitSpecLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_explicit_conversion_functions : diag::ext_explicit_conversion_functions) << SourceRange(DS.getExplicitSpecRange());"}}
[k]={{F,11140,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++0x explicit conversion operators.\n  if (DS.hasExplicitSpecifier() && !getLangOpts().CPlusPlus20)\n    Diag(DS.getExplicitSpecLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_explicit_conversion_functions : diag::ext_explicit_conversion_functions) << SourceRange(DS.getExplicitSpecRange());"}}
},
},
["warn_cxx98_compat_extern_template"]={
["warn_cxx98_compat_extern_template"]={
Line 1,997: Line 1,997:
[c]=A,
[c]=A,
[b]={"f411196d15a9",1319135758,"\'extern template\' is a C++11 feature. Add an Extension for C++98 (this matches"},
[b]={"f411196d15a9",1319135758,"\'extern template\' is a C++11 feature. Add an Extension for C++98 (this matches"},
[k]={{tc,938,"/// ParseExternalDeclaration:\n///\n/// The `Attrs` that are passed in are C++11 attributes and appertain to the\n/// declaration.\n///\n///      external-declaration: [C99 6.9], declaration: [C++ dcl.dcl]\n///        function-definition\n///        declaration\n/// [GNU]  asm-definition\n/// [GNU]  __extension__ external-declaration\n/// [OBJC]  objc-class-definition\n/// [OBJC]  objc-class-declaration\n/// [OBJC]  objc-alias-declaration\n/// [OBJC]  objc-protocol-definition\n/// [OBJC]  objc-method-definition\n/// [OBJC]  @end\n/// [C++]  linkage-specification\n/// [GNU] asm-definition:\n///        simple-asm-expr \';\'\n/// [C++11] empty-declaration\n/// [C++11] attribute-declaration\n///\n/// [C++11] empty-declaration:\n///          \';\'\n///\n/// [C++0x/GNU] \'extern\' \'template\' declaration\n///\n/// [C++20] module-import-declaration\n///\nParser::DeclGroupPtrTy Parser::ParseExternalDeclaration(ParsedAttributes &Attrs, ParsedAttributes &DeclSpecAttrs, ParsingDeclSpec *DS) {\n  case tok::kw_extern:\n    if (getLangOpts().CPlusPlus && NextToken().is(tok::kw_template)) {\n      Diag(ExternLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_extern_template : diag::ext_extern_template) << SourceRange(ExternLoc, TemplateLoc);"}}
[k]={{tc,1011,"/// ParseExternalDeclaration:\n///\n/// The `Attrs` that are passed in are C++11 attributes and appertain to the\n/// declaration.\n///\n///      external-declaration: [C99 6.9], declaration: [C++ dcl.dcl]\n///        function-definition\n///        declaration\n/// [GNU]  asm-definition\n/// [GNU]  __extension__ external-declaration\n/// [OBJC]  objc-class-definition\n/// [OBJC]  objc-class-declaration\n/// [OBJC]  objc-alias-declaration\n/// [OBJC]  objc-protocol-definition\n/// [OBJC]  objc-method-definition\n/// [OBJC]  @end\n/// [C++]  linkage-specification\n/// [GNU] asm-definition:\n///        simple-asm-expr \';\'\n/// [C++11] empty-declaration\n/// [C++11] attribute-declaration\n///\n/// [C++11] empty-declaration:\n///          \';\'\n///\n/// [C++0x/GNU] \'extern\' \'template\' declaration\n///\n/// [C++20] module-import-declaration\n///\nParser::DeclGroupPtrTy Parser::ParseExternalDeclaration(ParsedAttributes &Attrs, ParsedAttributes &DeclSpecAttrs, ParsingDeclSpec *DS) {\n  case tok::kw_extern:\n    if (getLangOpts().CPlusPlus && NextToken().is(tok::kw_template)) {\n      Diag(ExternLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_extern_template : diag::ext_extern_template) << SourceRange(ExternLoc, TemplateLoc);"}}
},
},
["warn_cxx98_compat_for_range"]={
["warn_cxx98_compat_for_range"]={
Line 2,012: Line 2,012:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{Yb,1928,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // Parse the first part of the for specifier.\n  if (Tok.is(tok::semi)) { // for (;\n  } else if (getLangOpts().CPlusPlus && Tok.is(tok::identifier) && isForRangeIdentifier()) {\n  } else if (isForInitDeclaration()) { // for (int X = 4;\n    if (Tok.is(tok::kw_using)) {\n    } else {\n      if (ForRangeInfo.ParsedForRangeDecl()) {\n        Diag(ForRangeInfo.ColonLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_for_range : diag::ext_for_range);"}}
[k]={{Yb,2074,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // Parse the first part of the for specifier.\n  if (Tok.is(tok::semi)) { // for (;\n  } else if (getLangOpts().CPlusPlus && Tok.is(tok::identifier) && isForRangeIdentifier()) {\n  } else if (isForInitDeclaration()) { // for (int X = 4;\n    if (Tok.is(tok::kw_using)) {\n    } else {\n      if (ForRangeInfo.ParsedForRangeDecl()) {\n        Diag(ForRangeInfo.ColonLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_for_range : diag::ext_for_range);"}}
},
},
["warn_cxx98_compat_friend_is_member"]={
["warn_cxx98_compat_friend_is_member"]={
Line 2,027: Line 2,027:
[c]=q,
[c]=q,
[b]={Wb,1318970984,Vb},
[b]={Wb,1318970984,Vb},
[k]={{F,15055,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  } else if (!SS.getScopeRep()->isDependent()) {\n    // C++ [class.friend]p1: A friend of a class is a function or\n    //  class that is not a member of the class . . .\n    if (DC->Equals(CurContext))\n      Diag(DS.getFriendSpecLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_friend_is_member : diag::err_friend_is_member);"}}
[k]={{F,17644,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  } else if (!SS.getScopeRep()->isDependent()) {\n    // C++ [class.friend]p1: A friend of a class is a function or\n    //  class that is not a member of the class . . .\n    if (DC->Equals(CurContext))\n      Diag(DS.getFriendSpecLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_friend_is_member : diag::err_friend_is_member);"}}
},
},
["warn_cxx98_compat_generalized_initializer_lists"]={
["warn_cxx98_compat_generalized_initializer_lists"]={
Line 2,042: Line 2,042:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",331,"void Parser::ParseLexedMethodDeclaration(LateParsedMethodDeclaration &LM) {\n  for (unsigned I = 0, N = LM.DefaultArgs.size(); I != N; ++I) {\n    if (Toks) {\n      if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n        Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Mb,2367,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  case InitKind::CXXBraced: {\n    Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Mb,6736,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n    } else {\n      // Parse the default argument, if any. We parse the default\n      // arguments in all dialects; the semantic analysis in\n      // ActOnParamDefaultArgument will reject the default argument in\n      // C.\n      if (Tok.is(tok::equal)) {\n        // Parse the default argument\n        if (DeclaratorCtx == DeclaratorContext::Member) {\n        } else {\n          if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n            Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{db,3329,"/// ParseMemInitializer - Parse a C++ member initializer, which is\n/// part of a constructor initializer that explicitly initializes one\n/// member or base class (C++ [class.base.init]). See\n/// ParseConstructorInitializer for an example.\n///\n/// [C++] mem-initializer:\n///        mem-initializer-id \'(\' expression-list[opt] \')\'\n/// [C++0x] mem-initializer-id braced-init-list\n///\n/// [C++] mem-initializer-id:\n///        \'::\'[opt] nested-name-specifier[opt] class-name\n///        identifier\nMemInitResult Parser::ParseMemInitializer(Decl *ConstructorDecl) {\n  // Parse the \'(\'.\n  if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n    Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{qc,541,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  while (true) {\n    if (!RHS.isInvalid() && RHSIsInitList) {\n      if (ThisPrec == prec::Assignment) {\n        Diag(OpToken, diag::warn_cxx98_compat_generalized_initializer_lists) << Actions.getExprRange(RHS.get());"},{qc,1447,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  {\n    if (Tok.is(tok::l_brace))\n      Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{qc,1788,"/// Once the leading part of a postfix-expression is parsed, this\n/// method parses any suffixes that apply.\n///\n/// \\verbatim\n///      postfix-expression: [C99 6.5.2]\n///        primary-expression\n///        postfix-expression \'[\' expression \']\'\n///        postfix-expression \'[\' braced-init-list \']\'\n///        postfix-expression \'[\' expression-list [opt] \']\'  [C++23 12.4.5]\n///        postfix-expression \'(\' argument-expression-list[opt] \')\'\n///        postfix-expression \'.\' identifier\n///        postfix-expression \'->\' identifier\n///        postfix-expression \'++\'\n///        postfix-expression \'--\'\n///        \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///        \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///\n///      argument-expression-list: [C99 6.5.2]\n///        argument-expression ...[opt]\n///        argument-expression-list \',\' assignment-expression ...[opt]\n/// \\endverbatim\nExprResult Parser::ParsePostfixExpressionSuffix(ExprResult LHS) {\n  while (true) {\n    case tok::l_square: { // postfix-expression: p-e \'[\' expression \']\'\n      // We try to parse a list of indexes in all language mode first\n      // and, in we find 0 or one index, we try to parse an OpenMP array\n      // section. This allow us to support C++23 multi dimensional subscript and\n      // OpenMp sections in the same language mode.\n      if (!getLangOpts().OpenMP || Tok.isNot(tok::colon)) {\n        if (!getLangOpts().CPlusPlus23) {\n          if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n            Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{qc,3168,"/// ParseExpressionList - Used for C/C++ (argument-)expression-list.\n///\n/// \\verbatim\n///      argument-expression-list:\n///        assignment-expression\n///        argument-expression-list , assignment-expression\n///\n/// [C++] expression-list:\n/// [C++]  assignment-expression\n/// [C++]  expression-list , assignment-expression\n///\n/// [C++0x] expression-list:\n/// [C++0x]  initializer-list\n///\n/// [C++0x] initializer-list\n/// [C++0x]  initializer-clause ...[opt]\n/// [C++0x]  initializer-list , initializer-clause ...[opt]\n///\n/// [C++0x] initializer-clause:\n/// [C++0x]  assignment-expression\n/// [C++0x]  braced-init-list\n/// \\endverbatim\nbool Parser::ParseExpressionList(SmallVectorImpl<Expr *> &Exprs, llvm::function_ref<void()> ExpressionStarts, bool FailImmediatelyOnInvalidExpr, bool EarlyTypoCorrection) {\n  while (true) {\n    if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n      Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Rb,1985,"/// ParseCXXCondition - if/switch/while condition expression.\n///\n///      condition:\n///        expression\n///        type-specifier-seq declarator \'=\' assignment-expression\n/// [C++11] type-specifier-seq declarator \'=\' initializer-clause\n/// [C++11] type-specifier-seq declarator braced-init-list\n/// [Clang] type-specifier-seq ref-qualifier[opt] \'[\' identifier-list \']\'\n///            brace-or-equal-initializer\n/// [GNU]  type-specifier-seq declarator simple-asm-expr[opt] attributes[opt]\n///            \'=\' assignment-expression\n///\n/// In C++1z, a condition may in some contexts be preceded by an\n/// optional init-statement. This function will parse that too.\n///\n/// \\param InitStmt If non-null, an init-statement is permitted, and if present\n/// will be parsed and stored here.\n///\n/// \\param Loc The location of the start of the statement that requires this\n/// condition, e.g., the \"for\" in a for loop.\n///\n/// \\param MissingOK Whether an empty condition is acceptable here. Otherwise\n/// it is considered an error to be recovered from.\n///\n/// \\param FRI If non-null, a for range declaration is permitted, and if\n/// present will be parsed and stored here, and a null result will be returned.\n///\n/// \\param EnterForConditionScope If true, enter a continue/break scope at the\n/// appropriate moment for a \'for\' loop.\n///\n/// \\returns The parsed condition.\nSema::ConditionResult Parser::ParseCXXCondition(StmtResult *InitStmt, SourceLocation Loc, Sema::ConditionKind CK, bool MissingOK, ForRangeInfo *FRI, bool EnterForConditionScope) {\n  if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n    Diag(Tok.getLocation(), diag::warn_cxx98_compat_generalized_initializer_lists);"},{Rb,2969,"/// ParseCXXNewExpression - Parse a C++ new-expression. New is used to allocate\n/// memory in a typesafe manner and call constructors.\n///\n/// This method is called to parse the new expression after the optional :: has\n/// been already parsed.  If the :: was present, \"UseGlobal\" is true and \"Start\"\n/// is its location.  Otherwise, \"Start\" is the location of the \'new\' token.\n///\n///        new-expression:\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///        new-placement:\n///                  \'(\' expression-list \')\'\n///\n///        new-type-id:\n///                  type-specifier-seq new-declarator[opt]\n/// [GNU]            attributes type-specifier-seq new-declarator[opt]\n///\n///        new-declarator:\n///                  ptr-operator new-declarator[opt]\n///                  direct-new-declarator\n///\n///        new-initializer:\n///                  \'(\' expression-list[opt] \')\'\n/// [C++0x]          braced-init-list\n///\nExprResult Parser::ParseCXXNewExpression(bool UseGlobal, SourceLocation Start) {\n  if (Tok.is(tok::l_paren)) {\n  } else if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus11) {\n    Diag(Tok.getLocation(), diag::warn_cxx98_compat_generalized_initializer_lists);"},{"clang/lib/Parse/ParseObjc.cpp",2951,"/// Parse the remainder of an Objective-C message following the\n/// \'[\' objc-receiver.\n///\n/// This routine handles sends to super, class messages (sent to a\n/// class name), and instance messages (sent to an object), and the\n/// target is represented by \\p SuperLoc, \\p ReceiverType, or \\p\n/// ReceiverExpr, respectively. Only one of these parameters may have\n/// a valid value.\n///\n/// \\param LBracLoc The location of the opening \'[\'.\n///\n/// \\param SuperLoc If this is a send to \'super\', the location of the\n/// \'super\' keyword that indicates a send to the superclass.\n///\n/// \\param ReceiverType If this is a class message, the type of the\n/// class we are sending a message to.\n///\n/// \\param ReceiverExpr If this is an instance message, the expression\n/// used to compute the receiver object.\n///\n///  objc-message-args:\n///    objc-selector\n///    objc-keywordarg-list\n///\n///  objc-keywordarg-list:\n///    objc-keywordarg\n///    objc-keywordarg-list objc-keywordarg\n///\n///  objc-keywordarg:\n///    selector-name[opt] \':\' objc-keywordexpr\n///\n///  objc-keywordexpr:\n///    nonempty-expr-list\n///\n///  nonempty-expr-list:\n///    assignment-expression\n///    nonempty-expr-list , assignment-expression\n///\nExprResult Parser::ParseObjCMessageExpressionBody(SourceLocation LBracLoc, SourceLocation SuperLoc, ParsedType ReceiverType, Expr *ReceiverExpr) {\n  if (Tok.is(tok::colon)) {\n    while (true) {\n      if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n        Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{"clang/lib/Parse/ParseOpenMP.cpp",383,"void Parser::ParseOpenMPReductionInitializerForDecl(VarDecl *OmpPrivParm) {\n  // Parse declarator \'=\' initializer.\n  // If a \'==\' or \'+=\' is found, suggest a fixit to \'=\'.\n  if (isTokenEqualOrEqualTypo()) {\n  } else if (Tok.is(tok::l_paren)) {\n  } else if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n    Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Yb,2221,"/// ParseReturnStatement\n///      jump-statement:\n///        \'return\' expression[opt] \';\'\n///        \'return\' braced-init-list \';\'\n///        \'co_return\' expression[opt] \';\'\n///        \'co_return\' braced-init-list \';\'\nStmtResult Parser::ParseReturnStatement() {\n  if (Tok.isNot(tok::semi)) {\n    if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus) {\n      if (R.isUsable())\n        Diag(R.get()->getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_generalized_initializer_lists : diag::ext_generalized_initializer_lists) << R.get()->getSourceRange();"}}
[k]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",395,"void Parser::ParseLexedMethodDeclaration(LateParsedMethodDeclaration &LM) {\n  for (unsigned I = 0, N = LM.DefaultArgs.size(); I != N; ++I) {\n    if (Toks) {\n      if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n        Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Mb,2612,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  case InitKind::CXXBraced: {\n    Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Mb,7466,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n    } else {\n      // Parse the default argument, if any. We parse the default\n      // arguments in all dialects; the semantic analysis in\n      // ActOnParamDefaultArgument will reject the default argument in\n      // C.\n      if (Tok.is(tok::equal)) {\n        // Parse the default argument\n        if (DeclaratorCtx == DeclaratorContext::Member) {\n        } else {\n          if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n            Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{db,3833,"/// ParseMemInitializer - Parse a C++ member initializer, which is\n/// part of a constructor initializer that explicitly initializes one\n/// member or base class (C++ [class.base.init]). See\n/// ParseConstructorInitializer for an example.\n///\n/// [C++] mem-initializer:\n///        mem-initializer-id \'(\' expression-list[opt] \')\'\n/// [C++0x] mem-initializer-id braced-init-list\n///\n/// [C++] mem-initializer-id:\n///        \'::\'[opt] nested-name-specifier[opt] class-name\n///        identifier\nMemInitResult Parser::ParseMemInitializer(Decl *ConstructorDecl) {\n  // Parse the \'(\'.\n  if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n    Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{qc,603,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  while (true) {\n    if (!RHS.isInvalid() && RHSIsInitList) {\n      if (ThisPrec == prec::Assignment) {\n        Diag(OpToken, diag::warn_cxx98_compat_generalized_initializer_lists) << Actions.getExprRange(RHS.get());"},{qc,1593,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  {\n    if (Tok.is(tok::l_brace))\n      Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{qc,1958,"/// Once the leading part of a postfix-expression is parsed, this\n/// method parses any suffixes that apply.\n///\n/// \\verbatim\n///      postfix-expression: [C99 6.5.2]\n///        primary-expression\n///        postfix-expression \'[\' expression \']\'\n///        postfix-expression \'[\' braced-init-list \']\'\n///        postfix-expression \'[\' expression-list [opt] \']\'  [C++23 12.4.5]\n///        postfix-expression \'(\' argument-expression-list[opt] \')\'\n///        postfix-expression \'.\' identifier\n///        postfix-expression \'->\' identifier\n///        postfix-expression \'++\'\n///        postfix-expression \'--\'\n///        \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///        \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///\n///      argument-expression-list: [C99 6.5.2]\n///        argument-expression ...[opt]\n///        argument-expression-list \',\' assignment-expression ...[opt]\n/// \\endverbatim\nExprResult Parser::ParsePostfixExpressionSuffix(ExprResult LHS) {\n  while (true) {\n    case tok::l_square: { // postfix-expression: p-e \'[\' expression \']\'\n      // We try to parse a list of indexes in all language mode first\n      // and, in we find 0 or one index, we try to parse an OpenMP array\n      // section. This allow us to support C++23 multi dimensional subscript and\n      // OpenMp sections in the same language mode.\n      if (!getLangOpts().OpenMP || Tok.isNot(tok::colon)) {\n        if (!getLangOpts().CPlusPlus23) {\n          if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n            Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{qc,3496,"/// ParseExpressionList - Used for C/C++ (argument-)expression-list.\n///\n/// \\verbatim\n///      argument-expression-list:\n///        assignment-expression\n///        argument-expression-list , assignment-expression\n///\n/// [C++] expression-list:\n/// [C++]  assignment-expression\n/// [C++]  expression-list , assignment-expression\n///\n/// [C++0x] expression-list:\n/// [C++0x]  initializer-list\n///\n/// [C++0x] initializer-list\n/// [C++0x]  initializer-clause ...[opt]\n/// [C++0x]  initializer-list , initializer-clause ...[opt]\n///\n/// [C++0x] initializer-clause:\n/// [C++0x]  assignment-expression\n/// [C++0x]  braced-init-list\n/// \\endverbatim\nbool Parser::ParseExpressionList(SmallVectorImpl<Expr *> &Exprs, llvm::function_ref<void()> ExpressionStarts, bool FailImmediatelyOnInvalidExpr, bool EarlyTypoCorrection) {\n  while (true) {\n    if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n      Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Rb,2194,"/// ParseCXXCondition - if/switch/while condition expression.\n///\n///      condition:\n///        expression\n///        type-specifier-seq declarator \'=\' assignment-expression\n/// [C++11] type-specifier-seq declarator \'=\' initializer-clause\n/// [C++11] type-specifier-seq declarator braced-init-list\n/// [Clang] type-specifier-seq ref-qualifier[opt] \'[\' identifier-list \']\'\n///            brace-or-equal-initializer\n/// [GNU]  type-specifier-seq declarator simple-asm-expr[opt] attributes[opt]\n///            \'=\' assignment-expression\n///\n/// In C++1z, a condition may in some contexts be preceded by an\n/// optional init-statement. This function will parse that too.\n///\n/// \\param InitStmt If non-null, an init-statement is permitted, and if present\n/// will be parsed and stored here.\n///\n/// \\param Loc The location of the start of the statement that requires this\n/// condition, e.g., the \"for\" in a for loop.\n///\n/// \\param MissingOK Whether an empty condition is acceptable here. Otherwise\n/// it is considered an error to be recovered from.\n///\n/// \\param FRI If non-null, a for range declaration is permitted, and if\n/// present will be parsed and stored here, and a null result will be returned.\n///\n/// \\param EnterForConditionScope If true, enter a continue/break scope at the\n/// appropriate moment for a \'for\' loop.\n///\n/// \\returns The parsed condition.\nSema::ConditionResult Parser::ParseCXXCondition(StmtResult *InitStmt, SourceLocation Loc, Sema::ConditionKind CK, bool MissingOK, ForRangeInfo *FRI, bool EnterForConditionScope) {\n  if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n    Diag(Tok.getLocation(), diag::warn_cxx98_compat_generalized_initializer_lists);"},{Rb,3293,"/// ParseCXXNewExpression - Parse a C++ new-expression. New is used to allocate\n/// memory in a typesafe manner and call constructors.\n///\n/// This method is called to parse the new expression after the optional :: has\n/// been already parsed.  If the :: was present, \"UseGlobal\" is true and \"Start\"\n/// is its location.  Otherwise, \"Start\" is the location of the \'new\' token.\n///\n///        new-expression:\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///        new-placement:\n///                  \'(\' expression-list \')\'\n///\n///        new-type-id:\n///                  type-specifier-seq new-declarator[opt]\n/// [GNU]            attributes type-specifier-seq new-declarator[opt]\n///\n///        new-declarator:\n///                  ptr-operator new-declarator[opt]\n///                  direct-new-declarator\n///\n///        new-initializer:\n///                  \'(\' expression-list[opt] \')\'\n/// [C++0x]          braced-init-list\n///\nExprResult Parser::ParseCXXNewExpression(bool UseGlobal, SourceLocation Start) {\n  if (Tok.is(tok::l_paren)) {\n  } else if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus11) {\n    Diag(Tok.getLocation(), diag::warn_cxx98_compat_generalized_initializer_lists);"},{"clang/lib/Parse/ParseObjc.cpp",3278,"/// Parse the remainder of an Objective-C message following the\n/// \'[\' objc-receiver.\n///\n/// This routine handles sends to super, class messages (sent to a\n/// class name), and instance messages (sent to an object), and the\n/// target is represented by \\p SuperLoc, \\p ReceiverType, or \\p\n/// ReceiverExpr, respectively. Only one of these parameters may have\n/// a valid value.\n///\n/// \\param LBracLoc The location of the opening \'[\'.\n///\n/// \\param SuperLoc If this is a send to \'super\', the location of the\n/// \'super\' keyword that indicates a send to the superclass.\n///\n/// \\param ReceiverType If this is a class message, the type of the\n/// class we are sending a message to.\n///\n/// \\param ReceiverExpr If this is an instance message, the expression\n/// used to compute the receiver object.\n///\n///  objc-message-args:\n///    objc-selector\n///    objc-keywordarg-list\n///\n///  objc-keywordarg-list:\n///    objc-keywordarg\n///    objc-keywordarg-list objc-keywordarg\n///\n///  objc-keywordarg:\n///    selector-name[opt] \':\' objc-keywordexpr\n///\n///  objc-keywordexpr:\n///    nonempty-expr-list\n///\n///  nonempty-expr-list:\n///    assignment-expression\n///    nonempty-expr-list , assignment-expression\n///\nExprResult Parser::ParseObjCMessageExpressionBody(SourceLocation LBracLoc, SourceLocation SuperLoc, ParsedType ReceiverType, Expr *ReceiverExpr) {\n  if (Tok.is(tok::colon)) {\n    while (true) {\n      if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n        Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{"clang/lib/Parse/ParseOpenMP.cpp",511,"void Parser::ParseOpenMPReductionInitializerForDecl(VarDecl *OmpPrivParm) {\n  // Parse declarator \'=\' initializer.\n  // If a \'==\' or \'+=\' is found, suggest a fixit to \'=\'.\n  if (isTokenEqualOrEqualTypo()) {\n  } else if (Tok.is(tok::l_paren)) {\n  } else if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n    Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Yb,2398,"/// ParseReturnStatement\n///      jump-statement:\n///        \'return\' expression[opt] \';\'\n///        \'return\' braced-init-list \';\'\n///        \'co_return\' expression[opt] \';\'\n///        \'co_return\' braced-init-list \';\'\nStmtResult Parser::ParseReturnStatement() {\n  if (Tok.isNot(tok::semi)) {\n    if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus) {\n      if (R.isUsable())\n        Diag(R.get()->getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_generalized_initializer_lists : diag::ext_generalized_initializer_lists) << R.get()->getSourceRange();"}}
},
},
["warn_cxx98_compat_goto_into_protected_scope"]={
["warn_cxx98_compat_goto_into_protected_scope"]={
Line 2,057: Line 2,057:
[c]=q,
[c]=q,
[b]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD"},
[b]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD"},
[k]={{xd,599,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    // With a goto,\n    if (GotoStmt *GS = dyn_cast<GotoStmt>(Jump)) {\n      // The label may not have a statement if it\'s coming from inline MS ASM.\n      if (GS->getLabel()->getStmt()) {\n        CheckJump(GS, GS->getLabel()->getStmt(), GS->getGotoLoc(), diag::err_goto_into_protected_scope, diag::ext_goto_into_protected_scope, diag::warn_cxx98_compat_goto_into_protected_scope);"},{xd,624,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    // We only get indirect gotos here when they have a constant target.\n    if (IndirectGotoStmt *IGS = dyn_cast<IndirectGotoStmt>(Jump)) {\n      CheckJump(IGS, Target->getStmt(), IGS->getGotoLoc(), diag::err_goto_into_protected_scope, diag::ext_goto_into_protected_scope, diag::warn_cxx98_compat_goto_into_protected_scope);"}}
[k]={{xd,668,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    // With a goto,\n    if (GotoStmt *GS = dyn_cast<GotoStmt>(Jump)) {\n      // The label may not have a statement if it\'s coming from inline MS ASM.\n      if (GS->getLabel()->getStmt()) {\n        CheckJump(GS, GS->getLabel()->getStmt(), GS->getGotoLoc(), diag::err_goto_into_protected_scope, diag::ext_goto_into_protected_scope, diag::warn_cxx98_compat_goto_into_protected_scope);"},{xd,696,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    // We only get indirect gotos here when they have a constant target.\n    if (IndirectGotoStmt *IGS = dyn_cast<IndirectGotoStmt>(Jump)) {\n      CheckJump(IGS, Target->getStmt(), IGS->getGotoLoc(), diag::err_goto_into_protected_scope, diag::ext_goto_into_protected_scope, diag::warn_cxx98_compat_goto_into_protected_scope);"}}
},
},
["warn_cxx98_compat_indirect_goto_in_protected_scope"]={
["warn_cxx98_compat_indirect_goto_in_protected_scope"]={
Line 2,072: Line 2,072:
[c]=q,
[c]=q,
[b]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD"},
[b]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD"},
[k]={{xd,828,"/// Diagnose an indirect jump which is known to cross scopes.\nvoid JumpScopeChecker::DiagnoseIndirectOrAsmJump(Stmt *Jump, unsigned JumpScope, LabelDecl *Target, unsigned TargetScope) {\n  // Diagnose this jump if it would be ill-formed in C++98.\n  if (!Diagnosed && !ToScopesCXX98Compat.empty()) {\n    S.Diag(Jump->getBeginLoc(), diag::warn_cxx98_compat_indirect_goto_in_protected_scope) << IsAsmGoto;"}}
[k]={{xd,911,"/// Diagnose an indirect jump which is known to cross scopes.\nvoid JumpScopeChecker::DiagnoseIndirectOrAsmJump(Stmt *Jump, unsigned JumpScope, LabelDecl *Target, unsigned TargetScope) {\n  // Diagnose this jump if it would be ill-formed in C++98.\n  if (!Diagnosed && !ToScopesCXX98Compat.empty()) {\n    S.Diag(Jump->getBeginLoc(), diag::warn_cxx98_compat_indirect_goto_in_protected_scope) << IsAsmGoto;"}}
},
},
["warn_cxx98_compat_initializer_list_init"]={
["warn_cxx98_compat_initializer_list_init"]={
Line 2,087: Line 2,087:
[c]=q,
[c]=q,
[b]={"2b349aee5b6f",1334818680,"Add missing -Wc++98-compat warnings for initializer list initializations which"},
[b]={"2b349aee5b6f",1334818680,"Add missing -Wc++98-compat warnings for initializer list initializations which"},
[k]={{fb,7865,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    case SK_StdInitializerList: {\n      S.Diag(CurInit.get()->getExprLoc(), diag::warn_cxx98_compat_initializer_list_init) << CurInit.get()->getSourceRange();"}}
[k]={{fb,9269,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    case SK_StdInitializerList: {\n      S.Diag(CurInit.get()->getExprLoc(), diag::warn_cxx98_compat_initializer_list_init) << CurInit.get()->getSourceRange();"}}
},
},
["warn_cxx98_compat_inline_namespace"]={
["warn_cxx98_compat_inline_namespace"]={
Line 2,102: Line 2,102:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{db,201,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // If we\'re still good, complain about inline namespaces in non-C++0x now.\n  if (InlineLoc.isValid())\n    Diag(InlineLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_inline_namespace : diag::ext_inline_namespace);"}}
[k]={{db,224,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // If we\'re still good, complain about inline namespaces in non-C++0x now.\n  if (InlineLoc.isValid())\n    Diag(InlineLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_inline_namespace : diag::ext_inline_namespace);"}}
},
},
["warn_cxx98_compat_lambda"]={
["warn_cxx98_compat_lambda"]={
Line 2,117: Line 2,117:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{Rb,1155,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  Diag(LambdaBeginLoc, diag::warn_cxx98_compat_lambda);"}}
[k]={{Rb,1275,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  Diag(LambdaBeginLoc, diag::warn_cxx98_compat_lambda);"}}
},
},
["warn_cxx98_compat_less_colon_colon"]={
["warn_cxx98_compat_less_colon_colon"]={
Line 2,132: Line 2,132:
[c]=N,
[c]=N,
[b]={Vc,1318641536,Tc},
[b]={Vc,1318641536,Tc},
[k]={{vb,3877,"LexStart:\n  case \'<\':\n    if (ParsingFilename) {\n    } else if (Char == \'<\') {\n    } else if (Char == \'=\') {\n    } else if (LangOpts.Digraphs && Char == \':\') { // \'<:\' -> \'[\'\n      if (LangOpts.CPlusPlus11 && getCharAndSize(CurPtr + SizeTmp, SizeTmp2) == \':\') {\n        if (After != \':\' && After != \'>\') {\n          if (!isLexingRawMode())\n            Diag(BufferPtr, diag::warn_cxx98_compat_less_colon_colon);"}}
[k]={{vb,4149,"LexStart:\n  case \'<\':\n    if (ParsingFilename) {\n    } else if (Char == \'<\') {\n    } else if (Char == \'=\') {\n    } else if (LangOpts.Digraphs && Char == \':\') { // \'<:\' -> \'[\'\n      if (LangOpts.CPlusPlus11 && getCharAndSize(CurPtr + SizeTmp, SizeTmp2) == \':\') {\n        if (After != \':\' && After != \'>\') {\n          if (!isLexingRawMode())\n            Diag(BufferPtr, diag::warn_cxx98_compat_less_colon_colon);"}}
},
},
["warn_cxx98_compat_literal_operator"]={
["warn_cxx98_compat_literal_operator"]={
Line 2,147: Line 2,147:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{Rb,2471,"#include \"clang/Basic/OperatorKinds.def\"\n  if (getLangOpts().CPlusPlus11 && isTokenStringLiteral()) {\n    Diag(Tok.getLocation(), diag::warn_cxx98_compat_literal_operator);"}}
[k]={{Rb,2726,"#include \"clang/Basic/OperatorKinds.def\"\n  if (getLangOpts().CPlusPlus11 && isTokenStringLiteral()) {\n    Diag(Tok.getLocation(), diag::warn_cxx98_compat_literal_operator);"}}
},
},
["warn_cxx98_compat_literal_ucn_control_character"]={
["warn_cxx98_compat_literal_ucn_control_character"]={
Line 2,162: Line 2,162:
[c]=N,
[c]=N,
[b]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the"},
[b]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the"},
[k]={{Wc,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);"}}
[k]={{Wc,686,"/// 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_cxx98_compat_literal_ucn_escape_basic_scs"]={
["warn_cxx98_compat_literal_ucn_escape_basic_scs"]={
Line 2,177: Line 2,177:
[c]=N,
[c]=N,
[b]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the"},
[b]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the"},
[k]={{Wc,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);"}}
[k]={{Wc,679,"/// 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_cxx98_compat_longlong"]={
["warn_cxx98_compat_longlong"]={
Line 2,192: Line 2,192:
[c]=u,
[c]=u,
[b]={Vc,1318641536,Tc},
[b]={Vc,1318641536,Tc},
[k]={{"clang/lib/Lex/PPExpressions.cpp",303,"/// 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    // \'long long\' is a C99 or C++11 feature.\n    if (!PP.getLangOpts().C99 && Literal.isLongLong) {\n      if (PP.getLangOpts().CPlusPlus)\n        PP.Diag(PeekTok, PP.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{M,3687,"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    if (Literal.GetIntegerValue(ResultVal)) {\n    } else {\n      // Check long long if needed.\n      if (Ty.isNull() && !Literal.isSizeT) {\n        // Does it fit in a unsigned long long?\n        if (ResultVal.isIntN(LongLongSize)) {\n          // \'long long\' is a C99 or C++11 feature, whether the literal\n          // explicitly specified \'long long\' or we needed the extra width.\n          if (getLangOpts().CPlusPlus)\n            Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{Cb,1235,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_int: {\n    if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n      case TypeSpecifierWidth::LongLong:\n        // \'long long\' is a C99 or C++11 feature.\n        if (!S.getLangOpts().C99) {\n          if (S.getLangOpts().CPlusPlus)\n            S.Diag(DS.getTypeSpecWidthLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{Cb,1258,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_int: {\n    if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n    } else {\n      case TypeSpecifierWidth::LongLong:\n        // \'long long\' is a C99 or C++11 feature.\n        if (!S.getLangOpts().C99) {\n          if (S.getLangOpts().CPlusPlus)\n            S.Diag(DS.getTypeSpecWidthLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"}}
[k]={{"clang/lib/Lex/PPExpressions.cpp",322,"/// 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    // \'long long\' is a C99 or C++11 feature.\n    if (!PP.getLangOpts().C99 && Literal.isLongLong) {\n      if (PP.getLangOpts().CPlusPlus)\n        PP.Diag(PeekTok, PP.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{M,4226,"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    if (Literal.GetIntegerValue(ResultVal)) {\n    } else {\n      // Check long long if needed.\n      if (Ty.isNull() && !Literal.isSizeT) {\n        // Does it fit in a unsigned long long?\n        if (ResultVal.isIntN(LongLongSize)) {\n          // \'long long\' is a C99 or C++11 feature, whether the literal\n          // explicitly specified \'long long\' or we needed the extra width.\n          if (getLangOpts().CPlusPlus)\n            Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{Cb,1411,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_int: {\n    if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n      case TypeSpecifierWidth::LongLong:\n        // \'long long\' is a C99 or C++11 feature.\n        if (!S.getLangOpts().C99) {\n          if (S.getLangOpts().CPlusPlus)\n            S.Diag(DS.getTypeSpecWidthLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{Cb,1436,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_int: {\n    if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n    } else {\n      case TypeSpecifierWidth::LongLong:\n        // \'long long\' is a C99 or C++11 feature.\n        if (!S.getLangOpts().C99) {\n          if (S.getLangOpts().CPlusPlus)\n            S.Diag(DS.getTypeSpecWidthLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"}}
},
},
["warn_cxx98_compat_no_newline_eof"]={
["warn_cxx98_compat_no_newline_eof"]={
Line 2,207: Line 2,207:
[c]=N,
[c]=N,
[b]={"e83c731cad30",1334288603,"Support -Wc++98-compat-pedantic as requested:"},
[b]={"e83c731cad30",1334288603,"Support -Wc++98-compat-pedantic as requested:"},
[k]={{vb,2814,"/// LexEndOfFile - CurPtr points to the end of this file.  Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n  // C99 5.1.1.2p2: If the file is non-empty and didn\'t end in a newline, issue\n  // a pedwarn.\n  if (CurPtr != BufferStart && (CurPtr[-1] != \'\\n\' && CurPtr[-1] != \'\\r\')) {\n    if (LangOpts.CPlusPlus11) {\n      if (!Diags.isIgnored(diag::warn_cxx98_compat_no_newline_eof, EndLoc)) {"},{vb,2815,"/// LexEndOfFile - CurPtr points to the end of this file.  Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n  // C99 5.1.1.2p2: If the file is non-empty and didn\'t end in a newline, issue\n  // a pedwarn.\n  if (CurPtr != BufferStart && (CurPtr[-1] != \'\\n\' && CurPtr[-1] != \'\\r\')) {\n    if (LangOpts.CPlusPlus11) {\n      // C++11 [lex.phases] 2.2 p2\n      // Prefer the C++98 pedantic compatibility warning over the generic,\n      // non-extension, user-requested \"missing newline at EOF\" warning.\n      if (!Diags.isIgnored(diag::warn_cxx98_compat_no_newline_eof, EndLoc)) {\n        DiagID = diag::warn_cxx98_compat_no_newline_eof;"}}
[k]={{vb,3052,"/// LexEndOfFile - CurPtr points to the end of this file.  Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n  // C99 5.1.1.2p2: If the file is non-empty and didn\'t end in a newline, issue\n  // a pedwarn.\n  if (CurPtr != BufferStart && (CurPtr[-1] != \'\\n\' && CurPtr[-1] != \'\\r\')) {\n    if (LangOpts.CPlusPlus11) {\n      if (!Diags.isIgnored(diag::warn_cxx98_compat_no_newline_eof, EndLoc)) {"},{vb,3053,"/// LexEndOfFile - CurPtr points to the end of this file.  Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n  // C99 5.1.1.2p2: If the file is non-empty and didn\'t end in a newline, issue\n  // a pedwarn.\n  if (CurPtr != BufferStart && (CurPtr[-1] != \'\\n\' && CurPtr[-1] != \'\\r\')) {\n    if (LangOpts.CPlusPlus11) {\n      // C++11 [lex.phases] 2.2 p2\n      // Prefer the C++98 pedantic compatibility warning over the generic,\n      // non-extension, user-requested \"missing newline at EOF\" warning.\n      if (!Diags.isIgnored(diag::warn_cxx98_compat_no_newline_eof, EndLoc)) {\n        DiagID = diag::warn_cxx98_compat_no_newline_eof;"}}
},
},
["warn_cxx98_compat_noexcept_decl"]={
["warn_cxx98_compat_noexcept_decl"]={
Line 2,222: Line 2,222:
[c]=A,
[c]=A,
[b]={xc,1318892780,wc},
[b]={xc,1318892780,wc},
[k]={{db,3408,"/// Parse a C++ exception-specification if present (C++0x [except.spec]).\n///\n///      exception-specification:\n///        dynamic-exception-specification\n///        noexcept-specification\n///\n///      noexcept-specification:\n///        \'noexcept\'\n///        \'noexcept\' \'(\' constant-expression \')\'\nExceptionSpecificationType Parser::tryParseExceptionSpecification(bool Delayed, SourceRange &SpecificationRange, SmallVectorImpl<ParsedType> &DynamicExceptions, SmallVectorImpl<SourceRange> &DynamicExceptionRanges, ExprResult &NoexceptExpr, CachedTokens *&ExceptionSpecTokens) {\n  // Handle delayed parsing of exception-specifications.\n  if (Delayed) {\n    // Check for a \'(\'.\n    if (!Tok.is(tok::l_paren)) {\n      // If this is a bare \'noexcept\', we\'re done.\n      if (IsNoexcept) {\n        Diag(Tok, diag::warn_cxx98_compat_noexcept_decl);"},{db,3441,"/// Parse a C++ exception-specification if present (C++0x [except.spec]).\n///\n///      exception-specification:\n///        dynamic-exception-specification\n///        noexcept-specification\n///\n///      noexcept-specification:\n///        \'noexcept\'\n///        \'noexcept\' \'(\' constant-expression \')\'\nExceptionSpecificationType Parser::tryParseExceptionSpecification(bool Delayed, SourceRange &SpecificationRange, SmallVectorImpl<ParsedType> &DynamicExceptions, SmallVectorImpl<SourceRange> &DynamicExceptionRanges, ExprResult &NoexceptExpr, CachedTokens *&ExceptionSpecTokens) {\n  Diag(Tok, diag::warn_cxx98_compat_noexcept_decl);"}}
[k]={{db,3925,"/// Parse a C++ exception-specification if present (C++0x [except.spec]).\n///\n///      exception-specification:\n///        dynamic-exception-specification\n///        noexcept-specification\n///\n///      noexcept-specification:\n///        \'noexcept\'\n///        \'noexcept\' \'(\' constant-expression \')\'\nExceptionSpecificationType Parser::tryParseExceptionSpecification(bool Delayed, SourceRange &SpecificationRange, SmallVectorImpl<ParsedType> &DynamicExceptions, SmallVectorImpl<SourceRange> &DynamicExceptionRanges, ExprResult &NoexceptExpr, CachedTokens *&ExceptionSpecTokens) {\n  // Handle delayed parsing of exception-specifications.\n  if (Delayed) {\n    // Check for a \'(\'.\n    if (!Tok.is(tok::l_paren)) {\n      // If this is a bare \'noexcept\', we\'re done.\n      if (IsNoexcept) {\n        Diag(Tok, diag::warn_cxx98_compat_noexcept_decl);"},{db,3960,"/// Parse a C++ exception-specification if present (C++0x [except.spec]).\n///\n///      exception-specification:\n///        dynamic-exception-specification\n///        noexcept-specification\n///\n///      noexcept-specification:\n///        \'noexcept\'\n///        \'noexcept\' \'(\' constant-expression \')\'\nExceptionSpecificationType Parser::tryParseExceptionSpecification(bool Delayed, SourceRange &SpecificationRange, SmallVectorImpl<ParsedType> &DynamicExceptions, SmallVectorImpl<SourceRange> &DynamicExceptionRanges, ExprResult &NoexceptExpr, CachedTokens *&ExceptionSpecTokens) {\n  Diag(Tok, diag::warn_cxx98_compat_noexcept_decl);"}}
},
},
["warn_cxx98_compat_noexcept_expr"]={
["warn_cxx98_compat_noexcept_expr"]={
Line 2,237: Line 2,237:
[c]=A,
[c]=A,
[b]={xc,1318892780,wc},
[b]={xc,1318892780,wc},
[k]={{qc,1554,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  case tok::kw_noexcept: { // [C++0x] \'noexcept\' \'(\' expression \')\'\n    Diag(Tok, diag::warn_cxx98_compat_noexcept_expr);"}}
[k]={{qc,1707,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  case tok::kw_noexcept: { // [C++0x] \'noexcept\' \'(\' expression \')\'\n    Diag(Tok, diag::warn_cxx98_compat_noexcept_expr);"}}
},
},
["warn_cxx98_compat_non_static_member_use"]={
["warn_cxx98_compat_non_static_member_use"]={
Line 2,252: Line 2,252:
[c]=q,
[c]=q,
[b]={"2a986117e9ba",1330165259,"Fix r151443 to only apply C++11\'s exception for non-static data member access"},
[b]={"2a986117e9ba",1330165259,"Fix r151443 to only apply C++11\'s exception for non-static data member access"},
[k]={{"clang/lib/Sema/SemaExprMember.cpp",230,"/// Builds an expression which might be an implicit member expression.\nExprResult Sema::BuildPossibleImplicitMemberExpr(const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, UnresolvedLookupExpr *AsULE) {\n  case IMA_Field_Uneval_Context:\n    Diag(R.getNameLoc(), diag::warn_cxx98_compat_non_static_member_use) << R.getLookupNameInfo().getName();"}}
[k]={{"clang/lib/Sema/SemaExprMember.cpp",254,"/// Builds an expression which might be an implicit member expression.\nExprResult Sema::BuildPossibleImplicitMemberExpr(const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, UnresolvedLookupExpr *AsULE) {\n  case IMA_Field_Uneval_Context:\n    Diag(R.getNameLoc(), diag::warn_cxx98_compat_non_static_member_use) << R.getLookupNameInfo().getName();"}}
},
},
["warn_cxx98_compat_nonclass_type_friend"]={
["warn_cxx98_compat_nonclass_type_friend"]={
Line 2,267: Line 2,267:
[c]=q,
[c]=q,
[b]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2."},
[b]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2."},
[k]={{F,14670,"/// Perform semantic analysis of the given friend type declaration.\n///\n/// \\returns A friend declaration that.\nFriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, SourceLocation FriendLoc, TypeSourceInfo *TSInfo) {\n  // C++03 [class.friend]p2:\n  //  An elaborated-type-specifier shall be used in a friend declaration\n  //  for a class.*\n  //\n  //  * The class-key of the elaborated-type-specifier is required.\n  if (!CodeSynthesisContexts.empty()) {\n  } else {\n    if (!T->isElaboratedTypeSpecifier()) {\n      // If we evaluated the type to a record type, suggest putting\n      // a tag in front.\n      if (const RecordType *RT = T->getAs<RecordType>()) {\n      } else {\n        Diag(FriendLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nonclass_type_friend : diag::ext_nonclass_type_friend) << T << TypeRange;"}}
[k]={{F,17220,"/// Perform semantic analysis of the given friend type declaration.\n///\n/// \\returns A friend declaration that.\nFriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, SourceLocation FriendLoc, TypeSourceInfo *TSInfo) {\n  // C++03 [class.friend]p2:\n  //  An elaborated-type-specifier shall be used in a friend declaration\n  //  for a class.*\n  //\n  //  * The class-key of the elaborated-type-specifier is required.\n  if (!CodeSynthesisContexts.empty()) {\n  } else {\n    if (!T->isElaboratedTypeSpecifier()) {\n      // If we evaluated the type to a record type, suggest putting\n      // a tag in front.\n      if (const RecordType *RT = T->getAs<RecordType>()) {\n      } else {\n        Diag(FriendLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nonclass_type_friend : diag::ext_nonclass_type_friend) << T << TypeRange;"}}
},
},
["warn_cxx98_compat_nonstatic_member_init"]={
["warn_cxx98_compat_nonstatic_member_init"]={
Line 2,282: Line 2,282:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{db,2664,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  while (true) {\n    // Handle the initializer.\n    if (HasInClassInit != ICIS_NoInit) {\n      Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nonstatic_member_init : diag::ext_nonstatic_member_init);"}}
[k]={{db,3102,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  while (true) {\n    // Handle the initializer.\n    if (HasInClassInit != ICIS_NoInit) {\n      Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nonstatic_member_init : diag::ext_nonstatic_member_init);"}}
},
},
["warn_cxx98_compat_nontrivial_union_or_anon_struct_member"]={
["warn_cxx98_compat_nontrivial_union_or_anon_struct_member"]={
Line 2,297: Line 2,297:
[c]=q,
[c]=q,
[b]={"f720df0ed64a",1319056911,"-Wc++98-compat: warn on nontrivial types used in unions and anonymous structs."},
[b]={"f720df0ed64a",1319056911,"-Wc++98-compat: warn on nontrivial types used in unions and anonymous structs."},
[k]={{G,16039,"bool Sema::CheckNontrivialField(FieldDecl *FD) {\n  if (const RecordType *RT = EltTy->getAs<RecordType>()) {\n    if (RDecl->getDefinition()) {\n      if (member != CXXInvalid) {\n        Diag(FD->getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member : diag::err_illegal_union_or_anon_struct_member) << FD->getParent()->isUnion() << FD->getDeclName() << member;"}}
[k]={{G,18324,"bool Sema::CheckNontrivialField(FieldDecl *FD) {\n  if (const RecordType *RT = EltTy->getAs<RecordType>()) {\n    if (RDecl->getDefinition()) {\n      if (member != CXXInvalid) {\n        Diag(FD->getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member : diag::err_illegal_union_or_anon_struct_member) << FD->getParent()->isUnion() << FD->getDeclName() << member;"}}
},
},
["warn_cxx98_compat_nullptr"]={
["warn_cxx98_compat_nullptr"]={
Line 2,312: Line 2,312:
[c]=A,
[c]=A,
[b]={xc,1318892780,wc},
[b]={xc,1318892780,wc},
[k]={{qc,917,"/// 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      Diag(Tok, diag::warn_cxx98_compat_nullptr);"}}
[k]={{qc,1012,"/// 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      Diag(Tok, diag::warn_cxx98_compat_nullptr);"}}
},
},
["warn_cxx98_compat_override_control_keyword"]={
["warn_cxx98_compat_override_control_keyword"]={
Line 2,327: Line 2,327:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{db,2114,"/// ParseOptionalCXX11VirtSpecifierSeq - Parse a virt-specifier-seq.\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\nvoid Parser::ParseOptionalCXX11VirtSpecifierSeq(VirtSpecifiers &VS, bool IsInterface, SourceLocation FriendLoc) {\n  while (true) {\n    if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n    } else if (Specifier == VirtSpecifiers::VS_Sealed) {\n    } else if (Specifier == VirtSpecifiers::VS_Abstract) {\n    } else if (Specifier == VirtSpecifiers::VS_GNU_Final) {\n    } else {\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_override_control_keyword : diag::ext_override_control_keyword) << VirtSpecifiers::getSpecifierName(Specifier);"},{db,3043,"/// ParseCXXMemberSpecification - Parse the class definition.\n///\n///      member-specification:\n///        member-declaration member-specification[opt]\n///        access-specifier \':\' member-specification[opt]\n///\nvoid Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc, SourceLocation AttrFixitLoc, ParsedAttributes &Attrs, unsigned TagType, Decl *TagDecl) {\n  // Parse the optional \'final\' keyword.\n  if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n    while (true) {\n      if (TagType == DeclSpec::TST_interface)\n      else if (Specifier == VirtSpecifiers::VS_Final)\n        Diag(FinalLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_override_control_keyword : diag::ext_override_control_keyword) << VirtSpecifiers::getSpecifierName(Specifier);"}}
[k]={{db,2473,"/// ParseOptionalCXX11VirtSpecifierSeq - Parse a virt-specifier-seq.\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\nvoid Parser::ParseOptionalCXX11VirtSpecifierSeq(VirtSpecifiers &VS, bool IsInterface, SourceLocation FriendLoc) {\n  while (true) {\n    if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n    } else if (Specifier == VirtSpecifiers::VS_Sealed) {\n    } else if (Specifier == VirtSpecifiers::VS_Abstract) {\n    } else if (Specifier == VirtSpecifiers::VS_GNU_Final) {\n    } else {\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_override_control_keyword : diag::ext_override_control_keyword) << VirtSpecifiers::getSpecifierName(Specifier);"},{db,3528,"/// ParseCXXMemberSpecification - Parse the class definition.\n///\n///      member-specification:\n///        member-declaration member-specification[opt]\n///        access-specifier \':\' member-specification[opt]\n///\nvoid Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc, SourceLocation AttrFixitLoc, ParsedAttributes &Attrs, unsigned TagType, Decl *TagDecl) {\n  // Parse the optional \'final\' keyword.\n  if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n    while (true) {\n      if (TagType == DeclSpec::TST_interface)\n      else if (Specifier == VirtSpecifiers::VS_Final)\n        Diag(FinalLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_override_control_keyword : diag::ext_override_control_keyword) << VirtSpecifiers::getSpecifierName(Specifier);"}}
},
},
["warn_cxx98_compat_pass_non_pod_arg_to_vararg"]={
["warn_cxx98_compat_pass_non_pod_arg_to_vararg"]={
Line 2,342: Line 2,342:
[c]=q,
[c]=q,
[b]={Wb,1318970984,Vb},
[b]={Wb,1318970984,Vb},
[k]={{M,880,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  case VAK_ValidInCXX11:\n    DiagRuntimeBehavior(E->getBeginLoc(), nullptr, PDiag(diag::warn_cxx98_compat_pass_non_pod_arg_to_vararg) << Ty << CT);"}}
[k]={{M,998,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  case VAK_ValidInCXX11:\n    DiagRuntimeBehavior(E->getBeginLoc(), nullptr, PDiag(diag::warn_cxx98_compat_pass_non_pod_arg_to_vararg) << Ty << CT);"}}
},
},
["warn_cxx98_compat_pp_line_too_big"]={
["warn_cxx98_compat_pp_line_too_big"]={
Line 2,357: Line 2,357:
[c]=N,
[c]=N,
[b]={Vc,1318641536,Tc},
[b]={Vc,1318641536,Tc},
[k]={{pd,1299,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  if (LineNo >= LineLimit)\n  else if (LangOpts.CPlusPlus11 && LineNo >= 32768U)\n    Diag(DigitTok, diag::warn_cxx98_compat_pp_line_too_big);"}}
[k]={{pd,1425,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  if (LineNo >= LineLimit)\n  else if (LangOpts.CPlusPlus11 && LineNo >= 32768U)\n    Diag(DigitTok, diag::warn_cxx98_compat_pp_line_too_big);"}}
},
},
["warn_cxx98_compat_raw_string_literal"]={
["warn_cxx98_compat_raw_string_literal"]={
Line 2,372: Line 2,372:
[c]=N,
[c]=N,
[b]={Vc,1318641536,Tc},
[b]={Vc,1318641536,Tc},
[k]={{vb,1943,"/// LexRawStringLiteral - Lex the remainder of a raw string literal, after\n/// having lexed R\", LR\", u8R\", uR\", or UR\".\nbool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  if (!isLexingRawMode())\n    Diag(BufferPtr, diag::warn_cxx98_compat_raw_string_literal);"}}
[k]={{vb,2146,"/// LexRawStringLiteral - Lex the remainder of a raw string literal, after\n/// having lexed R\", LR\", u8R\", uR\", or UR\".\nbool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  if (!isLexingRawMode())\n    Diag(BufferPtr, diag::warn_cxx98_compat_raw_string_literal);"}}
},
},
["warn_cxx98_compat_ref_qualifier"]={
["warn_cxx98_compat_ref_qualifier"]={
Line 2,387: Line 2,387:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{Mb,6465,"/// ParseRefQualifier - Parses a member function ref-qualifier. Returns\n/// true if a ref-qualifier is found.\nbool Parser::ParseRefQualifier(bool &RefQualifierIsLValueRef, SourceLocation &RefQualifierLoc) {\n  if (Tok.isOneOf(tok::amp, tok::ampamp)) {\n    Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_ref_qualifier : diag::ext_ref_qualifier);"}}
[k]={{Mb,7159,"/// ParseRefQualifier - Parses a member function ref-qualifier. Returns\n/// true if a ref-qualifier is found.\nbool Parser::ParseRefQualifier(bool &RefQualifierIsLValueRef, SourceLocation &RefQualifierLoc) {\n  if (Tok.isOneOf(tok::amp, tok::ampamp)) {\n    Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_ref_qualifier : diag::ext_ref_qualifier);"}}
},
},
["warn_cxx98_compat_reference_list_init"]={
["warn_cxx98_compat_reference_list_init"]={
Line 2,402: Line 2,402:
[c]=q,
[c]=q,
[b]={"2b349aee5b6f",1334818680,"Add missing -Wc++98-compat warnings for initializer list initializations which"},
[b]={"2b349aee5b6f",1334818680,"Add missing -Wc++98-compat warnings for initializer list initializations which"},
[k]={{fb,7328,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  if (S.getLangOpts().CPlusPlus11 && Entity.getType()->isReferenceType() && Args.size() == 1 && isa<InitListExpr>(Args[0]) && !Entity.isParamOrTemplateParamKind()) {\n    S.Diag(Init->getBeginLoc(), diag::warn_cxx98_compat_reference_list_init) << Init->getSourceRange();"}}
[k]={{fb,8609,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  if (S.getLangOpts().CPlusPlus11 && Entity.getType()->isReferenceType() && Args.size() == 1 && isa<InitListExpr>(Args[0]) && !Entity.isParamOrTemplateParamKind()) {\n    S.Diag(Init->getBeginLoc(), diag::warn_cxx98_compat_reference_list_init) << Init->getSourceRange();"}}
},
},
["warn_cxx98_compat_rvalue_reference"]={
["warn_cxx98_compat_rvalue_reference"]={
Line 2,417: Line 2,417:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{Mb,5705,"/// ParseDeclaratorInternal - Parse a C or C++ declarator. The direct-declarator\n/// is parsed by the function passed to it. Pass null, and the direct-declarator\n/// isn\'t parsed at all, making this function effectively parse the C++\n/// ptr-operator production.\n///\n/// If the grammar of this construct is extended, matching changes must also be\n/// made to TryParseDeclarator and MightBeDeclarator, and possibly to\n/// isConstructorDeclarator.\n///\n///      declarator: [C99 6.7.5] [C++ 8p4, dcl.decl]\n/// [C]    pointer[opt] direct-declarator\n/// [C++]  direct-declarator\n/// [C++]  ptr-operator declarator\n///\n///      pointer: [C99 6.7.5]\n///        \'*\' type-qualifier-list[opt]\n///        \'*\' type-qualifier-list[opt] pointer\n///\n///      ptr-operator:\n///        \'*\' cv-qualifier-seq[opt]\n///        \'&\'\n/// [C++0x] \'&&\'\n/// [GNU]  \'&\' restrict[opt] attributes[opt]\n/// [GNU?]  \'&&\' restrict[opt] attributes[opt]\n///        \'::\'[opt] nested-name-specifier \'*\' cv-qualifier-seq[opt]\nvoid Parser::ParseDeclaratorInternal(Declarator &D, DirectDeclParseFunction DirectDeclParser) {\n  if (Kind == tok::star || Kind == tok::caret) {\n  } else {\n    // Complain about rvalue references in C++03, but then go on and build\n    // the declarator.\n    if (Kind == tok::ampamp)\n      Diag(Loc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_rvalue_reference : diag::ext_rvalue_reference);"}}
[k]={{Mb,6273,"/// ParseDeclaratorInternal - Parse a C or C++ declarator. The direct-declarator\n/// is parsed by the function passed to it. Pass null, and the direct-declarator\n/// isn\'t parsed at all, making this function effectively parse the C++\n/// ptr-operator production.\n///\n/// If the grammar of this construct is extended, matching changes must also be\n/// made to TryParseDeclarator and MightBeDeclarator, and possibly to\n/// isConstructorDeclarator.\n///\n///      declarator: [C99 6.7.5] [C++ 8p4, dcl.decl]\n/// [C]    pointer[opt] direct-declarator\n/// [C++]  direct-declarator\n/// [C++]  ptr-operator declarator\n///\n///      pointer: [C99 6.7.5]\n///        \'*\' type-qualifier-list[opt]\n///        \'*\' type-qualifier-list[opt] pointer\n///\n///      ptr-operator:\n///        \'*\' cv-qualifier-seq[opt]\n///        \'&\'\n/// [C++0x] \'&&\'\n/// [GNU]  \'&\' restrict[opt] attributes[opt]\n/// [GNU?]  \'&&\' restrict[opt] attributes[opt]\n///        \'::\'[opt] nested-name-specifier \'*\' cv-qualifier-seq[opt]\nvoid Parser::ParseDeclaratorInternal(Declarator &D, DirectDeclParseFunction DirectDeclParser) {\n  if (Kind == tok::star || Kind == tok::caret) {\n  } else {\n    // Complain about rvalue references in C++03, but then go on and build\n    // the declarator.\n    if (Kind == tok::ampamp)\n      Diag(Loc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_rvalue_reference : diag::ext_rvalue_reference);"}}
},
},
["warn_cxx98_compat_scoped_enum"]={
["warn_cxx98_compat_scoped_enum"]={
Line 2,432: Line 2,432:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{Mb,4343,"/// ParseEnumSpecifier\n///      enum-specifier: [C99 6.7.2.2]\n///        \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU]  \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\' attributes[opt]\n/// [MS]    \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\'\n///        \'enum\' identifier\n/// [GNU]  \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\'  \'}\'\n///\n///      enum-head: [C++11]\n///        enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n///        enum-key attribute-specifier-seq[opt] nested-name-specifier\n///            identifier enum-base[opt]\n///\n///      enum-key: [C++11]\n///        \'enum\'\n///        \'enum\' \'class\'\n///        \'enum\' \'struct\'\n///\n///      enum-base: [C++11]\n///        \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++]  \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n  // In C++11, recognize \'enum class\' and \'enum struct\'.\n  if (Tok.isOneOf(tok::kw_class, tok::kw_struct) && getLangOpts().CPlusPlus) {\n    Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_scoped_enum : diag::ext_scoped_enum);"}}
[k]={{Mb,4792,"/// ParseEnumSpecifier\n///      enum-specifier: [C99 6.7.2.2]\n///        \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU]  \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\' attributes[opt]\n/// [MS]    \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\'\n///        \'enum\' identifier\n/// [GNU]  \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\'  \'}\'\n///\n///      enum-head: [C++11]\n///        enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n///        enum-key attribute-specifier-seq[opt] nested-name-specifier\n///            identifier enum-base[opt]\n///\n///      enum-key: [C++11]\n///        \'enum\'\n///        \'enum\' \'class\'\n///        \'enum\' \'struct\'\n///\n///      enum-base: [C++11]\n///        \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++]  \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n  // In C++11, recognize \'enum class\' and \'enum struct\'.\n  if (Tok.isOneOf(tok::kw_class, tok::kw_struct) && getLangOpts().CPlusPlus) {\n    Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_scoped_enum : diag::ext_scoped_enum);"}}
},
},
["warn_cxx98_compat_sfinae_access_control"]={
["warn_cxx98_compat_sfinae_access_control"]={
Line 2,447: Line 2,447:
[c]=q,
[c]=q,
[b]={"38c0e0417ccb",1318982821,"-Wc++98-compat: warn if a SFINAE substitution in C++11 suppresses an access"},
[b]={"38c0e0417ccb",1318982821,"-Wc++98-compat: warn if a SFINAE substitution in C++11 suppresses an access"},
[k]={{"clang/lib/Sema/Sema.cpp",1373,"void Sema::EmitCurrentDiagnostic(unsigned DiagID) {\n  // FIXME: It doesn\'t make sense to me that DiagID is an incoming argument here\n  // and yet we also use the current diag ID on the DiagnosticsEngine. This has\n  // been made more painfully obvious by the refactor that introduced this\n  // function, but it is possible that the incoming argument can be\n  // eliminated. If it truly cannot be (for example, there is some reentrancy\n  // issue I am not seeing yet), then there should at least be a clarifying\n  // comment somewhere.\n  if (std::optional<TemplateDeductionInfo *> Info = isSFINAEContext()) {\n    case DiagnosticIDs::SFINAE_AccessControl: {\n      Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control);"}}
[k]={{"clang/lib/Sema/Sema.cpp",1559,"void Sema::EmitCurrentDiagnostic(unsigned DiagID) {\n  // FIXME: It doesn\'t make sense to me that DiagID is an incoming argument here\n  // and yet we also use the current diag ID on the DiagnosticsEngine. This has\n  // been made more painfully obvious by the refactor that introduced this\n  // function, but it is possible that the incoming argument can be\n  // eliminated. If it truly cannot be (for example, there is some reentrancy\n  // issue I am not seeing yet), then there should at least be a clarifying\n  // comment somewhere.\n  if (std::optional<TemplateDeductionInfo *> Info = isSFINAEContext()) {\n    case DiagnosticIDs::SFINAE_AccessControl: {\n      Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control);"}}
},
},
["warn_cxx98_compat_static_assert"]={
["warn_cxx98_compat_static_assert"]={
Line 2,462: Line 2,462:
[c]=A,
[c]=A,
[b]={xc,1318892780,wc},
[b]={xc,1318892780,wc},
[k]={{db,846,"/// 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    } else\n      Diag(Tok, diag::warn_cxx98_compat_static_assert);"}}
[k]={{db,981,"/// 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    } else\n      Diag(Tok, diag::warn_cxx98_compat_static_assert);"}}
},
},
["warn_cxx98_compat_static_data_member_in_union"]={
["warn_cxx98_compat_static_data_member_in_union"]={
Line 2,477: Line 2,477:
[c]=q,
[c]=q,
[b]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding"},
[b]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding"},
[k]={{G,6765,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (SC == SC_Static && CurContext->isRecord()) {\n      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n        if (FunctionOrMethod) {\n        } else if (AnonStruct) {\n        } else if (RD->isUnion()) {\n          Diag(D.getIdentifierLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_static_data_member_in_union : diag::ext_static_data_member_in_union) << Name;"}}
[k]={{G,7606,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (!getLangOpts().CPlusPlus) {\n  } else {\n    if (SC == SC_Static && CurContext->isRecord()) {\n      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n        if (FunctionOrMethod) {\n        } else if (AnonStruct) {\n        } else if (RD->isUnion()) {\n          Diag(D.getIdentifierLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_static_data_member_in_union : diag::ext_static_data_member_in_union) << Name;"}}
},
},
["warn_cxx98_compat_switch_into_protected_scope"]={
["warn_cxx98_compat_switch_into_protected_scope"]={
Line 2,492: Line 2,492:
[c]=q,
[c]=q,
[b]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD"},
[b]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD"},
[k]={{xd,639,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    for (SwitchCase *SC = SS->getSwitchCaseList(); SC; SC = SC->getNextSwitchCase()) {\n      CheckJump(SS, SC, Loc, diag::err_switch_into_protected_scope, 0, diag::warn_cxx98_compat_switch_into_protected_scope);"}}
[k]={{xd,713,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    for (SwitchCase *SC = SS->getSwitchCaseList(); SC; SC = SC->getNextSwitchCase()) {\n      CheckJump(SS, SC, Loc, diag::err_switch_into_protected_scope, 0, diag::warn_cxx98_compat_switch_into_protected_scope);"}}
},
},
["warn_cxx98_compat_temp_copy"]={
["warn_cxx98_compat_temp_copy"]={
Line 2,507: Line 2,507:
[c]=q,
[c]=q,
[b]={"c620f554b9c4",1319043356,"-Wc++98-compat: diagnose if a reference is bound to a prvalue which does not"},
[b]={"c620f554b9c4",1319043356,"-Wc++98-compat: diagnose if a reference is bound to a prvalue which does not"},
[k]={{fb,5884,"/// Check whether elidable copy construction for binding a reference to\n/// a temporary would have succeeded if we were building in C++98 mode, for\n/// -Wc++98-compat.\nstatic void CheckCXX98CompatAccessibleCopy(Sema &S, const InitializedEntity &Entity, Expr *CurInitExpr) {\n  if (S.Diags.isIgnored(diag::warn_cxx98_compat_temp_copy, Loc))"},{fb,5898,"/// Check whether elidable copy construction for binding a reference to\n/// a temporary would have succeeded if we were building in C++98 mode, for\n/// -Wc++98-compat.\nstatic void CheckCXX98CompatAccessibleCopy(Sema &S, const InitializedEntity &Entity, Expr *CurInitExpr) {\n  PartialDiagnostic Diag = S.PDiag(diag::warn_cxx98_compat_temp_copy) << OR << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange();"}}
[k]={{fb,6911,"/// Check whether elidable copy construction for binding a reference to\n/// a temporary would have succeeded if we were building in C++98 mode, for\n/// -Wc++98-compat.\nstatic void CheckCXX98CompatAccessibleCopy(Sema &S, const InitializedEntity &Entity, Expr *CurInitExpr) {\n  if (S.Diags.isIgnored(diag::warn_cxx98_compat_temp_copy, Loc))"},{fb,6927,"/// Check whether elidable copy construction for binding a reference to\n/// a temporary would have succeeded if we were building in C++98 mode, for\n/// -Wc++98-compat.\nstatic void CheckCXX98CompatAccessibleCopy(Sema &S, const InitializedEntity &Entity, Expr *CurInitExpr) {\n  PartialDiagnostic Diag = S.PDiag(diag::warn_cxx98_compat_temp_copy) << OR << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange();"}}
},
},
["warn_cxx98_compat_template_arg_extra_parens"]={
["warn_cxx98_compat_template_arg_extra_parens"]={
Line 2,522: Line 2,522:
[c]=q,
[c]=q,
[b]={Wb,1318970984,Vb},
[b]={Wb,1318970984,Vb},
[k]={{wb,5538,"/// 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 (S.getLangOpts().MicrosoftExt) {\n  } else {\n    while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {\n      if (!Invalid && !ExtraParens) {\n        S.Diag(Arg->getBeginLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_extra_parens : diag::ext_template_arg_extra_parens) << Arg->getSourceRange();"},{wb,5726,"/// 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  while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {\n    if (!Invalid && !ExtraParens) {\n      S.Diag(Arg->getBeginLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_extra_parens : diag::ext_template_arg_extra_parens) << Arg->getSourceRange();"}}
[k]={{wb,6768,"/// 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 (S.getLangOpts().MicrosoftExt) {\n  } else {\n    while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {\n      if (!Invalid && !ExtraParens) {\n        S.Diag(Arg->getBeginLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_extra_parens : diag::ext_template_arg_extra_parens) << Arg->getSourceRange();"},{wb,6991,"/// 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  while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {\n    if (!Invalid && !ExtraParens) {\n      S.Diag(Arg->getBeginLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_extra_parens : diag::ext_template_arg_extra_parens) << Arg->getSourceRange();"}}
},
},
["warn_cxx98_compat_template_arg_local_type"]={
["warn_cxx98_compat_template_arg_local_type"]={
Line 2,537: Line 2,537:
[c]=q,
[c]=q,
[b]={Wb,1318970984,Vb},
[b]={Wb,1318970984,Vb},
[k]={{wb,5270,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n  if (Tag->getDeclContext()->isFunctionOrMethod()) {\n    S.Diag(SR.getBegin(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_local_type : diag::ext_template_arg_local_type) << S.Context.getTypeDeclType(Tag) << SR;"}}
[k]={{wb,6458,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n  if (Tag->getDeclContext()->isFunctionOrMethod()) {\n    S.Diag(SR.getBegin(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_local_type : diag::ext_template_arg_local_type) << S.Context.getTypeDeclType(Tag) << SR;"}}
},
},
["warn_cxx98_compat_template_arg_null"]={
["warn_cxx98_compat_template_arg_null"]={
Line 2,552: Line 2,552:
[c]=q,
[c]=q,
[b]={"bc8c5b5d6744",1335405063,"Two missing -Wc++98-compat warnings, for null pointers as non-type template"},
[b]={"bc8c5b5d6744",1335405063,"Two missing -Wc++98-compat warnings, for null pointers as non-type template"},
[k]={{wb,5570,"/// 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 our parameter has pointer type, check for a null template value.\n  if (ParamType->isPointerType() || ParamType->isNullPtrType()) {\n    case NPV_NullPointer:\n      S.Diag(Arg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);"},{wb,5770,"/// 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  case NPV_NullPointer:\n    S.Diag(ResultArg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);"},{wb,6323,"/// 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_NullPointer:\n      Diag(Arg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);"}}
[k]={{wb,6805,"/// 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 our parameter has pointer type, check for a null template value.\n  if (ParamType->isPointerType() || ParamType->isNullPtrType()) {\n    case NPV_NullPointer:\n      S.Diag(Arg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);"},{wb,7042,"/// 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  case NPV_NullPointer:\n    S.Diag(ResultArg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);"},{wb,7713,"/// 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_NullPointer:\n      Diag(Arg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);"}}
},
},
["warn_cxx98_compat_template_arg_object_internal"]={
["warn_cxx98_compat_template_arg_object_internal"]={
Line 2,567: Line 2,567:
[c]=q,
[c]=q,
[b]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"},
[b]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"},
[k]={{wb,5629,"/// 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(Arg->getBeginLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_object_internal : diag::ext_template_arg_object_internal) << !Func << Entity << Arg->getSourceRange();"}}
[k]={{wb,6872,"/// 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(Arg->getBeginLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_object_internal : diag::ext_template_arg_object_internal) << !Func << Entity << Arg->getSourceRange();"}}
},
},
["warn_cxx98_compat_template_arg_unnamed_type"]={
["warn_cxx98_compat_template_arg_unnamed_type"]={
Line 2,582: Line 2,582:
[c]=q,
[c]=q,
[b]={Wb,1318970984,Vb},
[b]={Wb,1318970984,Vb},
[k]={{wb,5275,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n  if (!Tag->hasNameForLinkage()) {\n    S.Diag(SR.getBegin(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_unnamed_type : diag::ext_template_arg_unnamed_type) << SR;"}}
[k]={{wb,6467,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n  if (!Tag->hasNameForLinkage()) {\n    S.Diag(SR.getBegin(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_unnamed_type : diag::ext_template_arg_unnamed_type) << SR;"}}
},
},
["warn_cxx98_compat_template_outside_of_template"]={
["warn_cxx98_compat_template_outside_of_template"]={
Line 2,597: Line 2,597:
[c]=q,
[c]=q,
[b]={Wb,1318970984,Vb},
[b]={Wb,1318970984,Vb},
[k]={{wb,4210,"/// Form a template name from a name that is syntactically required to name a\n/// template, either due to use of the \'template\' keyword or because a name in\n/// this syntactic context is assumed to name a template (C++ [temp.names]p2-4).\n///\n/// This action forms a template name given the name of the template and its\n/// optional scope specifier. This is used when the \'template\' keyword is used\n/// or when the parsing context unambiguously treats a following \'<\' as\n/// introducing a template argument list. Note that this may produce a\n/// non-dependent template name if we can perform the lookup now and identify\n/// the named template.\n///\n/// For example, given \"x.MetaFun::template apply\", the scope specifier\n/// \\p SS will be \"MetaFun::\", \\p TemplateKWLoc contains the location\n/// of the \"template\" keyword, and \"apply\" is the \\p Name.\nTemplateNameKind Sema::ActOnTemplateName(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext, TemplateTy &Result, bool AllowInjectedClassName) {\n  if (TemplateKWLoc.isValid() && S && !S->getTemplateParamParent())\n    Diag(TemplateKWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_outside_of_template : diag::ext_template_outside_of_template) << FixItHint::CreateRemoval(TemplateKWLoc);"}}
[k]={{wb,5083,"/// Form a template name from a name that is syntactically required to name a\n/// template, either due to use of the \'template\' keyword or because a name in\n/// this syntactic context is assumed to name a template (C++ [temp.names]p2-4).\n///\n/// This action forms a template name given the name of the template and its\n/// optional scope specifier. This is used when the \'template\' keyword is used\n/// or when the parsing context unambiguously treats a following \'<\' as\n/// introducing a template argument list. Note that this may produce a\n/// non-dependent template name if we can perform the lookup now and identify\n/// the named template.\n///\n/// For example, given \"x.MetaFun::template apply\", the scope specifier\n/// \\p SS will be \"MetaFun::\", \\p TemplateKWLoc contains the location\n/// of the \"template\" keyword, and \"apply\" is the \\p Name.\nTemplateNameKind Sema::ActOnTemplateName(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext, TemplateTy &Result, bool AllowInjectedClassName) {\n  if (TemplateKWLoc.isValid() && S && !S->getTemplateParamParent())\n    Diag(TemplateKWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_outside_of_template : diag::ext_template_outside_of_template) << FixItHint::CreateRemoval(TemplateKWLoc);"}}
},
},
["warn_cxx98_compat_template_parameter_default_in_function_template"]={
["warn_cxx98_compat_template_parameter_default_in_function_template"]={
Line 2,612: Line 2,612:
[c]=q,
[c]=q,
[b]={Wb,1318970984,Vb},
[b]={Wb,1318970984,Vb},
[k]={{wb,2274,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n  case Sema::TPC_FriendFunctionTemplateDefinition:\n    S.Diag(ParamLoc, S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_parameter_default_in_function_template : diag::ext_template_parameter_default_in_function_template) << DefArgRange;"}}
[k]={{wb,2723,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n  case Sema::TPC_FriendFunctionTemplateDefinition:\n    S.Diag(ParamLoc, S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_parameter_default_in_function_template : diag::ext_template_parameter_default_in_function_template) << DefArgRange;"}}
},
},
["warn_cxx98_compat_top_level_semi"]={
["warn_cxx98_compat_top_level_semi"]={
Line 2,627: Line 2,627:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{tc,179,"void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) {\n  // C++11 allows extra semicolons at namespace scope, but not in any of the\n  // other contexts.\n  if (Kind == OutsideFunction && getLangOpts().CPlusPlus) {\n    if (getLangOpts().CPlusPlus11)\n      Diag(StartLoc, diag::warn_cxx98_compat_top_level_semi) << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));"}}
[k]={{tc,198,"void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) {\n  // C++11 allows extra semicolons at namespace scope, but not in any of the\n  // other contexts.\n  if (Kind == OutsideFunction && getLangOpts().CPlusPlus) {\n    if (getLangOpts().CPlusPlus11)\n      Diag(StartLoc, diag::warn_cxx98_compat_top_level_semi) << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));"}}
},
},
["warn_cxx98_compat_trailing_return_type"]={
["warn_cxx98_compat_trailing_return_type"]={
Line 2,642: Line 2,642:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{Mb,6421,"/// ParseFunctionDeclarator - We are after the identifier and have parsed the\n/// declarator D up to a paren, which indicates that we are parsing function\n/// arguments.\n///\n/// If FirstArgAttrs is non-null, then the caller parsed those attributes\n/// immediately after the open paren - they will be applied to the DeclSpec\n/// of the first parameter.\n///\n/// If RequiresArg is true, then the first argument of the function is required\n/// to be present and required to not be an identifier list.\n///\n/// For C++, after the parameter-list, it also parses the cv-qualifier-seq[opt],\n/// (C++11) ref-qualifier[opt], exception-specification[opt],\n/// (C++11) attribute-specifier-seq[opt], (C++11) trailing-return-type[opt] and\n/// (C++2a) the trailing requires-clause.\n///\n/// [C++11] exception-specification:\n///          dynamic-exception-specification\n///          noexcept-specification\n///\nvoid Parser::ParseFunctionDeclarator(Declarator &D, ParsedAttributes &FirstArgAttrs, BalancedDelimiterTracker &Tracker, bool IsAmbiguous, bool RequiresArg) {\n  if (isFunctionDeclaratorIdentifierList()) {\n  } else {\n    if (getLangOpts().CPlusPlus) {\n      if (getLangOpts().CPlusPlus11 && Tok.is(tok::arrow)) {\n        Diag(Tok, diag::warn_cxx98_compat_trailing_return_type);"}}
[k]={{Mb,7100,"/// ParseFunctionDeclarator - We are after the identifier and have parsed the\n/// declarator D up to a paren, which indicates that we are parsing function\n/// arguments.\n///\n/// If FirstArgAttrs is non-null, then the caller parsed those attributes\n/// immediately after the open paren - they will be applied to the DeclSpec\n/// of the first parameter.\n///\n/// If RequiresArg is true, then the first argument of the function is required\n/// to be present and required to not be an identifier list.\n///\n/// For C++, after the parameter-list, it also parses the cv-qualifier-seq[opt],\n/// (C++11) ref-qualifier[opt], exception-specification[opt],\n/// (C++11) attribute-specifier-seq[opt], (C++11) trailing-return-type[opt] and\n/// (C++2a) the trailing requires-clause.\n///\n/// [C++11] exception-specification:\n///          dynamic-exception-specification\n///          noexcept-specification\n///\nvoid Parser::ParseFunctionDeclarator(Declarator &D, ParsedAttributes &FirstArgAttrs, BalancedDelimiterTracker &Tracker, bool IsAmbiguous, bool RequiresArg) {\n  if (isFunctionDeclaratorIdentifierList()) {\n  } else {\n    if (getLangOpts().CPlusPlus) {\n      if (getLangOpts().CPlusPlus11 && Tok.is(tok::arrow)) {\n        Diag(Tok, diag::warn_cxx98_compat_trailing_return_type);"}}
},
},
["warn_cxx98_compat_two_right_angle_brackets"]={
["warn_cxx98_compat_two_right_angle_brackets"]={
Line 2,657: Line 2,657:
[c]=A,
[c]=A,
[b]={Hb,1318655374,Ib},
[b]={Hb,1318655374,Ib},
[k]={{"clang/lib/Parse/ParseTemplate.cpp",1048,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n    if (getLangOpts().CPlusPlus11 && (Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))\n      DiagId = diag::warn_cxx98_compat_two_right_angle_brackets;"}}
[k]={{"clang/lib/Parse/ParseTemplate.cpp",1207,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n    if (getLangOpts().CPlusPlus11 && (Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))\n      DiagId = diag::warn_cxx98_compat_two_right_angle_brackets;"}}
},
},
["warn_cxx98_compat_typename_outside_of_template"]={
["warn_cxx98_compat_typename_outside_of_template"]={
Line 2,672: Line 2,672:
[c]=q,
[c]=q,
[b]={Wb,1318970984,Vb},
[b]={Wb,1318970984,Vb},
[k]={{wb,8898,"TypeResult Sema::ActOnTypenameType(Scope *S, SourceLocation TypenameLoc, const CXXScopeSpec &SS, const IdentifierInfo &II, SourceLocation IdLoc, ImplicitTypenameContext IsImplicitTypename) {\n  if (TypenameLoc.isValid() && S && !S->getTemplateParamParent())\n    Diag(TypenameLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_typename_outside_of_template : diag::ext_typename_outside_of_template) << FixItHint::CreateRemoval(TypenameLoc);"},{wb,8911,"TypeResult Sema::ActOnTypenameType(Scope *S, SourceLocation TypenameLoc, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateIn, IdentifierInfo *TemplateII, SourceLocation TemplateIILoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  if (TypenameLoc.isValid() && S && !S->getTemplateParamParent())\n    Diag(TypenameLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_typename_outside_of_template : diag::ext_typename_outside_of_template) << FixItHint::CreateRemoval(TypenameLoc);"}}
[k]={{wb,10810,"TypeResult Sema::ActOnTypenameType(Scope *S, SourceLocation TypenameLoc, const CXXScopeSpec &SS, const IdentifierInfo &II, SourceLocation IdLoc, ImplicitTypenameContext IsImplicitTypename) {\n  if (TypenameLoc.isValid() && S && !S->getTemplateParamParent())\n    Diag(TypenameLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_typename_outside_of_template : diag::ext_typename_outside_of_template) << FixItHint::CreateRemoval(TypenameLoc);"},{wb,10842,"TypeResult Sema::ActOnTypenameType(Scope *S, SourceLocation TypenameLoc, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateIn, IdentifierInfo *TemplateII, SourceLocation TemplateIILoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  if (TypenameLoc.isValid() && S && !S->getTemplateParamParent())\n    Diag(TypenameLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_typename_outside_of_template : diag::ext_typename_outside_of_template) << FixItHint::CreateRemoval(TypenameLoc);"}}
},
},
["warn_cxx98_compat_unelaborated_friend_type"]={
["warn_cxx98_compat_unelaborated_friend_type"]={
Line 2,687: Line 2,687:
[c]=q,
[c]=q,
[b]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2."},
[b]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2."},
[k]={{F,14668,"/// Perform semantic analysis of the given friend type declaration.\n///\n/// \\returns A friend declaration that.\nFriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, SourceLocation FriendLoc, TypeSourceInfo *TSInfo) {\n  // C++03 [class.friend]p2:\n  //  An elaborated-type-specifier shall be used in a friend declaration\n  //  for a class.*\n  //\n  //  * The class-key of the elaborated-type-specifier is required.\n  if (!CodeSynthesisContexts.empty()) {\n  } else {\n    if (!T->isElaboratedTypeSpecifier()) {\n      // If we evaluated the type to a record type, suggest putting\n      // a tag in front.\n      if (const RecordType *RT = T->getAs<RecordType>()) {\n        Diag(TypeRange.getBegin(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_unelaborated_friend_type : diag::ext_unelaborated_friend_type) << (unsigned)RD->getTagKind() << T << FixItHint::CreateInsertion(getLocForEndOfToken(FriendLoc), InsertionText);"}}
[k]={{F,17211,"/// Perform semantic analysis of the given friend type declaration.\n///\n/// \\returns A friend declaration that.\nFriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, SourceLocation FriendLoc, TypeSourceInfo *TSInfo) {\n  // C++03 [class.friend]p2:\n  //  An elaborated-type-specifier shall be used in a friend declaration\n  //  for a class.*\n  //\n  //  * The class-key of the elaborated-type-specifier is required.\n  if (!CodeSynthesisContexts.empty()) {\n  } else {\n    if (!T->isElaboratedTypeSpecifier()) {\n      // If we evaluated the type to a record type, suggest putting\n      // a tag in front.\n      if (const RecordType *RT = T->getAs<RecordType>()) {\n        Diag(TypeRange.getBegin(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_unelaborated_friend_type : diag::ext_unelaborated_friend_type) << (unsigned)RD->getTagKind() << T << FixItHint::CreateInsertion(getLocForEndOfToken(FriendLoc), InsertionText);"}}
},
},
["warn_cxx98_compat_unicode_literal"]={
["warn_cxx98_compat_unicode_literal"]={
Line 2,702: Line 2,702:
[c]=N,
[c]=N,
[b]={Vc,1318641536,Tc},
[b]={Vc,1318641536,Tc},
[k]={{vb,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);"},{vb,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);"}}
[k]={{vb,2087,"/// 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);"},{vb,2303,"/// 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_cxx98_compat_unicode_type"]={
["warn_cxx98_compat_unicode_type"]={
Line 2,717: Line 2,717:
[c]=q,
[c]=q,
[b]={xc,1318892780,wc},
[b]={xc,1318892780,wc},
[k]={{dc,1232,"/// 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 (TypeSpecType == TST_char8)\n  else if (TypeSpecType == TST_char16 || TypeSpecType == TST_char32)\n    S.Diag(TSTLoc, diag::warn_cxx98_compat_unicode_type) << (TypeSpecType == TST_char16 ? \"char16_t\" : \"char32_t\");"}}
[k]={{dc,1377,"/// 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 (TypeSpecType == TST_char8)\n  else if (TypeSpecType == TST_char16 || TypeSpecType == TST_char32)\n    S.Diag(TSTLoc, diag::warn_cxx98_compat_unicode_type) << (TypeSpecType == TST_char16 ? \"char16_t\" : \"char32_t\");"}}
},
},
["warn_cxx98_compat_using_decl_constructor"]={
["warn_cxx98_compat_using_decl_constructor"]={
Line 2,732: Line 2,732:
[c]=q,
[c]=q,
[b]={Wb,1318970984,Vb},
[b]={Wb,1318970984,Vb},
[k]={{F,10353,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n  case UnqualifiedIdKind::IK_ConstructorTemplateId:\n    Diag(Name.getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_using_decl_constructor : diag::err_using_decl_constructor) << SS.getRange();"}}
[k]={{F,12039,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n  case UnqualifiedIdKind::IK_ConstructorTemplateId:\n    Diag(Name.getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_using_decl_constructor : diag::err_using_decl_constructor) << SS.getRange();"}}
},
},
["warn_cxx98_compat_variadic_macro"]={
["warn_cxx98_compat_variadic_macro"]={
Line 2,747: Line 2,747:
[c]=N,
[c]=N,
[b]={Vc,1318641536,Tc},
[b]={Vc,1318641536,Tc},
[k]={{pd,2435,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  while (true) {\n    case tok::ellipsis: // #define X(... -> C99 varargs\n      if (!LangOpts.C99)\n        Diag(Tok, LangOpts.CPlusPlus11 ? diag::warn_cxx98_compat_variadic_macro : diag::ext_variadic_macro);"}}
[k]={{pd,2679,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  while (true) {\n    case tok::ellipsis: // #define X(... -> C99 varargs\n      if (!LangOpts.C99)\n        Diag(Tok, LangOpts.CPlusPlus11 ? diag::warn_cxx98_compat_variadic_macro : diag::ext_variadic_macro);"}}
},
},
["warn_cxx98_compat_variadic_templates"]={
["warn_cxx98_compat_variadic_templates"]={
Line 2,762: Line 2,762:
[c]=A,
[c]=A,
[b]={"a722170eb95d",1318544285,"Implement the first piece of a -Wc++98-compat flag so that people can build in"},
[b]={"a722170eb95d",1318544285,"Implement the first piece of a -Wc++98-compat flag so that people can build in"},
[k]={{"clang/lib/Parse/ParseTemplate.cpp",735,"/// ParseTypeParameter - Parse a template type parameter (C++ [temp.param]).\n/// Other kinds of template parameters are parsed in\n/// ParseTemplateTemplateParameter and ParseNonTypeTemplateParameter.\n///\n///      type-parameter:    [C++ temp.param]\n///        \'class\' ...[opt][C++0x] identifier[opt]\n///        \'class\' identifier[opt] \'=\' type-id\n///        \'typename\' ...[opt][C++0x] identifier[opt]\n///        \'typename\' identifier[opt] \'=\' type-id\nNamedDecl *Parser::ParseTypeParameter(unsigned Depth, unsigned Position) {\n  if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n    Diag(EllipsisLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"},{"clang/lib/Parse/ParseTemplate.cpp",838,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  if (TryConsumeToken(tok::ellipsis, EllipsisLoc))\n    Diag(EllipsisLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"},{Cb,5224,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // If there was an ellipsis in the declarator, the declaration declares a\n  // parameter pack whose type may be a pack expansion type.\n  if (D.hasEllipsis()) {\n    case DeclaratorContext::TemplateParam:\n      // C++0x [temp.param]p15:\n      //  If a template-parameter is a [...] is a parameter-declaration that\n      //  declares a parameter pack (8.3.5), then the template-parameter is a\n      //  template parameter pack (14.5.3).\n      //\n      // Note: core issue 778 clarifies that, if there are any unexpanded\n      // parameter packs in the type of the non-type template parameter, then\n      // it expands those parameter packs.\n      if (T->containsUnexpandedParameterPack())\n      else\n        S.Diag(D.getEllipsisLoc(), LangOpts.CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"}}
[k]={{"clang/lib/Parse/ParseTemplate.cpp",827,"/// ParseTypeParameter - Parse a template type parameter (C++ [temp.param]).\n/// Other kinds of template parameters are parsed in\n/// ParseTemplateTemplateParameter and ParseNonTypeTemplateParameter.\n///\n///      type-parameter:    [C++ temp.param]\n///        \'class\' ...[opt][C++0x] identifier[opt]\n///        \'class\' identifier[opt] \'=\' type-id\n///        \'typename\' ...[opt][C++0x] identifier[opt]\n///        \'typename\' identifier[opt] \'=\' type-id\nNamedDecl *Parser::ParseTypeParameter(unsigned Depth, unsigned Position) {\n  if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n    Diag(EllipsisLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"},{"clang/lib/Parse/ParseTemplate.cpp",959,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  if (TryConsumeToken(tok::ellipsis, EllipsisLoc))\n    Diag(EllipsisLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"},{Cb,5945,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // If there was an ellipsis in the declarator, the declaration declares a\n  // parameter pack whose type may be a pack expansion type.\n  if (D.hasEllipsis()) {\n    case DeclaratorContext::TemplateParam:\n      // C++0x [temp.param]p15:\n      //  If a template-parameter is a [...] is a parameter-declaration that\n      //  declares a parameter pack (8.3.5), then the template-parameter is a\n      //  template parameter pack (14.5.3).\n      //\n      // Note: core issue 778 clarifies that, if there are any unexpanded\n      // parameter packs in the type of the non-type template parameter, then\n      // it expands those parameter packs.\n      if (T->containsUnexpandedParameterPack())\n      else\n        S.Diag(D.getEllipsisLoc(), LangOpts.CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"}}
},
},
["warn_cxx_ms_struct"]={
["warn_cxx_ms_struct"]={
Line 2,776: Line 2,776:
[c]=q,
[c]=q,
[b]={"95833f33bda6",1393533049,"Diagnose attempts to apply ms_struct to records with base classes"},
[b]={"95833f33bda6",1393533049,"Diagnose attempts to apply ms_struct to records with base classes"},
[k]={{F,6139,"/// 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  // ms_struct is a request to use the same ABI rules as MSVC.  Check\n  // whether this class uses any C++ features that are implemented\n  // completely differently in MSVC, and if so, emit a diagnostic.\n  // That diagnostic defaults to an error, but we allow projects to\n  // map it down to a warning (or ignore it).  It\'s a fairly common\n  // practice among users of the ms_struct pragma to mass-annotate\n  // headers, sweeping up a bunch of types that the project doesn\'t\n  // really rely on MSVC-compatible layout for.  We must therefore\n  // support \"ms_struct except for C++ stuff\" as a secondary ABI.\n  // Don\'t emit this diagnostic if the feature was enabled as a\n  // language option (as opposed to via a pragma or attribute), as\n  // the option -mms-bitfields otherwise essentially makes it impossible\n  // to build C++ code, unless this diagnostic is turned off.\n  if (Record->isMsStruct(Context) && !Context.getLangOpts().MSBitfields && (Record->isPolymorphic() || Record->getNumBases())) {\n    Diag(Record->getLocation(), diag::warn_cxx_ms_struct);"}}
[k]={{F,7186,"/// 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  // ms_struct is a request to use the same ABI rules as MSVC.  Check\n  // whether this class uses any C++ features that are implemented\n  // completely differently in MSVC, and if so, emit a diagnostic.\n  // That diagnostic defaults to an error, but we allow projects to\n  // map it down to a warning (or ignore it).  It\'s a fairly common\n  // practice among users of the ms_struct pragma to mass-annotate\n  // headers, sweeping up a bunch of types that the project doesn\'t\n  // really rely on MSVC-compatible layout for.  We must therefore\n  // support \"ms_struct except for C++ stuff\" as a secondary ABI.\n  // Don\'t emit this diagnostic if the feature was enabled as a\n  // language option (as opposed to via a pragma or attribute), as\n  // the option -mms-bitfields otherwise essentially makes it impossible\n  // to build C++ code, unless this diagnostic is turned off.\n  if (Record->isMsStruct(Context) && !Context.getLangOpts().MSBitfields && (Record->isPolymorphic() || Record->getNumBases())) {\n    Diag(Record->getLocation(), diag::warn_cxx_ms_struct);"}}
},
},
["warn_dangling_else"]={
["warn_dangling_else"]={
Line 2,790: Line 2,790:
[c]=A,
[c]=A,
[b]={"3cef10814aed",1324596377,"Add -Wdangling-else."},
[b]={"3cef10814aed",1324596377,"Add -Wdangling-else."},
[k]={{Yb,1500,"/// ParseIfStatement\n///      if-statement: [C99 6.8.4.1]\n///        \'if\' \'(\' expression \')\' statement\n///        \'if\' \'(\' expression \')\' statement \'else\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement \'else\' statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement \'else\' statement\n///\nStmtResult Parser::ParseIfStatement(SourceLocation *TrailingElseLoc) {\n  if (Tok.is(tok::kw_else)) {\n  } else if (Tok.is(tok::code_completion)) {\n  } else if (InnerStatementTrailingElseLoc.isValid()) {\n    Diag(InnerStatementTrailingElseLoc, diag::warn_dangling_else);"}}
[k]={{Yb,1623,"/// ParseIfStatement\n///      if-statement: [C99 6.8.4.1]\n///        \'if\' \'(\' expression \')\' statement\n///        \'if\' \'(\' expression \')\' statement \'else\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement \'else\' statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement \'else\' statement\n///\nStmtResult Parser::ParseIfStatement(SourceLocation *TrailingElseLoc) {\n  if (Tok.is(tok::kw_else)) {\n  } else if (Tok.is(tok::code_completion)) {\n  } else if (InnerStatementTrailingElseLoc.isValid()) {\n    Diag(InnerStatementTrailingElseLoc, diag::warn_dangling_else);"}}
},
},
["warn_dangling_lifetime_pointer"]={
["warn_dangling_lifetime_pointer"]={
Line 2,804: Line 2,804:
[c]=q,
[c]=q,
[b]={"e5e10b526f2f",1565118809,"Teach some warnings to respect gsl::Pointer and gsl::Owner attributes"},
[b]={"e5e10b526f2f",1565118809,"Teach some warnings to respect gsl::Pointer and gsl::Owner attributes"},
[k]={{fb,6923,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_Extended: {\n      if (IsGslPtrInitWithGslTempOwner && DiagLoc.isValid()) {\n        Diag(DiagLoc, diag::warn_dangling_lifetime_pointer) << DiagRange;"},{fb,7018,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_New:\n      if (isa<MaterializeTemporaryExpr>(L)) {\n        if (IsGslPtrInitWithGslTempOwner)\n          Diag(DiagLoc, diag::warn_dangling_lifetime_pointer) << DiagRange;"},{fb,7094,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  bool EnableLifetimeWarnings = !getDiagnostics().isIgnored(diag::warn_dangling_lifetime_pointer, SourceLocation());"}}
[k]={{fb,8123,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_Extended: {\n      if (IsGslPtrInitWithGslTempOwner && DiagLoc.isValid()) {\n        Diag(DiagLoc, diag::warn_dangling_lifetime_pointer) << DiagRange;"},{fb,8239,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_New:\n      if (isa<MaterializeTemporaryExpr>(L)) {\n        if (IsGslPtrInitWithGslTempOwner)\n          Diag(DiagLoc, diag::warn_dangling_lifetime_pointer) << DiagRange;"},{fb,8329,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  bool EnableLifetimeWarnings = !getDiagnostics().isIgnored(diag::warn_dangling_lifetime_pointer, SourceLocation());"}}
},
},
["warn_dangling_lifetime_pointer_member"]={
["warn_dangling_lifetime_pointer_member"]={
Line 2,818: Line 2,818:
[c]=q,
[c]=q,
[b]={"e5e10b526f2f",1565118809,"Teach some warnings to respect gsl::Pointer and gsl::Owner attributes"},
[b]={"e5e10b526f2f",1565118809,"Teach some warnings to respect gsl::Pointer and gsl::Owner attributes"},
[k]={{fb,6965,"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(DiagLoc, diag::warn_dangling_lifetime_pointer_member) << ExtendingDecl << DiagRange;"}}
[k]={{fb,8171,"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(DiagLoc, diag::warn_dangling_lifetime_pointer_member) << ExtendingDecl << DiagRange;"}}
},
},
["warn_dangling_member"]={
["warn_dangling_member"]={
Line 2,832: Line 2,832:
[c]=q,
[c]=q,
[b]={"0e3102d1dc04",1532393708,"Warn if a local variable\'s initializer retains a pointer/reference to a"},
[b]={"0e3102d1dc04",1532393708,"Warn if a local variable\'s initializer retains a pointer/reference to a"},
[k]={{fb,6970,"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          Diag(DiagLoc, shouldLifetimeExtendThroughPath(Path) != PathLifetimeKind::NoExtend ? diag::err_dangling_member : diag::warn_dangling_member) << ExtendingDecl << IsSubobjectMember << RK << DiagRange;"}}
[k]={{fb,8182,"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          Diag(DiagLoc, shouldLifetimeExtendThroughPath(Path) != PathLifetimeKind::NoExtend ? diag::err_dangling_member : diag::warn_dangling_member) << ExtendingDecl << IsSubobjectMember << RK << DiagRange;"}}
},
},
["warn_dangling_variable"]={
["warn_dangling_variable"]={
Line 2,846: Line 2,846:
[c]=q,
[c]=q,
[b]={"0e3102d1dc04",1532393708,"Warn if a local variable\'s initializer retains a pointer/reference to a"},
[b]={"0e3102d1dc04",1532393708,"Warn if a local variable\'s initializer retains a pointer/reference to a"},
[k]={{fb,6952,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_Extended: {\n      case PathLifetimeKind::NoExtend:\n        Diag(DiagLoc, diag::warn_dangling_variable) << RK << !Entity.getParent() << ExtendingEntity->getDecl()->isImplicit() << ExtendingEntity->getDecl() << Init->isGLValue() << DiagRange;"}}
[k]={{fb,8154,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    case LK_Extended: {\n      case PathLifetimeKind::NoExtend:\n        Diag(DiagLoc, diag::warn_dangling_variable) << RK << !Entity.getParent() << ExtendingEntity->getDecl()->isImplicit() << ExtendingEntity->getDecl() << Init->isGLValue() << DiagRange;"}}
},
},
["warn_dealloc_in_category"]={
["warn_dealloc_in_category"]={
Line 2,860: Line 2,860:
[c]=q,
[c]=q,
[b]={"7e350d23b215",1387320268,"Objctive-C. warn if dealloc is being overridden in"},
[b]={"7e350d23b215",1387320268,"Objctive-C. warn if dealloc is being overridden in"},
[k]={{mc,4108,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  if (ObjCImplDecl *ImpDecl = dyn_cast<ObjCImplDecl>(ClassDecl)) {\n    // Merge information from the @interface declaration into the\n    // @implementation.\n    if (ObjCInterfaceDecl *IDecl = ImpDecl->getClassInterface()) {\n      if (auto *IMD = IDecl->lookupMethod(ObjCMethod->getSelector(), ObjCMethod->isInstanceMethod())) {\n        // Warn about defining -dealloc in a category.\n        if (isa<ObjCCategoryImplDecl>(ImpDecl) && IMD->isOverriding() && ObjCMethod->getSelector().getMethodFamily() == OMF_dealloc) {\n          Diag(ObjCMethod->getLocation(), diag::warn_dealloc_in_category) << ObjCMethod->getDeclName();"}}
[k]={{mc,4950,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  if (ObjCImplDecl *ImpDecl = dyn_cast<ObjCImplDecl>(ClassDecl)) {\n    // Merge information from the @interface declaration into the\n    // @implementation.\n    if (ObjCInterfaceDecl *IDecl = ImpDecl->getClassInterface()) {\n      if (auto *IMD = IDecl->lookupMethod(ObjCMethod->getSelector(), ObjCMethod->isInstanceMethod())) {\n        // Warn about defining -dealloc in a category.\n        if (isa<ObjCCategoryImplDecl>(ImpDecl) && IMD->isOverriding() && ObjCMethod->getSelector().getMethodFamily() == OMF_dealloc) {\n          Diag(ObjCMethod->getLocation(), diag::warn_dealloc_in_category) << ObjCMethod->getDeclName();"}}
},
},
["warn_debug_compression_unavailable"]={
["warn_debug_compression_unavailable"]={
Line 2,874: Line 2,874:
[c]=u,
[c]=u,
[b]={"24bbfed22185",1396308578,"Warn when requesting compress-debug-sections and zlib is not available"},
[b]={"24bbfed22185",1396308578,"Warn when requesting compress-debug-sections and zlib is not available"},
[k]={{U,905,"static void RenderDebugInfoCompressionArgs(const ArgList &Args, ArgStringList &CmdArgs, const Driver &D, const ToolChain &TC) {\n  if (checkDebugInfoOption(A, Args, D, TC)) {\n    if (Value == \"none\") {\n    } else if (Value == \"zlib\") {\n      if (llvm::compression::zlib::isAvailable()) {\n      } else {\n        D.Diag(diag::warn_debug_compression_unavailable) << \"zlib\";"},{U,911,"static void RenderDebugInfoCompressionArgs(const ArgList &Args, ArgStringList &CmdArgs, const Driver &D, const ToolChain &TC) {\n  if (checkDebugInfoOption(A, Args, D, TC)) {\n    if (Value == \"none\") {\n    } else if (Value == \"zlib\") {\n    } else if (Value == \"zstd\") {\n      if (llvm::compression::zstd::isAvailable()) {\n      } else {\n        D.Diag(diag::warn_debug_compression_unavailable) << \"zstd\";"}}
[k]={{U,1033,"static void RenderDebugInfoCompressionArgs(const ArgList &Args, ArgStringList &CmdArgs, const Driver &D, const ToolChain &TC) {\n  if (checkDebugInfoOption(A, Args, D, TC)) {\n    if (Value == \"none\") {\n    } else if (Value == \"zlib\") {\n      if (llvm::compression::zlib::isAvailable()) {\n      } else {\n        D.Diag(diag::warn_debug_compression_unavailable) << \"zlib\";"},{U,1040,"static void RenderDebugInfoCompressionArgs(const ArgList &Args, ArgStringList &CmdArgs, const Driver &D, const ToolChain &TC) {\n  if (checkDebugInfoOption(A, Args, D, TC)) {\n    if (Value == \"none\") {\n    } else if (Value == \"zlib\") {\n    } else if (Value == \"zstd\") {\n      if (llvm::compression::zstd::isAvailable()) {\n      } else {\n        D.Diag(diag::warn_debug_compression_unavailable) << \"zstd\";"}}
},
},
["warn_decl_in_param_list"]={
["warn_decl_in_param_list"]={
Line 2,888: Line 2,888:
[c]=q,
[c]=q,
[b]={vd,1236199783,yd},
[b]={vd,1236199783,yd},
[k]={{G,15421,"CreateNewDecl:\n  // If we\'re declaring or defining a tag in function prototype scope in C,\n  // note that this type can only be used within the function and add it to\n  // the list of decls to inject into the function definition scope.\n  if ((Name || Kind == TTK_Enum) && getNonFieldDeclScope(S)->isFunctionPrototypeScope()) {\n    if (getLangOpts().CPlusPlus) {\n    } else if (!PrevDecl) {\n      Diag(Loc, diag::warn_decl_in_param_list) << Context.getTagDeclType(New);"}}
[k]={{G,17634,"CreateNewDecl:\n  // If we\'re declaring or defining a tag in function prototype scope in C,\n  // note that this type can only be used within the function and add it to\n  // the list of decls to inject into the function definition scope.\n  if ((Name || Kind == TTK_Enum) && getNonFieldDeclScope(S)->isFunctionPrototypeScope()) {\n    if (getLangOpts().CPlusPlus) {\n    } else if (!PrevDecl) {\n      Diag(Loc, diag::warn_decl_in_param_list) << Context.getTagDeclType(New);"}}
},
},
["warn_decl_shadow"]={
["warn_decl_shadow"]={
Line 2,903: Line 2,903:
[c]=q,
[c]=q,
[b]={"a2a3f7dc115d",1268776098,"Implement -Wshadow.  Based on a patch by Mike M.!"},
[b]={"a2a3f7dc115d",1268776098,"Implement -Wshadow.  Based on a patch by Mike M.!"},
[k]={{G,7182,"/// Enum describing the %select options in diag::warn_decl_shadow."},{G,7215,"static bool shouldWarnIfShadowedDecl(const DiagnosticsEngine &Diags, const LookupResult &R) {\n  return !Diags.isIgnored(diag::warn_decl_shadow, R.getNameLoc());"},{G,7298,"/// 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  unsigned WarningDiag = diag::warn_decl_shadow;"},{G,7364,"/// 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    Diag(Shadow.VD->getLocation(), CaptureLoc.isInvalid() ? diag::warn_decl_shadow_uncaptured_local : diag::warn_decl_shadow) << Shadow.VD->getDeclName() << computeShadowedDeclKind(ShadowedDecl, OldDC) << OldDC;"},{G,7373,"/// Check -Wshadow without the advantage of a previous lookup.\nvoid Sema::CheckShadow(Scope *S, VarDecl *D) {\n  if (Diags.isIgnored(diag::warn_decl_shadow, D->getLocation()))"}}
[k]={{G,8138,"/// Enum describing the %select options in diag::warn_decl_shadow."},{G,8182,"static bool shouldWarnIfShadowedDecl(const DiagnosticsEngine &Diags, const LookupResult &R) {\n  return !Diags.isIgnored(diag::warn_decl_shadow, R.getNameLoc());"},{G,8271,"/// 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  unsigned WarningDiag = diag::warn_decl_shadow;"},{G,8347,"/// 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    Diag(Shadow.VD->getLocation(), CaptureLoc.isInvalid() ? diag::warn_decl_shadow_uncaptured_local : diag::warn_decl_shadow) << Shadow.VD->getDeclName() << computeShadowedDeclKind(ShadowedDecl, OldDC) << OldDC;"},{G,8359,"/// Check -Wshadow without the advantage of a previous lookup.\nvoid Sema::CheckShadow(Scope *S, VarDecl *D) {\n  if (Diags.isIgnored(diag::warn_decl_shadow, D->getLocation()))"}}
},
},
["warn_decl_shadow_uncaptured_local"]={
["warn_decl_shadow_uncaptured_local"]={
Line 2,918: Line 2,918:
[c]=q,
[c]=q,
[b]={"175388c00d0a",1478687937,"[Sema] Avoid -Wshadow warnings for shadowed variables that aren\'t captured"},
[b]={"175388c00d0a",1478687937,"[Sema] Avoid -Wshadow warnings for shadowed variables that aren\'t captured"},
[k]={{G,7309,"/// 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 (isa<VarDecl>(D) && isa<VarDecl>(ShadowedDecl) && NewDC && isa<CXXMethodDecl>(NewDC)) {\n    if (const auto *RD = dyn_cast<CXXRecordDecl>(NewDC->getParent())) {\n      if (RD->isLambda() && OldDC->Encloses(NewDC->getLexicalParent())) {\n        if (RD->getLambdaCaptureDefault() == LCD_None) {\n          if (CaptureLoc.isInvalid())\n            WarningDiag = diag::warn_decl_shadow_uncaptured_local;"},{G,7364,"/// 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    Diag(Shadow.VD->getLocation(), CaptureLoc.isInvalid() ? diag::warn_decl_shadow_uncaptured_local : diag::warn_decl_shadow) << Shadow.VD->getDeclName() << computeShadowedDeclKind(ShadowedDecl, OldDC) << OldDC;"}}
[k]={{G,8283,"/// 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 (isa<VarDecl>(D) && isa<VarDecl>(ShadowedDecl) && NewDC && isa<CXXMethodDecl>(NewDC)) {\n    if (const auto *RD = dyn_cast<CXXRecordDecl>(NewDC->getParent())) {\n      if (RD->isLambda() && OldDC->Encloses(NewDC->getLexicalParent())) {\n        if (RD->getLambdaCaptureDefault() == LCD_None) {\n          if (CaptureLoc.isInvalid())\n            WarningDiag = diag::warn_decl_shadow_uncaptured_local;"},{G,8346,"/// 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    Diag(Shadow.VD->getLocation(), CaptureLoc.isInvalid() ? diag::warn_decl_shadow_uncaptured_local : diag::warn_decl_shadow) << Shadow.VD->getDeclName() << computeShadowedDeclKind(ShadowedDecl, OldDC) << OldDC;"}}
},
},
["warn_declspec_allocator_nonpointer"]={
["warn_declspec_allocator_nonpointer"]={
Line 2,932: Line 2,932:
[c]=q,
[c]=q,
[b]={"1181c9f45db1",1553556018,"[MS] Add frontend support for __declspec(allocator)"},
[b]={"1181c9f45db1",1553556018,"[MS] Add frontend support for __declspec(allocator)"},
[k]={{H,7537,"static void handleMSAllocatorAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Warn if the return type is not a pointer or reference type.\n  if (auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (!RetTy->isPointerType() && !RetTy->isReferenceType()) {\n      S.Diag(AL.getLoc(), diag::warn_declspec_allocator_nonpointer) << AL.getRange() << RetTy;"}}
[k]={{H,8549,"static void handleMSAllocatorAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Warn if the return type is not a pointer or reference type.\n  if (auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (!RetTy->isPointerType() && !RetTy->isReferenceType()) {\n      S.Diag(AL.getLoc(), diag::warn_declspec_allocator_nonpointer) << AL.getRange() << RetTy;"}}
},
},
["warn_declspec_attribute_ignored"]={
["warn_declspec_attribute_ignored"]={
Line 2,946: Line 2,946:
[c]=q,
[c]=q,
[b]={"e321795c60c5",1324082169,"Remove a non-gcc-compatible extension that would apply attributes on declarations without a declarat..."},
[b]={"e321795c60c5",1324082169,"Remove a non-gcc-compatible extension that would apply attributes on declarations without a declarat..."},
[k]={{G,4739,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // Warn about ignored type attributes, for example:\n  // __attribute__((aligned)) struct A;\n  // Attributes should be placed after tag to apply to type declaration.\n  if (!DS.getAttributes().empty() || !DeclAttrs.empty()) {\n    if (TypeSpecType == DeclSpec::TST_class || TypeSpecType == DeclSpec::TST_struct || TypeSpecType == DeclSpec::TST_interface || TypeSpecType == DeclSpec::TST_union || TypeSpecType == DeclSpec::TST_enum) {\n      for (const ParsedAttr &AL : DS.getAttributes())\n        Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? diag::err_declspec_keyword_has_no_effect : diag::warn_declspec_attribute_ignored) << AL << GetDiagnosticTypeSpecifierID(DS);"},{G,4741,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // Warn about ignored type attributes, for example:\n  // __attribute__((aligned)) struct A;\n  // Attributes should be placed after tag to apply to type declaration.\n  if (!DS.getAttributes().empty() || !DeclAttrs.empty()) {\n    if (TypeSpecType == DeclSpec::TST_class || TypeSpecType == DeclSpec::TST_struct || TypeSpecType == DeclSpec::TST_interface || TypeSpecType == DeclSpec::TST_union || TypeSpecType == DeclSpec::TST_enum) {\n      for (const ParsedAttr &AL : DeclAttrs)\n        Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? diag::err_declspec_keyword_has_no_effect : diag::warn_declspec_attribute_ignored) << AL << GetDiagnosticTypeSpecifierID(DS);"}}
[k]={{G,5324,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // Warn about ignored type attributes, for example:\n  // __attribute__((aligned)) struct A;\n  // Attributes should be placed after tag to apply to type declaration.\n  if (!DS.getAttributes().empty() || !DeclAttrs.empty()) {\n    if (TypeSpecType == DeclSpec::TST_class || TypeSpecType == DeclSpec::TST_struct || TypeSpecType == DeclSpec::TST_interface || TypeSpecType == DeclSpec::TST_union || TypeSpecType == DeclSpec::TST_enum) {\n      for (const ParsedAttr &AL : DS.getAttributes())\n        Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? diag::err_declspec_keyword_has_no_effect : diag::warn_declspec_attribute_ignored) << AL << GetDiagnosticTypeSpecifierID(DS);"},{G,5329,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // Warn about ignored type attributes, for example:\n  // __attribute__((aligned)) struct A;\n  // Attributes should be placed after tag to apply to type declaration.\n  if (!DS.getAttributes().empty() || !DeclAttrs.empty()) {\n    if (TypeSpecType == DeclSpec::TST_class || TypeSpecType == DeclSpec::TST_struct || TypeSpecType == DeclSpec::TST_interface || TypeSpecType == DeclSpec::TST_union || TypeSpecType == DeclSpec::TST_enum) {\n      for (const ParsedAttr &AL : DeclAttrs)\n        Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? diag::err_declspec_keyword_has_no_effect : diag::warn_declspec_attribute_ignored) << AL << GetDiagnosticTypeSpecifierID(DS);"}}
},
},
["warn_deep_exception_specs_differ"]={
["warn_deep_exception_specs_differ"]={
Line 2,960: Line 2,960:
[c]=q,
[c]=q,
[b]={"1be59c510612",1477099939,"[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for"},
[b]={"1be59c510612",1477099939,"[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for"},
[k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",838,"bool Sema::CheckExceptionSpecCompatibility(Expr *From, QualType ToType) {\n  // This is not an error in C++17 onwards, unless the noexceptness doesn\'t\n  // match, but in that case we have a full-on type mismatch, not just a\n  // type sugar mismatch.\n  if (getLangOpts().CPlusPlus17) {\n    NestedDiagID = diag::warn_deep_exception_specs_differ;"}}
[k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",947,"bool Sema::CheckExceptionSpecCompatibility(Expr *From, QualType ToType) {\n  // This is not an error in C++17 onwards, unless the noexceptness doesn\'t\n  // match, but in that case we have a full-on type mismatch, not just a\n  // type sugar mismatch.\n  if (getLangOpts().CPlusPlus17) {\n    NestedDiagID = diag::warn_deep_exception_specs_differ;"}}
},
},
["warn_def_missing_case"]={
["warn_def_missing_case"]={
Line 2,975: Line 2,975:
[c]=q,
[c]=q,
[b]={"3a8650af779c",1427476994,"[Sema] Factor diags with %plural. No functionality change intended."},
[b]={"3a8650af779c",1427476994,"[Sema] Factor diags with %plural. No functionality change intended."},
[k]={{xb,1371,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (!HasDependentValue) {\n    // If switch has default case, then ignore it.\n    if (!CaseListIsErroneous && !CaseListIsIncomplete && !HasConstantCond && ET && ET->getDecl()->isCompleteDefinition() && !ET->getDecl()->enumerators().empty()) {\n      // Produce a nice diagnostic if multiple values aren\'t handled.\n      if (!UnhandledNames.empty()) {\n        auto DB = Diag(CondExpr->getExprLoc(), TheDefaultStmt ? diag::warn_def_missing_case : diag::warn_missing_case) << CondExpr->getSourceRange() << (int)UnhandledNames.size();"}}
[k]={{xb,1604,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (!HasDependentValue) {\n    // If switch has default case, then ignore it.\n    if (!CaseListIsErroneous && !CaseListIsIncomplete && !HasConstantCond && ET && ET->getDecl()->isCompleteDefinition() && !ET->getDecl()->enumerators().empty()) {\n      // Produce a nice diagnostic if multiple values aren\'t handled.\n      if (!UnhandledNames.empty()) {\n        auto DB = Diag(CondExpr->getExprLoc(), TheDefaultStmt ? diag::warn_def_missing_case : diag::warn_missing_case) << CondExpr->getSourceRange() << (int)UnhandledNames.size();"}}
},
},
["warn_default_atomic_custom_getter_setter"]={
["warn_default_atomic_custom_getter_setter"]={
Line 2,990: Line 2,990:
[c]=q,
[c]=q,
[b]={"dd88dbf9d2b3",1296509651,"Add -Wcustom-atomic-properties which warns if an atomic-by-default property has custom getter or set..."},
[b]={"dd88dbf9d2b3",1296509651,"Add -Wcustom-atomic-properties which warns if an atomic-by-default property has custom getter or set..."},
[k]={{Gc,1749,"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(GetterMethod->getLocation(), diag::warn_default_atomic_custom_getter_setter) << Property->getIdentifier() << 0;"},{Gc,1753,"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(SetterMethod->getLocation(), diag::warn_default_atomic_custom_getter_setter) << Property->getIdentifier() << 1;"}}
[k]={{Gc,2198,"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(GetterMethod->getLocation(), diag::warn_default_atomic_custom_getter_setter) << Property->getIdentifier() << 0;"},{Gc,2204,"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(SetterMethod->getLocation(), diag::warn_default_atomic_custom_getter_setter) << Property->getIdentifier() << 1;"}}
},
},
["warn_defaulted_comparison_deleted"]={
["warn_defaulted_comparison_deleted"]={
Line 3,004: Line 3,004:
[c]=q,
[c]=q,
[b]={"5253d9138eb3",1573070592,"[c++20] Determine whether a defaulted comparison should be deleted or"},
[b]={"5253d9138eb3",1573070592,"[c++20] Determine whether a defaulted comparison should be deleted or"},
[k]={{F,7591,"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      Diag(FD->getLocation(), diag::warn_defaulted_comparison_deleted) << (int)DCK;"}}
[k]={{F,8913,"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      Diag(FD->getLocation(), diag::warn_defaulted_comparison_deleted) << (int)DCK;"}}
},
},
["warn_defaulted_method_deleted"]={
["warn_defaulted_method_deleted"]={
Line 3,018: Line 3,018:
[c]=q,
[c]=q,
[b]={"9b2c5e7c44fd",1538097403,"[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only"},
[b]={"9b2c5e7c44fd",1538097403,"[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only"},
[k]={{F,6637,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n      if (!inTemplateInstantiation() && !HadError) {\n        Diag(MD->getLocation(), diag::warn_defaulted_method_deleted) << CSM;"}}
[k]={{F,7772,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n      if (!inTemplateInstantiation() && !HadError) {\n        Diag(MD->getLocation(), diag::warn_defaulted_method_deleted) << CSM;"}}
},
},
["warn_defined_in_function_type_macro"]={
["warn_defined_in_function_type_macro"]={
Line 3,033: Line 3,033:
[c]=N,
[c]=N,
[b]={"b2348f4ced63",1453216531,"Add -Wexpansion-to-undefined: warn when using `defined` in a macro definition."},
[b]={"b2348f4ced63",1453216531,"Add -Wexpansion-to-undefined: warn when using `defined` in a macro definition."},
[k]={{"clang/lib/Lex/PPExpressions.cpp",201,"/// EvaluateDefined - Process a \'defined(sym)\' expression.\nstatic bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // [cpp.cond]p4:\n  //  Prior to evaluation, macro invocations in the list of preprocessing\n  //  tokens that will become the controlling constant expression are replaced\n  //  (except for those macro names modified by the \'defined\' unary operator),\n  //  just as in normal text. If the token \'defined\' is generated as a result\n  //  of this replacement process or use of the \'defined\' unary operator does\n  //  not match one of the two specified forms prior to macro replacement, the\n  //  behavior is undefined.\n  // This isn\'t an idle threat, consider this program:\n  //  #define FOO\n  //  #define BAR defined(FOO)\n  //  #if BAR\n  //  ...\n  //  #else\n  //  ...\n  //  #endif\n  // clang and gcc will pick the #if branch while Visual Studio will take the\n  // #else branch.  Emit a warning about this undefined behavior.\n  if (beginLoc.isMacroID()) {\n    // For object-type macros, it\'s easy to replace\n    //  #define FOO defined(BAR)\n    // with\n    //  #if defined(BAR)\n    //  #define FOO 1\n    //  #else\n    //  #define FOO 0\n    //  #endif\n    // and doing so makes sense since compilers handle this differently in\n    // practice (see example further up).  But for function-type macros,\n    // there is no good way to write\n    //  # define FOO(x) (defined(M_ ## x) && M_ ## x)\n    // in a different way, and compilers seem to agree on how to behave here.\n    // So warn by default on object-type macros, but only warn in -pedantic\n    // mode on function-type macros.\n    if (IsFunctionTypeMacro)\n      PP.Diag(beginLoc, diag::warn_defined_in_function_type_macro);"}}
[k]={{"clang/lib/Lex/PPExpressions.cpp",207,"/// EvaluateDefined - Process a \'defined(sym)\' expression.\nstatic bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // [cpp.cond]p4:\n  //  Prior to evaluation, macro invocations in the list of preprocessing\n  //  tokens that will become the controlling constant expression are replaced\n  //  (except for those macro names modified by the \'defined\' unary operator),\n  //  just as in normal text. If the token \'defined\' is generated as a result\n  //  of this replacement process or use of the \'defined\' unary operator does\n  //  not match one of the two specified forms prior to macro replacement, the\n  //  behavior is undefined.\n  // This isn\'t an idle threat, consider this program:\n  //  #define FOO\n  //  #define BAR defined(FOO)\n  //  #if BAR\n  //  ...\n  //  #else\n  //  ...\n  //  #endif\n  // clang and gcc will pick the #if branch while Visual Studio will take the\n  // #else branch.  Emit a warning about this undefined behavior.\n  if (beginLoc.isMacroID()) {\n    // For object-type macros, it\'s easy to replace\n    //  #define FOO defined(BAR)\n    // with\n    //  #if defined(BAR)\n    //  #define FOO 1\n    //  #else\n    //  #define FOO 0\n    //  #endif\n    // and doing so makes sense since compilers handle this differently in\n    // practice (see example further up).  But for function-type macros,\n    // there is no good way to write\n    //  # define FOO(x) (defined(M_ ## x) && M_ ## x)\n    // in a different way, and compilers seem to agree on how to behave here.\n    // So warn by default on object-type macros, but only warn in -pedantic\n    // mode on function-type macros.\n    if (IsFunctionTypeMacro)\n      PP.Diag(beginLoc, diag::warn_defined_in_function_type_macro);"}}
},
},
["warn_defined_in_object_type_macro"]={
["warn_defined_in_object_type_macro"]={
Line 3,047: Line 3,047:
[c]=N,
[c]=N,
[b]={"b2348f4ced63",1453216531,"Add -Wexpansion-to-undefined: warn when using `defined` in a macro definition."},
[b]={"b2348f4ced63",1453216531,"Add -Wexpansion-to-undefined: warn when using `defined` in a macro definition."},
[k]={{"clang/lib/Lex/PPExpressions.cpp",203,"/// EvaluateDefined - Process a \'defined(sym)\' expression.\nstatic bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // [cpp.cond]p4:\n  //  Prior to evaluation, macro invocations in the list of preprocessing\n  //  tokens that will become the controlling constant expression are replaced\n  //  (except for those macro names modified by the \'defined\' unary operator),\n  //  just as in normal text. If the token \'defined\' is generated as a result\n  //  of this replacement process or use of the \'defined\' unary operator does\n  //  not match one of the two specified forms prior to macro replacement, the\n  //  behavior is undefined.\n  // This isn\'t an idle threat, consider this program:\n  //  #define FOO\n  //  #define BAR defined(FOO)\n  //  #if BAR\n  //  ...\n  //  #else\n  //  ...\n  //  #endif\n  // clang and gcc will pick the #if branch while Visual Studio will take the\n  // #else branch.  Emit a warning about this undefined behavior.\n  if (beginLoc.isMacroID()) {\n    // For object-type macros, it\'s easy to replace\n    //  #define FOO defined(BAR)\n    // with\n    //  #if defined(BAR)\n    //  #define FOO 1\n    //  #else\n    //  #define FOO 0\n    //  #endif\n    // and doing so makes sense since compilers handle this differently in\n    // practice (see example further up).  But for function-type macros,\n    // there is no good way to write\n    //  # define FOO(x) (defined(M_ ## x) && M_ ## x)\n    // in a different way, and compilers seem to agree on how to behave here.\n    // So warn by default on object-type macros, but only warn in -pedantic\n    // mode on function-type macros.\n    if (IsFunctionTypeMacro)\n    else\n      PP.Diag(beginLoc, diag::warn_defined_in_object_type_macro);"}}
[k]={{"clang/lib/Lex/PPExpressions.cpp",209,"/// EvaluateDefined - Process a \'defined(sym)\' expression.\nstatic bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // [cpp.cond]p4:\n  //  Prior to evaluation, macro invocations in the list of preprocessing\n  //  tokens that will become the controlling constant expression are replaced\n  //  (except for those macro names modified by the \'defined\' unary operator),\n  //  just as in normal text. If the token \'defined\' is generated as a result\n  //  of this replacement process or use of the \'defined\' unary operator does\n  //  not match one of the two specified forms prior to macro replacement, the\n  //  behavior is undefined.\n  // This isn\'t an idle threat, consider this program:\n  //  #define FOO\n  //  #define BAR defined(FOO)\n  //  #if BAR\n  //  ...\n  //  #else\n  //  ...\n  //  #endif\n  // clang and gcc will pick the #if branch while Visual Studio will take the\n  // #else branch.  Emit a warning about this undefined behavior.\n  if (beginLoc.isMacroID()) {\n    // For object-type macros, it\'s easy to replace\n    //  #define FOO defined(BAR)\n    // with\n    //  #if defined(BAR)\n    //  #define FOO 1\n    //  #else\n    //  #define FOO 0\n    //  #endif\n    // and doing so makes sense since compilers handle this differently in\n    // practice (see example further up).  But for function-type macros,\n    // there is no good way to write\n    //  # define FOO(x) (defined(M_ ## x) && M_ ## x)\n    // in a different way, and compilers seem to agree on how to behave here.\n    // So warn by default on object-type macros, but only warn in -pedantic\n    // mode on function-type macros.\n    if (IsFunctionTypeMacro)\n    else\n      PP.Diag(beginLoc, diag::warn_defined_in_object_type_macro);"}}
},
},
["warn_delegating_ctor_cycle"]={
["warn_delegating_ctor_cycle"]={
Line 3,061: Line 3,061:
[c]=q,
[c]=q,
[b]={"e262299b72ea",1304553947,"Change cycle detection to be based off of a warning flag."},
[b]={"e262299b72ea",1304553947,"Change cycle detection to be based off of a warning flag."},
[k]={{"clang/lib/Sema/Sema.cpp",1056,"/// 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  if (LangOpts.CPlusPlus11 && !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation()))"},{F,15847,"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      S.Diag((*Ctor->init_begin())->getSourceLocation(), diag::warn_delegating_ctor_cycle) << Ctor;"}}
[k]={{"clang/lib/Sema/Sema.cpp",1195,"/// 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  if (LangOpts.CPlusPlus11 && !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation()))"},{F,18539,"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      S.Diag((*Ctor->init_begin())->getSourceLocation(), diag::warn_delegating_ctor_cycle) << Ctor;"}}
},
},
["warn_delete_abstract_non_virtual_dtor"]={
["warn_delete_abstract_non_virtual_dtor"]={
Line 3,075: Line 3,075:
[c]=q,
[c]=q,
[b]={"1b71a22b2832",1311722844,"Re-fix r136172 so it isn\'t an error; apparently, some people are fond of their undefined behavior."},
[b]={"1b71a22b2832",1311722844,"Re-fix r136172 so it isn\'t an error; apparently, some people are fond of their undefined behavior."},
[k]={{Sb,3363,"void Sema::CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc, bool IsDelete, bool CallCanBeVirtual, bool WarnOnNonAbstractTypes, SourceLocation DtorLoc) {\n  if (PointeeRD->isAbstract()) {\n    Diag(Loc, diag::warn_delete_abstract_non_virtual_dtor) << (IsDelete ? 0 : 1) << ClassType;"}}
[k]={{Sb,3968,"void Sema::CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc, bool IsDelete, bool CallCanBeVirtual, bool WarnOnNonAbstractTypes, SourceLocation DtorLoc) {\n  if (PointeeRD->isAbstract()) {\n    Diag(Loc, diag::warn_delete_abstract_non_virtual_dtor) << (IsDelete ? 0 : 1) << ClassType;"}}
},
},
["warn_delete_array_type"]={
["warn_delete_array_type"]={
Line 3,087: Line 3,087:
[c]=q,
[c]=q,
[b]={"14ec9f674a56",1284408954,"When applying \'delete\' on a pointer-to-array type match GCC and EDG behavior and treat it as \'delete..."},
[b]={"14ec9f674a56",1284408954,"When applying \'delete\' on a pointer-to-array type match GCC and EDG behavior and treat it as \'delete..."},
[k]={{Sb,3147,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  if (!Ex.get()->isTypeDependent()) {\n    if (Pointee->isArrayType() && !ArrayForm) {\n      Diag(StartLoc, diag::warn_delete_array_type) << Type << Ex.get()->getSourceRange() << FixItHint::CreateInsertion(getLocForEndOfToken(StartLoc), \"[]\");"}}
[k]={{Sb,3703,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  if (!Ex.get()->isTypeDependent()) {\n    if (Pointee->isArrayType() && !ArrayForm) {\n      Diag(StartLoc, diag::warn_delete_array_type) << Type << Ex.get()->getSourceRange() << FixItHint::CreateInsertion(getLocForEndOfToken(StartLoc), \"[]\");"}}
},
},
["warn_delete_incomplete"]={
["warn_delete_incomplete"]={
Line 3,101: Line 3,101:
[c]=q,
[c]=q,
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{Sb,3140,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  if (!Ex.get()->isTypeDependent()) {\n    if (Pointee->isVoidType() && !isSFINAEContext()) {\n    } else if (Pointee->isFunctionType() || Pointee->isVoidType() || Pointee->isSizelessType()) {\n    } else if (!Pointee->isDependentType()) {\n      if (!RequireCompleteType(StartLoc, Pointee, diag::warn_delete_incomplete, Ex.get())) {"}}
[k]={{Sb,3696,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  if (!Ex.get()->isTypeDependent()) {\n    if (Pointee->isVoidType() && !isSFINAEContext()) {\n    } else if (Pointee->isFunctionType() || Pointee->isVoidType() || Pointee->isSizelessType()) {\n    } else if (!Pointee->isDependentType()) {\n      if (!RequireCompleteType(StartLoc, Pointee, diag::warn_delete_incomplete, Ex.get())) {"}}
},
},
["warn_delete_non_virtual_dtor"]={
["warn_delete_non_virtual_dtor"]={
Line 3,116: Line 3,116:
[c]=q,
[c]=q,
[b]={"8bd428574c71",1306266806,"Add new warning that warns when invoking \'delete\' on a polymorphic, non-final, class without a virtu..."},
[b]={"8bd428574c71",1306266806,"Add new warning that warns when invoking \'delete\' on a polymorphic, non-final, class without a virtu..."},
[k]={{Sb,3367,"void Sema::CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc, bool IsDelete, bool CallCanBeVirtual, bool WarnOnNonAbstractTypes, SourceLocation DtorLoc) {\n  if (PointeeRD->isAbstract()) {\n  } else if (WarnOnNonAbstractTypes) {\n    Diag(Loc, diag::warn_delete_non_virtual_dtor) << (IsDelete ? 0 : 1) << ClassType;"}}
[k]={{Sb,3973,"void Sema::CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc, bool IsDelete, bool CallCanBeVirtual, bool WarnOnNonAbstractTypes, SourceLocation DtorLoc) {\n  if (PointeeRD->isAbstract()) {\n  } else if (WarnOnNonAbstractTypes) {\n    Diag(Loc, diag::warn_delete_non_virtual_dtor) << (IsDelete ? 0 : 1) << ClassType;"}}
},
},
["warn_delimited_ucn_empty"]={
["warn_delimited_ucn_empty"]={
Line 3,130: Line 3,130:
[c]=N,
[c]=N,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{vb,3076,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (Count == 0) {\n    if (Diagnose)\n      Diag(SlashLoc, FoundEndDelimiter ? diag::warn_delimited_ucn_empty : diag::warn_ucn_escape_no_digits) << StringRef(KindLoc, 1);"},{vb,3153,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (!FoundEndDelimiter || Buffer.empty()) {\n    if (Diagnose)\n      Diag(SlashLoc, FoundEndDelimiter ? diag::warn_delimited_ucn_empty : diag::warn_delimited_ucn_incomplete) << StringRef(KindLoc, 1);"}}
[k]={{vb,3326,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (Count == 0) {\n    if (Diagnose)\n      Diag(SlashLoc, FoundEndDelimiter ? diag::warn_delimited_ucn_empty : diag::warn_ucn_escape_no_digits) << StringRef(KindLoc, 1);"},{vb,3411,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (!FoundEndDelimiter || Buffer.empty()) {\n    if (Diagnose)\n      Diag(SlashLoc, FoundEndDelimiter ? diag::warn_delimited_ucn_empty : diag::warn_delimited_ucn_incomplete) << StringRef(KindLoc, 1);"}}
},
},
["warn_delimited_ucn_incomplete"]={
["warn_delimited_ucn_incomplete"]={
Line 3,144: Line 3,144:
[c]=N,
[c]=N,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{vb,3058,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  while (Count != NumHexDigits || Delimited) {\n    if (Value == -1U) {\n      if (Diagnose)\n        Diag(SlashLoc, diag::warn_delimited_ucn_incomplete) << StringRef(KindLoc, 1);"},{vb,3153,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (!FoundEndDelimiter || Buffer.empty()) {\n    if (Diagnose)\n      Diag(SlashLoc, FoundEndDelimiter ? diag::warn_delimited_ucn_empty : diag::warn_delimited_ucn_incomplete) << StringRef(KindLoc, 1);"}}
[k]={{vb,3307,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  while (Count != NumHexDigits || Delimited) {\n    if (Value == -1U) {\n      if (Diagnose)\n        Diag(SlashLoc, diag::warn_delimited_ucn_incomplete) << StringRef(KindLoc, 1);"},{vb,3412,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (!FoundEndDelimiter || Buffer.empty()) {\n    if (Diagnose)\n      Diag(SlashLoc, FoundEndDelimiter ? diag::warn_delimited_ucn_empty : diag::warn_delimited_ucn_incomplete) << StringRef(KindLoc, 1);"}}
},
},
["warn_depr_array_comparison"]={
["warn_depr_array_comparison"]={
Line 3,158: Line 3,158:
[c]=ib,
[c]=ib,
[b]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[b]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[k]={{M,10892,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n  // C++2a [depr.array.comp]:\n  //  Equality and relational comparisons ([expr.eq], [expr.rel]) between two\n  //  operands of array type are deprecated.\n  if (S.getLangOpts().CPlusPlus20 && LHSStripped->getType()->isArrayType() && RHSStripped->getType()->isArrayType()) {\n    S.Diag(Loc, diag::warn_depr_array_comparison) << LHS->getSourceRange() << RHS->getSourceRange() << LHSStripped->getType() << RHSStripped->getType();"}}
[k]={{M,12654,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n  // C++2a [depr.array.comp]:\n  //  Equality and relational comparisons ([expr.eq], [expr.rel]) between two\n  //  operands of array type are deprecated.\n  if (S.getLangOpts().CPlusPlus20 && LHSStripped->getType()->isArrayType() && RHSStripped->getType()->isArrayType()) {\n    S.Diag(Loc, diag::warn_depr_array_comparison) << LHS->getSourceRange() << RHS->getSourceRange() << LHSStripped->getType() << RHSStripped->getType();"}}
},
},
["warn_deprecated"]={
["warn_deprecated"]={
Line 3,172: Line 3,172:
[c]=ib,
[c]=ib,
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{"clang/lib/Sema/SemaAvailability.cpp",372,"/// 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_Deprecated:\n    diag = !ObjCPropertyAccess ? diag::warn_deprecated : diag::warn_property_method_deprecated;"}}
[k]={{"clang/lib/Sema/SemaAvailability.cpp",436,"/// 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_Deprecated:\n    diag = !ObjCPropertyAccess ? diag::warn_deprecated : diag::warn_property_method_deprecated;"}}
},
},
["warn_deprecated_altivec_src_compat"]={
["warn_deprecated_altivec_src_compat"]={
Line 3,186: Line 3,186:
[c]=q,
[c]=q,
[b]={Kc,1615397021,zc},
[b]={Kc,1615397021,zc},
[k]={{M,11635,"/// CheckVectorCompareOperands - vector comparisons are a clang extension that\n/// operates on extended vector types.  Instead of producing an IntTy result,\n/// like a scalar comparison, a vector comparison produces a vector of integer\n/// types.\nQualType Sema::CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Determine the return type of a vector compare. By default clang will return\n  // a scalar for all vector compares except vector bool and vector pixel.\n  // With the gcc compiler we will always return a vector type and with the xl\n  // compiler we will always return a scalar type. This switch allows choosing\n  // which behavior is prefered.\n  if (getLangOpts().AltiVec) {\n    case LangOptions::AltivecSrcCompatKind::Mixed:\n      // If AltiVec, the comparison results in a numeric type, i.e.\n      // bool for C++, int for C\n      if (vType->castAs<VectorType>()->getVectorKind() == VectorType::AltiVecVector)\n      else\n        Diag(Loc, diag::warn_deprecated_altivec_src_compat);"}}
[k]={{M,13541,"/// CheckVectorCompareOperands - vector comparisons are a clang extension that\n/// operates on extended vector types.  Instead of producing an IntTy result,\n/// like a scalar comparison, a vector comparison produces a vector of integer\n/// types.\nQualType Sema::CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Determine the return type of a vector compare. By default clang will return\n  // a scalar for all vector compares except vector bool and vector pixel.\n  // With the gcc compiler we will always return a vector type and with the xl\n  // compiler we will always return a scalar type. This switch allows choosing\n  // which behavior is prefered.\n  if (getLangOpts().AltiVec) {\n    case LangOptions::AltivecSrcCompatKind::Mixed:\n      // If AltiVec, the comparison results in a numeric type, i.e.\n      // bool for C++, int for C\n      if (vType->castAs<VectorType>()->getVectorKind() == VectorType::AltiVecVector)\n      else\n        Diag(Loc, diag::warn_deprecated_altivec_src_compat);"}}
},
},
["warn_deprecated_anonymous_namespace"]={
["warn_deprecated_anonymous_namespace"]={
Line 3,200: Line 3,200:
[c]=q,
[c]=q,
[b]={"43f40103f045",1416004496,"[c++1z] Support [[deprecated]] attributes on namespaces. Note that it only applies to situations whe..."},
[b]={"43f40103f045",1416004496,"[c++1z] Support [[deprecated]] attributes on namespaces. Note that it only applies to situations whe..."},
[k]={{H,7205,"static void handleDeprecatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NSD = dyn_cast<NamespaceDecl>(D)) {\n    if (NSD->isAnonymousNamespace()) {\n      S.Diag(AL.getLoc(), diag::warn_deprecated_anonymous_namespace);"}}
[k]={{H,8173,"static void handleDeprecatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NSD = dyn_cast<NamespaceDecl>(D)) {\n    if (NSD->isAnonymousNamespace()) {\n      S.Diag(AL.getLoc(), diag::warn_deprecated_anonymous_namespace);"}}
},
},
["warn_deprecated_builtin"]={
["warn_deprecated_builtin"]={
Line 3,214: Line 3,214:
[c]=ib,
[c]=ib,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{Sb,4777,"void DiagnoseBuiltinDeprecation(Sema &S, TypeTrait Kind, SourceLocation KWLoc) {\n  S.Diag(KWLoc, diag::warn_deprecated_builtin) << getTraitSpelling(Kind) << getTraitSpelling(Replacement);"}}
[k]={{Sb,5558,"void DiagnoseBuiltinDeprecation(Sema &S, TypeTrait Kind, SourceLocation KWLoc) {\n  S.Diag(KWLoc, diag::warn_deprecated_builtin) << getTraitSpelling(Kind) << getTraitSpelling(Replacement);"}}
},
},
["warn_deprecated_comma_subscript"]={
["warn_deprecated_comma_subscript"]={
Line 3,228: Line 3,228:
[c]=ib,
[c]=ib,
[b]={"6a3820503910",1563615147,"[c++20] P1161R3: a[b,c] is deprecated."},
[b]={"6a3820503910",1563615147,"[c++20] P1161R3: a[b,c] is deprecated."},
[k]={{M,4417,"ExprResult Sema::ActOnArraySubscriptExpr(Scope *S, Expr *base, SourceLocation lbLoc, MultiExprArg ArgExprs, SourceLocation rbLoc) {\n  if (ArgExprs.size() == 1 && getLangOpts().CPlusPlus20) {\n    if ((isa<BinaryOperator>(idx) && cast<BinaryOperator>(idx)->isCommaOp()) || (isa<CXXOperatorCallExpr>(idx) && cast<CXXOperatorCallExpr>(idx)->getOperator() == OO_Comma)) {\n      Diag(idx->getExprLoc(), diag::warn_deprecated_comma_subscript) << SourceRange(base->getBeginLoc(), rbLoc);"}}
[k]={{M,5163,"ExprResult Sema::ActOnArraySubscriptExpr(Scope *S, Expr *base, SourceLocation lbLoc, MultiExprArg ArgExprs, SourceLocation rbLoc) {\n  if (ArgExprs.size() == 1 && getLangOpts().CPlusPlus20) {\n    if ((isa<BinaryOperator>(idx) && cast<BinaryOperator>(idx)->isCommaOp()) || (isa<CXXOperatorCallExpr>(idx) && cast<CXXOperatorCallExpr>(idx)->getOperator() == OO_Comma)) {\n      Diag(idx->getExprLoc(), diag::warn_deprecated_comma_subscript) << SourceRange(base->getBeginLoc(), rbLoc);"}}
},
},
["warn_deprecated_copy"]={
["warn_deprecated_copy"]={
Line 3,243: Line 3,243:
[c]=ib,
[c]=ib,
[b]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[b]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[k]={{F,12628,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  if (UserDeclaredOperation) {\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}}
[k]={{F,14733,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  if (UserDeclaredOperation) {\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}}
},
},
["warn_deprecated_copy_with_dtor"]={
["warn_deprecated_copy_with_dtor"]={
Line 3,258: Line 3,258:
[c]=ib,
[c]=ib,
[b]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[b]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[k]={{F,12628,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  if (UserDeclaredOperation) {\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}}
[k]={{F,14732,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  if (UserDeclaredOperation) {\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}}
},
},
["warn_deprecated_copy_with_user_provided_copy"]={
["warn_deprecated_copy_with_user_provided_copy"]={
Line 3,273: Line 3,273:
[c]=ib,
[c]=ib,
[b]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[b]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[k]={{F,12628,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  if (UserDeclaredOperation) {\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}}
[k]={{F,14730,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  if (UserDeclaredOperation) {\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}}
},
},
["warn_deprecated_copy_with_user_provided_dtor"]={
["warn_deprecated_copy_with_user_provided_dtor"]={
Line 3,288: Line 3,288:
[c]=ib,
[c]=ib,
[b]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[b]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"},
[k]={{F,12628,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  if (UserDeclaredOperation) {\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}}
[k]={{F,14728,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  if (UserDeclaredOperation) {\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}}
},
},
["warn_deprecated_def"]={
["warn_deprecated_def"]={
Line 3,303: Line 3,303:
[c]=q,
[c]=q,
[b]={"0c87d36d9d93",1297815251,"Fix typo (per Chris\'s comment)."},
[b]={"0c87d36d9d93",1297815251,"Fix typo (per Chris\'s comment)."},
[k]={{mc,264,"static void DiagnoseObjCImplementedDeprecations(Sema &S, const NamedDecl *ND, SourceLocation ImplLoc) {\n  S.Diag(ImplLoc, diag::warn_deprecated_def) << (isa<ObjCMethodDecl>(ND) ? /*Method*/ 0 : isa<ObjCCategoryDecl>(ND) || IsCategory ? /*Category*/ 2 : /*Class*/ 1);"}}
[k]={{mc,315,"static void DiagnoseObjCImplementedDeprecations(Sema &S, const NamedDecl *ND, SourceLocation ImplLoc) {\n  S.Diag(ImplLoc, diag::warn_deprecated_def) << (isa<ObjCMethodDecl>(ND) ? /*Method*/ 0 : isa<ObjCCategoryDecl>(ND) || IsCategory ? /*Category*/ 2 : /*Class*/ 1);"}}
},
},
["warn_deprecated_for_co_await"]={
["warn_deprecated_for_co_await"]={
Line 3,317: Line 3,317:
[c]="Coroutines Issue",
[c]="Coroutines Issue",
[b]={md,1612659633,nd},
[b]={md,1612659633,nd},
[k]={{Yb,2070,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  if (CoawaitLoc.isValid() && getLangOpts().CPlusPlus20)\n    Diag(CoawaitLoc, diag::warn_deprecated_for_co_await);"}}
[k]={{Yb,2231,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  if (CoawaitLoc.isValid() && getLangOpts().CPlusPlus20)\n    Diag(CoawaitLoc, diag::warn_deprecated_for_co_await);"}}
},
},
["warn_deprecated_fwdclass_message"]={
["warn_deprecated_fwdclass_message"]={
Line 3,331: Line 3,331:
[c]=ib,
[c]=ib,
[b]={"7d6e11a1923a",1292892241,"Warn when message is sent to receiver of"},
[b]={"7d6e11a1923a",1292892241,"Warn when message is sent to receiver of"},
[k]={{"clang/lib/Sema/SemaAvailability.cpp",374,"/// 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_Deprecated:\n    diag_fwdclass_message = diag::warn_deprecated_fwdclass_message;"}}
[k]={{"clang/lib/Sema/SemaAvailability.cpp",439,"/// 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_Deprecated:\n    diag_fwdclass_message = diag::warn_deprecated_fwdclass_message;"}}
},
},
["warn_deprecated_ignored_on_using"]={
["warn_deprecated_ignored_on_using"]={
Line 3,345: Line 3,345:
[c]=q,
[c]=q,
[b]={Kc,1615397021,zc},
[b]={Kc,1615397021,zc},
[k]={{H,2322,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (isa<UsingDecl, UnresolvedUsingTypenameDecl, UnresolvedUsingValueDecl>(D)) {\n    S.Diag(AL.getRange().getBegin(), diag::warn_deprecated_ignored_on_using) << AL;"},{H,7212,"static void handleDeprecatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NSD = dyn_cast<NamespaceDecl>(D)) {\n  } else if (isa<UsingDecl, UnresolvedUsingTypenameDecl, UnresolvedUsingValueDecl>(D)) {\n    S.Diag(AL.getRange().getBegin(), diag::warn_deprecated_ignored_on_using) << AL;"}}
[k]={{H,2608,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (isa<UsingDecl, UnresolvedUsingTypenameDecl, UnresolvedUsingValueDecl>(D)) {\n    S.Diag(AL.getRange().getBegin(), diag::warn_deprecated_ignored_on_using) << AL;"},{H,8181,"static void handleDeprecatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NSD = dyn_cast<NamespaceDecl>(D)) {\n  } else if (isa<UsingDecl, UnresolvedUsingTypenameDecl, UnresolvedUsingValueDecl>(D)) {\n    S.Diag(AL.getRange().getBegin(), diag::warn_deprecated_ignored_on_using) << AL;"}}
},
},
["warn_deprecated_increment_decrement_volatile"]={
["warn_deprecated_increment_decrement_volatile"]={
Line 3,359: Line 3,359:
[c]=ib,
[c]=ib,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{M,12710,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n  if (S.getLangOpts().CPlusPlus20 && ResType.isVolatileQualified()) {\n    S.Diag(OpLoc, diag::warn_deprecated_increment_decrement_volatile) << IsInc << ResType;"}}
[k]={{M,14845,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n  if (S.getLangOpts().CPlusPlus20 && ResType.isVolatileQualified()) {\n    S.Diag(OpLoc, diag::warn_deprecated_increment_decrement_volatile) << IsInc << ResType;"}}
},
},
["warn_deprecated_lax_vec_conv_all"]={
["warn_deprecated_lax_vec_conv_all"]={
Line 3,373: Line 3,373:
[c]=q,
[c]=q,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{M,8719,"/// CheckAssignmentConstraints (C99 6.5.16) - This routine currently\n/// has code to accommodate several GCC extensions when type checking\n/// pointers. Here are some objectionable examples that GCC considers warnings:\n///\n///  int a, *pint;\n///  short *pshort;\n///  struct foo *pfoo;\n///\n///  pint = pshort; // warning: assignment from incompatible pointer type\n///  a = pint; // warning: assignment makes integer from pointer without a cast\n///  pint = a; // warning: assignment makes pointer from integer without a cast\n///  pint = pfoo; // warning: assignment from incompatible pointer type\n///\n/// As a result, the code for dealing with pointers is more complex than the\n/// C99 spec dictates.\n///\n/// Sets \'Kind\' for any result kind except Incompatible.\nSema::AssignConvertType Sema::CheckAssignmentConstraints(QualType LHSType, ExprResult &RHS, CastKind &Kind, bool ConvertRHS) {\n  // Conversions to or from vector type.\n  if (LHSType->isVectorType() || RHSType->isVectorType()) {\n    if (LHSType->isVectorType() && RHSType->isVectorType()) {\n      // If we are allowing lax vector conversions, and LHS and RHS are both\n      // vectors, the total size only needs to be the same. This is a bitcast;\n      // no bits are changed but the result type is different.\n      if (isLaxVectorConversion(RHSType, LHSType)) {\n        // The default for lax vector conversions with Altivec vectors will\n        // change, so if we are converting between vector types where\n        // at least one is an Altivec vector, emit a warning.\n        if (Context.getTargetInfo().getTriple().isPPC() && anyAltivecTypes(RHSType, LHSType) && !Context.areCompatibleVectorTypes(RHSType, LHSType))\n          Diag(RHS.get()->getExprLoc(), diag::warn_deprecated_lax_vec_conv_all) << RHSType << LHSType;"},{M,8733,"/// CheckAssignmentConstraints (C99 6.5.16) - This routine currently\n/// has code to accommodate several GCC extensions when type checking\n/// pointers. Here are some objectionable examples that GCC considers warnings:\n///\n///  int a, *pint;\n///  short *pshort;\n///  struct foo *pfoo;\n///\n///  pint = pshort; // warning: assignment from incompatible pointer type\n///  a = pint; // warning: assignment makes integer from pointer without a cast\n///  pint = a; // warning: assignment makes pointer from integer without a cast\n///  pint = pfoo; // warning: assignment from incompatible pointer type\n///\n/// As a result, the code for dealing with pointers is more complex than the\n/// C99 spec dictates.\n///\n/// Sets \'Kind\' for any result kind except Incompatible.\nSema::AssignConvertType Sema::CheckAssignmentConstraints(QualType LHSType, ExprResult &RHS, CastKind &Kind, bool ConvertRHS) {\n  // Conversions to or from vector type.\n  if (LHSType->isVectorType() || RHSType->isVectorType()) {\n    // When the RHS comes from another lax conversion (e.g. binops between\n    // scalars and vectors) the result is canonicalized as a vector. When the\n    // LHS is also a vector, the lax is allowed by the condition above. Handle\n    // the case where LHS is a scalar.\n    if (LHSType->isScalarType()) {\n      if (VecType && VecType->getNumElements() == 1 && isLaxVectorConversion(RHSType, LHSType)) {\n        if (Context.getTargetInfo().getTriple().isPPC() && (VecType->getVectorKind() == VectorType::AltiVecVector || VecType->getVectorKind() == VectorType::AltiVecBool || VecType->getVectorKind() == VectorType::AltiVecPixel))\n          Diag(RHS.get()->getExprLoc(), diag::warn_deprecated_lax_vec_conv_all) << RHSType << LHSType;"},{M,9616,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  if (isLaxVectorConversion(OtherType, VecType)) {\n    if (Context.getTargetInfo().getTriple().isPPC() && anyAltivecTypes(RHSType, LHSType) && !Context.areCompatibleVectorTypes(RHSType, LHSType))\n      Diag(Loc, diag::warn_deprecated_lax_vec_conv_all) << RHSType << LHSType;"},{"clang/lib/Sema/SemaOverload.cpp",1550,"/// Determine whether the conversion from FromType to ToType is a valid\n/// vector conversion.\n///\n/// \\param ICK Will be set to the vector conversion kind, if this is a vector\n/// conversion.\nstatic bool IsVectorConversion(Sema &S, QualType FromType, QualType ToType, ImplicitConversionKind &ICK, Expr *From, bool InOverloadResolution, bool CStyle) {\n  // We can perform the conversion between vector types in the following cases:\n  // 1)vector types are equivalent AltiVec and GCC vector types\n  // 2)lax vector conversions are permitted and the vector types are of the\n  //  same size\n  // 3)the destination type does not have the ARM MVE strict-polymorphism\n  //  attribute, which inhibits lax vector conversion for overload resolution\n  //  only\n  if (ToType->isVectorType() && FromType->isVectorType()) {\n    if (S.Context.areCompatibleVectorTypes(FromType, ToType) || (S.isLaxVectorConversion(FromType, ToType) && !ToType->hasAttr(attr::ArmMveStrictPolymorphism))) {\n      if (S.getASTContext().getTargetInfo().getTriple().isPPC() && S.isLaxVectorConversion(FromType, ToType) && S.anyAltivecTypes(FromType, ToType) && !S.Context.areCompatibleVectorTypes(FromType, ToType) && !InOverloadResolution && !CStyle) {\n        S.Diag(From->getBeginLoc(), diag::warn_deprecated_lax_vec_conv_all) << FromType << ToType;"}}
[k]={{M,10087,"/// CheckAssignmentConstraints (C99 6.5.16) - This routine currently\n/// has code to accommodate several GCC extensions when type checking\n/// pointers. Here are some objectionable examples that GCC considers warnings:\n///\n///  int a, *pint;\n///  short *pshort;\n///  struct foo *pfoo;\n///\n///  pint = pshort; // warning: assignment from incompatible pointer type\n///  a = pint; // warning: assignment makes integer from pointer without a cast\n///  pint = a; // warning: assignment makes pointer from integer without a cast\n///  pint = pfoo; // warning: assignment from incompatible pointer type\n///\n/// As a result, the code for dealing with pointers is more complex than the\n/// C99 spec dictates.\n///\n/// Sets \'Kind\' for any result kind except Incompatible.\nSema::AssignConvertType Sema::CheckAssignmentConstraints(QualType LHSType, ExprResult &RHS, CastKind &Kind, bool ConvertRHS) {\n  // Conversions to or from vector type.\n  if (LHSType->isVectorType() || RHSType->isVectorType()) {\n    if (LHSType->isVectorType() && RHSType->isVectorType()) {\n      // If we are allowing lax vector conversions, and LHS and RHS are both\n      // vectors, the total size only needs to be the same. This is a bitcast;\n      // no bits are changed but the result type is different.\n      if (isLaxVectorConversion(RHSType, LHSType)) {\n        // The default for lax vector conversions with Altivec vectors will\n        // change, so if we are converting between vector types where\n        // at least one is an Altivec vector, emit a warning.\n        if (Context.getTargetInfo().getTriple().isPPC() && anyAltivecTypes(RHSType, LHSType) && !Context.areCompatibleVectorTypes(RHSType, LHSType))\n          Diag(RHS.get()->getExprLoc(), diag::warn_deprecated_lax_vec_conv_all) << RHSType << LHSType;"},{M,10435,"/// CheckAssignmentConstraints (C99 6.5.16) - This routine currently\n/// has code to accommodate several GCC extensions when type checking\n/// pointers. Here are some objectionable examples that GCC considers warnings:\n///\n///  int a, *pint;\n///  short *pshort;\n///  struct foo *pfoo;\n///\n///  pint = pshort; // warning: assignment from incompatible pointer type\n///  a = pint; // warning: assignment makes integer from pointer without a cast\n///  pint = a; // warning: assignment makes pointer from integer without a cast\n///  pint = pfoo; // warning: assignment from incompatible pointer type\n///\n/// As a result, the code for dealing with pointers is more complex than the\n/// C99 spec dictates.\n///\n/// Sets \'Kind\' for any result kind except Incompatible.\nSema::AssignConvertType Sema::CheckAssignmentConstraints(QualType LHSType, ExprResult &RHS, CastKind &Kind, bool ConvertRHS) {\n  // Conversions to or from vector type.\n  if (LHSType->isVectorType() || RHSType->isVectorType()) {\n    // When the RHS comes from another lax conversion (e.g. binops between\n    // scalars and vectors) the result is canonicalized as a vector. When the\n    // LHS is also a vector, the lax is allowed by the condition above. Handle\n    // the case where LHS is a scalar.\n    if (LHSType->isScalarType()) {\n      if (VecType && VecType->getNumElements() == 1 && isLaxVectorConversion(RHSType, LHSType)) {\n        if (Context.getTargetInfo().getTriple().isPPC() && (VecType->getVectorKind() == VectorType::AltiVecVector || VecType->getVectorKind() == VectorType::AltiVecBool || VecType->getVectorKind() == VectorType::AltiVecPixel))\n          Diag(RHS.get()->getExprLoc(), diag::warn_deprecated_lax_vec_conv_all) << RHSType << LHSType;"},{M,11134,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  if (isLaxVectorConversion(OtherType, VecType)) {\n    if (Context.getTargetInfo().getTriple().isPPC() && anyAltivecTypes(RHSType, LHSType) && !Context.areCompatibleVectorTypes(RHSType, LHSType))\n      Diag(Loc, diag::warn_deprecated_lax_vec_conv_all) << RHSType << LHSType;"},{"clang/lib/Sema/SemaOverload.cpp",1788,"/// Determine whether the conversion from FromType to ToType is a valid\n/// vector conversion.\n///\n/// \\param ICK Will be set to the vector conversion kind, if this is a vector\n/// conversion.\nstatic bool IsVectorConversion(Sema &S, QualType FromType, QualType ToType, ImplicitConversionKind &ICK, Expr *From, bool InOverloadResolution, bool CStyle) {\n  // We can perform the conversion between vector types in the following cases:\n  // 1)vector types are equivalent AltiVec and GCC vector types\n  // 2)lax vector conversions are permitted and the vector types are of the\n  //  same size\n  // 3)the destination type does not have the ARM MVE strict-polymorphism\n  //  attribute, which inhibits lax vector conversion for overload resolution\n  //  only\n  if (ToType->isVectorType() && FromType->isVectorType()) {\n    if (S.Context.areCompatibleVectorTypes(FromType, ToType) || (S.isLaxVectorConversion(FromType, ToType) && !ToType->hasAttr(attr::ArmMveStrictPolymorphism))) {\n      if (S.getASTContext().getTargetInfo().getTriple().isPPC() && S.isLaxVectorConversion(FromType, ToType) && S.anyAltivecTypes(FromType, ToType) && !S.Context.areCompatibleVectorTypes(FromType, ToType) && !InOverloadResolution && !CStyle) {\n        S.Diag(From->getBeginLoc(), diag::warn_deprecated_lax_vec_conv_all) << FromType << ToType;"}}
},
},
["warn_deprecated_literal_operator_id"]={
["warn_deprecated_literal_operator_id"]={
Line 3,388: Line 3,388:
[c]=ib,
[c]=ib,
[b]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[b]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[k]={{Sb,467,"bool Sema::checkLiteralOperatorId(const CXXScopeSpec &SS, const UnqualifiedId &Name, bool IsUDSuffix) {\n  if (!IsUDSuffix) {\n    if (!PP.getSourceManager().isInSystemHeader(Loc)) {\n      if (auto Hint = FixItHint::CreateReplacement(Name.getSourceRange(), (StringRef(\"operator\\\"\\\"\") + II->getName()).str()); isReservedInAllContexts(Status)) {\n      } else {\n        Diag(Loc, diag::warn_deprecated_literal_operator_id) << II << Hint;"}}
[k]={{Sb,515,"bool Sema::checkLiteralOperatorId(const CXXScopeSpec &SS, const UnqualifiedId &Name, bool IsUDSuffix) {\n  if (!IsUDSuffix) {\n    if (!PP.getSourceManager().isInSystemHeader(Loc)) {\n      if (auto Hint = FixItHint::CreateReplacement(Name.getSourceRange(), (StringRef(\"operator\\\"\\\"\") + II->getName()).str()); isReservedInAllContexts(Status)) {\n      } else {\n        Diag(Loc, diag::warn_deprecated_literal_operator_id) << II << Hint;"}}
},
},
["warn_deprecated_message"]={
["warn_deprecated_message"]={
Line 3,402: Line 3,402:
[c]=ib,
[c]=ib,
[b]={"55106310aeaf",1286399924,"Add message to attribute(deprecated)."},
[b]={"55106310aeaf",1286399924,"Add message to attribute(deprecated)."},
[k]={{"clang/lib/Sema/SemaAvailability.cpp",373,"/// 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_Deprecated:\n    diag_message = diag::warn_deprecated_message;"}}
[k]={{"clang/lib/Sema/SemaAvailability.cpp",438,"/// 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_Deprecated:\n    diag_message = diag::warn_deprecated_message;"}}
},
},
["warn_deprecated_noreturn_spelling"]={
["warn_deprecated_noreturn_spelling"]={
Line 3,416: Line 3,416:
[c]=ib,
[c]=ib,
[b]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."},
[b]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."},
[k]={{H,1976,"static void handleStandardNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  // The [[_Noreturn]] spelling is deprecated in C2x, so if that was used,\n  // issue an appropriate diagnostic. However, don\'t issue a diagnostic if the\n  // attribute name comes from a macro expansion. We don\'t want to punish users\n  // who write [[noreturn]] after including <stdnoreturn.h> (where \'noreturn\'\n  // is defined as a macro which expands to \'_Noreturn\').\n  if (!S.getLangOpts().CPlusPlus && A.getSemanticSpelling() == CXX11NoReturnAttr::C2x_Noreturn && !(A.getLoc().isMacroID() && S.getSourceManager().isInSystemMacro(A.getLoc())))\n    S.Diag(A.getLoc(), diag::warn_deprecated_noreturn_spelling) << A.getRange();"}}
[k]={{H,2205,"static void handleStandardNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  // The [[_Noreturn]] spelling is deprecated in C2x, so if that was used,\n  // issue an appropriate diagnostic. However, don\'t issue a diagnostic if the\n  // attribute name comes from a macro expansion. We don\'t want to punish users\n  // who write [[noreturn]] after including <stdnoreturn.h> (where \'noreturn\'\n  // is defined as a macro which expands to \'_Noreturn\').\n  if (!S.getLangOpts().CPlusPlus && A.getSemanticSpelling() == CXX11NoReturnAttr::C2x_Noreturn && !(A.getLoc().isMacroID() && S.getSourceManager().isInSystemMacro(A.getLoc())))\n    S.Diag(A.getLoc(), diag::warn_deprecated_noreturn_spelling) << A.getRange();"}}
},
},
["warn_deprecated_redundant_constexpr_static_def"]={
["warn_deprecated_redundant_constexpr_static_def"]={
Line 3,431: Line 3,431:
[c]=ib,
[c]=ib,
[b]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a"},
[b]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a"},
[k]={{G,4228,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // C++ doesn\'t have tentative definitions, so go right ahead and check here.\n  if (getLangOpts().CPlusPlus) {\n    if (Old->isStaticDataMember() && Old->getCanonicalDecl()->isInline() && Old->getCanonicalDecl()->isConstexpr()) {\n      Diag(New->getLocation(), diag::warn_deprecated_redundant_constexpr_static_def);"}}
[k]={{G,4729,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // C++ doesn\'t have tentative definitions, so go right ahead and check here.\n  if (getLangOpts().CPlusPlus) {\n    if (Old->isStaticDataMember() && Old->getCanonicalDecl()->isInline() && Old->getCanonicalDecl()->isConstexpr()) {\n      Diag(New->getLocation(), diag::warn_deprecated_redundant_constexpr_static_def);"}}
},
},
["warn_deprecated_register"]={
["warn_deprecated_register"]={
Line 3,445: Line 3,445:
[c]=ib,
[c]=ib,
[b]={"8ca78a16f4a5",1371088971,"Add -Wdeprecated warnings and fixits for things deprecated in C++11:"},
[b]={"8ca78a16f4a5",1371088971,"Add -Wdeprecated warnings and fixits for things deprecated in C++11:"},
[k]={{G,6670,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (getLangOpts().CPlusPlus11 && SCSpec == DeclSpec::SCS_register && !D.getAsmLabel() && !getSourceManager().isInSystemMacro(D.getDeclSpec().getStorageClassSpecLoc())) {\n    Diag(D.getDeclSpec().getStorageClassSpecLoc(), getLangOpts().CPlusPlus17 ? diag::ext_register_storage_class : diag::warn_deprecated_register) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{G,12871,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n    // In C++11, the \'register\' storage class specifier is deprecated.\n    // In C++17, it is not allowed, but we tolerate it as an extension.\n    if (getLangOpts().CPlusPlus11) {\n      Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus17 ? diag::ext_register_storage_class : diag::warn_deprecated_register) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}}
[k]={{G,7497,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  if (getLangOpts().CPlusPlus11 && SCSpec == DeclSpec::SCS_register && !D.getAsmLabel() && !getSourceManager().isInSystemMacro(D.getDeclSpec().getStorageClassSpecLoc())) {\n    Diag(D.getDeclSpec().getStorageClassSpecLoc(), getLangOpts().CPlusPlus17 ? diag::ext_register_storage_class : diag::warn_deprecated_register) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{G,14739,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n    // In C++11, the \'register\' storage class specifier is deprecated.\n    // In C++17, it is not allowed, but we tolerate it as an extension.\n    if (getLangOpts().CPlusPlus11) {\n      Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus17 ? diag::ext_register_storage_class : diag::warn_deprecated_register) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}}
},
},
["warn_deprecated_simple_assign_volatile"]={
["warn_deprecated_simple_assign_volatile"]={
Line 3,459: Line 3,459:
[c]=ib,
[c]=ib,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{M,16039,"void Sema::PopExpressionEvaluationContext() {\n  // Warn on any volatile-qualified simple-assignments that are not discarded-\n  // value expressions nor unevaluated operands (those cases get removed from\n  // this list by CheckUnusedVolatileAssignment).\n  for (auto *BO : Rec.VolatileAssignmentLHSs)\n    Diag(BO->getBeginLoc(), diag::warn_deprecated_simple_assign_volatile) << BO->getType();"}}
[k]={{M,18642,"void Sema::PopExpressionEvaluationContext() {\n  // Warn on any volatile-qualified simple-assignments that are not discarded-\n  // value expressions nor unevaluated operands (those cases get removed from\n  // this list by CheckUnusedVolatileAssignment).\n  for (auto *BO : Rec.VolatileAssignmentLHSs)\n    Diag(BO->getBeginLoc(), diag::warn_deprecated_simple_assign_volatile) << BO->getType();"}}
},
},
["warn_deprecated_string_literal_conversion"]={
["warn_deprecated_string_literal_conversion"]={
Line 3,473: Line 3,473:
[c]=ib,
[c]=ib,
[b]={"e489a7d3d397",1267381825,"Warn about the deprecated string literal -> char* conversion. Fixes PR6428."},
[b]={"e489a7d3d397",1267381825,"Warn about the deprecated string literal -> char* conversion. Fixes PR6428."},
[k]={{Sb,4019,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  case ICK_Qualification: {\n    if (SCS.DeprecatedStringLiteralToCharPtr && !getLangOpts().WritableStrings) {\n      Diag(From->getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::ext_deprecated_string_literal_conversion : diag::warn_deprecated_string_literal_conversion) << ToType.getNonReferenceType();"}}
[k]={{Sb,4753,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  case ICK_Qualification: {\n    if (SCS.DeprecatedStringLiteralToCharPtr && !getLangOpts().WritableStrings) {\n      Diag(From->getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::ext_deprecated_string_literal_conversion : diag::warn_deprecated_string_literal_conversion) << ToType.getNonReferenceType();"}}
},
},
["warn_deprecated_this_capture"]={
["warn_deprecated_this_capture"]={
Line 3,487: Line 3,487:
[c]=ib,
[c]=ib,
[b]={"d82201e7c66b",1530943128,"P0806R2 Implicit capture of this with a capture-default of [=] is"},
[b]={"d82201e7c66b",1530943128,"P0806R2 Implicit capture of this with a capture-default of [=] is"},
[k]={{td,1745,"ExprResult Sema::BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc, LambdaScopeInfo *LSI) {\n  {\n    for (unsigned I = 0, N = LSI->Captures.size(); I != N; ++I) {\n      // Map the capture to our AST representation.\n      LambdaCapture Capture = [&] {\n        if (From.isThisCapture()) {\n          // Capturing \'this\' implicitly with a default of \'[=]\' is deprecated,\n          // because it results in a reference capture. Don\'t warn prior to\n          // C++2a; there\'s nothing that can be done about it before then.\n          if (getLangOpts().CPlusPlus20 && IsImplicit && CaptureDefault == LCD_ByCopy) {\n            Diag(From.getLocation(), diag::warn_deprecated_this_capture);"}}
[k]={{td,2037,"ExprResult Sema::BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc, LambdaScopeInfo *LSI) {\n  {\n    for (unsigned I = 0, N = LSI->Captures.size(); I != N; ++I) {\n      // Map the capture to our AST representation.\n      LambdaCapture Capture = [&] {\n        if (From.isThisCapture()) {\n          // Capturing \'this\' implicitly with a default of \'[=]\' is deprecated,\n          // because it results in a reference capture. Don\'t warn prior to\n          // C++2a; there\'s nothing that can be done about it before then.\n          if (getLangOpts().CPlusPlus20 && IsImplicit && CaptureDefault == LCD_ByCopy) {\n            Diag(From.getLocation(), diag::warn_deprecated_this_capture);"}}
},
},
["warn_deprecated_volatile_param"]={
["warn_deprecated_volatile_param"]={
Line 3,501: Line 3,501:
[c]=ib,
[c]=ib,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{Cb,2655,"QualType Sema::BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes, SourceLocation Loc, DeclarationName Entity, const FunctionProtoType::ExtProtoInfo &EPI) {\n  for (unsigned Idx = 0, Cnt = ParamTypes.size(); Idx < Cnt; ++Idx) {\n    // C++2a [dcl.fct]p4:\n    //  A parameter with volatile-qualified type is deprecated\n    if (ParamType.isVolatileQualified() && getLangOpts().CPlusPlus20)\n      Diag(Loc, diag::warn_deprecated_volatile_param) << ParamType;"},{Cb,5182,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // C++2a [dcl.fct]p4:\n  //  A parameter with volatile-qualified type is deprecated\n  if (T.isVolatileQualified() && S.getLangOpts().CPlusPlus20 && (D.getContext() == DeclaratorContext::Prototype || D.getContext() == DeclaratorContext::LambdaExprParameter))\n    S.Diag(D.getIdentifierLoc(), diag::warn_deprecated_volatile_param) << T;"}}
[k]={{Cb,3041,"QualType Sema::BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes, SourceLocation Loc, DeclarationName Entity, const FunctionProtoType::ExtProtoInfo &EPI) {\n  for (unsigned Idx = 0, Cnt = ParamTypes.size(); Idx < Cnt; ++Idx) {\n    // C++2a [dcl.fct]p4:\n    //  A parameter with volatile-qualified type is deprecated\n    if (ParamType.isVolatileQualified() && getLangOpts().CPlusPlus20)\n      Diag(Loc, diag::warn_deprecated_volatile_param) << ParamType;"},{Cb,5898,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // C++2a [dcl.fct]p4:\n  //  A parameter with volatile-qualified type is deprecated\n  if (T.isVolatileQualified() && S.getLangOpts().CPlusPlus20 && (D.getContext() == DeclaratorContext::Prototype || D.getContext() == DeclaratorContext::LambdaExprParameter))\n    S.Diag(D.getIdentifierLoc(), diag::warn_deprecated_volatile_param) << T;"}}
},
},
["warn_deprecated_volatile_return"]={
["warn_deprecated_volatile_return"]={
Line 3,515: Line 3,515:
[c]=ib,
[c]=ib,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{Cb,2574,"bool Sema::CheckFunctionReturnType(QualType T, SourceLocation Loc) {\n  // C++2a [dcl.fct]p12:\n  //  A volatile-qualified return type is deprecated\n  if (T.isVolatileQualified() && getLangOpts().CPlusPlus20)\n    Diag(Loc, diag::warn_deprecated_volatile_return) << T;"},{Cb,4729,"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      // cv-qualifiers on return types are pointless except when the type is a\n      // class type in C++.\n      if ((T.getCVRQualifiers() || T->isAtomicType()) && !(S.getLangOpts().CPlusPlus && (T->isDependentType() || T->isRecordType()))) {\n        // C++2a [dcl.fct]p12:\n        //  A volatile-qualified return type is deprecated\n        if (T.isVolatileQualified() && S.getLangOpts().CPlusPlus20)\n          S.Diag(DeclType.Loc, diag::warn_deprecated_volatile_return) << T;"}}
[k]={{Cb,2941,"bool Sema::CheckFunctionReturnType(QualType T, SourceLocation Loc) {\n  // C++2a [dcl.fct]p12:\n  //  A volatile-qualified return type is deprecated\n  if (T.isVolatileQualified() && getLangOpts().CPlusPlus20)\n    Diag(Loc, diag::warn_deprecated_volatile_return) << T;"},{Cb,5368,"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      // cv-qualifiers on return types are pointless except when the type is a\n      // class type in C++.\n      if ((T.getCVRQualifiers() || T->isAtomicType()) && !(S.getLangOpts().CPlusPlus && (T->isDependentType() || T->isRecordType()))) {\n        // C++2a [dcl.fct]p12:\n        //  A volatile-qualified return type is deprecated\n        if (T.isVolatileQualified() && S.getLangOpts().CPlusPlus20)\n          S.Diag(DeclType.Loc, diag::warn_deprecated_volatile_return) << T;"}}
},
},
["warn_deprecated_volatile_structured_binding"]={
["warn_deprecated_volatile_structured_binding"]={
Line 3,529: Line 3,529:
[c]=ib,
[c]=ib,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{F,735,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // C++2a [dcl.struct.bind]p1:\n  //  A cv that includes volatile is deprecated\n  if ((DS.getTypeQualifiers() & DeclSpec::TQ_volatile) && getLangOpts().CPlusPlus20)\n    Diag(DS.getVolatileSpecLoc(), diag::warn_deprecated_volatile_structured_binding);"}}
[k]={{F,830,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // C++2a [dcl.struct.bind]p1:\n  //  A cv that includes volatile is deprecated\n  if ((DS.getTypeQualifiers() & DeclSpec::TQ_volatile) && getLangOpts().CPlusPlus20)\n    Diag(DS.getVolatileSpecLoc(), diag::warn_deprecated_volatile_structured_binding);"}}
},
},
["warn_dereference_of_noderef_type"]={
["warn_dereference_of_noderef_type"]={
Line 3,543: Line 3,543:
[c]=u,
[c]=u,
[b]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute"},
[b]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute"},
[k]={{M,15703,"void Sema::WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec) {\n  for (const Expr *E : Rec.PossibleDerefs) {\n    if (DeclRef) {\n      Diag(E->getExprLoc(), diag::warn_dereference_of_noderef_type) << Decl->getName() << E->getSourceRange();"}}
[k]={{M,18116,"void Sema::WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec) {\n  for (const Expr *E : Rec.PossibleDerefs) {\n    if (DeclRef) {\n      Diag(E->getExprLoc(), diag::warn_dereference_of_noderef_type) << Decl->getName() << E->getSourceRange();"}}
},
},
["warn_dereference_of_noderef_type_no_decl"]={
["warn_dereference_of_noderef_type_no_decl"]={
Line 3,557: Line 3,557:
[c]=u,
[c]=u,
[b]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute"},
[b]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute"},
[k]={{M,15706,"void Sema::WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec) {\n  for (const Expr *E : Rec.PossibleDerefs) {\n    if (DeclRef) {\n    } else {\n      Diag(E->getExprLoc(), diag::warn_dereference_of_noderef_type_no_decl) << E->getSourceRange();"}}
[k]={{M,18262,"void Sema::WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec) {\n  for (const Expr *E : Rec.PossibleDerefs) {\n    if (DeclRef) {\n    } else {\n      Diag(E->getExprLoc(), diag::warn_dereference_of_noderef_type_no_decl) << E->getSourceRange();"}}
},
},
["warn_diagnose_if_succeeded"]={
["warn_diagnose_if_succeeded"]={
Line 3,571: Line 3,571:
[c]=q,
[c]=q,
[b]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."},
[b]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."},
[k]={{Md,8893,"StmtResult Sema::ActOnOpenMPErrorDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc, bool InExContext) {\n  if (!AtC || AtC->getAtKind() == OMPC_AT_compilation) {\n    if (SeverityC && SeverityC->getSeverityKind() == OMPC_SEVERITY_warning)\n      Diag(SeverityC->getSeverityKindKwLoc(), diag::warn_diagnose_if_succeeded) << (ME ? cast<StringLiteral>(ME)->getString() : \"WARNING\");"},{"clang/lib/Sema/SemaOverload.cpp",5907,"template <typename CheckFn> static bool diagnoseDiagnoseIfAttrsWith(Sema &S, const NamedDecl *ND, bool ArgDependent, SourceLocation Loc, CheckFn &&IsSuccessful) {\n  for (const auto *DIA : llvm::make_range(WarningBegin, Attrs.end()))\n    if (IsSuccessful(DIA)) {\n      S.Diag(Loc, diag::warn_diagnose_if_succeeded) << DIA->getMessage();"}}
[k]={{Md,11167,"StmtResult Sema::ActOnOpenMPErrorDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc, bool InExContext) {\n  if (!AtC || AtC->getAtKind() == OMPC_AT_compilation) {\n    if (SeverityC && SeverityC->getSeverityKind() == OMPC_SEVERITY_warning)\n      Diag(SeverityC->getSeverityKindKwLoc(), diag::warn_diagnose_if_succeeded) << (ME ? cast<StringLiteral>(ME)->getString() : \"WARNING\");"},{"clang/lib/Sema/SemaOverload.cpp",6960,"template <typename CheckFn> static bool diagnoseDiagnoseIfAttrsWith(Sema &S, const NamedDecl *ND, bool ArgDependent, SourceLocation Loc, CheckFn &&IsSuccessful) {\n  for (const auto *DIA : llvm::make_range(WarningBegin, Attrs.end()))\n    if (IsSuccessful(DIA)) {\n      S.Diag(Loc, diag::warn_diagnose_if_succeeded) << DIA->getMessage();"}}
},
},
["warn_direct_initialize_call"]={
["warn_direct_initialize_call"]={
Line 3,585: Line 3,585:
[c]=q,
[c]=q,
[b]={"78e9debf68d4",1408726646,"Objective-C. Warn if user has made explicit call"},
[b]={"78e9debf68d4",1408726646,"Objective-C. Warn if user has made explicit call"},
[k]={{Hc,2178,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // Warn about explicit call of +initialize on its own class. But not on \'super\'.\n  if (Method && Method->getMethodFamily() == OMF_initialize) {\n    if (!SuperLoc.isValid()) {\n      if (ID == Class) {\n        Diag(Loc, diag::warn_direct_initialize_call);"}}
[k]={{Hc,2718,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // Warn about explicit call of +initialize on its own class. But not on \'super\'.\n  if (Method && Method->getMethodFamily() == OMF_initialize) {\n    if (!SuperLoc.isValid()) {\n      if (ID == Class) {\n        Diag(Loc, diag::warn_direct_initialize_call);"}}
},
},
["warn_direct_ivar_access"]={
["warn_direct_ivar_access"]={
Line 3,600: Line 3,600:
[c]=q,
[c]=q,
[b]={"14f1aa70a9fa",1344297051,"objective-c: Implement gcc\'s -Wdirect-ivar-access option."},
[b]={"14f1aa70a9fa",1344297051,"objective-c: Implement gcc\'s -Wdirect-ivar-access option."},
[k]={{M,2606,"ExprResult Sema::BuildIvarRefExpr(Scope *S, SourceLocation Loc, ObjCIvarDecl *IV) {\n  if (MF != OMF_init && MF != OMF_dealloc && MF != OMF_finalize && !IvarBacksCurrentMethodAccessor(IFace, CurMethod, IV))\n    Diag(Loc, diag::warn_direct_ivar_access) << IV->getDeclName();"},{"clang/lib/Sema/SemaExprMember.cpp",1210,"/// 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 (warn) {\n      if (warn)\n        S.Diag(MemberLoc, diag::warn_direct_ivar_access) << IV->getDeclName();"}}
[k]={{M,3041,"ExprResult Sema::BuildIvarRefExpr(Scope *S, SourceLocation Loc, ObjCIvarDecl *IV) {\n  if (MF != OMF_init && MF != OMF_dealloc && MF != OMF_finalize && !IvarBacksCurrentMethodAccessor(IFace, CurMethod, IV))\n    Diag(Loc, diag::warn_direct_ivar_access) << IV->getDeclName();"},{"clang/lib/Sema/SemaExprMember.cpp",1474,"/// 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 (warn) {\n      if (warn)\n        S.Diag(MemberLoc, diag::warn_direct_ivar_access) << IV->getDeclName();"}}
},
},
["warn_direct_super_initialize_call"]={
["warn_direct_super_initialize_call"]={
Line 3,614: Line 3,614:
[c]=q,
[c]=q,
[b]={"422922838920",1409002058,"Objective-C. Allow [super initialize] in an +initialize"},
[b]={"422922838920",1409002058,"Objective-C. Allow [super initialize] in an +initialize"},
[k]={{Hc,2184,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // Warn about explicit call of +initialize on its own class. But not on \'super\'.\n  if (Method && Method->getMethodFamily() == OMF_initialize) {\n    if (!SuperLoc.isValid()) {\n    } else if (ObjCMethodDecl *CurMeth = getCurMethodDecl()) {\n      // [super initialize] is allowed only within an +initialize implementation\n      if (CurMeth->getMethodFamily() != OMF_initialize) {\n        Diag(Loc, diag::warn_direct_super_initialize_call);"}}
[k]={{Hc,2726,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // Warn about explicit call of +initialize on its own class. But not on \'super\'.\n  if (Method && Method->getMethodFamily() == OMF_initialize) {\n    if (!SuperLoc.isValid()) {\n    } else if (ObjCMethodDecl *CurMeth = getCurMethodDecl()) {\n      // [super initialize] is allowed only within an +initialize implementation\n      if (CurMeth->getMethodFamily() != OMF_initialize) {\n        Diag(Loc, diag::warn_direct_super_initialize_call);"}}
},
},
["warn_dispatch_body_ignored"]={
["warn_dispatch_body_ignored"]={
Line 3,628: Line 3,628:
[c]=u,
[c]=u,
[b]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning"},
[b]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning"},
[k]={{G,13783,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    if (FD) {\n      // Warn on CPUDispatch with an actual body.\n      if (FD->isMultiVersion() && FD->hasAttr<CPUDispatchAttr>() && Body)\n        if (const auto *CmpndBody = dyn_cast<CompoundStmt>(Body))\n          if (!CmpndBody->body_empty())\n            Diag(CmpndBody->body_front()->getBeginLoc(), diag::warn_dispatch_body_ignored);"}}
[k]={{G,15786,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    if (FD) {\n      // Warn on CPUDispatch with an actual body.\n      if (FD->isMultiVersion() && FD->hasAttr<CPUDispatchAttr>() && Body)\n        if (const auto *CmpndBody = dyn_cast<CompoundStmt>(Body))\n          if (!CmpndBody->body_empty())\n            Diag(CmpndBody->body_front()->getBeginLoc(), diag::warn_dispatch_body_ignored);"}}
},
},
["warn_division_sizeof_array"]={
["warn_division_sizeof_array"]={
Line 3,642: Line 3,642:
[c]=q,
[c]=q,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{M,9789,"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::warn_division_sizeof_array) << LHSArg->getSourceRange() << ArrayElemTy << RHSTy;"}}
[k]={{M,11329,"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::warn_division_sizeof_array) << LHSArg->getSourceRange() << ArrayElemTy << RHSTy;"}}
},
},
["warn_division_sizeof_ptr"]={
["warn_division_sizeof_ptr"]={
Line 3,656: Line 3,656:
[c]=q,
[c]=q,
[b]={"b8dc05260c7d",1541089570,"[Diagnostics] Implement -Wsizeof-pointer-div "},
[b]={"b8dc05260c7d",1541089570,"[Diagnostics] Implement -Wsizeof-pointer-div "},
[k]={{M,9780,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n    S.Diag(Loc, diag::warn_division_sizeof_ptr) << LHS << LHS->getSourceRange();"}}
[k]={{M,11315,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n    S.Diag(Loc, diag::warn_division_sizeof_ptr) << LHS << LHS->getSourceRange();"}}
},
},
["warn_dllimport_dropped_from_inline_function"]={
["warn_dllimport_dropped_from_inline_function"]={
Line 3,670: Line 3,670:
[c]=q,
[c]=q,
[b]={"606bd6dcc547",1415024685,"Don\'t dllimport inline functions when targeting MinGW (PR21366)"},
[b]={"606bd6dcc547",1415024685,"Don\'t dllimport inline functions when targeting MinGW (PR21366)"},
[k]={{G,6365,"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  } else if (IsInline && OldImportAttr && !IsMicrosoftABI) {\n    S.Diag(NewDecl->getLocation(), diag::warn_dllimport_dropped_from_inline_function) << NewDecl << OldImportAttr;"}}
[k]={{G,7160,"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  } else if (IsInline && OldImportAttr && !IsMicrosoftABI) {\n    S.Diag(NewDecl->getLocation(), diag::warn_dllimport_dropped_from_inline_function) << NewDecl << OldImportAttr;"}}
},
},
["warn_doc_api_container_decl_mismatch"]={
["warn_doc_api_container_decl_mismatch"]={
Line 3,685: Line 3,685:
[c]=kb,
[c]=kb,
[b]={"a649eee9e877",1362699191,"HeaderDoc: Support more of HeaderDoc documentation "},
[b]={"a649eee9e877",1362699191,"HeaderDoc: Support more of HeaderDoc documentation "},
[k]={{rb,131,"void Sema::checkContainerDeclVerbatimLine(const BlockCommandComment *Comment) {\n  if (DiagSelect)\n    Diag(Comment->getLocation(), diag::warn_doc_api_container_decl_mismatch) << Comment->getCommandMarker() << (DiagSelect - 1) << (DiagSelect - 1) << Comment->getSourceRange();"}}
[k]={{rb,165,"void Sema::checkContainerDeclVerbatimLine(const BlockCommandComment *Comment) {\n  if (DiagSelect)\n    Diag(Comment->getLocation(), diag::warn_doc_api_container_decl_mismatch) << Comment->getCommandMarker() << (DiagSelect - 1) << (DiagSelect - 1) << Comment->getSourceRange();"}}
},
},
["warn_doc_block_command_duplicate"]={
["warn_doc_block_command_duplicate"]={
Line 3,700: Line 3,700:
[c]=kb,
[c]=kb,
[b]={"5ec0c7536a98",1344272907,"Comment diagnostics: warn on duplicate \\brief and \\return commands."},
[b]={"5ec0c7536a98",1344272907,"Comment diagnostics: warn on duplicate \\brief and \\return commands."},
[k]={{rb,474,"void Sema::checkBlockCommandDuplicate(const BlockCommandComment *Command) {\n  Diag(Command->getLocation(), diag::warn_doc_block_command_duplicate) << Command->getCommandMarker() << CommandName << Command->getSourceRange();"}}
[k]={{rb,623,"void Sema::checkBlockCommandDuplicate(const BlockCommandComment *Command) {\n  Diag(Command->getLocation(), diag::warn_doc_block_command_duplicate) << Command->getCommandMarker() << CommandName << Command->getSourceRange();"}}
},
},
["warn_doc_block_command_empty_paragraph"]={
["warn_doc_block_command_empty_paragraph"]={
Line 3,715: Line 3,715:
[c]=kb,
[c]=kb,
[b]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[b]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[k]={{rb,413,"void Sema::checkBlockCommandEmptyParagraph(BlockCommandComment *Command) {\n  if (Paragraph->isWhitespace()) {\n    Diag(DiagLoc, diag::warn_doc_block_command_empty_paragraph) << Command->getCommandMarker() << Command->getCommandName(Traits) << Command->getSourceRange();"}}
[k]={{rb,549,"void Sema::checkBlockCommandEmptyParagraph(BlockCommandComment *Command) {\n  if (Paragraph->isWhitespace()) {\n    Diag(DiagLoc, diag::warn_doc_block_command_empty_paragraph) << Command->getCommandMarker() << Command->getCommandName(Traits) << Command->getSourceRange();"}}
},
},
["warn_doc_container_decl_mismatch"]={
["warn_doc_container_decl_mismatch"]={
Line 3,730: Line 3,730:
[c]=kb,
[c]=kb,
[b]={"a649eee9e877",1362699191,"HeaderDoc: Support more of HeaderDoc documentation "},
[b]={"a649eee9e877",1362699191,"HeaderDoc: Support more of HeaderDoc documentation "},
[k]={{rb,178,"void Sema::checkContainerDecl(const BlockCommandComment *Comment) {\n  if (DiagSelect)\n    Diag(Comment->getLocation(), diag::warn_doc_container_decl_mismatch) << Comment->getCommandMarker() << (DiagSelect - 1) << Comment->getSourceRange();"}}
[k]={{rb,215,"void Sema::checkContainerDecl(const BlockCommandComment *Comment) {\n  if (DiagSelect)\n    Diag(Comment->getLocation(), diag::warn_doc_container_decl_mismatch) << Comment->getCommandMarker() << (DiagSelect - 1) << Comment->getSourceRange();"}}
},
},
["warn_doc_deprecated_not_sync"]={
["warn_doc_deprecated_not_sync"]={
Line 3,745: Line 3,745:
[c]=kb,
[c]=kb,
[b]={"1da888691587",1348350470,"Comment sema: warn when comment has \\deprecated but declaration does not have a"},
[b]={"1da888691587",1348350470,"Comment sema: warn when comment has \\deprecated but declaration does not have a"},
[k]={{rb,494,"void Sema::checkDeprecatedCommand(const BlockCommandComment *Command) {\n  Diag(Command->getLocation(), diag::warn_doc_deprecated_not_sync) << Command->getSourceRange() << Command->getCommandMarker();"}}
[k]={{rb,655,"void Sema::checkDeprecatedCommand(const BlockCommandComment *Command) {\n  Diag(Command->getLocation(), diag::warn_doc_deprecated_not_sync) << Command->getSourceRange() << Command->getCommandMarker();"}}
},
},
["warn_doc_function_method_decl_mismatch"]={
["warn_doc_function_method_decl_mismatch"]={
Line 3,760: Line 3,760:
[c]=kb,
[c]=kb,
[b]={"41bb7131b39a",1362591411,"say objective-C in the warning and streamline"},
[b]={"41bb7131b39a",1362591411,"say objective-C in the warning and streamline"},
[k]={{rb,97,"void Sema::checkFunctionDeclVerbatimLine(const BlockCommandComment *Comment) {\n  if (DiagSelect)\n    Diag(Comment->getLocation(), diag::warn_doc_function_method_decl_mismatch) << Comment->getCommandMarker() << (DiagSelect - 1) << (DiagSelect - 1) << Comment->getSourceRange();"}}
[k]={{rb,126,"void Sema::checkFunctionDeclVerbatimLine(const BlockCommandComment *Comment) {\n  if (DiagSelect)\n    Diag(Comment->getLocation(), diag::warn_doc_function_method_decl_mismatch) << Comment->getCommandMarker() << (DiagSelect - 1) << (DiagSelect - 1) << Comment->getSourceRange();"}}
},
},
["warn_doc_html_end_forbidden"]={
["warn_doc_html_end_forbidden"]={
Line 3,775: Line 3,775:
[c]=kb,
[c]=kb,
[b]={Dd,1342140264,zd},
[b]={Dd,1342140264,zd},
[k]={{rb,336,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  if (isHTMLEndTagForbidden(TagName)) {\n    Diag(HET->getLocation(), diag::warn_doc_html_end_forbidden) << TagName << HET->getSourceRange();"}}
[k]={{rb,457,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  if (isHTMLEndTagForbidden(TagName)) {\n    Diag(HET->getLocation(), diag::warn_doc_html_end_forbidden) << TagName << HET->getSourceRange();"}}
},
},
["warn_doc_html_end_unbalanced"]={
["warn_doc_html_end_unbalanced"]={
Line 3,790: Line 3,790:
[c]=kb,
[c]=kb,
[b]={Dd,1342140264,zd},
[b]={Dd,1342140264,zd},
[k]={{rb,349,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  if (!FoundOpen) {\n    Diag(HET->getLocation(), diag::warn_doc_html_end_unbalanced) << HET->getSourceRange();"}}
[k]={{rb,473,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  if (!FoundOpen) {\n    Diag(HET->getLocation(), diag::warn_doc_html_end_unbalanced) << HET->getSourceRange();"}}
},
},
["warn_doc_html_missing_end_tag"]={
["warn_doc_html_missing_end_tag"]={
Line 3,805: Line 3,805:
[c]=kb,
[c]=kb,
[b]={"93043620bc63",1398164353,"Comment parsing: in the generated XML file, mark HTML that is safe to pass"},
[b]={"93043620bc63",1398164353,"Comment parsing: in the generated XML file, mark HTML that is safe to pass"},
[k]={{rb,395,"FullComment *Sema::actOnFullComment(ArrayRef<BlockContentComment *> Blocks) {\n  // Complain about HTML tags that are not closed.\n  while (!HTMLOpenTags.empty()) {\n    Diag(HST->getLocation(), diag::warn_doc_html_missing_end_tag) << HST->getTagName() << HST->getSourceRange();"}}
[k]={{rb,530,"FullComment *Sema::actOnFullComment(ArrayRef<BlockContentComment *> Blocks) {\n  // Complain about HTML tags that are not closed.\n  while (!HTMLOpenTags.empty()) {\n    Diag(HST->getLocation(), diag::warn_doc_html_missing_end_tag) << HST->getTagName() << HST->getSourceRange();"}}
},
},
["warn_doc_html_start_end_mismatch"]={
["warn_doc_html_start_end_mismatch"]={
Line 3,820: Line 3,820:
[c]=kb,
[c]=kb,
[b]={Dd,1342140264,zd},
[b]={Dd,1342140264,zd},
[k]={{rb,373,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  while (!HTMLOpenTags.empty()) {\n    if (OpenLineInvalid || CloseLineInvalid || OpenLine == CloseLine) {\n      Diag(HST->getLocation(), diag::warn_doc_html_start_end_mismatch) << HST->getTagName() << HET->getTagName() << HST->getSourceRange() << HET->getSourceRange();"},{rb,376,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  while (!HTMLOpenTags.empty()) {\n    if (OpenLineInvalid || CloseLineInvalid || OpenLine == CloseLine) {\n    } else {\n      Diag(HST->getLocation(), diag::warn_doc_html_start_end_mismatch) << HST->getTagName() << HET->getTagName() << HST->getSourceRange();"}}
[k]={{rb,502,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  while (!HTMLOpenTags.empty()) {\n    if (OpenLineInvalid || CloseLineInvalid || OpenLine == CloseLine) {\n      Diag(HST->getLocation(), diag::warn_doc_html_start_end_mismatch) << HST->getTagName() << HET->getTagName() << HST->getSourceRange() << HET->getSourceRange();"},{rb,507,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  while (!HTMLOpenTags.empty()) {\n    if (OpenLineInvalid || CloseLineInvalid || OpenLine == CloseLine) {\n    } else {\n      Diag(HST->getLocation(), diag::warn_doc_html_start_end_mismatch) << HST->getTagName() << HET->getTagName() << HST->getSourceRange();"}}
},
},
["warn_doc_html_start_tag_expected_ident_or_greater"]={
["warn_doc_html_start_tag_expected_ident_or_greater"]={
Line 3,835: Line 3,835:
[c]=kb,
[c]=kb,
[b]={Dd,1342140264,zd},
[b]={Dd,1342140264,zd},
[k]={{Jd,422,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  while (true) {\n    case tok::html_quoted_string:\n      Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_ident_or_greater);"},{Jd,441,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  while (true) {\n    default:\n      if (StartLineInvalid || EndLineInvalid || StartLine == EndLine)\n        Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_ident_or_greater) << HST->getSourceRange();"},{Jd,443,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  while (true) {\n    default:\n      if (StartLineInvalid || EndLineInvalid || StartLine == EndLine)\n      else {\n        Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_ident_or_greater);"}}
[k]={{Jd,487,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  while (true) {\n    case tok::html_quoted_string:\n      Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_ident_or_greater);"},{Jd,516,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  while (true) {\n    default:\n      if (StartLineInvalid || EndLineInvalid || StartLine == EndLine)\n        Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_ident_or_greater) << HST->getSourceRange();"},{Jd,520,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  while (true) {\n    default:\n      if (StartLineInvalid || EndLineInvalid || StartLine == EndLine)\n      else {\n        Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_ident_or_greater);"}}
},
},
["warn_doc_html_start_tag_expected_quoted_string"]={
["warn_doc_html_start_tag_expected_quoted_string"]={
Line 3,850: Line 3,850:
[c]=kb,
[c]=kb,
[b]={Dd,1342140264,zd},
[b]={Dd,1342140264,zd},
[k]={{Jd,397,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  while (true) {\n    case tok::html_ident: {\n      if (Tok.isNot(tok::html_quoted_string)) {\n        Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_quoted_string) << SourceRange(Equals.getLocation());"}}
[k]={{Jd,450,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  while (true) {\n    case tok::html_ident: {\n      if (Tok.isNot(tok::html_quoted_string)) {\n        Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_quoted_string) << SourceRange(Equals.getLocation());"}}
},
},
["warn_doc_inline_command_not_enough_arguments"]={
["warn_doc_inline_command_not_enough_arguments"]={
Line 3,865: Line 3,865:
[c]=kb,
[c]=kb,
[b]={"d3a4033d6ee1",1652441850,"Comment parsing: Allow inline commands to have 0 or more than 1 argument"},
[b]={"d3a4033d6ee1",1652441850,"Comment parsing: Allow inline commands to have 0 or more than 1 argument"},
[k]={{Jd,371,"InlineCommandComment *Parser::parseInlineCommand() {\n  if (Args.size() < Info->NumArgs) {\n    Diag(CommandTok.getEndLocation().getLocWithOffset(1), diag::warn_doc_inline_command_not_enough_arguments) << CommandTok.is(tok::at_command) << Info->Name << Args.size() << Info->NumArgs << SourceRange(CommandTok.getLocation(), CommandTok.getEndLocation());"}}
[k]={{Jd,417,"InlineCommandComment *Parser::parseInlineCommand() {\n  if (Args.size() < Info->NumArgs) {\n    Diag(CommandTok.getEndLocation().getLocWithOffset(1), diag::warn_doc_inline_command_not_enough_arguments) << CommandTok.is(tok::at_command) << Info->Name << Args.size() << Info->NumArgs << SourceRange(CommandTok.getLocation(), CommandTok.getEndLocation());"}}
},
},
["warn_doc_param_duplicate"]={
["warn_doc_param_duplicate"]={
Line 3,880: Line 3,880:
[c]=kb,
[c]=kb,
[b]={"8f0f1b0c41cd",1343166256,"Comment diagnostics: add warning for multiple \\param commands with duplicate"},
[b]={"8f0f1b0c41cd",1343166256,"Comment diagnostics: add warning for multiple \\param commands with duplicate"},
[k]={{rb,570,"void Sema::resolveParamCommandIndexes(const FullComment *FC) {\n  // First pass over all \\\\param commands: resolve all parameter names.\n  for (Comment::child_iterator I = FC->child_begin(), E = FC->child_end(); I != E; ++I) {\n    if (ParamVarDocs[ResolvedParamIndex]) {\n      Diag(ArgRange.getBegin(), diag::warn_doc_param_duplicate) << ParamName << ArgRange;"}}
[k]={{rb,743,"void Sema::resolveParamCommandIndexes(const FullComment *FC) {\n  // First pass over all \\\\param commands: resolve all parameter names.\n  for (Comment::child_iterator I = FC->child_begin(), E = FC->child_end(); I != E; ++I) {\n    if (ParamVarDocs[ResolvedParamIndex]) {\n      Diag(ArgRange.getBegin(), diag::warn_doc_param_duplicate) << ParamName << ArgRange;"}}
},
},
["warn_doc_param_invalid_direction"]={
["warn_doc_param_invalid_direction"]={
Line 3,895: Line 3,895:
[c]=kb,
[c]=kb,
[b]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[b]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[k]={{rb,199,"void Sema::actOnParamCommandDirectionArg(ParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  if (Direction == -1) {\n    if (Direction != -1) {\n    } else {\n      Diag(ArgLocBegin, diag::warn_doc_param_invalid_direction) << ArgRange;"}}
[k]={{rb,250,"void Sema::actOnParamCommandDirectionArg(ParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  if (Direction == -1) {\n    if (Direction != -1) {\n    } else {\n      Diag(ArgLocBegin, diag::warn_doc_param_invalid_direction) << ArgRange;"}}
},
},
["warn_doc_param_not_attached_to_a_function_decl"]={
["warn_doc_param_not_attached_to_a_function_decl"]={
Line 3,910: Line 3,910:
[c]=kb,
[c]=kb,
[b]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[b]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[k]={{rb,65,"ParamCommandComment *Sema::actOnParamCommandStart(SourceLocation LocBegin, SourceLocation LocEnd, unsigned CommandID, CommandMarkerKind CommandMarker) {\n  if (!involvesFunctionType())\n    Diag(Command->getLocation(), diag::warn_doc_param_not_attached_to_a_function_decl) << CommandMarker << Command->getCommandNameRange(Traits);"}}
[k]={{rb,92,"ParamCommandComment *Sema::actOnParamCommandStart(SourceLocation LocBegin, SourceLocation LocEnd, unsigned CommandID, CommandMarkerKind CommandMarker) {\n  if (!involvesFunctionType())\n    Diag(Command->getLocation(), diag::warn_doc_param_not_attached_to_a_function_decl) << CommandMarker << Command->getCommandNameRange(Traits);"}}
},
},
["warn_doc_param_not_found"]={
["warn_doc_param_not_found"]={
Line 3,925: Line 3,925:
[c]=kb,
[c]=kb,
[b]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[b]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[k]={{rb,592,"void Sema::resolveParamCommandIndexes(const FullComment *FC) {\n  // Second pass over unresolved \\\\param commands: do typo correction.\n  // Suggest corrections from a set of parameter declarations that have no\n  // corresponding \\\\param.\n  for (unsigned i = 0, e = UnresolvedParamCommands.size(); i != e; ++i) {\n    Diag(ArgRange.getBegin(), diag::warn_doc_param_not_found) << ParamName << ArgRange;"},{G,12797,"void Sema::ActOnDocumentableDecls(ArrayRef<Decl *> Group) {\n  if (Diags.isIgnored(diag::warn_doc_param_not_found, Group[0]->getLocation()) && Diags.isIgnored(diag::warn_unknown_comment_command_name, Group[0]->getLocation()))"}}
[k]={{rb,767,"void Sema::resolveParamCommandIndexes(const FullComment *FC) {\n  // Second pass over unresolved \\\\param commands: do typo correction.\n  // Suggest corrections from a set of parameter declarations that have no\n  // corresponding \\\\param.\n  for (unsigned i = 0, e = UnresolvedParamCommands.size(); i != e; ++i) {\n    Diag(ArgRange.getBegin(), diag::warn_doc_param_not_found) << ParamName << ArgRange;"},{G,14658,"void Sema::ActOnDocumentableDecls(ArrayRef<Decl *> Group) {\n  if (Diags.isIgnored(diag::warn_doc_param_not_found, Group[0]->getLocation()) && Diags.isIgnored(diag::warn_unknown_comment_command_name, Group[0]->getLocation()))"}}
},
},
["warn_doc_param_spaces_in_direction"]={
["warn_doc_param_spaces_in_direction"]={
Line 3,940: Line 3,940:
[c]=kb,
[c]=kb,
[b]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[b]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[k]={{rb,197,"void Sema::actOnParamCommandDirectionArg(ParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  if (Direction == -1) {\n    if (Direction != -1) {\n      Diag(ArgLocBegin, diag::warn_doc_param_spaces_in_direction) << ArgRange << FixItHint::CreateReplacement(ArgRange, FixedName);"}}
[k]={{rb,247,"void Sema::actOnParamCommandDirectionArg(ParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  if (Direction == -1) {\n    if (Direction != -1) {\n      Diag(ArgLocBegin, diag::warn_doc_param_spaces_in_direction) << ArgRange << FixItHint::CreateReplacement(ArgRange, FixedName);"}}
},
},
["warn_doc_returns_attached_to_a_void_function"]={
["warn_doc_returns_attached_to_a_void_function"]={
Line 3,955: Line 3,955:
[c]=kb,
[c]=kb,
[b]={"6430583017c0",1344028532,"Comment diagnostics: warn if \\returns is used in a non-function comment or if"},
[b]={"6430583017c0",1344028532,"Comment diagnostics: warn if \\returns is used in a non-function comment or if"},
[k]={{rb,445,"void Sema::checkReturnsCommand(const BlockCommandComment *Command) {\n  if (involvesFunctionType()) {\n    if (ThisDeclInfo->ReturnType->isVoidType()) {\n      Diag(Command->getLocation(), diag::warn_doc_returns_attached_to_a_void_function) << Command->getCommandMarker() << Command->getCommandName(Traits) << DiagKind << Command->getSourceRange();"}}
[k]={{rb,586,"void Sema::checkReturnsCommand(const BlockCommandComment *Command) {\n  if (involvesFunctionType()) {\n    if (ThisDeclInfo->ReturnType->isVoidType()) {\n      Diag(Command->getLocation(), diag::warn_doc_returns_attached_to_a_void_function) << Command->getCommandMarker() << Command->getCommandName(Traits) << DiagKind << Command->getSourceRange();"}}
},
},
["warn_doc_returns_not_attached_to_a_function_decl"]={
["warn_doc_returns_not_attached_to_a_function_decl"]={
Line 3,970: Line 3,970:
[c]=kb,
[c]=kb,
[b]={"6430583017c0",1344028532,"Comment diagnostics: warn if \\returns is used in a non-function comment or if"},
[b]={"6430583017c0",1344028532,"Comment diagnostics: warn if \\returns is used in a non-function comment or if"},
[k]={{rb,450,"void Sema::checkReturnsCommand(const BlockCommandComment *Command) {\n  Diag(Command->getLocation(), diag::warn_doc_returns_not_attached_to_a_function_decl) << Command->getCommandMarker() << Command->getCommandName(Traits) << Command->getSourceRange();"}}
[k]={{rb,596,"void Sema::checkReturnsCommand(const BlockCommandComment *Command) {\n  Diag(Command->getLocation(), diag::warn_doc_returns_not_attached_to_a_function_decl) << Command->getCommandMarker() << Command->getCommandName(Traits) << Command->getSourceRange();"}}
},
},
["warn_doc_tparam_duplicate"]={
["warn_doc_tparam_duplicate"]={
Line 3,985: Line 3,985:
[c]=kb,
[c]=kb,
[b]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels."},
[b]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels."},
[k]={{rb,252,"void Sema::actOnTParamCommandParamNameArg(TParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  if (resolveTParamReference(Arg, TemplateParameters, &Position)) {\n    if (PrevCommand) {\n      Diag(ArgLocBegin, diag::warn_doc_tparam_duplicate) << Arg << ArgRange;"}}
[k]={{rb,322,"void Sema::actOnTParamCommandParamNameArg(TParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  if (resolveTParamReference(Arg, TemplateParameters, &Position)) {\n    if (PrevCommand) {\n      Diag(ArgLocBegin, diag::warn_doc_tparam_duplicate) << Arg << ArgRange;"}}
},
},
["warn_doc_tparam_not_attached_to_a_template_decl"]={
["warn_doc_tparam_not_attached_to_a_template_decl"]={
Line 4,000: Line 4,000:
[c]=kb,
[c]=kb,
[b]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels."},
[b]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels."},
[k]={{rb,228,"TParamCommandComment *Sema::actOnTParamCommandStart(SourceLocation LocBegin, SourceLocation LocEnd, unsigned CommandID, CommandMarkerKind CommandMarker) {\n  if (!isTemplateOrSpecialization())\n    Diag(Command->getLocation(), diag::warn_doc_tparam_not_attached_to_a_template_decl) << CommandMarker << Command->getCommandNameRange(Traits);"}}
[k]={{rb,291,"TParamCommandComment *Sema::actOnTParamCommandStart(SourceLocation LocBegin, SourceLocation LocEnd, unsigned CommandID, CommandMarkerKind CommandMarker) {\n  if (!isTemplateOrSpecialization())\n    Diag(Command->getLocation(), diag::warn_doc_tparam_not_attached_to_a_template_decl) << CommandMarker << Command->getCommandNameRange(Traits);"}}
},
},
["warn_doc_tparam_not_found"]={
["warn_doc_tparam_not_found"]={
Line 4,015: Line 4,015:
[c]=kb,
[c]=kb,
[b]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels."},
[b]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels."},
[k]={{rb,260,"void Sema::actOnTParamCommandParamNameArg(TParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  Diag(ArgLocBegin, diag::warn_doc_tparam_not_found) << Arg << ArgRange;"}}
[k]={{rb,332,"void Sema::actOnTParamCommandParamNameArg(TParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  Diag(ArgLocBegin, diag::warn_doc_tparam_not_found) << Arg << ArgRange;"}}
},
},
["warn_double_const_requires_fp64"]={
["warn_double_const_requires_fp64"]={
Line 4,027: Line 4,027:
[c]=q,
[c]=q,
[b]={"c77f85b4b0fe",1299871499,"OpenCL: if double precision floating point constant encountered"},
[b]={"c77f85b4b0fe",1299871499,"OpenCL: if double precision floating point constant encountered"},
[k]={{M,3535,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  if (Literal.isFixedPointLiteral()) {\n  } else if (Literal.isFloatingLiteral()) {\n    if (Ty == Context.DoubleTy) {\n      if (getLangOpts().SinglePrecisionConstants) {\n      } else if (getLangOpts().OpenCL && !getOpenCLOptions().isAvailableOption(\"cl_khr_fp64\", getLangOpts())) {\n        Diag(Tok.getLocation(), diag::warn_double_const_requires_fp64) << (getLangOpts().getOpenCLCompatibleVersion() >= 300);"}}
[k]={{M,4044,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  if (Literal.isFixedPointLiteral()) {\n  } else if (Literal.isFloatingLiteral()) {\n    if (Ty == Context.DoubleTy) {\n      if (getLangOpts().SinglePrecisionConstants) {\n      } else if (getLangOpts().OpenCL && !getOpenCLOptions().isAvailableOption(\"cl_khr_fp64\", getLangOpts())) {\n        Diag(Tok.getLocation(), diag::warn_double_const_requires_fp64) << (getLangOpts().getOpenCLCompatibleVersion() >= 300);"}}
},
},
["warn_double_lock"]={
["warn_double_lock"]={
Line 4,042: Line 4,042:
[c]=q,
[c]=q,
[b]={"afbbd8e5adac",1314125194,"Thread-safety analysis: adding in a basic lockset tracking system. This"},
[b]={"afbbd8e5adac",1314125194,"Thread-safety analysis: adding in a basic lockset tracking system. This"},
[k]={{eb,1639,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleDoubleLock(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocDoubleLock) override {\n    PartialDiagnosticAt Warning(LocDoubleLock, S.PDiag(diag::warn_double_lock) << Kind << LockName);"}}
[k]={{eb,1896,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleDoubleLock(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocDoubleLock) override {\n    PartialDiagnosticAt Warning(LocDoubleLock, S.PDiag(diag::warn_double_lock) << Kind << LockName);"}}
},
},
["warn_drv_assuming_mfloat_abi_is"]={
["warn_drv_assuming_mfloat_abi_is"]={
Line 4,054: Line 4,054:
[c]=u,
[c]=u,
[b]={"7848592ec652",1252623609,"Initial handling of -m{soft-float,hard-float,float-abi=} for ARM."},
[b]={"7848592ec652",1252623609,"Initial handling of -m{soft-float,hard-float,float-abi=} for ARM."},
[k]={{jd,392,"// Select the float ABI as determined by -msoft-float, -mhard-float, and\n// -mfloat-abi=.\narm::FloatABI arm::getARMFloatABI(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) {\n  if (ABI == FloatABI::Invalid) {\n    if (Triple.getOS() != llvm::Triple::UnknownOS || !Triple.isOSBinFormatMachO())\n      D.Diag(diag::warn_drv_assuming_mfloat_abi_is) << \"soft\";"}}
[k]={{jd,472,"// Select the float ABI as determined by -msoft-float, -mhard-float, and\n// -mfloat-abi=.\narm::FloatABI arm::getARMFloatABI(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) {\n  if (ABI == FloatABI::Invalid) {\n    if (Triple.getOS() != llvm::Triple::UnknownOS || !Triple.isOSBinFormatMachO())\n      D.Diag(diag::warn_drv_assuming_mfloat_abi_is) << \"soft\";"}}
},
},
["warn_drv_avr_family_linking_stdlibs_not_implemented"]={
["warn_drv_avr_family_linking_stdlibs_not_implemented"]={
Line 4,068: Line 4,068:
[c]=u,
[c]=u,
[b]={Ub,1534346725,Tb},
[b]={Ub,1534346725,Tb},
[k]={{wd,460,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs)) {\n    if (!CPU.empty()) {\n      if (!FamilyName) {\n        D.Diag(diag::warn_drv_avr_family_linking_stdlibs_not_implemented) << CPU;"}}
[k]={{wd,481,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs)) {\n    if (!CPU.empty()) {\n      if (!FamilyName) {\n        D.Diag(diag::warn_drv_avr_family_linking_stdlibs_not_implemented) << CPU;"}}
},
},
["warn_drv_avr_libc_not_found"]={
["warn_drv_avr_libc_not_found"]={
Line 4,082: Line 4,082:
[c]=u,
[c]=u,
[b]={Ub,1534346725,Tb},
[b]={Ub,1534346725,Tb},
[k]={{wd,463,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs)) {\n    if (!CPU.empty()) {\n      if (!FamilyName) {\n      } else if (!AVRLibcRoot) {\n        D.Diag(diag::warn_drv_avr_libc_not_found);"}}
[k]={{wd,485,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs)) {\n    if (!CPU.empty()) {\n      if (!FamilyName) {\n      } else if (!AVRLibcRoot) {\n        D.Diag(diag::warn_drv_avr_libc_not_found);"}}
},
},
["warn_drv_avr_linker_section_addresses_not_implemented"]={
["warn_drv_avr_linker_section_addresses_not_implemented"]={
Line 4,096: Line 4,096:
[c]=u,
[c]=u,
[b]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[b]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[k]={{wd,481,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (SectionAddressData) {\n  } else {\n    D.Diag(diag::warn_drv_avr_linker_section_addresses_not_implemented) << CPU;"}}
[k]={{wd,507,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (SectionAddressData) {\n  } else {\n    D.Diag(diag::warn_drv_avr_linker_section_addresses_not_implemented) << CPU;"}}
},
},
["warn_drv_avr_mcu_not_specified"]={
["warn_drv_avr_mcu_not_specified"]={
Line 4,110: Line 4,110:
[c]=u,
[c]=u,
[b]={Ub,1534346725,Tb},
[b]={Ub,1534346725,Tb},
[k]={{wd,370,"/// AVR Toolchain\nAVRToolChain::AVRToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) : Generic_ELF(D, Triple, Args) {\n  if (getCPUName(D, Args, Triple).empty())\n    D.Diag(diag::warn_drv_avr_mcu_not_specified);"}}
[k]={{wd,373,"/// AVR Toolchain\nAVRToolChain::AVRToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) : Generic_ELF(D, Triple, Args) {\n  if (getCPUName(D, Args, Triple).empty())\n    D.Diag(diag::warn_drv_avr_mcu_not_specified);"}}
},
},
["warn_drv_avr_stdlib_not_linked"]={
["warn_drv_avr_stdlib_not_linked"]={
Line 4,124: Line 4,124:
[c]=u,
[c]=u,
[b]={Ub,1534346725,Tb},
[b]={Ub,1534346725,Tb},
[k]={{wd,474,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs)) {\n    if (!LinkStdlib)\n      D.Diag(diag::warn_drv_avr_stdlib_not_linked);"}}
[k]={{wd,498,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs)) {\n    if (!LinkStdlib)\n      D.Diag(diag::warn_drv_avr_stdlib_not_linked);"}}
},
},
["warn_drv_clang_unsupported"]={
["warn_drv_clang_unsupported"]={
Line 4,136: Line 4,136:
[c]=u,
[c]=u,
[b]={"513d500fda01",1239131904,"Driver: Explicitly warn that -pg isn\'t supported (even though we"},
[b]={"513d500fda01",1239131904,"Driver: Explicitly warn that -pg isn\'t supported (even though we"},
[k]={{U,5997,"#endif\n  // -fsigned-bitfields is default, and clang doesn\'t yet support\n  // -funsigned-bitfields.\n  if (!Args.hasFlag(options::OPT_fsigned_bitfields, options::OPT_funsigned_bitfields, true))\n    D.Diag(diag::warn_drv_clang_unsupported) << Args.getLastArg(options::OPT_funsigned_bitfields)->getAsString(Args);"}}
[k]={{U,6965,"#endif\n  // -fsigned-bitfields is default, and clang doesn\'t yet support\n  // -funsigned-bitfields.\n  if (!Args.hasFlag(options::OPT_fsigned_bitfields, options::OPT_funsigned_bitfields, true))\n    D.Diag(diag::warn_drv_clang_unsupported) << Args.getLastArg(options::OPT_funsigned_bitfields)->getAsString(Args);"}}
},
},
["warn_drv_darwin_sdk_invalid_settings"]={
["warn_drv_darwin_sdk_invalid_settings"]={
Line 4,150: Line 4,150:
[c]=u,
[c]=u,
[b]={Ub,1534346725,Tb},
[b]={Ub,1534346725,Tb},
[k]={{Uc,1854,"std::optional<DarwinSDKInfo> parseSDKSettings(llvm::vfs::FileSystem &VFS, const ArgList &Args, const Driver &TheDriver) {\n  if (!SDKInfoOrErr) {\n    TheDriver.Diag(diag::warn_drv_darwin_sdk_invalid_settings);"}}
[k]={{Uc,2131,"std::optional<DarwinSDKInfo> parseSDKSettings(llvm::vfs::FileSystem &VFS, const ArgList &Args, const Driver &TheDriver) {\n  if (!SDKInfoOrErr) {\n    TheDriver.Diag(diag::warn_drv_darwin_sdk_invalid_settings);"}}
},
},
["warn_drv_deprecated_arg"]={
["warn_drv_deprecated_arg"]={
Line 4,164: Line 4,164:
[c]=ib,
[c]=ib,
[b]={"aa716577495a",1352164322,"Per discussion on cfe-commits, treat -faddress-sanitizer,"},
[b]={"aa716577495a",1352164322,"Per discussion on cfe-commits, treat -faddress-sanitizer,"},
[k]={{Zc,601,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // Parse -f(no-)?sanitize-coverage flags if coverage is supported by the\n  // enabled sanitizers.\n  for (const auto *Arg : Args) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_coverage)) {\n      if (Arg->getNumValues() == 1 && !StringRef(Arg->getValue(0)).getAsInteger(0, LegacySanitizeCoverage)) {\n        if (LegacySanitizeCoverage != 0 && DiagnoseErrors) {\n          D.Diag(diag::warn_drv_deprecated_arg) << Arg->getAsString(Args) << \"-fsanitize-coverage=trace-pc-guard\";"},{Zc,633,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // Choose at most one coverage type: function, bb, or edge.\n  if (DiagnoseErrors) {\n    // Basic block tracing and 8-bit counters require some type of coverage\n    // enabled.\n    if (CoverageFeatures & CoverageTraceBB)\n      D.Diag(clang::diag::warn_drv_deprecated_arg) << \"-fsanitize-coverage=trace-bb\""},{Zc,636,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // Choose at most one coverage type: function, bb, or edge.\n  if (DiagnoseErrors) {\n    if (CoverageFeatures & Coverage8bitCounters)\n      D.Diag(clang::diag::warn_drv_deprecated_arg) << \"-fsanitize-coverage=8bit-counters\""},{Zc,643,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  if ((CoverageFeatures & InsertionPointTypes) && !(CoverageFeatures & InstrumentationTypes) && DiagnoseErrors) {\n    D.Diag(clang::diag::warn_drv_deprecated_arg) << \"-fsanitize-coverage=[func|bb|edge]\""}}
[k]={{Zc,798,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // Parse -f(no-)?sanitize-coverage flags if coverage is supported by the\n  // enabled sanitizers.\n  for (const auto *Arg : Args) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_coverage)) {\n      if (Arg->getNumValues() == 1 && !StringRef(Arg->getValue(0)).getAsInteger(0, LegacySanitizeCoverage)) {\n        if (LegacySanitizeCoverage != 0 && DiagnoseErrors) {\n          D.Diag(diag::warn_drv_deprecated_arg) << Arg->getAsString(Args) << \"-fsanitize-coverage=trace-pc-guard\";"},{Zc,834,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // Choose at most one coverage type: function, bb, or edge.\n  if (DiagnoseErrors) {\n    // Basic block tracing and 8-bit counters require some type of coverage\n    // enabled.\n    if (CoverageFeatures & CoverageTraceBB)\n      D.Diag(clang::diag::warn_drv_deprecated_arg) << \"-fsanitize-coverage=trace-bb\""},{Zc,838,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // Choose at most one coverage type: function, bb, or edge.\n  if (DiagnoseErrors) {\n    if (CoverageFeatures & Coverage8bitCounters)\n      D.Diag(clang::diag::warn_drv_deprecated_arg) << \"-fsanitize-coverage=8bit-counters\""},{Zc,850,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  if ((CoverageFeatures & InsertionPointTypes) && !(CoverageFeatures & InstrumentationTypes) && DiagnoseErrors) {\n    D.Diag(clang::diag::warn_drv_deprecated_arg) << \"-fsanitize-coverage=[func|bb|edge]\""}}
},
},
["warn_drv_diagnostics_hotness_requires_pgo"]={
["warn_drv_diagnostics_hotness_requires_pgo"]={
Line 4,178: Line 4,178:
[c]=u,
[c]=u,
[b]={"dc6fa5d1f678",1498884278,"[Driver] Add -fdiagnostics-hotness-threshold"},
[b]={"dc6fa5d1f678",1498884278,"[Driver] Add -fdiagnostics-hotness-threshold"},
[k]={{sc,1626,"#include \"clang/Driver/Options.inc\"\n  if (Opts.DiagnosticsWithHotness && !UsingProfile &&\n    Diags.Report(diag::warn_drv_diagnostics_hotness_requires_pgo) << \"-fdiagnostics-show-hotness\";"},{sc,1637,"#include \"clang/Driver/Options.inc\"\n  // Parse remarks hotness threshold. Valid value is either integer or \'auto\'.\n  if (auto *arg = Args.getLastArg(options::OPT_fdiagnostics_hotness_threshold_EQ)) {\n    if (!ResultOrErr) {\n    } else {\n      if ((!Opts.DiagnosticsHotnessThreshold || *Opts.DiagnosticsHotnessThreshold > 0) && !UsingProfile)\n        Diags.Report(diag::warn_drv_diagnostics_hotness_requires_pgo) << \"-fdiagnostics-hotness-threshold=\";"}}
[k]={{sc,1993,"#include \"clang/Driver/Options.inc\"\n  if (Opts.DiagnosticsWithHotness && !UsingProfile &&\n    Diags.Report(diag::warn_drv_diagnostics_hotness_requires_pgo) << \"-fdiagnostics-show-hotness\";"},{sc,2010,"#include \"clang/Driver/Options.inc\"\n  // Parse remarks hotness threshold. Valid value is either integer or \'auto\'.\n  if (auto *arg = Args.getLastArg(options::OPT_fdiagnostics_hotness_threshold_EQ)) {\n    if (!ResultOrErr) {\n    } else {\n      if ((!Opts.DiagnosticsHotnessThreshold || *Opts.DiagnosticsHotnessThreshold > 0) && !UsingProfile)\n        Diags.Report(diag::warn_drv_diagnostics_hotness_requires_pgo) << \"-fdiagnostics-hotness-threshold=\";"}}
},
},
["warn_drv_diagnostics_misexpect_requires_pgo"]={
["warn_drv_diagnostics_misexpect_requires_pgo"]={
Line 4,192: Line 4,192:
[c]=u,
[c]=u,
[b]={"c5e5b54350fe",1645456106,"[CUDA] Add driver support for compiling CUDA with the new driver"},
[b]={"c5e5b54350fe",1645456106,"[CUDA] Add driver support for compiling CUDA with the new driver"},
[k]={{sc,1649,"#include \"clang/Driver/Options.inc\"\n  if (auto *arg = Args.getLastArg(options::OPT_fdiagnostics_misexpect_tolerance_EQ)) {\n    if (!ResultOrErr) {\n    } else {\n      if ((!Opts.DiagnosticsMisExpectTolerance || *Opts.DiagnosticsMisExpectTolerance > 0) && !UsingProfile)\n        Diags.Report(diag::warn_drv_diagnostics_misexpect_requires_pgo) << \"-fdiagnostics-misexpect-tolerance=\";"}}
[k]={{sc,2027,"#include \"clang/Driver/Options.inc\"\n  if (auto *arg = Args.getLastArg(options::OPT_fdiagnostics_misexpect_tolerance_EQ)) {\n    if (!ResultOrErr) {\n    } else {\n      if ((!Opts.DiagnosticsMisExpectTolerance || *Opts.DiagnosticsMisExpectTolerance > 0) && !UsingProfile)\n        Diags.Report(diag::warn_drv_diagnostics_misexpect_requires_pgo) << \"-fdiagnostics-misexpect-tolerance=\";"}}
},
},
["warn_drv_disabling_vptr_no_rtti_default"]={
["warn_drv_disabling_vptr_no_rtti_default"]={
Line 4,206: Line 4,206:
[c]=u,
[c]=u,
[b]={"28f353c7d0d3",1422575803,"Add some more PS4 driver settings related to rtti and exceptions."},
[b]={"28f353c7d0d3",1422575803,"Add some more PS4 driver settings related to rtti and exceptions."},
[k]={{Zc,363,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {\n      // Test for -fno-rtti + explicit -fsanitizer=vptr before expanding groups\n      // so we don\'t error out if -fno-rtti and -fsanitize=undefined were\n      // passed.\n      if ((Add & SanitizerKind::Vptr) && (RTTIMode == ToolChain::RM_Disabled)) {\n        if (const llvm::opt::Arg *NoRTTIArg = TC.getRTTIArg()) {\n        } else {\n          // The vptr sanitizer requires RTTI, but RTTI is disabled (by\n          // default). Warn that the vptr sanitizer is being disabled.\n          if (DiagnoseErrors)\n            D.Diag(diag::warn_drv_disabling_vptr_no_rtti_default);"}}
[k]={{Zc,473,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {\n      // Test for -fno-rtti + explicit -fsanitizer=vptr before expanding groups\n      // so we don\'t error out if -fno-rtti and -fsanitize=undefined were\n      // passed.\n      if ((Add & SanitizerKind::Vptr) && (RTTIMode == ToolChain::RM_Disabled)) {\n        if (const llvm::opt::Arg *NoRTTIArg = TC.getRTTIArg()) {\n        } else {\n          // The vptr sanitizer requires RTTI, but RTTI is disabled (by\n          // default). Warn that the vptr sanitizer is being disabled.\n          if (DiagnoseErrors)\n            D.Diag(diag::warn_drv_disabling_vptr_no_rtti_default);"}}
},
},
["warn_drv_dwarf_version_limited_by_target"]={
["warn_drv_dwarf_version_limited_by_target"]={
Line 4,220: Line 4,220:
[c]=u,
[c]=u,
[b]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[b]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[k]={{U,3869,"static void renderDebugOptions(const ToolChain &TC, const Driver &D, const llvm::Triple &T, const ArgList &Args, bool EmitCodeView, bool IRInput, ArgStringList &CmdArgs, llvm::codegenoptions::DebugInfoKind &DebugInfoKind, DwarfFissionKind &DwarfFission) {\n  if (Args.hasFlag(options::OPT_gembed_source, options::OPT_gno_embed_source, false)) {\n    if (RequestedDWARFVersion < 5)\n    else if (EffectiveDWARFVersion < 5)\n      D.Diag(diag::warn_drv_dwarf_version_limited_by_target) << A->getAsString(Args) << TC.getTripleString() << 5 << EffectiveDWARFVersion;"}}
[k]={{U,4395,"static void renderDebugOptions(const ToolChain &TC, const Driver &D, const llvm::Triple &T, const ArgList &Args, bool EmitCodeView, bool IRInput, ArgStringList &CmdArgs, llvm::codegenoptions::DebugInfoKind &DebugInfoKind, DwarfFissionKind &DwarfFission) {\n  if (Args.hasFlag(options::OPT_gembed_source, options::OPT_gno_embed_source, false)) {\n    if (RequestedDWARFVersion < 5)\n    else if (EffectiveDWARFVersion < 5)\n      D.Diag(diag::warn_drv_dwarf_version_limited_by_target) << A->getAsString(Args) << TC.getTripleString() << 5 << EffectiveDWARFVersion;"}}
},
},
["warn_drv_dxc_missing_dxv"]={
["warn_drv_dxc_missing_dxv"]={
Line 4,234: Line 4,234:
[c]=u,
[c]=u,
[b]={"d5a7439e220c",1673633136,"[HLSL] [Dirver] add dxv as a VerifyDebug Job"},
[b]={"d5a7439e220c",1673633136,"[HLSL] [Dirver] add dxv as a VerifyDebug Job"},
[k]={{"clang/lib/Driver/ToolChains/HLSL.cpp",232,"bool HLSLToolChain::requiresValidation(DerivedArgList &Args) const {\n  getDriver().Diag(diag::warn_drv_dxc_missing_dxv);"}}
[k]={{"clang/lib/Driver/ToolChains/HLSL.cpp",266,"bool HLSLToolChain::requiresValidation(DerivedArgList &Args) const {\n  getDriver().Diag(diag::warn_drv_dxc_missing_dxv);"}}
},
},
["warn_drv_empty_joined_argument"]={
["warn_drv_empty_joined_argument"]={
Line 4,248: Line 4,248:
[c]=u,
[c]=u,
[b]={"ce975d999750",1329933322,"[driver] Add a warning for when -mcpu= is specified without an argument.  There"},
[b]={"ce975d999750",1329933322,"[driver] Add a warning for when -mcpu= is specified without an argument.  There"},
[k]={{Jb,266,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // Check for unsupported options.\n  for (const Arg *A : Args) {\n    // Warn about -mcpu= without an argument.\n    if (A->getOption().matches(options::OPT_mcpu_EQ) && A->containsValue(\"\")) {\n      Diag(diag::warn_drv_empty_joined_argument) << A->getAsString(Args);"},{Jb,267,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // Check for unsupported options.\n  for (const Arg *A : Args) {\n    // Warn about -mcpu= without an argument.\n    if (A->getOption().matches(options::OPT_mcpu_EQ) && A->containsValue(\"\")) {\n      ContainsError |= Diags.getDiagnosticLevel(diag::warn_drv_empty_joined_argument, SourceLocation()) > DiagnosticsEngine::Warning;"},{Jb,734,"void Driver::CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs) {\n  if (IsOpenMPOffloading) {\n    // If the user specified -fopenmp-targets= we create a toolchain for each\n    // valid triple. Otherwise, if only --offload-arch= was specified we instead\n    // attempt to derive the appropriate toolchains from the arguments.\n    if (Arg *OpenMPTargets = C.getInputArgs().getLastArg(options::OPT_fopenmp_targets_EQ)) {\n      if (OpenMPTargets && !OpenMPTargets->getNumValues()) {\n        Diag(clang::diag::warn_drv_empty_joined_argument) << OpenMPTargets->getAsString(C.getInputArgs());"}}
[k]={{Jb,309,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // Check for unsupported options.\n  for (const Arg *A : Args) {\n    // Warn about -mcpu= without an argument.\n    if (A->getOption().matches(options::OPT_mcpu_EQ) && A->containsValue(\"\")) {\n      Diag(diag::warn_drv_empty_joined_argument) << A->getAsString(Args);"},{Jb,311,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // Check for unsupported options.\n  for (const Arg *A : Args) {\n    // Warn about -mcpu= without an argument.\n    if (A->getOption().matches(options::OPT_mcpu_EQ) && A->containsValue(\"\")) {\n      ContainsError |= Diags.getDiagnosticLevel(diag::warn_drv_empty_joined_argument, SourceLocation()) > DiagnosticsEngine::Warning;"},{Jb,870,"void Driver::CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs) {\n  if (IsOpenMPOffloading) {\n    // If the user specified -fopenmp-targets= we create a toolchain for each\n    // valid triple. Otherwise, if only --offload-arch= was specified we instead\n    // attempt to derive the appropriate toolchains from the arguments.\n    if (Arg *OpenMPTargets = C.getInputArgs().getLastArg(options::OPT_fopenmp_targets_EQ)) {\n      if (OpenMPTargets && !OpenMPTargets->getNumValues()) {\n        Diag(clang::diag::warn_drv_empty_joined_argument) << OpenMPTargets->getAsString(C.getInputArgs());"}}
},
},
["warn_drv_fine_grained_bitfield_accesses_ignored"]={
["warn_drv_fine_grained_bitfield_accesses_ignored"]={
Line 4,262: Line 4,262:
[c]=u,
[c]=u,
[b]={"9b3d6272800a",1508172627,"[Bitfield] Add an option to access bitfield in a fine-grained manner."},
[b]={"9b3d6272800a",1508172627,"[Bitfield] Add an option to access bitfield in a fine-grained manner."},
[k]={{sc,3751,"bool CompilerInvocation::CreateFromArgsImpl(CompilerInvocation &Res, ArrayRef<const char *> CommandLineArgs, DiagnosticsEngine &Diags, const char *Argv0) {\n  // If sanitizer is enabled, disable OPT_ffine_grained_bitfield_accesses.\n  if (Res.getCodeGenOpts().FineGrainedBitfieldAccesses && !Res.getLangOpts()->Sanitize.empty()) {\n    Diags.Report(diag::warn_drv_fine_grained_bitfield_accesses_ignored);"}}
[k]={{sc,4472,"bool CompilerInvocation::CreateFromArgsImpl(CompilerInvocation &Res, ArrayRef<const char *> CommandLineArgs, DiagnosticsEngine &Diags, const char *Argv0) {\n  // If sanitizer is enabled, disable OPT_ffine_grained_bitfield_accesses.\n  if (Res.getCodeGenOpts().FineGrainedBitfieldAccesses && !Res.getLangOpts()->Sanitize.empty()) {\n    Diags.Report(diag::warn_drv_fine_grained_bitfield_accesses_ignored);"}}
},
},
["warn_drv_fjmc_for_elf_only"]={
["warn_drv_fjmc_for_elf_only"]={
Line 4,276: Line 4,276:
[c]=u,
[c]=u,
[b]={Zb,1610286626,bc},
[b]={Zb,1610286626,bc},
[k]={{U,4950,"#endif\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT_fjmc, options::OPT_fno_jmc, false)) {\n    if (TC.getTriple().isOSBinFormatELF()) {\n    } else {\n      D.Diag(clang::diag::warn_drv_fjmc_for_elf_only);"},{"clang/lib/Driver/ToolChains/CommonArgs.cpp",707,"#endif\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT_fjmc, options::OPT_fno_jmc, false)) {\n    if (ToolChain.getEffectiveTriple().isOSBinFormatELF())\n    else\n      D.Diag(clang::diag::warn_drv_fjmc_for_elf_only);"}}
[k]={{U,5723,"#endif\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT_fjmc, options::OPT_fno_jmc, false)) {\n    if (TC.getTriple().isOSBinFormatELF()) {\n    } else {\n      D.Diag(clang::diag::warn_drv_fjmc_for_elf_only);"},{"clang/lib/Driver/ToolChains/CommonArgs.cpp",818,"#endif\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT_fjmc, options::OPT_fno_jmc, false)) {\n    if (ToolChain.getEffectiveTriple().isOSBinFormatELF())\n    else\n      D.Diag(clang::diag::warn_drv_fjmc_for_elf_only);"}}
},
},
["warn_drv_fuse_ld_path"]={
["warn_drv_fuse_ld_path"]={
Line 4,291: Line 4,291:
[c]=u,
[c]=u,
[b]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[b]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[k]={{"clang/lib/Driver/ToolChain.cpp",726,"std::string ToolChain::GetLinkerPath(bool *LinkerIsLLD) const {\n  // Extending -fuse-ld= to an absolute or relative path is unexpected. Checking\n  // for the linker flavor is brittle. In addition, prepending \"ld.\" or \"ld64.\"\n  // to a relative path is surprising. This is more complex due to priorities\n  // among -B, COMPILER_PATH and PATH. --ld-path= should be used instead.\n  if (UseLinker.contains(\'/\'))\n    getDriver().Diag(diag::warn_drv_fuse_ld_path);"}}
[k]={{"clang/lib/Driver/ToolChain.cpp",830,"std::string ToolChain::GetLinkerPath(bool *LinkerIsLLD) const {\n  // Extending -fuse-ld= to an absolute or relative path is unexpected. Checking\n  // for the linker flavor is brittle. In addition, prepending \"ld.\" or \"ld64.\"\n  // to a relative path is surprising. This is more complex due to priorities\n  // among -B, COMPILER_PATH and PATH. --ld-path= should be used instead.\n  if (UseLinker.contains(\'/\'))\n    getDriver().Diag(diag::warn_drv_fuse_ld_path);"}}
},
},
["warn_drv_global_isel_incomplete"]={
["warn_drv_global_isel_incomplete"]={
Line 4,305: Line 4,305:
[c]=u,
[c]=u,
[b]={Ub,1534346725,Tb},
[b]={Ub,1534346725,Tb},
[k]={{U,6375,"#endif\n  if (Arg *A = Args.getLastArg(options::OPT_fglobal_isel, options::OPT_fno_global_isel)) {\n    if (A->getOption().matches(options::OPT_fglobal_isel)) {\n      if (!IsArchSupported || !IsOptLevelSupported) {\n        if (!IsArchSupported)\n          D.Diag(diag::warn_drv_global_isel_incomplete) << Triple.getArchName();"}}
[k]={{U,7399,"#endif\n  if (Arg *A = Args.getLastArg(options::OPT_fglobal_isel, options::OPT_fno_global_isel)) {\n    if (A->getOption().matches(options::OPT_fglobal_isel)) {\n      if (!IsArchSupported || !IsOptLevelSupported) {\n        if (!IsArchSupported)\n          D.Diag(diag::warn_drv_global_isel_incomplete) << Triple.getArchName();"}}
},
},
["warn_drv_global_isel_incomplete_opt"]={
["warn_drv_global_isel_incomplete_opt"]={
Line 4,319: Line 4,319:
[c]=u,
[c]=u,
[b]={Ub,1534346725,Tb},
[b]={Ub,1534346725,Tb},
[k]={{U,6377,"#endif\n  if (Arg *A = Args.getLastArg(options::OPT_fglobal_isel, options::OPT_fno_global_isel)) {\n    if (A->getOption().matches(options::OPT_fglobal_isel)) {\n      if (!IsArchSupported || !IsOptLevelSupported) {\n        if (!IsArchSupported)\n        else\n          D.Diag(diag::warn_drv_global_isel_incomplete_opt);"}}
[k]={{U,7401,"#endif\n  if (Arg *A = Args.getLastArg(options::OPT_fglobal_isel, options::OPT_fno_global_isel)) {\n    if (A->getOption().matches(options::OPT_fglobal_isel)) {\n      if (!IsArchSupported || !IsOptLevelSupported) {\n        if (!IsArchSupported)\n        else\n          D.Diag(diag::warn_drv_global_isel_incomplete_opt);"}}
},
},
["warn_drv_input_file_unused"]={
["warn_drv_input_file_unused"]={
Line 4,333: Line 4,333:
[c]=u,
[c]=u,
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{Jb,3582,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  for (auto &I : Inputs) {\n    if (InitialPhase > FinalPhase) {\n      // Special case when final phase determined by binary name, rather than\n      // by a command-line argument with a corresponding Arg.\n      if (CCCIsCPP())\n      // Special case \'-E\' warning on a previously preprocessed file to make\n      // more sense.\n      else if (InitialPhase == phases::Compile && (Args.getLastArg(options::OPT__SLASH_EP, options::OPT__SLASH_P) || Args.getLastArg(options::OPT_E) || Args.getLastArg(options::OPT_M, options::OPT_MM)) && getPreprocessedType(InputType) == types::TY_INVALID)\n      else\n        Diag(clang::diag::warn_drv_input_file_unused) << InputArg->getAsString(Args) << getPhaseName(InitialPhase) << !!FinalPhaseArg << (FinalPhaseArg ? FinalPhaseArg->getOption().getName() : \"\");"},{"clang/lib/Tooling/CompilationDatabase.cpp",169,"// Special DiagnosticConsumer that looks for warn_drv_input_file_unused\n// diagnostics from the driver and collects the option strings for those unused\n// options.\nclass UnusedInputDiagConsumer : public DiagnosticConsumer {\n  void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) override {\n    if (Info.getID() == diag::warn_drv_input_file_unused) {"}}
[k]={{Jb,4031,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  for (auto &I : Inputs) {\n    if (InitialPhase > FinalPhase) {\n      // Special case when final phase determined by binary name, rather than\n      // by a command-line argument with a corresponding Arg.\n      if (CCCIsCPP())\n      // Special case \'-E\' warning on a previously preprocessed file to make\n      // more sense.\n      else if (InitialPhase == phases::Compile && (Args.getLastArg(options::OPT__SLASH_EP, options::OPT__SLASH_P) || Args.getLastArg(options::OPT_E) || Args.getLastArg(options::OPT_M, options::OPT_MM)) && getPreprocessedType(InputType) == types::TY_INVALID)\n      else\n        Diag(clang::diag::warn_drv_input_file_unused) << InputArg->getAsString(Args) << getPhaseName(InitialPhase) << !!FinalPhaseArg << (FinalPhaseArg ? FinalPhaseArg->getOption().getName() : \"\");"},{"clang/lib/Tooling/CompilationDatabase.cpp",189,"// Special DiagnosticConsumer that looks for warn_drv_input_file_unused\n// diagnostics from the driver and collects the option strings for those unused\n// options.\nclass UnusedInputDiagConsumer : public DiagnosticConsumer {\n  void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) override {\n    if (Info.getID() == diag::warn_drv_input_file_unused) {"}}
},
},
["warn_drv_input_file_unused_by_cpp"]={
["warn_drv_input_file_unused_by_cpp"]={
Line 4,347: Line 4,347:
[c]=u,
[c]=u,
[b]={"403f76ee02a3",1344226146,"PR13529: Don\'t crash if the driver sees an unused input file when running as"},
[b]={"403f76ee02a3",1344226146,"PR13529: Don\'t crash if the driver sees an unused input file when running as"},
[k]={{Jb,3576,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  for (auto &I : Inputs) {\n    if (InitialPhase > FinalPhase) {\n      // Special case when final phase determined by binary name, rather than\n      // by a command-line argument with a corresponding Arg.\n      if (CCCIsCPP())\n        Diag(clang::diag::warn_drv_input_file_unused_by_cpp) << InputArg->getAsString(Args) << getPhaseName(InitialPhase);"}}
[k]={{Jb,4017,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  for (auto &I : Inputs) {\n    if (InitialPhase > FinalPhase) {\n      // Special case when final phase determined by binary name, rather than\n      // by a command-line argument with a corresponding Arg.\n      if (CCCIsCPP())\n        Diag(clang::diag::warn_drv_input_file_unused_by_cpp) << InputArg->getAsString(Args) << getPhaseName(InitialPhase);"}}
},
},
["warn_drv_invalid_arch_name_with_suggestion"]={
["warn_drv_invalid_arch_name_with_suggestion"]={
Line 4,361: Line 4,361:
[c]=u,
[c]=u,
[b]={Zb,1610286626,bc},
[b]={Zb,1610286626,bc},
[k]={{"clang/lib/Driver/ToolChains/Arch/X86.cpp",59,"std::string x86::getX86TargetCPU(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  if (const Arg *A = Args.getLastArg(options::OPT__SLASH_arch)) {\n    if (CPU.empty()) {\n      D.Diag(diag::warn_drv_invalid_arch_name_with_suggestion) << A->getValue() << (Triple.getArch() == llvm::Triple::x86) << join(ValidArchs, \", \");"}}
[k]={{"clang/lib/Driver/ToolChains/Arch/X86.cpp",62,"std::string x86::getX86TargetCPU(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  if (const Arg *A = Args.getLastArg(options::OPT__SLASH_arch)) {\n    if (CPU.empty()) {\n      D.Diag(diag::warn_drv_invalid_arch_name_with_suggestion) << A->getValue() << (Triple.getArch() == llvm::Triple::x86) << join(ValidArchs, \", \");"}}
},
},
["warn_drv_jmc_requires_debuginfo"]={
["warn_drv_jmc_requires_debuginfo"]={
Line 4,375: Line 4,375:
[c]=u,
[c]=u,
[b]={Zb,1610286626,bc},
[b]={Zb,1610286626,bc},
[k]={{U,4947,"#endif\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT_fjmc, options::OPT_fno_jmc, false)) {\n    if (TC.getTriple().isOSBinFormatELF()) {\n      if (DebugInfoKind >= llvm::codegenoptions::DebugInfoConstructor)\n      else\n        D.Diag(clang::diag::warn_drv_jmc_requires_debuginfo) << \"-fjmc\""},{U,6743,"void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType, ArgStringList &CmdArgs, llvm::codegenoptions::DebugInfoKind *DebugInfoKind, bool *EmitCodeView) const {\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT__SLASH_JMC, options::OPT__SLASH_JMC_,\n    if (*EmitCodeView && *DebugInfoKind >= llvm::codegenoptions::DebugInfoConstructor)\n    else\n      D.Diag(clang::diag::warn_drv_jmc_requires_debuginfo) << \"/JMC\""}}
[k]={{U,5720,"#endif\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT_fjmc, options::OPT_fno_jmc, false)) {\n    if (TC.getTriple().isOSBinFormatELF()) {\n      if (DebugInfoKind >= llvm::codegenoptions::DebugInfoConstructor)\n      else\n        D.Diag(clang::diag::warn_drv_jmc_requires_debuginfo) << \"-fjmc\""},{U,7826,"void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType, ArgStringList &CmdArgs, llvm::codegenoptions::DebugInfoKind *DebugInfoKind, bool *EmitCodeView) const {\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT__SLASH_JMC, options::OPT__SLASH_JMC_,\n    if (*EmitCodeView && *DebugInfoKind >= llvm::codegenoptions::DebugInfoConstructor)\n    else\n      D.Diag(clang::diag::warn_drv_jmc_requires_debuginfo) << \"/JMC\""}}
},
},
["warn_drv_libstdcxx_not_found"]={
["warn_drv_libstdcxx_not_found"]={
Line 4,389: Line 4,389:
[c]=u,
[c]=u,
[b]={Ub,1534346725,Tb},
[b]={Ub,1534346725,Tb},
[k]={{Uc,2199,"void DarwinClang::AddClangCXXStdlibIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const {\n  case ToolChain::CST_Libstdcxx:\n    if (!IsBaseFound) {\n      getDriver().Diag(diag::warn_drv_libstdcxx_not_found);"}}
[k]={{Uc,2551,"void DarwinClang::AddClangCXXStdlibIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const {\n  case ToolChain::CST_Libstdcxx:\n    if (!IsBaseFound) {\n      getDriver().Diag(diag::warn_drv_libstdcxx_not_found);"}}
},
},
["warn_drv_loongarch_conflicting_implied_val"]={
["warn_drv_loongarch_conflicting_implied_val"]={
Line 4,403: Line 4,403:
[c]=u,
[c]=u,
[b]={"f6932007ab4e",1687763241,"[Clang][LoongArch] Consume and check -mabi and -mfpu even if -m*-float is present"},
[b]={"f6932007ab4e",1687763241,"[Clang][LoongArch] Consume and check -mabi and -mfpu even if -m*-float is present"},
[k]={{"clang/lib/Driver/ToolChains/Arch/LoongArch.cpp",72,"StringRef loongarch::getLoongArchABI(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // Check -m*-float firstly since they have highest priority.\n  if (const Arg *A = Args.getLastArg(options::OPT_mdouble_float, options::OPT_msingle_float, options::OPT_msoft_float)) {\n    // Check `-mabi=` and `-mfpu=` settings and report if they conflict with\n    // the higher-priority settings implied by -m*-float.\n    //\n    // ImpliedABI and ImpliedFPU are guaranteed to have valid values because\n    // one of the match arms must match if execution can arrive here at all.\n    if (!MABIValue.empty() && ImpliedABI != MABIValue)\n      D.Diag(diag::warn_drv_loongarch_conflicting_implied_val) << MABIArg->getAsString(Args) << A->getAsString(Args) << ImpliedABI;"},{"clang/lib/Driver/ToolChains/Arch/LoongArch.cpp",75,"StringRef loongarch::getLoongArchABI(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // Check -m*-float firstly since they have highest priority.\n  if (const Arg *A = Args.getLastArg(options::OPT_mdouble_float, options::OPT_msingle_float, options::OPT_msoft_float)) {\n    if (FPU != -1 && ImpliedFPU != FPU)\n      D.Diag(diag::warn_drv_loongarch_conflicting_implied_val) << MFPUArg->getAsString(Args) << A->getAsString(Args) << ImpliedFPU;"}}
[k]={{"clang/lib/Driver/ToolChains/Arch/LoongArch.cpp",78,"StringRef loongarch::getLoongArchABI(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // Check -m*-float firstly since they have highest priority.\n  if (const Arg *A = Args.getLastArg(options::OPT_mdouble_float, options::OPT_msingle_float, options::OPT_msoft_float)) {\n    // Check `-mabi=` and `-mfpu=` settings and report if they conflict with\n    // the higher-priority settings implied by -m*-float.\n    //\n    // ImpliedABI and ImpliedFPU are guaranteed to have valid values because\n    // one of the match arms must match if execution can arrive here at all.\n    if (!MABIValue.empty() && ImpliedABI != MABIValue)\n      D.Diag(diag::warn_drv_loongarch_conflicting_implied_val) << MABIArg->getAsString(Args) << A->getAsString(Args) << ImpliedABI;"},{"clang/lib/Driver/ToolChains/Arch/LoongArch.cpp",82,"StringRef loongarch::getLoongArchABI(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // Check -m*-float firstly since they have highest priority.\n  if (const Arg *A = Args.getLastArg(options::OPT_mdouble_float, options::OPT_msingle_float, options::OPT_msoft_float)) {\n    if (FPU != -1 && ImpliedFPU != FPU)\n      D.Diag(diag::warn_drv_loongarch_conflicting_implied_val) << MFPUArg->getAsString(Args) << A->getAsString(Args) << ImpliedFPU;"}}
},
},
["warn_drv_missing_multilib"]={
["warn_drv_missing_multilib"]={
Line 4,417: Line 4,417:
[c]=u,
[c]=u,
[b]={"dc8cbbd55f80",1688026032,"[Clang][Driver] Change missing multilib error to warning"},
[b]={"dc8cbbd55f80",1688026032,"[Clang][Driver] Change missing multilib error to warning"},
[k]={{"clang/lib/Driver/ToolChains/BareMetal.cpp",157,"static void findMultilibsFromYAML(const ToolChain &TC, const Driver &D, StringRef MultilibPath, const ArgList &Args, DetectedMultilibs &Result) {\n  D.Diag(clang::diag::warn_drv_missing_multilib) << llvm::join(Flags, \" \");"}}
[k]={{"clang/lib/Driver/ToolChains/BareMetal.cpp",190,"static void findMultilibsFromYAML(const ToolChain &TC, const Driver &D, StringRef MultilibPath, const ArgList &Args, DetectedMultilibs &Result) {\n  D.Diag(clang::diag::warn_drv_missing_multilib) << llvm::join(Flags, \" \");"}}
},
},
["warn_drv_missing_plugin_arg"]={
["warn_drv_missing_plugin_arg"]={
Line 4,431: Line 4,431:
[c]=u,
[c]=u,
[b]={Zb,1610286626,bc},
[b]={Zb,1610286626,bc},
[k]={{U,6124,"#endif\n  // Turn -fplugin-arg-pluginname-key=value into\n  // -plugin-arg-pluginname key=value\n  // GCC has an actual plugin_argument struct with key/value pairs that it\n  // passes to its plugins, but we don\'t, so just pass it on as-is.\n  //\n  // The syntax for -fplugin-arg- is ambiguous if both plugin name and\n  // argument key are allowed to contain dashes. GCC therefore only\n  // allows dashes in the key. We do the same.\n  for (const Arg *A : Args.filtered(options::OPT_fplugin_arg)) {\n    if (FirstDashIndex == StringRef::npos || Arg.empty()) {\n      if (PluginName.empty()) {\n      } else {\n        D.Diag(diag::warn_drv_missing_plugin_arg) << PluginName << A->getAsString(Args);"}}
[k]={{U,7110,"#endif\n  // Turn -fplugin-arg-pluginname-key=value into\n  // -plugin-arg-pluginname key=value\n  // GCC has an actual plugin_argument struct with key/value pairs that it\n  // passes to its plugins, but we don\'t, so just pass it on as-is.\n  //\n  // The syntax for -fplugin-arg- is ambiguous if both plugin name and\n  // argument key are allowed to contain dashes. GCC therefore only\n  // allows dashes in the key. We do the same.\n  for (const Arg *A : Args.filtered(options::OPT_fplugin_arg)) {\n    if (FirstDashIndex == StringRef::npos || Arg.empty()) {\n      if (PluginName.empty()) {\n      } else {\n        D.Diag(diag::warn_drv_missing_plugin_arg) << PluginName << A->getAsString(Args);"}}
},
},
["warn_drv_missing_plugin_name"]={
["warn_drv_missing_plugin_name"]={
Line 4,445: Line 4,445:
[c]=u,
[c]=u,
[b]={Zb,1610286626,bc},
[b]={Zb,1610286626,bc},
[k]={{U,6122,"#endif\n  // Turn -fplugin-arg-pluginname-key=value into\n  // -plugin-arg-pluginname key=value\n  // GCC has an actual plugin_argument struct with key/value pairs that it\n  // passes to its plugins, but we don\'t, so just pass it on as-is.\n  //\n  // The syntax for -fplugin-arg- is ambiguous if both plugin name and\n  // argument key are allowed to contain dashes. GCC therefore only\n  // allows dashes in the key. We do the same.\n  for (const Arg *A : Args.filtered(options::OPT_fplugin_arg)) {\n    if (FirstDashIndex == StringRef::npos || Arg.empty()) {\n      if (PluginName.empty()) {\n        D.Diag(diag::warn_drv_missing_plugin_name) << A->getAsString(Args);"}}
[k]={{U,7108,"#endif\n  // Turn -fplugin-arg-pluginname-key=value into\n  // -plugin-arg-pluginname key=value\n  // GCC has an actual plugin_argument struct with key/value pairs that it\n  // passes to its plugins, but we don\'t, so just pass it on as-is.\n  //\n  // The syntax for -fplugin-arg- is ambiguous if both plugin name and\n  // argument key are allowed to contain dashes. GCC therefore only\n  // allows dashes in the key. We do the same.\n  for (const Arg *A : Args.filtered(options::OPT_fplugin_arg)) {\n    if (FirstDashIndex == StringRef::npos || Arg.empty()) {\n      if (PluginName.empty()) {\n        D.Diag(diag::warn_drv_missing_plugin_name) << A->getAsString(Args);"}}
},
},
["warn_drv_moutline_atomics_unsupported_opt"]={
["warn_drv_moutline_atomics_unsupported_opt"]={
Line 4,459: Line 4,459:
[c]=u,
[c]=u,
[b]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[b]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[k]={{U,6410,"#endif\n  if (Arg *A = Args.getLastArg(options::OPT_moutline_atomics, options::OPT_mno_outline_atomics)) {\n    // Option -moutline-atomics supported for AArch64 target only.\n    if (!Triple.isAArch64()) {\n      D.Diag(diag::warn_drv_moutline_atomics_unsupported_opt) << Triple.getArchName() << A->getOption().getName();"}}
[k]={{U,7440,"#endif\n  if (Arg *A = Args.getLastArg(options::OPT_moutline_atomics, options::OPT_mno_outline_atomics)) {\n    // Option -moutline-atomics supported for AArch64 target only.\n    if (!Triple.isAArch64()) {\n      D.Diag(diag::warn_drv_moutline_atomics_unsupported_opt) << Triple.getArchName() << A->getOption().getName();"}}
},
},
["warn_drv_moutline_unsupported_opt"]={
["warn_drv_moutline_unsupported_opt"]={
Line 4,473: Line 4,473:
[c]=u,
[c]=u,
[b]={"a67abc83b733",1530050988,"[MachineOutliner] Emit a warning when using -moutline on unsupported targets"},
[b]={"a67abc83b733",1530050988,"[MachineOutliner] Emit a warning when using -moutline on unsupported targets"},
[k]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",2038,"void tools::addMachineOutlinerArgs(const Driver &D, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, const llvm::Triple &Triple, bool IsLTO, const StringRef PluginOptPrefix) {\n  if (Arg *A = Args.getLastArg(options::OPT_moutline, options::OPT_mno_outline)) {\n    if (A->getOption().matches(options::OPT_moutline)) {\n      // We only support -moutline in AArch64 and ARM targets right now. If\n      // we\'re not compiling for these, emit a warning and ignore the flag.\n      // Otherwise, add the proper mllvm flags.\n      if (!(Triple.isARM() || Triple.isThumb() || Triple.getArch() == llvm::Triple::aarch64 || Triple.getArch() == llvm::Triple::aarch64_32)) {\n        D.Diag(diag::warn_drv_moutline_unsupported_opt) << Triple.getArchName();"}}
[k]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",2355,"void tools::addMachineOutlinerArgs(const Driver &D, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, const llvm::Triple &Triple, bool IsLTO, const StringRef PluginOptPrefix) {\n  if (Arg *A = Args.getLastArg(options::OPT_moutline, options::OPT_mno_outline)) {\n    if (A->getOption().matches(options::OPT_moutline)) {\n      // We only support -moutline in AArch64 and ARM targets right now. If\n      // we\'re not compiling for these, emit a warning and ignore the flag.\n      // Otherwise, add the proper mllvm flags.\n      if (!(Triple.isARM() || Triple.isThumb() || Triple.getArch() == llvm::Triple::aarch64 || Triple.getArch() == llvm::Triple::aarch64_32)) {\n        D.Diag(diag::warn_drv_moutline_unsupported_opt) << Triple.getArchName();"}}
},
},
["warn_drv_msp430_hwmult_mismatch"]={
["warn_drv_msp430_hwmult_mismatch"]={
Line 4,487: Line 4,487:
[c]=u,
[c]=u,
[b]={Ub,1534346725,Tb},
[b]={Ub,1534346725,Tb},
[k]={{"clang/lib/Driver/ToolChains/MSP430.cpp",85,"void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features) {\n  if (MCU && HWMult != SupportedHWMult)\n    D.Diag(clang::diag::warn_drv_msp430_hwmult_mismatch) << SupportedHWMult << HWMult;"}}
[k]={{"clang/lib/Driver/ToolChains/MSP430.cpp",91,"void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features) {\n  if (MCU && HWMult != SupportedHWMult)\n    D.Diag(clang::diag::warn_drv_msp430_hwmult_mismatch) << SupportedHWMult << HWMult;"}}
},
},
["warn_drv_msp430_hwmult_no_device"]={
["warn_drv_msp430_hwmult_no_device"]={
Line 4,501: Line 4,501:
[c]=u,
[c]=u,
[b]={Ub,1534346725,Tb},
[b]={Ub,1534346725,Tb},
[k]={{"clang/lib/Driver/ToolChains/MSP430.cpp",70,"void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features) {\n  if (HWMult == \"auto\") {\n    // \'auto\' - deduce hw multiplier support based on mcu name provided.\n    // If no mcu name is provided, assume no hw multiplier is supported.\n    if (!MCU)\n      D.Diag(clang::diag::warn_drv_msp430_hwmult_no_device);"}}
[k]={{"clang/lib/Driver/ToolChains/MSP430.cpp",76,"void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features) {\n  if (HWMult == \"auto\") {\n    // \'auto\' - deduce hw multiplier support based on mcu name provided.\n    // If no mcu name is provided, assume no hw multiplier is supported.\n    if (!MCU)\n      D.Diag(clang::diag::warn_drv_msp430_hwmult_no_device);"}}
},
},
["warn_drv_msp430_hwmult_unsupported"]={
["warn_drv_msp430_hwmult_unsupported"]={
Line 4,515: Line 4,515:
[c]=u,
[c]=u,
[b]={Ub,1534346725,Tb},
[b]={Ub,1534346725,Tb},
[k]={{"clang/lib/Driver/ToolChains/MSP430.cpp",83,"void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features) {\n  if (MCU && SupportedHWMult == \"none\")\n    D.Diag(clang::diag::warn_drv_msp430_hwmult_unsupported) << HWMult;"}}
[k]={{"clang/lib/Driver/ToolChains/MSP430.cpp",89,"void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features) {\n  if (MCU && SupportedHWMult == \"none\")\n    D.Diag(clang::diag::warn_drv_msp430_hwmult_unsupported) << HWMult;"}}
},
},
["warn_drv_msvc_not_found"]={
["warn_drv_msvc_not_found"]={
Line 4,529: Line 4,529:
[c]=u,
[c]=u,
[b]={"f6302523490c",1489594055,"Update clang-cl driver for MSVC 2017."},
[b]={"f6302523490c",1489594055,"Update clang-cl driver for MSVC 2017."},
[k]={{"clang/lib/Driver/ToolChains/MSVC.cpp",300,"void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (Linker.equals_insensitive(\"link\")) {\n    if (!TC.FoundMSVCInstall() && !canExecute(TC.getVFS(), linkPath)) {\n      if (canExecute(TC.getVFS(), ClPath)) {\n        if (!canExecute(TC.getVFS(), linkPath))\n          C.getDriver().Diag(clang::diag::warn_drv_msvc_not_found);"},{"clang/lib/Driver/ToolChains/MSVC.cpp",302,"void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (Linker.equals_insensitive(\"link\")) {\n    if (!TC.FoundMSVCInstall() && !canExecute(TC.getVFS(), linkPath)) {\n      if (canExecute(TC.getVFS(), ClPath)) {\n      } else {\n        C.getDriver().Diag(clang::diag::warn_drv_msvc_not_found);"}}
[k]={{"clang/lib/Driver/ToolChains/MSVC.cpp",341,"void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (Linker.equals_insensitive(\"link\")) {\n    if (!TC.FoundMSVCInstall() && !canExecute(TC.getVFS(), linkPath)) {\n      if (canExecute(TC.getVFS(), ClPath)) {\n        if (!canExecute(TC.getVFS(), linkPath))\n          C.getDriver().Diag(clang::diag::warn_drv_msvc_not_found);"},{"clang/lib/Driver/ToolChains/MSVC.cpp",343,"void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  if (Linker.equals_insensitive(\"link\")) {\n    if (!TC.FoundMSVCInstall() && !canExecute(TC.getVFS(), linkPath)) {\n      if (canExecute(TC.getVFS(), ClPath)) {\n      } else {\n        C.getDriver().Diag(clang::diag::warn_drv_msvc_not_found);"}}
},
},
["warn_drv_multi_gpu_arch"]={
["warn_drv_multi_gpu_arch"]={
Line 4,543: Line 4,543:
[c]=u,
[c]=u,
[b]={"91b9bdeb9256",1688572615,"[AMDGPU] Support -mcpu=native for OpenCL"},
[b]={"91b9bdeb9256",1688572615,"[AMDGPU] Support -mcpu=native for OpenCL"},
[k]={{"clang/lib/Driver/ToolChains/AMDGPU.cpp",586,"DerivedArgList *AMDGPUToolChain::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const {\n  if (LastMCPUArg && StringRef(LastMCPUArg->getValue()) == \"native\") {\n    if (!GPUsOrErr) {\n    } else {\n      if (GPUs.size() > 1) {\n        getDriver().Diag(diag::warn_drv_multi_gpu_arch) << llvm::Triple::getArchTypeName(getArch()) << llvm::join(GPUs, \", \") << \"-mcpu\";"}}
[k]={{"clang/lib/Driver/ToolChains/AMDGPU.cpp",651,"DerivedArgList *AMDGPUToolChain::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const {\n  if (LastMCPUArg && StringRef(LastMCPUArg->getValue()) == \"native\") {\n    if (!GPUsOrErr) {\n    } else {\n      if (GPUs.size() > 1) {\n        getDriver().Diag(diag::warn_drv_multi_gpu_arch) << llvm::Triple::getArchTypeName(getArch()) << llvm::join(GPUs, \", \") << \"-mcpu\";"}}
},
},
["warn_drv_needs_hvx"]={
["warn_drv_needs_hvx"]={
Line 4,557: Line 4,557:
[c]=u,
[c]=u,
[b]={Zb,1610286626,bc},
[b]={Zb,1610286626,bc},
[k]={{"clang/lib/Driver/ToolChains/Hexagon.cpp",165,"// Hexagon target features.\nvoid hexagon::getHexagonTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  if (HexagonToolChain::isAutoHVXEnabled(Args) && !HasHVX)\n    D.Diag(diag::warn_drv_needs_hvx) << \"auto-vectorization\";"}}
[k]={{"clang/lib/Driver/ToolChains/Hexagon.cpp",191,"// Hexagon target features.\nvoid hexagon::getHexagonTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  if (HexagonToolChain::isAutoHVXEnabled(Args) && !HasHVX)\n    D.Diag(diag::warn_drv_needs_hvx) << \"auto-vectorization\";"}}
},
},
["warn_drv_new_cuda_version"]={
["warn_drv_new_cuda_version"]={
Line 4,571: Line 4,571:
[c]=u,
[c]=u,
[b]={Zb,1610286626,bc},
[b]={Zb,1610286626,bc},
[k]={{"clang/lib/Driver/ToolChains/Cuda.cpp",115,"void CudaInstallationDetector::WarnIfUnsupportedVersion() {\n  if (Version > CudaVersion::PARTIALLY_SUPPORTED) {\n    D.Diag(diag::warn_drv_new_cuda_version) << VersionString << (CudaVersion::PARTIALLY_SUPPORTED != CudaVersion::FULLY_SUPPORTED) << CudaVersionToString(CudaVersion::PARTIALLY_SUPPORTED);"}}
[k]={{"clang/lib/Driver/ToolChains/Cuda.cpp",119,"void CudaInstallationDetector::WarnIfUnsupportedVersion() {\n  if (Version > CudaVersion::PARTIALLY_SUPPORTED) {\n    D.Diag(diag::warn_drv_new_cuda_version) << VersionString << (CudaVersion::PARTIALLY_SUPPORTED != CudaVersion::FULLY_SUPPORTED) << CudaVersionToString(CudaVersion::PARTIALLY_SUPPORTED);"}}
},
},
["warn_drv_no_floating_point_registers"]={
["warn_drv_no_floating_point_registers"]={
Line 4,585: Line 4,585:
[c]=u,
[c]=u,
[b]={"1d511e1864f1",1684763280,"[ARM][Driver] Warn if -mhard-float is incompatible"},
[b]={"1d511e1864f1",1684763280,"[ARM][Driver] Warn if -mhard-float is incompatible"},
[k]={{jd,140,"// If -mfloat-abi=hard or -mhard-float are specified explicitly then check that\n// floating point registers are available on the target CPU.\nstatic void checkARMFloatABI(const Driver &D, const ArgList &Args, bool HasFPRegs) {\n  if (A && (A->getOption().matches(options::OPT_mhard_float) || (A->getOption().matches(options::OPT_mfloat_abi_EQ) && A->getValue() == StringRef(\"hard\"))))\n    D.Diag(clang::diag::warn_drv_no_floating_point_registers) << A->getAsString(Args);"}}
[k]={{jd,174,"// If -mfloat-abi=hard or -mhard-float are specified explicitly then check that\n// floating point registers are available on the target CPU.\nstatic void checkARMFloatABI(const Driver &D, const ArgList &Args, bool HasFPRegs) {\n  if (A && (A->getOption().matches(options::OPT_mhard_float) || (A->getOption().matches(options::OPT_mfloat_abi_EQ) && A->getValue() == StringRef(\"hard\"))))\n    D.Diag(clang::diag::warn_drv_no_floating_point_registers) << A->getAsString(Args);"}}
},
},
["warn_drv_object_size_disabled_O0"]={
["warn_drv_object_size_disabled_O0"]={
Line 4,599: Line 4,599:
[c]=u,
[c]=u,
[b]={"7aacb659dad5",1498259724,"[ubsan] Disable the object size check at -O0"},
[b]={"7aacb659dad5",1498259724,"[ubsan] Disable the object size check at -O0"},
[k]={{Zc,267,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {\n      if (RemoveObjectSizeAtO0) {\n        // The user explicitly enabled the object size sanitizer. Warn\n        // that this does nothing at -O0.\n        if ((Add & SanitizerKind::ObjectSize) && DiagnoseErrors)\n          D.Diag(diag::warn_drv_object_size_disabled_O0) << Arg->getAsString(Args);"}}
[k]={{Zc,364,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {\n      if (RemoveObjectSizeAtO0) {\n        // The user explicitly enabled the object size sanitizer. Warn\n        // that this does nothing at -O0.\n        if ((Add & SanitizerKind::ObjectSize) && DiagnoseErrors)\n          D.Diag(diag::warn_drv_object_size_disabled_O0) << Arg->getAsString(Args);"}}
},
},
["warn_drv_omp_offload_target_duplicate"]={
["warn_drv_omp_offload_target_duplicate"]={
Line 4,613: Line 4,613:
[c]=u,
[c]=u,
[b]={"39f9da2a8752",1477586285,"[Driver][OpenMP] Create tool chains for OpenMP offloading kind."},
[b]={"39f9da2a8752",1477586285,"[Driver][OpenMP] Create tool chains for OpenMP offloading kind."},
[k]={{Jb,792,"void Driver::CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs) {\n  if (IsOpenMPOffloading) {\n    for (StringRef Val : OpenMPTriples) {\n      if (Duplicate != FoundNormalizedTriples.end()) {\n        Diag(clang::diag::warn_drv_omp_offload_target_duplicate) << Val << Duplicate->second;"}}
[k]={{Jb,940,"void Driver::CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs) {\n  if (IsOpenMPOffloading) {\n    for (StringRef Val : OpenMPTriples) {\n      if (Duplicate != FoundNormalizedTriples.end()) {\n        Diag(clang::diag::warn_drv_omp_offload_target_duplicate) << Val << Duplicate->second;"}}
},
},
["warn_drv_optimization_value"]={
["warn_drv_optimization_value"]={
Line 4,627: Line 4,627:
[c]=u,
[c]=u,
[b]={"6ae39801189b",1384529954,"Using an invalid -O falls back on -O3 instead of an error"},
[b]={"6ae39801189b",1384529954,"Using an invalid -O falls back on -O3 instead of an error"},
[k]={{sc,1326,"bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK, DiagnosticsEngine &Diags, const llvm::Triple &T, const std::string &OutputFile, const LangOptions &LangOptsRef) {\n  if (OptimizationLevel > MaxOptLevel) {\n    Diags.Report(diag::warn_drv_optimization_value) << Args.getLastArg(OPT_O)->getAsString(Args) << \"-O\" << MaxOptLevel;"}}
[k]={{sc,1617,"bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK, DiagnosticsEngine &Diags, const llvm::Triple &T, const std::string &OutputFile, const LangOptions &LangOptsRef) {\n  if (OptimizationLevel > MaxOptLevel) {\n    Diags.Report(diag::warn_drv_optimization_value) << Args.getLastArg(OPT_O)->getAsString(Args) << \"-O\" << MaxOptLevel;"}}
},
},
["warn_drv_overriding_flag_option"]={
["warn_drv_overriding_flag_option"]={
Line 4,641: Line 4,641:
[c]=u,
[c]=u,
[b]={"d9ad0681fad9",1378917521,"clang-cl: Warn about overriding /MD with /MT etc."},
[b]={"d9ad0681fad9",1378917521,"clang-cl: Warn about overriding /MD with /MT etc."},
[k]={{Jb,2339,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  // The last /TC or /TP option sets the input type to C or C++ globally.\n  if (Arg *TCTP = Args.getLastArgNoClaim(options::OPT__SLASH_TC, options::OPT__SLASH_TP)) {\n    for (Arg *A : Args.filtered(options::OPT__SLASH_TC, options::OPT__SLASH_TP)) {\n      if (Previous) {\n        Diag(clang::diag::warn_drv_overriding_flag_option) << Previous->getSpelling() << A->getSpelling();"},{U,2515,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  for (const Arg *A : Args) {\n    case options::OPT_ffp_model_EQ: {\n      if (OFastEnabled && !Val.equals(\"fast\")) {\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-model=\" + Val) << \"-Ofast\";"},{U,2524,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  for (const Arg *A : Args) {\n    case options::OPT_ffp_model_EQ: {\n      // ffp-model= is a Driver option, it is entirely rewritten into more\n      // granular options before being passed into cc1.\n      // Use the gcc option in the switch below.\n      if (!FPModel.empty() && !FPModel.equals(Val))\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-model=\" + FPModel) << Args.MakeArgString(\"-ffp-model=\" + Val);"},{U,2598,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  for (const Arg *A : Args) {\n    case options::OPT_ftrapping_math:\n      if (!TrappingMathPresent && !FPExceptionBehavior.empty() && !FPExceptionBehavior.equals(\"strict\"))\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-exception-behavior=\" + FPExceptionBehavior) << \"-ftrapping-math\";"},{U,2606,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  for (const Arg *A : Args) {\n    case options::OPT_fno_trapping_math:\n      if (!TrappingMathPresent && !FPExceptionBehavior.empty() && !FPExceptionBehavior.equals(\"ignore\"))\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-exception-behavior=\" + FPExceptionBehavior) << \"-fno-trapping-math\";"},{U,2665,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  for (const Arg *A : Args) {\n    // Validate and pass through -ffp-exception-behavior option.\n    case options::OPT_ffp_exception_behavior_EQ: {\n      if (!TrappingMathPresent && !FPExceptionBehavior.empty() && !FPExceptionBehavior.equals(Val))\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-exception-behavior=\" + FPExceptionBehavior) << Args.MakeArgString(\"-ffp-exception-behavior=\" + Val);"},{U,2798,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  for (const Arg *A : Args) {\n    if (StrictFPModel) {\n      // If -ffp-model=strict has been specified on command line but\n      // subsequent options conflict then emit warning diagnostic.\n      if (HonorINFs && HonorNaNs && !AssociativeMath && !ReciprocalMath && SignedZeros && TrappingMath && RoundingFPMath && !ApproxFunc && DenormalFPMath == llvm::DenormalMode::getIEEE() && DenormalFP32Math == llvm::DenormalMode::getIEEE() && FPContract.equals(\"off\"))\n      else {\n        if (RHS != \"-ffp-model=strict\")\n          D.Diag(clang::diag::warn_drv_overriding_flag_option) << \"-ffp-model=strict\" << RHS;"},{U,2886,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // -ffast-math enables the __FAST_MATH__ preprocessor macro, but check for the\n  // individual features enabled by -ffast-math instead of the option itself as\n  // that\'s consistent with gcc\'s behaviour.\n  if (!HonorINFs && !HonorNaNs && !MathErrno && AssociativeMath && ApproxFunc && ReciprocalMath && !SignedZeros && !TrappingMath && !RoundingFPMath) {\n    if (FPModel.equals(\"fast\")) {\n      if (FPContract.equals(\"fast\"))\n      else if (FPContract.empty())\n      else\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << \"-ffp-model=fast\" << Args.MakeArgString(\"-ffp-contract=\" + FPContract);"},{Uc,1911,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  if (OSTarget) {\n    if (OSVersionArgTarget) {\n      if (OSTarget->getPlatform() != OSVersionArgTarget->getPlatform() || (Driver::GetReleaseVersion(OSTarget->getOSVersion(), TargetMajor, TargetMinor, TargetMicro, TargetExtra) && Driver::GetReleaseVersion(OSVersionArgTarget->getOSVersion(), ArgMajor, ArgMinor, ArgMicro, ArgExtra) && (VersionTuple(TargetMajor, TargetMinor, TargetMicro) != VersionTuple(ArgMajor, ArgMinor, ArgMicro) || TargetExtra != ArgExtra))) {\n        // Select the OS version from the -m<os>-version-min argument when\n        // the -target does not include an OS version.\n        if (OSTarget->getPlatform() == OSVersionArgTarget->getPlatform() && !OSTarget->hasOSVersion()) {\n        } else {\n          getDriver().Diag(clang::diag::warn_drv_overriding_flag_option) << OSVersionArg << TargetArg;"}}
[k]={{Jb,2622,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  // The last /TC or /TP option sets the input type to C or C++ globally.\n  if (Arg *TCTP = Args.getLastArgNoClaim(options::OPT__SLASH_TC, options::OPT__SLASH_TP)) {\n    for (Arg *A : Args.filtered(options::OPT__SLASH_TC, options::OPT__SLASH_TP)) {\n      if (Previous) {\n        Diag(clang::diag::warn_drv_overriding_flag_option) << Previous->getSpelling() << A->getSpelling();"},{U,2842,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  for (const Arg *A : Args) {\n    case options::OPT_ffp_model_EQ: {\n      if (OFastEnabled && !Val.equals(\"fast\")) {\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-model=\" + Val) << \"-Ofast\";"},{U,2853,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  for (const Arg *A : Args) {\n    case options::OPT_ffp_model_EQ: {\n      // ffp-model= is a Driver option, it is entirely rewritten into more\n      // granular options before being passed into cc1.\n      // Use the gcc option in the switch below.\n      if (!FPModel.empty() && !FPModel.equals(Val))\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-model=\" + FPModel) << Args.MakeArgString(\"-ffp-model=\" + Val);"},{U,2902,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  for (const Arg *A : Args) {\n    case options::OPT_ftrapping_math:\n      if (!TrappingMathPresent && !FPExceptionBehavior.empty() && !FPExceptionBehavior.equals(\"strict\"))\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-exception-behavior=\" + FPExceptionBehavior) << \"-ftrapping-math\";"},{U,2913,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  for (const Arg *A : Args) {\n    case options::OPT_fno_trapping_math:\n      if (!TrappingMathPresent && !FPExceptionBehavior.empty() && !FPExceptionBehavior.equals(\"ignore\"))\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-exception-behavior=\" + FPExceptionBehavior) << \"-fno-trapping-math\";"},{U,2978,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  for (const Arg *A : Args) {\n    // Validate and pass through -ffp-exception-behavior option.\n    case options::OPT_ffp_exception_behavior_EQ: {\n      if (!TrappingMathPresent && !FPExceptionBehavior.empty() && !FPExceptionBehavior.equals(Val))\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-exception-behavior=\" + FPExceptionBehavior) << Args.MakeArgString(\"-ffp-exception-behavior=\" + Val);"},{U,3126,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  for (const Arg *A : Args) {\n    if (StrictFPModel) {\n      // If -ffp-model=strict has been specified on command line but\n      // subsequent options conflict then emit warning diagnostic.\n      if (HonorINFs && HonorNaNs && !AssociativeMath && !ReciprocalMath && SignedZeros && TrappingMath && RoundingFPMath && !ApproxFunc && DenormalFPMath == llvm::DenormalMode::getIEEE() && DenormalFP32Math == llvm::DenormalMode::getIEEE() && FPContract.equals(\"off\"))\n      else {\n        if (RHS != \"-ffp-model=strict\")\n          D.Diag(clang::diag::warn_drv_overriding_flag_option) << \"-ffp-model=strict\" << RHS;"},{U,3220,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // -ffast-math enables the __FAST_MATH__ preprocessor macro, but check for the\n  // individual features enabled by -ffast-math instead of the option itself as\n  // that\'s consistent with gcc\'s behaviour.\n  if (!HonorINFs && !HonorNaNs && !MathErrno && AssociativeMath && ApproxFunc && ReciprocalMath && !SignedZeros && !TrappingMath && !RoundingFPMath) {\n    if (FPModel.equals(\"fast\")) {\n      if (FPContract.equals(\"fast\"))\n      else if (FPContract.empty())\n      else\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << \"-ffp-model=fast\" << Args.MakeArgString(\"-ffp-contract=\" + FPContract);"},{Uc,2202,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  if (OSTarget) {\n    if (OSVersionArgTarget) {\n      if (OSTarget->getPlatform() != OSVersionArgTarget->getPlatform() || (Driver::GetReleaseVersion(OSTarget->getOSVersion(), TargetMajor, TargetMinor, TargetMicro, TargetExtra) && Driver::GetReleaseVersion(OSVersionArgTarget->getOSVersion(), ArgMajor, ArgMinor, ArgMicro, ArgExtra) && (VersionTuple(TargetMajor, TargetMinor, TargetMicro) != VersionTuple(ArgMajor, ArgMinor, ArgMicro) || TargetExtra != ArgExtra))) {\n        // Select the OS version from the -m<os>-version-min argument when\n        // the -target does not include an OS version.\n        if (OSTarget->getPlatform() == OSVersionArgTarget->getPlatform() && !OSTarget->hasOSVersion()) {\n        } else {\n          getDriver().Diag(clang::diag::warn_drv_overriding_flag_option) << OSVersionArg << TargetArg;"}}
},
},
["warn_drv_partially_supported_cuda_version"]={
["warn_drv_partially_supported_cuda_version"]={
Line 4,655: Line 4,655:
[c]=u,
[c]=u,
[b]={Zb,1610286626,bc},
[b]={Zb,1610286626,bc},
[k]={{"clang/lib/Driver/ToolChains/Cuda.cpp",117,"void CudaInstallationDetector::WarnIfUnsupportedVersion() {\n  if (Version > CudaVersion::PARTIALLY_SUPPORTED) {\n  } else if (Version > CudaVersion::FULLY_SUPPORTED)\n    D.Diag(diag::warn_drv_partially_supported_cuda_version) << CudaVersionToString(Version);"}}
[k]={{"clang/lib/Driver/ToolChains/Cuda.cpp",124,"void CudaInstallationDetector::WarnIfUnsupportedVersion() {\n  if (Version > CudaVersion::PARTIALLY_SUPPORTED) {\n  } else if (Version > CudaVersion::FULLY_SUPPORTED)\n    D.Diag(diag::warn_drv_partially_supported_cuda_version) << CudaVersionToString(Version);"}}
},
},
["warn_drv_pch_not_first_include"]={
["warn_drv_pch_not_first_include"]={
Line 4,667: Line 4,667:
[c]=u,
[c]=u,
[b]={"2f23b414e9bc",1285865627,"Driver: Ignore the found PCH file if its \'-include\' is not the first one."},
[b]={"2f23b414e9bc",1285865627,"Driver: Ignore the found PCH file if its \'-include\' is not the first one."},
[k]={{U,1139,"void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, const Driver &D, const ArgList &Args, ArgStringList &CmdArgs, const InputInfo &Output, const InputInfoList &Inputs) const {\n  for (const Arg *A : Args.filtered(options::OPT_clang_i_Group)) {\n    if (A->getOption().matches(options::OPT_include) && D.getProbePrecompiled()) {\n      if (FoundPCH) {\n        if (IsFirstImplicitInclude) {\n        } else {\n          D.Diag(diag::warn_drv_pch_not_first_include) << P << A->getAsString(Args);"}}
[k]={{U,1300,"void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, const Driver &D, const ArgList &Args, ArgStringList &CmdArgs, const InputInfo &Output, const InputInfoList &Inputs) const {\n  for (const Arg *A : Args.filtered(options::OPT_clang_i_Group)) {\n    if (A->getOption().matches(options::OPT_include) && D.getProbePrecompiled()) {\n      if (FoundPCH) {\n        if (IsFirstImplicitInclude) {\n        } else {\n          D.Diag(diag::warn_drv_pch_not_first_include) << P << A->getAsString(Args);"}}
},
},
["warn_drv_potentially_misspelled_joined_argument"]={
["warn_drv_potentially_misspelled_joined_argument"]={
Line 4,681: Line 4,681:
[c]=u,
[c]=u,
[b]={"5aba68960719",1665085845,"[Clang] Emit a warning for ambiguous joined \'-o\' arguments"},
[b]={"5aba68960719",1665085845,"[Clang] Emit a warning for ambiguous joined \'-o\' arguments"},
[k]={{Jb,298,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  for (const Arg *A : Args.filtered(options::OPT_o)) {\n    if (getOpts().findExact(\"-\" + ArgString, Nearest, IncludedFlagsBitmask, ExcludedFlagsBitmask))\n      Diags.Report(diag::warn_drv_potentially_misspelled_joined_argument) << A->getAsString(Args) << Nearest;"}}
[k]={{Jb,350,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  for (const Arg *A : Args.filtered(options::OPT_o)) {\n    if (getOpts().findExact(\"-\" + ArgString, Nearest, IncludedFlagsBitmask, ExcludedFlagsBitmask))\n      Diags.Report(diag::warn_drv_potentially_misspelled_joined_argument) << A->getAsString(Args) << Nearest;"}}
},
},
["warn_drv_preprocessed_input_file_unused"]={
["warn_drv_preprocessed_input_file_unused"]={
Line 4,695: Line 4,695:
[c]=u,
[c]=u,
[b]={"07806ca7ab36",1253160806,"Improve driver error message when only running the preprocessor and an input is"},
[b]={"07806ca7ab36",1253160806,"Improve driver error message when only running the preprocessor and an input is"},
[k]={{Jb,3580,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  for (auto &I : Inputs) {\n    if (InitialPhase > FinalPhase) {\n      // Special case when final phase determined by binary name, rather than\n      // by a command-line argument with a corresponding Arg.\n      if (CCCIsCPP())\n      // Special case \'-E\' warning on a previously preprocessed file to make\n      // more sense.\n      else if (InitialPhase == phases::Compile && (Args.getLastArg(options::OPT__SLASH_EP, options::OPT__SLASH_P) || Args.getLastArg(options::OPT_E) || Args.getLastArg(options::OPT_M, options::OPT_MM)) && getPreprocessedType(InputType) == types::TY_INVALID)\n        Diag(clang::diag::warn_drv_preprocessed_input_file_unused) << InputArg->getAsString(Args) << !!FinalPhaseArg << (FinalPhaseArg ? FinalPhaseArg->getOption().getName() : \"\");"}}
[k]={{Jb,4027,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  for (auto &I : Inputs) {\n    if (InitialPhase > FinalPhase) {\n      // Special case when final phase determined by binary name, rather than\n      // by a command-line argument with a corresponding Arg.\n      if (CCCIsCPP())\n      // Special case \'-E\' warning on a previously preprocessed file to make\n      // more sense.\n      else if (InitialPhase == phases::Compile && (Args.getLastArg(options::OPT__SLASH_EP, options::OPT__SLASH_P) || Args.getLastArg(options::OPT_E) || Args.getLastArg(options::OPT_M, options::OPT_MM)) && getPreprocessedType(InputType) == types::TY_INVALID)\n        Diag(clang::diag::warn_drv_preprocessed_input_file_unused) << InputArg->getAsString(Args) << !!FinalPhaseArg << (FinalPhaseArg ? FinalPhaseArg->getOption().getName() : \"\");"}}
},
},
["warn_drv_ps_force_pic"]={
["warn_drv_ps_force_pic"]={
Line 4,709: Line 4,709:
[c]=u,
[c]=u,
[b]={"aef03c9b3bed",1651866463,"[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clan..."},
[b]={"aef03c9b3bed",1651866463,"[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clan..."},
[k]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",1323,"/// Parses the various -fpic/-fPIC/-fpie/-fPIE arguments.  Then,\n/// smooshes them together with platform defaults, to decide whether\n/// this compile should be using PIC mode or not. Returns a tuple of\n/// (RelocationModel, PICLevel, IsPIE).\nstd::tuple<llvm::Reloc::Model, unsigned, bool> tools::ParsePICArgs(const ToolChain &ToolChain, const ArgList &Args) {\n  // Check whether the tool chain trumps the PIC-ness decision. If the PIC-ness\n  // is forced, then neither PIC nor PIE flags will have no effect.\n  if (!ToolChain.isPICDefaultForced()) {\n    if (LastPICArg) {\n      if (O.matches(options::OPT_fPIC) || O.matches(options::OPT_fpic) || O.matches(options::OPT_fPIE) || O.matches(options::OPT_fpie)) {\n      } else {\n        if (EffectiveTriple.isPS()) {\n          if (Model != \"kernel\") {\n            ToolChain.getDriver().Diag(diag::warn_drv_ps_force_pic) << LastPICArg->getSpelling() << (EffectiveTriple.isPS4() ? \"PS4\" : \"PS5\");"}}
[k]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",1517,"/// Parses the various -fpic/-fPIC/-fpie/-fPIE arguments.  Then,\n/// smooshes them together with platform defaults, to decide whether\n/// this compile should be using PIC mode or not. Returns a tuple of\n/// (RelocationModel, PICLevel, IsPIE).\nstd::tuple<llvm::Reloc::Model, unsigned, bool> tools::ParsePICArgs(const ToolChain &ToolChain, const ArgList &Args) {\n  // Check whether the tool chain trumps the PIC-ness decision. If the PIC-ness\n  // is forced, then neither PIC nor PIE flags will have no effect.\n  if (!ToolChain.isPICDefaultForced()) {\n    if (LastPICArg) {\n      if (O.matches(options::OPT_fPIC) || O.matches(options::OPT_fpic) || O.matches(options::OPT_fPIE) || O.matches(options::OPT_fpie)) {\n      } else {\n        if (EffectiveTriple.isPS()) {\n          if (Model != \"kernel\") {\n            ToolChain.getDriver().Diag(diag::warn_drv_ps_force_pic) << LastPICArg->getSpelling() << (EffectiveTriple.isPS4() ? \"PS4\" : \"PS5\");"}}
},
},
["warn_drv_sarif_format_unstable"]={
["warn_drv_sarif_format_unstable"]={
Line 4,723: Line 4,723:
[c]=u,
[c]=u,
[b]={"aef03c9b3bed",1651866463,"[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clan..."},
[b]={"aef03c9b3bed",1651866463,"[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clan..."},
[k]={{U,3634,"static void RenderDiagnosticsOptions(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs) {\n  if (const Arg *A = Args.getLastArg(options::OPT_fdiagnostics_format_EQ)) {\n    if (StringRef(A->getValue()) == \"sarif\" || StringRef(A->getValue()) == \"SARIF\")\n      D.Diag(diag::warn_drv_sarif_format_unstable);"}}
[k]={{U,4111,"static void RenderDiagnosticsOptions(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs) {\n  if (const Arg *A = Args.getLastArg(options::OPT_fdiagnostics_format_EQ)) {\n    if (StringRef(A->getValue()) == \"sarif\" || StringRef(A->getValue()) == \"SARIF\")\n      D.Diag(diag::warn_drv_sarif_format_unstable);"}}
},
},
["warn_drv_treating_input_as_cxx"]={
["warn_drv_treating_input_as_cxx"]={
Line 4,737: Line 4,737:
[c]=ib,
[c]=ib,
[b]={"0ac9445098f7",1266438778,"PR5803: clang++: Treat untyped \'C\' inputs as C++."},
[b]={"0ac9445098f7",1266438778,"PR5803: clang++: Treat untyped \'C\' inputs as C++."},
[k]={{Jb,2415,"// 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      // Infer the input type if necessary.\n      if (InputType == types::TY_Nothing) {\n        // stdin must be handled specially.\n        if (memcmp(Value, \"-\", 2) == 0) {\n        } else {\n          // If the driver is invoked as C++ compiler (like clang++ or c++) it\n          // should autodetect some input files as C++ for g++ compatibility.\n          if (CCCIsCXX()) {\n            // Do not complain about foo.h, when we are known to be processing\n            // it as a C++20 header unit.\n            if (Ty != OldTy && !(OldTy == types::TY_CHeader && hasHeaderMode()))\n              Diag(clang::diag::warn_drv_treating_input_as_cxx) << getTypeName(OldTy) << getTypeName(Ty);"}}
[k]={{Jb,2702,"// 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      // Infer the input type if necessary.\n      if (InputType == types::TY_Nothing) {\n        // stdin must be handled specially.\n        if (memcmp(Value, \"-\", 2) == 0) {\n        } else {\n          // If the driver is invoked as C++ compiler (like clang++ or c++) it\n          // should autodetect some input files as C++ for g++ compatibility.\n          if (CCCIsCXX()) {\n            // Do not complain about foo.h, when we are known to be processing\n            // it as a C++20 header unit.\n            if (Ty != OldTy && !(OldTy == types::TY_CHeader && hasHeaderMode()))\n              Diag(clang::diag::warn_drv_treating_input_as_cxx) << getTypeName(OldTy) << getTypeName(Ty);"}}
},
},
["warn_drv_unable_to_find_directory_expected"]={
["warn_drv_unable_to_find_directory_expected"]={
Line 4,752: Line 4,752:
[c]=u,
[c]=u,
[b]={"c52c30a78e7c",1443132412,"This patch adds missing pieces to clang, including the PS4 toolchain"},
[b]={"c52c30a78e7c",1443132412,"This patch adds missing pieces to clang, including the PS4 toolchain"},
[k]={{"clang/lib/Driver/ToolChains/PS4CPU.cpp",233,"toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, StringRef Platform, const char *EnvVar) : Generic_ELF(D, Triple, Args) {\n  if (!Args.hasArg(options::OPT_nostdinc) && !Args.hasArg(options::OPT_nostdlibinc) && !Args.hasArg(options::OPT_isysroot) && !Args.hasArg(options::OPT__sysroot_EQ) && !llvm::sys::fs::exists(SDKIncludeDir)) {\n    D.Diag(clang::diag::warn_drv_unable_to_find_directory_expected) << Twine(Platform, \" system headers\").str() << SDKIncludeDir << Whence;"},{"clang/lib/Driver/ToolChains/PS4CPU.cpp",239,"toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, StringRef Platform, const char *EnvVar) : Generic_ELF(D, Triple, Args) {\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs) && !Args.hasArg(options::OPT__sysroot_EQ) && !Args.hasArg(options::OPT_E) && !Args.hasArg(options::OPT_c) && !Args.hasArg(options::OPT_S) && !Args.hasArg(options::OPT_emit_ast) && !llvm::sys::fs::exists(SDKLibDir)) {\n    D.Diag(clang::diag::warn_drv_unable_to_find_directory_expected) << Twine(Platform, \" system libraries\").str() << SDKLibDir << Whence;"}}
[k]={{"clang/lib/Driver/ToolChains/PS4CPU.cpp",285,"toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, StringRef Platform, const char *EnvVar) : Generic_ELF(D, Triple, Args) {\n  if (!Args.hasArg(options::OPT_nostdinc) && !Args.hasArg(options::OPT_nostdlibinc) && !Args.hasArg(options::OPT_isysroot) && !Args.hasArg(options::OPT__sysroot_EQ) && !llvm::sys::fs::exists(SDKIncludeDir)) {\n    D.Diag(clang::diag::warn_drv_unable_to_find_directory_expected) << Twine(Platform, \" system headers\").str() << SDKIncludeDir << Whence;"},{"clang/lib/Driver/ToolChains/PS4CPU.cpp",297,"toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, StringRef Platform, const char *EnvVar) : Generic_ELF(D, Triple, Args) {\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs) && !Args.hasArg(options::OPT__sysroot_EQ) && !Args.hasArg(options::OPT_E) && !Args.hasArg(options::OPT_c) && !Args.hasArg(options::OPT_S) && !Args.hasArg(options::OPT_emit_ast) && !llvm::sys::fs::exists(SDKLibDir)) {\n    D.Diag(clang::diag::warn_drv_unable_to_find_directory_expected) << Twine(Platform, \" system libraries\").str() << SDKLibDir << Whence;"}}
},
},
["warn_drv_unknown_argument_clang_cl"]={
["warn_drv_unknown_argument_clang_cl"]={
Line 4,766: Line 4,766:
[c]=u,
[c]=u,
[b]={"d851833c9a76",1453756492,"[MSVC Compat] Only warn for unknown clang-cl arguments"},
[b]={"d851833c9a76",1453756492,"[MSVC Compat] Only warn for unknown clang-cl arguments"},
[k]={{Jb,280,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  for (const Arg *A : Args.filtered(options::OPT_UNKNOWN)) {\n    if (getOpts().findNearest(ArgString, Nearest, IncludedFlagsBitmask, ExcludedFlagsBitmask) > 1) {\n      if (!IsCLMode() && getOpts().findExact(ArgString, Nearest, options::CC1Option)) {\n      } else {\n        DiagID = IsCLMode() ? diag::warn_drv_unknown_argument_clang_cl : diag::err_drv_unknown_argument;"}}
[k]={{Jb,327,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  for (const Arg *A : Args.filtered(options::OPT_UNKNOWN)) {\n    if (getOpts().findNearest(ArgString, Nearest, IncludedFlagsBitmask, ExcludedFlagsBitmask) > 1) {\n      if (!IsCLMode() && getOpts().findExact(ArgString, Nearest, options::CC1Option)) {\n      } else {\n        DiagID = IsCLMode() ? diag::warn_drv_unknown_argument_clang_cl : diag::err_drv_unknown_argument;"}}
},
},
["warn_drv_unknown_argument_clang_cl_with_suggestion"]={
["warn_drv_unknown_argument_clang_cl_with_suggestion"]={
Line 4,780: Line 4,780:
[c]=u,
[c]=u,
[b]={"24910765e266",1515198340,"[Driver] Suggest correctly spelled driver options"},
[b]={"24910765e266",1515198340,"[Driver] Suggest correctly spelled driver options"},
[k]={{Jb,284,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  for (const Arg *A : Args.filtered(options::OPT_UNKNOWN)) {\n    if (getOpts().findNearest(ArgString, Nearest, IncludedFlagsBitmask, ExcludedFlagsBitmask) > 1) {\n    } else {\n      DiagID = IsCLMode() ? diag::warn_drv_unknown_argument_clang_cl_with_suggestion : diag::err_drv_unknown_argument_with_suggestion;"}}
[k]={{Jb,333,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  for (const Arg *A : Args.filtered(options::OPT_UNKNOWN)) {\n    if (getOpts().findNearest(ArgString, Nearest, IncludedFlagsBitmask, ExcludedFlagsBitmask) > 1) {\n    } else {\n      DiagID = IsCLMode() ? diag::warn_drv_unknown_argument_clang_cl_with_suggestion : diag::err_drv_unknown_argument_with_suggestion;"}}
},
},
["warn_drv_unsupported_debug_info_opt_for_target"]={
["warn_drv_unsupported_debug_info_opt_for_target"]={
Line 4,794: Line 4,794:
[c]=u,
[c]=u,
[b]={"b83b4e40fe43",1532720714,"[DEBUGINFO] Disable unsupported debug info options for NVPTX target."},
[b]={"b83b4e40fe43",1532720714,"[DEBUGINFO] Disable unsupported debug info options for NVPTX target."},
[k]={{U,889,"static bool checkDebugInfoOption(const Arg *A, const ArgList &Args, const Driver &D, const ToolChain &TC) {\n  D.Diag(diag::warn_drv_unsupported_debug_info_opt_for_target) << A->getAsString(Args) << TC.getTripleString();"}}
[k]={{U,1012,"static bool checkDebugInfoOption(const Arg *A, const ArgList &Args, const Driver &D, const ToolChain &TC) {\n  D.Diag(diag::warn_drv_unsupported_debug_info_opt_for_target) << A->getAsString(Args) << TC.getTripleString();"}}
},
},
["warn_drv_unsupported_diag_option_for_flang"]={
["warn_drv_unsupported_diag_option_for_flang"]={
Line 4,808: Line 4,808:
[c]=u,
[c]=u,
[b]={"ce3a1c59e180",1677017374,"[flang] Handle unsupported warning flags"},
[b]={"ce3a1c59e180",1677017374,"[flang] Handle unsupported warning flags"},
[k]={{"clang/lib/Driver/ToolChains/Flang.cpp",433,"void Flang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // Remove any unsupported gfortran diagnostic options\n  for (const Arg *A : Args.filtered(options::OPT_flang_ignored_w_Group)) {\n    D.Diag(diag::warn_drv_unsupported_diag_option_for_flang) << A->getOption().getName();"}}
[k]={{"clang/lib/Driver/ToolChains/Flang.cpp",499,"void Flang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // Remove any unsupported gfortran diagnostic options\n  for (const Arg *A : Args.filtered(options::OPT_flang_ignored_w_Group)) {\n    D.Diag(diag::warn_drv_unsupported_diag_option_for_flang) << A->getOption().getName();"}}
},
},
["warn_drv_unsupported_float_abi_by_lib"]={
["warn_drv_unsupported_float_abi_by_lib"]={
Line 4,822: Line 4,822:
[c]=u,
[c]=u,
[b]={Zb,1610286626,bc},
[b]={Zb,1610286626,bc},
[k]={{"clang/lib/Driver/ToolChains/PPCLinux.cpp",50,"PPCLinuxToolChain::PPCLinuxToolChain(const Driver &D, const llvm::Triple &Triple, const llvm::opt::ArgList &Args) : Linux(D, Triple, Args) {\n  if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ)) {\n    if ((ABIName == \"ieeelongdouble\" && !SupportIEEEFloat128(D, Triple, Args)) || (ABIName == \"ibmlongdouble\" && !supportIBMLongDouble(D, Args)))\n      D.Diag(diag::warn_drv_unsupported_float_abi_by_lib) << ABIName;"}}
[k]={{"clang/lib/Driver/ToolChains/PPCLinux.cpp",57,"PPCLinuxToolChain::PPCLinuxToolChain(const Driver &D, const llvm::Triple &Triple, const llvm::opt::ArgList &Args) : Linux(D, Triple, Args) {\n  if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ)) {\n    if ((ABIName == \"ieeelongdouble\" && !SupportIEEEFloat128(D, Triple, Args)) || (ABIName == \"ibmlongdouble\" && !supportIBMLongDouble(D, Args)))\n      D.Diag(diag::warn_drv_unsupported_float_abi_by_lib) << ABIName;"}}
},
},
["warn_drv_unsupported_gpopt"]={
["warn_drv_unsupported_gpopt"]={
Line 4,836: Line 4,836:
[c]=u,
[c]=u,
[b]={"e435e41e01b6",1500460683,"[mips] Teach the driver to accept -m(no-)gpopt."},
[b]={"e435e41e01b6",1500460683,"[mips] Teach the driver to accept -m(no-)gpopt."},
[k]={{U,1763,"void Clang::AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const {\n  // We quietly ignore -mno-gpopt as the backend defaults to -mno-gpopt.\n  if (NoABICalls && (!GPOpt || WantGPOpt)) {\n  } else if ((!ABICalls || (!NoABICalls && ABICalls)) && WantGPOpt)\n    D.Diag(diag::warn_drv_unsupported_gpopt) << (ABICalls ? 0 : 1);"}}
[k]={{U,1992,"void Clang::AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const {\n  // We quietly ignore -mno-gpopt as the backend defaults to -mno-gpopt.\n  if (NoABICalls && (!GPOpt || WantGPOpt)) {\n  } else if ((!ABICalls || (!NoABICalls && ABICalls)) && WantGPOpt)\n    D.Diag(diag::warn_drv_unsupported_gpopt) << (ABICalls ? 0 : 1);"}}
},
},
["warn_drv_unsupported_longcalls"]={
["warn_drv_unsupported_longcalls"]={
Line 4,850: Line 4,850:
[c]=u,
[c]=u,
[b]={"c038841e8be7",1502379745,"[mips] Show warning in case of mixing -mlong-calls and -mabicalls options"},
[b]={"c038841e8be7",1502379745,"[mips] Show warning in case of mixing -mlong-calls and -mabicalls options"},
[k]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",210,"void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  if (Arg *A = Args.getLastArg(options::OPT_mlong_calls, options::OPT_mno_long_calls)) {\n    if (A->getOption().matches(options::OPT_mno_long_calls))\n    else if (!UseAbiCalls)\n    else\n      D.Diag(diag::warn_drv_unsupported_longcalls) << (ABICallsArg ? 0 : 1);"}}
[k]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",268,"void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  if (Arg *A = Args.getLastArg(options::OPT_mlong_calls, options::OPT_mno_long_calls)) {\n    if (A->getOption().matches(options::OPT_mno_long_calls))\n    else if (!UseAbiCalls)\n    else\n      D.Diag(diag::warn_drv_unsupported_longcalls) << (ABICallsArg ? 0 : 1);"}}
},
},
["warn_drv_unsupported_opt_for_target"]={
["warn_drv_unsupported_opt_for_target"]={
Line 4,864: Line 4,864:
[c]=u,
[c]=u,
[b]={"c0f6c9b8c16d",1471975978,"ARM-Darwin: ignore and diagnose attempts to omit frame pointer."},
[b]={"c0f6c9b8c16d",1471975978,"ARM-Darwin: ignore and diagnose attempts to omit frame pointer."},
[k]={{"clang/lib/Driver/ToolChain.cpp",134,"bool ToolChain::useIntegratedBackend() const {\n  if ((IBackend && !IsIntegratedBackendSupported()) || (!IBackend && !IsNonIntegratedBackendSupported()))\n  else\n    DiagID = clang::diag::warn_drv_unsupported_opt_for_target;"},{Uc,2573,"DerivedArgList *Darwin::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const {\n  if ((Arch == llvm::Triple::arm || Arch == llvm::Triple::thumb)) {\n    if (Args.hasFlag(options::OPT_fomit_frame_pointer, options::OPT_fno_omit_frame_pointer, false))\n      getDriver().Diag(clang::diag::warn_drv_unsupported_opt_for_target) << \"-fomit-frame-pointer\" << BoundArch;"}}
[k]={{"clang/lib/Driver/ToolChain.cpp",160,"bool ToolChain::useIntegratedBackend() const {\n  if ((IBackend && !IsIntegratedBackendSupported()) || (!IBackend && !IsNonIntegratedBackendSupported()))\n  else\n    DiagID = clang::diag::warn_drv_unsupported_opt_for_target;"},{Uc,2964,"DerivedArgList *Darwin::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const {\n  if ((Arch == llvm::Triple::arm || Arch == llvm::Triple::thumb)) {\n    if (Args.hasFlag(options::OPT_fomit_frame_pointer, options::OPT_fno_omit_frame_pointer, false))\n      getDriver().Diag(clang::diag::warn_drv_unsupported_opt_for_target) << \"-fomit-frame-pointer\" << BoundArch;"}}
},
},
["warn_drv_unsupported_option_for_flang"]={
["warn_drv_unsupported_option_for_flang"]={
Line 4,878: Line 4,878:
[c]=u,
[c]=u,
[b]={"1f67dc8b7c22",1666243490,"[Driver] Enable nested configuration files"},
[b]={"1f67dc8b7c22",1666243490,"[Driver] Enable nested configuration files"},
[k]={{"clang/lib/Driver/ToolChains/Flang.cpp",224,"static void addFloatingPointOptions(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs) {\n  if (const Arg *A = Args.getLastArg(options::OPT_ffp_contract)) {\n    if (Val == \"fast\" || Val == \"off\") {\n    } else if (Val == \"on\") {\n      D.Diag(diag::warn_drv_unsupported_option_for_flang) << Val << A->getOption().getName() << \"off\";"}}
[k]={{"clang/lib/Driver/ToolChains/Flang.cpp",279,"static void addFloatingPointOptions(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs) {\n  if (const Arg *A = Args.getLastArg(options::OPT_ffp_contract)) {\n    if (Val == \"fast\" || Val == \"off\") {\n    } else if (Val == \"on\") {\n      D.Diag(diag::warn_drv_unsupported_option_for_flang) << Val << A->getOption().getName() << \"off\";"}}
},
},
["warn_drv_unsupported_option_for_offload_arch_req_feature"]={
["warn_drv_unsupported_option_for_offload_arch_req_feature"]={
Line 4,892: Line 4,892:
[c]=u,
[c]=u,
[b]={Zb,1610286626,bc},
[b]={Zb,1610286626,bc},
[k]={{"clang/lib/Driver/ToolChains/HIPAMD.cpp",63,"static bool shouldSkipSanitizeOption(const ToolChain &TC, const llvm::opt::ArgList &DriverArgs, StringRef TargetID, const llvm::opt::Arg *A) {\n  if (Loc == FeatureMap.end() || !Loc->second) {\n    Diags.Report(clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature) << A->getAsString(DriverArgs) << TargetID << \"xnack+\";"}}
[k]={{"clang/lib/Driver/ToolChains/HIPAMD.cpp",69,"static bool shouldSkipSanitizeOption(const ToolChain &TC, const llvm::opt::ArgList &DriverArgs, StringRef TargetID, const llvm::opt::Arg *A) {\n  if (Loc == FeatureMap.end() || !Loc->second) {\n    Diags.Report(clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature) << A->getAsString(DriverArgs) << TargetID << \"xnack+\";"}}
},
},
["warn_drv_unsupported_option_for_processor"]={
["warn_drv_unsupported_option_for_processor"]={
Line 4,906: Line 4,906:
[c]=u,
[c]=u,
[b]={"6adb9a0602bc",1678065956,"[AMDGPU] Emit predefined macro `__AMDGCN_CUMODE__`"},
[b]={"6adb9a0602bc",1678065956,"[AMDGPU] Emit predefined macro `__AMDGCN_CUMODE__`"},
[k]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",143,"void tools::handleTargetFeaturesGroup(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, OptSpecifier Group) {\n  for (const Arg *A : Args.filtered(Group)) {\n    if (shouldIgnoreUnsupportedTargetFeature(*A, Triple, Proc)) {\n      if (Warned.count(Name) == 0) {\n        D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_processor) << A->getAsString(Args) << Proc;"}}
[k]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",174,"void tools::handleTargetFeaturesGroup(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, OptSpecifier Group) {\n  for (const Arg *A : Args.filtered(Group)) {\n    if (shouldIgnoreUnsupportedTargetFeature(*A, Triple, Proc)) {\n      if (Warned.count(Name) == 0) {\n        D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_processor) << A->getAsString(Args) << Proc;"}}
},
},
["warn_drv_unsupported_option_for_target"]={
["warn_drv_unsupported_option_for_target"]={
Line 4,920: Line 4,920:
[c]=u,
[c]=u,
[b]={Zb,1610286626,bc},
[b]={Zb,1610286626,bc},
[k]={{U,3000,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  if (Arg *A = Args.getLastArg(options::OPT_fno_stack_protector, options::OPT_fstack_protector_all, options::OPT_fstack_protector_strong, options::OPT_fstack_protector)) {\n    if (EffectiveTriple.isBPF() && StackProtectorLevel != LangOptions::SSPOff) {\n      D.Diag(diag::warn_drv_unsupported_option_for_target) << A->getSpelling() << EffectiveTriple.getTriple();"},{"clang/lib/Driver/ToolChains/HIPAMD.cpp",194,"HIPAMDToolChain::HIPAMDToolChain(const Driver &D, const llvm::Triple &Triple, const ToolChain &HostTC, const ArgList &Args) : ROCMToolChain(D, Triple, Args), HostTC(HostTC) {\n  for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) {\n    if (K != SanitizerKind::Address)\n      D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target) << A->getAsString(Args) << getTriple().str();"}}
[k]={{U,3348,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  if (Arg *A = Args.getLastArg(options::OPT_fno_stack_protector, options::OPT_fstack_protector_all, options::OPT_fstack_protector_strong, options::OPT_fstack_protector)) {\n    if (EffectiveTriple.isBPF() && StackProtectorLevel != LangOptions::SSPOff) {\n      D.Diag(diag::warn_drv_unsupported_option_for_target) << A->getSpelling() << EffectiveTriple.getTriple();"},{"clang/lib/Driver/ToolChains/HIPAMD.cpp",232,"HIPAMDToolChain::HIPAMDToolChain(const Driver &D, const llvm::Triple &Triple, const ToolChain &HostTC, const ArgList &Args) : ROCMToolChain(D, Triple, Args), HostTC(HostTC) {\n  for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) {\n    if (K != SanitizerKind::Address)\n      D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target) << A->getAsString(Args) << getTriple().str();"}}
},
},
["warn_drv_unsupported_pic_with_mabicalls"]={
["warn_drv_unsupported_pic_with_mabicalls"]={
Line 4,934: Line 4,934:
[c]=u,
[c]=u,
[b]={"f9b3fc5e2bc7",1525702794,"[mips] Improve handling of -fno-[pic/PIC] option"},
[b]={"f9b3fc5e2bc7",1525702794,"[mips] Improve handling of -fno-[pic/PIC] option"},
[k]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",192,"void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  if (IsN64 && NonPIC && (!ABICallsArg || UseAbiCalls)) {\n    D.Diag(diag::warn_drv_unsupported_pic_with_mabicalls) << LastPICArg->getAsString(Args) << (!ABICallsArg ? 0 : 1);"}}
[k]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",248,"void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  if (IsN64 && NonPIC && (!ABICallsArg || UseAbiCalls)) {\n    D.Diag(diag::warn_drv_unsupported_pic_with_mabicalls) << LastPICArg->getAsString(Args) << (!ABICallsArg ? 0 : 1);"}}
},
},
["warn_drv_unsupported_sdata"]={
["warn_drv_unsupported_sdata"]={
Line 4,948: Line 4,948:
[c]=u,
[c]=u,
[b]={Ub,1534346725,Tb},
[b]={Ub,1534346725,Tb},
[k]={{U,1881,"static void SetRISCVSmallDataLimit(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) {\n  // Get small data limitation.\n  if (Args.getLastArg(options::OPT_shared, options::OPT_fpic, options::OPT_fPIC)) {\n    if (Args.hasArg(options::OPT_G)) {\n      D.Diag(diag::warn_drv_unsupported_sdata);"},{U,1887,"static void SetRISCVSmallDataLimit(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) {\n  // Get small data limitation.\n  if (Args.getLastArg(options::OPT_shared, options::OPT_fpic, options::OPT_fPIC)) {\n  } else if (Args.getLastArgValue(options::OPT_mcmodel_EQ).equals_insensitive(\"large\") && (Triple.getArch() == llvm::Triple::riscv64)) {\n    if (Args.hasArg(options::OPT_G)) {\n      D.Diag(diag::warn_drv_unsupported_sdata);"},{U,1893,"static void SetRISCVSmallDataLimit(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) {\n  // Get small data limitation.\n  if (Args.getLastArg(options::OPT_shared, options::OPT_fpic, options::OPT_fPIC)) {\n  } else if (Args.getLastArgValue(options::OPT_mcmodel_EQ).equals_insensitive(\"large\") && (Triple.getArch() == llvm::Triple::riscv64)) {\n  } else if (Triple.isAndroid()) {\n    if (Args.hasArg(options::OPT_G)) {\n      D.Diag(diag::warn_drv_unsupported_sdata);"}}
[k]={{U,2116,"static void SetRISCVSmallDataLimit(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) {\n  // Get small data limitation.\n  if (Args.getLastArg(options::OPT_shared, options::OPT_fpic, options::OPT_fPIC)) {\n    if (Args.hasArg(options::OPT_G)) {\n      D.Diag(diag::warn_drv_unsupported_sdata);"},{U,2124,"static void SetRISCVSmallDataLimit(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) {\n  // Get small data limitation.\n  if (Args.getLastArg(options::OPT_shared, options::OPT_fpic, options::OPT_fPIC)) {\n  } else if (Args.getLastArgValue(options::OPT_mcmodel_EQ).equals_insensitive(\"large\") && (Triple.getArch() == llvm::Triple::riscv64)) {\n    if (Args.hasArg(options::OPT_G)) {\n      D.Diag(diag::warn_drv_unsupported_sdata);"},{U,2130,"static void SetRISCVSmallDataLimit(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) {\n  // Get small data limitation.\n  if (Args.getLastArg(options::OPT_shared, options::OPT_fpic, options::OPT_fPIC)) {\n  } else if (Args.getLastArgValue(options::OPT_mcmodel_EQ).equals_insensitive(\"large\") && (Triple.getArch() == llvm::Triple::riscv64)) {\n  } else if (Triple.isAndroid()) {\n    if (Args.hasArg(options::OPT_G)) {\n      D.Diag(diag::warn_drv_unsupported_sdata);"}}
},
},
["warn_drv_unused_argument"]={
["warn_drv_unused_argument"]={
Line 4,962: Line 4,962:
[c]=u,
[c]=u,
[b]={"1889b6e21958",1237113751,"Keep diagnostic td in sync with r67015."},
[b]={"1889b6e21958",1237113751,"Keep diagnostic td in sync with r67015."},
[k]={{Jb,4396,"void Driver::BuildJobs(Compilation &C) const {\n  for (Arg *A : C.getArgs()) {\n    // FIXME: It would be nice to be able to send the argument to the\n    // DiagnosticsEngine, so that extra values, position, and so on could be\n    // printed.\n    if (!A->isClaimed()) {\n      // In clang-cl, don\'t mention unknown arguments here since they have\n      // already been warned about.\n      if (!IsCLMode() || !A->getOption().matches(options::OPT_UNKNOWN)) {\n        if (A->getOption().hasFlag(options::TargetSpecific) && !A->isIgnoredTargetSpecific() && !HasAssembleJob) {\n        } else {\n          Diag(clang::diag::warn_drv_unused_argument) << A->getAsString(C.getArgs());"},{jd,480,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Check -mcpu. ClangAs gives preference to -Wa,-mcpu=.\n  if (WaCPU) {\n    if (CPUArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << CPUArg->getAsString(Args);"},{jd,489,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Check -march. ClangAs gives preference to -Wa,-march=.\n  if (WaArch) {\n    if (ArchArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << ArchArg->getAsString(Args);"},{jd,526,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  if (WaFPU) {\n    if (FPUArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << FPUArg->getAsString(Args);"},{jd,553,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  if (WaHDiv) {\n    if (HDivArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << HDivArg->getAsString(Args);"},{U,5809,"#endif\n  if (ImplyVCPPCVer) {\n    if (const Arg *StdArg = Args.getLastArg(options::OPT__SLASH_std)) {\n      if (LanguageStandard.empty())\n        D.Diag(clang::diag::warn_drv_unused_argument) << StdArg->getAsString(Args);"},{U,5825,"#endif\n  if (ImplyVCPPCXXVer) {\n    if (const Arg *StdArg = Args.getLastArg(options::OPT__SLASH_std)) {\n      if (LanguageStandard.empty())\n        D.Diag(clang::diag::warn_drv_unused_argument) << StdArg->getAsString(Args);"}}
[k]={{Jb,4979,"void Driver::BuildJobs(Compilation &C) const {\n  for (Arg *A : C.getArgs()) {\n    // FIXME: It would be nice to be able to send the argument to the\n    // DiagnosticsEngine, so that extra values, position, and so on could be\n    // printed.\n    if (!A->isClaimed()) {\n      // In clang-cl, don\'t mention unknown arguments here since they have\n      // already been warned about.\n      if (!IsCLMode() || !A->getOption().matches(options::OPT_UNKNOWN)) {\n        if (A->getOption().hasFlag(options::TargetSpecific) && !A->isIgnoredTargetSpecific() && !HasAssembleJob) {\n        } else {\n          Diag(clang::diag::warn_drv_unused_argument) << A->getAsString(C.getArgs());"},{jd,567,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Check -mcpu. ClangAs gives preference to -Wa,-mcpu=.\n  if (WaCPU) {\n    if (CPUArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << CPUArg->getAsString(Args);"},{jd,577,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // Check -march. ClangAs gives preference to -Wa,-march=.\n  if (WaArch) {\n    if (ArchArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << ArchArg->getAsString(Args);"},{jd,619,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  if (WaFPU) {\n    if (FPUArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << FPUArg->getAsString(Args);"},{jd,650,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  if (WaHDiv) {\n    if (HDivArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << HDivArg->getAsString(Args);"},{U,6739,"#endif\n  if (ImplyVCPPCVer) {\n    if (const Arg *StdArg = Args.getLastArg(options::OPT__SLASH_std)) {\n      if (LanguageStandard.empty())\n        D.Diag(clang::diag::warn_drv_unused_argument) << StdArg->getAsString(Args);"},{U,6756,"#endif\n  if (ImplyVCPPCXXVer) {\n    if (const Arg *StdArg = Args.getLastArg(options::OPT__SLASH_std)) {\n      if (LanguageStandard.empty())\n        D.Diag(clang::diag::warn_drv_unused_argument) << StdArg->getAsString(Args);"}}
},
},
["warn_drv_unused_x"]={
["warn_drv_unused_x"]={
Line 4,976: Line 4,976:
[c]=u,
[c]=u,
[b]={Zb,1610286626,bc},
[b]={Zb,1610286626,bc},
[k]={{Jb,2353,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  // Warn -x after last input file has no effect\n  if (!IsCLMode()) {\n    if (LastXArg && LastInputArg && LastInputArg->getIndex() < LastXArg->getIndex())\n      Diag(clang::diag::warn_drv_unused_x) << LastXArg->getValue();"}}
[k]={{Jb,2638,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  // Warn -x after last input file has no effect\n  if (!IsCLMode()) {\n    if (LastXArg && LastInputArg && LastInputArg->getIndex() < LastXArg->getIndex())\n      Diag(clang::diag::warn_drv_unused_x) << LastXArg->getValue();"}}
},
},
["warn_drv_yc_multiple_inputs_clang_cl"]={
["warn_drv_yc_multiple_inputs_clang_cl"]={
Line 4,990: Line 4,990:
[c]=u,
[c]=u,
[b]={"2ca4be97de0f",1456874204,"clang-cl: Implement initial limited support for precompiled headers."},
[b]={"2ca4be97de0f",1456874204,"clang-cl: Implement initial limited support for precompiled headers."},
[k]={{Jb,3514,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  if (YcArg && Inputs.size() > 1) {\n    Diag(clang::diag::warn_drv_yc_multiple_inputs_clang_cl);"}}
[k]={{Jb,3948,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  if (YcArg && Inputs.size() > 1) {\n    Diag(clang::diag::warn_drv_yc_multiple_inputs_clang_cl);"}}
},
},
["warn_drv_ycyu_different_arg_clang_cl"]={
["warn_drv_ycyu_different_arg_clang_cl"]={
Line 5,004: Line 5,004:
[c]=u,
[c]=u,
[b]={"2ca4be97de0f",1456874204,"clang-cl: Implement initial limited support for precompiled headers."},
[b]={"2ca4be97de0f",1456874204,"clang-cl: Implement initial limited support for precompiled headers."},
[k]={{Jb,3508,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  if (YcArg && YuArg && strcmp(YcArg->getValue(), YuArg->getValue()) != 0) {\n    Diag(clang::diag::warn_drv_ycyu_different_arg_clang_cl);"}}
[k]={{Jb,3942,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  if (YcArg && YuArg && strcmp(YcArg->getValue(), YuArg->getValue()) != 0) {\n    Diag(clang::diag::warn_drv_ycyu_different_arg_clang_cl);"}}
},
},
["warn_dup_category_def"]={
["warn_dup_category_def"]={
Line 5,018: Line 5,018:
[c]=u,
[c]=u,
[b]={vd,1236199783,yd},
[b]={vd,1236199783,yd},
[k]={{mc,1499,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  if (CategoryName) {\n    /// Check for duplicate interface declaration for this category\n    if (ObjCCategoryDecl *Previous = IDecl->FindCategoryDeclaration(CategoryName)) {\n      Diag(CategoryLoc, diag::warn_dup_category_def) << ClassName << CategoryName;"},{"clang/lib/Serialization/ASTReaderDecl.cpp",3901,"/// Given an ObjC interface, goes through the modules and links to the\n/// interface all the categories for it.\nclass ObjCCategoriesVisitor {\n  void add(ObjCCategoryDecl *Cat) {\n    // Check for duplicate categories.\n    if (Cat->getDeclName()) {\n      if (Existing && Reader.getOwningModuleFile(Existing) != Reader.getOwningModuleFile(Cat)) {\n        if (!Ctx.IsEquivalent(Cat, Existing)) {\n          Reader.Diag(Cat->getLocation(), diag::warn_dup_category_def) << Interface->getDeclName() << Cat->getDeclName();"}}
[k]={{mc,1861,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  if (CategoryName) {\n    /// Check for duplicate interface declaration for this category\n    if (ObjCCategoryDecl *Previous = IDecl->FindCategoryDeclaration(CategoryName)) {\n      Diag(CategoryLoc, diag::warn_dup_category_def) << ClassName << CategoryName;"},{"clang/lib/Serialization/ASTReaderDecl.cpp",4311,"/// Given an ObjC interface, goes through the modules and links to the\n/// interface all the categories for it.\nclass ObjCCategoriesVisitor {\n  void add(ObjCCategoryDecl *Cat) {\n    // Check for duplicate categories.\n    if (Cat->getDeclName()) {\n      if (Existing && Reader.getOwningModuleFile(Existing) != Reader.getOwningModuleFile(Cat)) {\n        if (!Ctx.IsEquivalent(Cat, Existing)) {\n          Reader.Diag(Cat->getLocation(), diag::warn_dup_category_def) << Interface->getDeclName() << Cat->getDeclName();"}}
},
},
["warn_duplicate_attribute"]={
["warn_duplicate_attribute"]={
Line 5,032: Line 5,032:
[c]=q,
[c]=q,
[b]={"bcffcdfd18fd",1341871561,"Patch by Anton Lokhmotov to add OpenCL work group size attributes."},
[b]={"bcffcdfd18fd",1341871561,"Patch by Anton Lokhmotov to add OpenCL work group size attributes."},
[k]={{H,2831,"// Handles reqd_work_group_size and work_group_size_hint.\ntemplate <typename WorkGroupAttr> static void handleWorkGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Existing && !(Existing->getXDim() == WGSize[0] && Existing->getYDim() == WGSize[1] && Existing->getZDim() == WGSize[2]))\n    S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{H,2849,"// Handles intel_reqd_sub_group_size.\nstatic void handleSubGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Existing && Existing->getSubGroupSize() != SGSize)\n    S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{H,2871,"static void handleVecTypeHint(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (VecTypeHintAttr *A = D->getAttr<VecTypeHintAttr>()) {\n    if (!S.Context.hasSameType(A->getTypeHint(), ParmType)) {\n      S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{H,3229,"static void handleMinVectorWidthAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Existing && Existing->getVectorWidth() != VecWidth) {\n    S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{H,3412,"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(CI.getLoc(), diag::warn_duplicate_attribute) << EA;"},{H,5591,"static void handleSwiftBridge(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Warn about duplicate attributes if they have different arguments, but drop\n  // any duplicate attributes regardless.\n  if (const auto *Other = D->getAttr<SwiftBridgeAttr>()) {\n    if (Other->getSwiftType() != BT)\n      S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"}}
[k]={{H,3231,"// Handles reqd_work_group_size and work_group_size_hint.\ntemplate <typename WorkGroupAttr> static void handleWorkGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Existing && !(Existing->getXDim() == WGSize[0] && Existing->getYDim() == WGSize[1] && Existing->getZDim() == WGSize[2]))\n    S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{H,3252,"// Handles intel_reqd_sub_group_size.\nstatic void handleSubGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Existing && Existing->getSubGroupSize() != SGSize)\n    S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{H,3277,"static void handleVecTypeHint(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (VecTypeHintAttr *A = D->getAttr<VecTypeHintAttr>()) {\n    if (!S.Context.hasSameType(A->getTypeHint(), ParmType)) {\n      S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{H,3689,"static void handleMinVectorWidthAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (Existing && Existing->getVectorWidth() != VecWidth) {\n    S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{H,3906,"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(CI.getLoc(), diag::warn_duplicate_attribute) << EA;"},{H,6354,"static void handleSwiftBridge(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Warn about duplicate attributes if they have different arguments, but drop\n  // any duplicate attributes regardless.\n  if (const auto *Other = D->getAttr<SwiftBridgeAttr>()) {\n    if (Other->getSwiftType() != BT)\n      S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"}}
},
},
["warn_duplicate_attribute_exact"]={
["warn_duplicate_attribute_exact"]={
Line 5,046: Line 5,046:
[c]=q,
[c]=q,
[b]={"317a77f1c7ab",1369265132,"Adding in parsing and the start of semantic support for __sptr and __uptr pointer type qualifiers.  ..."},
[b]={"317a77f1c7ab",1369265132,"Adding in parsing and the start of semantic support for __sptr and __uptr pointer type qualifiers.  ..."},
[k]={{Cb,6514,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  if (Attrs[NewAttrKind]) {\n    S.Diag(PAttr.getLoc(), diag::warn_duplicate_attribute_exact) << PAttr;"},{Cb,6582,"static bool HandleWebAssemblyFuncrefAttr(TypeProcessingState &State, QualType &QT, ParsedAttr &PAttr) {\n  // You cannot specify duplicate type attributes, so if the attribute has\n  // already been applied, flag it.\n  if (Attrs[NewAttrKind]) {\n    S.Diag(PAttr.getLoc(), diag::warn_duplicate_attribute_exact) << PAttr;"}}
[k]={{Cb,7355,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  if (Attrs[NewAttrKind]) {\n    S.Diag(PAttr.getLoc(), diag::warn_duplicate_attribute_exact) << PAttr;"},{Cb,7428,"static bool HandleWebAssemblyFuncrefAttr(TypeProcessingState &State, QualType &QT, ParsedAttr &PAttr) {\n  // You cannot specify duplicate type attributes, so if the attribute has\n  // already been applied, flag it.\n  if (Attrs[NewAttrKind]) {\n    S.Diag(PAttr.getLoc(), diag::warn_duplicate_attribute_exact) << PAttr;"}}
},
},
["warn_duplicate_codeseg_attribute"]={
["warn_duplicate_codeseg_attribute"]={
Line 5,060: Line 5,060:
[c]=q,
[c]=q,
[b]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))"},
[b]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))"},
[k]={{H,2980,"static void handleCodeSegAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    if (!ExistingAttr->isImplicit()) {\n      S.Diag(AL.getLoc(), ExistingAttr->getName() == Str ? diag::warn_duplicate_codeseg_attribute : diag::err_conflicting_codeseg_attribute);"}}
[k]={{H,3400,"static void handleCodeSegAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    if (!ExistingAttr->isImplicit()) {\n      S.Diag(AL.getLoc(), ExistingAttr->getName() == Str ? diag::warn_duplicate_codeseg_attribute : diag::err_conflicting_codeseg_attribute);"}}
},
},
["warn_duplicate_declspec"]={
["warn_duplicate_declspec"]={
Line 5,074: Line 5,074:
[c]=u,
[c]=u,
[b]={"3731b3300962",1346187340,"Splitting the duplicated decl spec extension warning into two: one is an ExtWarn and the other a van..."},
[b]={"3731b3300962",1346187340,"Splitting the duplicated decl spec extension warning into two: one is an ExtWarn and the other a van..."},
[k]={{dc,408,"template <class T> static bool BadSpecifier(T TNew, T TPrev, const char *&PrevSpec, unsigned &DiagID, bool IsExtension = true) {\n  if (TNew != TPrev)\n  else\n    DiagID = IsExtension ? diag::ext_warn_duplicate_declspec : diag::warn_duplicate_declspec;"},{dc,794,"bool DeclSpec::SetTypeSpecSat(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // Cannot set twice\n  if (TypeSpecSat) {\n    DiagID = diag::warn_duplicate_declspec;"},{dc,931,"bool DeclSpec::setFunctionSpecInline(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // \'inline inline\' is ok.  However, since this is likely not what the user\n  // intended, we will always warn, similar to duplicates of type qualifiers.\n  if (FS_inline_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{dc,942,"bool DeclSpec::setFunctionSpecForceInline(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  if (FS_forceinline_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{dc,955,"bool DeclSpec::setFunctionSpecVirtual(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // \'virtual virtual\' is ok, but warn as this is likely not what the user\n  // intended.\n  if (FS_virtual_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{dc,982,"bool DeclSpec::setFunctionSpecNoreturn(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // \'_Noreturn _Noreturn\' is ok, but warn as this is likely not what the user\n  // intended.\n  if (FS_noreturn_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{dc,999,"bool DeclSpec::SetFriendSpec(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  if (Friend_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{H,7307,"static void handleOpenCLAccessAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check if there is only one access qualifier.\n  if (D->hasAttr<OpenCLAccessAttr>()) {\n    if (D->getAttr<OpenCLAccessAttr>()->getSemanticSpelling() == AL.getSemanticSpelling()) {\n      S.Diag(AL.getLoc(), diag::warn_duplicate_declspec) << AL.getAttrName()->getName() << AL.getRange();"},{Cb,7457,"#include \"clang/Basic/OpenCLImageTypes.def\"\n    if (PrevAccessQual == AttrName.ltrim(\"_\")) {\n      S.Diag(Attr.getLoc(), diag::warn_duplicate_declspec) << AttrName << Attr.getRange();"}}
[k]={{dc,483,"template <class T> static bool BadSpecifier(T TNew, T TPrev, const char *&PrevSpec, unsigned &DiagID, bool IsExtension = true) {\n  if (TNew != TPrev)\n  else\n    DiagID = IsExtension ? diag::ext_warn_duplicate_declspec : diag::warn_duplicate_declspec;"},{dc,861,"bool DeclSpec::SetTypeSpecSat(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // Cannot set twice\n  if (TypeSpecSat) {\n    DiagID = diag::warn_duplicate_declspec;"},{dc,1001,"bool DeclSpec::setFunctionSpecInline(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // \'inline inline\' is ok.  However, since this is likely not what the user\n  // intended, we will always warn, similar to duplicates of type qualifiers.\n  if (FS_inline_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{dc,1013,"bool DeclSpec::setFunctionSpecForceInline(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  if (FS_forceinline_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{dc,1028,"bool DeclSpec::setFunctionSpecVirtual(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // \'virtual virtual\' is ok, but warn as this is likely not what the user\n  // intended.\n  if (FS_virtual_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{dc,1062,"bool DeclSpec::setFunctionSpecNoreturn(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // \'_Noreturn _Noreturn\' is ok, but warn as this is likely not what the user\n  // intended.\n  if (FS_noreturn_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{dc,1080,"bool DeclSpec::SetFriendSpec(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  if (Friend_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{H,8296,"static void handleOpenCLAccessAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check if there is only one access qualifier.\n  if (D->hasAttr<OpenCLAccessAttr>()) {\n    if (D->getAttr<OpenCLAccessAttr>()->getSemanticSpelling() == AL.getSemanticSpelling()) {\n      S.Diag(AL.getLoc(), diag::warn_duplicate_declspec) << AL.getAttrName()->getName() << AL.getRange();"},{Cb,8435,"#include \"clang/Basic/OpenCLImageTypes.def\"\n    if (PrevAccessQual == AttrName.ltrim(\"_\")) {\n      S.Diag(Attr.getLoc(), diag::warn_duplicate_declspec) << AttrName << Attr.getRange();"}}
},
},
["warn_duplicate_enum_values"]={
["warn_duplicate_enum_values"]={
Line 5,089: Line 5,089:
[c]=q,
[c]=q,
[b]={"73e306e548cd",1346358744,"Add -Wduplicate-enum warning.  Clang will emit this warning when an implicitly"},
[b]={"73e306e548cd",1346358744,"Add -Wduplicate-enum warning.  Clang will emit this warning when an implicitly"},
[k]={{G,17126,"// Emits a warning when an element is implicitly set a value that\n// a previous element has already been set to.\nstatic void CheckForDuplicateEnumValues(Sema &S, ArrayRef<Decl *> Elements, EnumDecl *Enum, QualType EnumType) {\n  if (S.Diags.isIgnored(diag::warn_duplicate_enum_values, Enum->getLocation()))"},{G,17213,"// Emits a warning when an element is implicitly set a value that\n// a previous element has already been set to.\nstatic void CheckForDuplicateEnumValues(Sema &S, ArrayRef<Decl *> Elements, EnumDecl *Enum, QualType EnumType) {\n  // Emit diagnostics.\n  for (const auto &Vec : DupVector) {\n    S.Diag(FirstECD->getLocation(), diag::warn_duplicate_enum_values) << FirstECD << toString(FirstECD->getInitVal(), 10) << FirstECD->getSourceRange();"}}
[k]={{G,19575,"// Emits a warning when an element is implicitly set a value that\n// a previous element has already been set to.\nstatic void CheckForDuplicateEnumValues(Sema &S, ArrayRef<Decl *> Elements, EnumDecl *Enum, QualType EnumType) {\n  if (S.Diags.isIgnored(diag::warn_duplicate_enum_values, Enum->getLocation()))"},{G,19662,"// Emits a warning when an element is implicitly set a value that\n// a previous element has already been set to.\nstatic void CheckForDuplicateEnumValues(Sema &S, ArrayRef<Decl *> Elements, EnumDecl *Enum, QualType EnumType) {\n  // Emit diagnostics.\n  for (const auto &Vec : DupVector) {\n    S.Diag(FirstECD->getLocation(), diag::warn_duplicate_enum_values) << FirstECD << toString(FirstECD->getInitVal(), 10) << FirstECD->getSourceRange();"}}
},
},
["warn_duplicate_method_decl"]={
["warn_duplicate_method_decl"]={
Line 5,104: Line 5,104:
[c]=q,
[c]=q,
[b]={"c17c86b56ca6",1323805234,"objc: diagnose duplicate declaration of methods"},
[b]={"c17c86b56ca6",1323805234,"objc: diagnose duplicate declaration of methods"},
[k]={{mc,3310,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  for (unsigned i = 0, e = allMethods.size(); i != e; i++) {\n    if (Method->isInstanceMethod()) {\n      if ((isInterfaceDeclKind && PrevMethod && !match) || (checkIdenticalMethods && match)) {\n      } else {\n        if (PrevMethod) {\n          if (!Context.getSourceManager().isInSystemHeader(Method->getLocation()))\n            Diag(Method->getLocation(), diag::warn_duplicate_method_decl) << Method->getDeclName();"},{mc,3329,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  for (unsigned i = 0, e = allMethods.size(); i != e; i++) {\n    if (Method->isInstanceMethod()) {\n    } else {\n      if ((isInterfaceDeclKind && PrevMethod && !match) || (checkIdenticalMethods && match)) {\n      } else {\n        if (PrevMethod) {\n          if (!Context.getSourceManager().isInSystemHeader(Method->getLocation()))\n            Diag(Method->getLocation(), diag::warn_duplicate_method_decl) << Method->getDeclName();"}}
[k]={{mc,4037,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  for (unsigned i = 0, e = allMethods.size(); i != e; i++) {\n    if (Method->isInstanceMethod()) {\n      if ((isInterfaceDeclKind && PrevMethod && !match) || (checkIdenticalMethods && match)) {\n      } else {\n        if (PrevMethod) {\n          if (!Context.getSourceManager().isInSystemHeader(Method->getLocation()))\n            Diag(Method->getLocation(), diag::warn_duplicate_method_decl) << Method->getDeclName();"},{mc,4061,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  for (unsigned i = 0, e = allMethods.size(); i != e; i++) {\n    if (Method->isInstanceMethod()) {\n    } else {\n      if ((isInterfaceDeclKind && PrevMethod && !match) || (checkIdenticalMethods && match)) {\n      } else {\n        if (PrevMethod) {\n          if (!Context.getSourceManager().isInSystemHeader(Method->getLocation()))\n            Diag(Method->getLocation(), diag::warn_duplicate_method_decl) << Method->getDeclName();"}}
},
},
["warn_duplicate_module_file_extension"]={
["warn_duplicate_module_file_extension"]={
Line 5,118: Line 5,118:
[c]="AST Deserialization Issue",
[c]="AST Deserialization Issue",
[b]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files."},
[b]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files."},
[k]={{"clang/lib/Serialization/ASTReader.cpp",8886,"ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache, ASTContext *Context, const PCHContainerReader &PCHContainerRdr, ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions, StringRef isysroot, DisableValidationForModuleKind DisableValidationKind, bool AllowASTWithCompilerErrors, bool AllowConfigurationMismatch, bool ValidateSystemInputs, bool ValidateASTInputFilesContent, bool UseGlobalIndex, std::unique_ptr<llvm::Timer> ReadTimer) : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH) ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP)) : cast<ASTReaderListener>(new PCHValidator(PP, *this))), SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()), PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP), ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache, PCHContainerRdr, PP.getHeaderSearchInfo()), DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot), DisableValidationKind(DisableValidationKind), AllowASTWithCompilerErrors(AllowASTWithCompilerErrors), AllowConfigurationMismatch(AllowConfigurationMismatch), ValidateSystemInputs(ValidateSystemInputs), ValidateASTInputFilesContent(ValidateASTInputFilesContent), UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {\n  for (const auto &Ext : Extensions) {\n    if (Known != ModuleFileExtensions.end()) {\n      Diags.Report(diag::warn_duplicate_module_file_extension) << BlockName;"}}
[k]={{"clang/lib/Serialization/ASTReader.cpp",10007,"ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache, ASTContext *Context, const PCHContainerReader &PCHContainerRdr, ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions, StringRef isysroot, DisableValidationForModuleKind DisableValidationKind, bool AllowASTWithCompilerErrors, bool AllowConfigurationMismatch, bool ValidateSystemInputs, bool ValidateASTInputFilesContent, bool UseGlobalIndex, std::unique_ptr<llvm::Timer> ReadTimer) : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH) ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP)) : cast<ASTReaderListener>(new PCHValidator(PP, *this))), SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()), PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP), ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache, PCHContainerRdr, PP.getHeaderSearchInfo()), DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot), DisableValidationKind(DisableValidationKind), AllowASTWithCompilerErrors(AllowASTWithCompilerErrors), AllowConfigurationMismatch(AllowConfigurationMismatch), ValidateSystemInputs(ValidateSystemInputs), ValidateASTInputFilesContent(ValidateASTInputFilesContent), UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {\n  for (const auto &Ext : Extensions) {\n    if (Known != ModuleFileExtensions.end()) {\n      Diags.Report(diag::warn_duplicate_module_file_extension) << BlockName;"}}
},
},
["warn_duplicate_protocol_def"]={
["warn_duplicate_protocol_def"]={
Line 5,132: Line 5,132:
[c]=q,
[c]=q,
[b]={"54d569c51d23",1239061412,"Warn instead of error on duplicate protocol definitions."},
[b]={"54d569c51d23",1239061412,"Warn instead of error on duplicate protocol definitions."},
[k]={{mc,985,"ObjCProtocolDecl *Sema::ActOnStartProtocolInterface(SourceLocation AtProtoInterfaceLoc, IdentifierInfo *ProtocolName, SourceLocation ProtocolLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  if (ObjCProtocolDecl *Def = PrevDecl ? PrevDecl->getDefinition() : nullptr) {\n    if (SkipBody && !hasVisibleDefinition(Def)) {\n    } else {\n      Diag(ProtocolLoc, diag::warn_duplicate_protocol_def) << ProtocolName;"}}
[k]={{mc,1247,"ObjCProtocolDecl *Sema::ActOnStartProtocolInterface(SourceLocation AtProtoInterfaceLoc, IdentifierInfo *ProtocolName, SourceLocation ProtocolLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  if (ObjCProtocolDecl *Def = PrevDecl ? PrevDecl->getDefinition() : nullptr) {\n    if (SkipBody && !hasVisibleDefinition(Def)) {\n    } else {\n      Diag(ProtocolLoc, diag::warn_duplicate_protocol_def) << ProtocolName;"}}
},
},
["warn_dyn_class_memaccess"]={
["warn_dyn_class_memaccess"]={
Line 5,146: Line 5,146:
[c]=q,
[c]=q,
[b]={"3bb2a8153910",1304455053,"Extend -Wnon-pod-memset to also encompass memcpy() and memmove(),"},
[b]={"3bb2a8153910",1304455053,"Extend -Wnon-pod-memset to also encompass memcpy() and memmove(),"},
[k]={{w,11256,"/// 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      DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_dyn_class_memaccess) << (IsCmp ? ArgIdx + 2 : ArgIdx) << FnName << IsContained << ContainedRD << OperationType << Call->getCallee()->getSourceRange());"}}
[k]={{w,12572,"/// 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      DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_dyn_class_memaccess) << (IsCmp ? ArgIdx + 2 : ArgIdx) << FnName << IsContained << ContainedRD << OperationType << Call->getCallee()->getSourceRange());"}}
},
},
["warn_eagerly_load_for_standard_cplusplus_modules"]={
["warn_eagerly_load_for_standard_cplusplus_modules"]={
Line 5,160: Line 5,160:
[c]="AST Deserialization Issue",
[c]="AST Deserialization Issue",
[b]={"ba6e747f9b05",1670524276,"[clang] Set ShowInSystemHeader for module-build and module-import remarks"},
[b]={"ba6e747f9b05",1670524276,"[clang] Set ShowInSystemHeader for module-build and module-import remarks"},
[k]={{"clang/lib/Serialization/ASTReader.cpp",5066,"llvm::Error ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {\n  while (true) {\n    case SUBMODULE_DEFINITION: {\n      // If we\'re loading a module before we initialize the sema, it implies\n      // we\'re performing eagerly loading.\n      if (!getSema() && CurrentModule->isModulePurview() && !getContext().getLangOpts().isCompilingModule())\n        Diag(clang::diag::warn_eagerly_load_for_standard_cplusplus_modules);"}}
[k]={{"clang/lib/Serialization/ASTReader.cpp",5689,"llvm::Error ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {\n  while (true) {\n    case SUBMODULE_DEFINITION: {\n      // If we\'re loading a module before we initialize the sema, it implies\n      // we\'re performing eagerly loading.\n      if (!getSema() && CurrentModule->isModulePurview() && !getContext().getLangOpts().isCompilingModule())\n        Diag(clang::diag::warn_eagerly_load_for_standard_cplusplus_modules);"}}
},
},
["warn_empty_for_body"]={
["warn_empty_for_body"]={
Line 5,174: Line 5,174:
[c]=q,
[c]=q,
[b]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)"},
[b]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)"},
[k]={{w,16014,"void Sema::DiagnoseEmptyLoopBody(const Stmt *S, const Stmt *PossibleBody) {\n  if (const ForStmt *FS = dyn_cast<ForStmt>(S)) {\n    DiagID = diag::warn_empty_for_body;"}}
[k]={{w,17904,"void Sema::DiagnoseEmptyLoopBody(const Stmt *S, const Stmt *PossibleBody) {\n  if (const ForStmt *FS = dyn_cast<ForStmt>(S)) {\n    DiagID = diag::warn_empty_for_body;"}}
},
},
["warn_empty_format_string"]={
["warn_empty_format_string"]={
Line 5,188: Line 5,188:
[c]=Qb,
[c]=Qb,
[b]={Fc,1279246282,Ec},
[b]={Fc,1279246282,Ec},
[k]={{w,10449,"static void CheckFormatString(Sema &S, const FormatStringLiteral *FExpr, const Expr *OrigFormatExpr, ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, Sema::FormatStringType Type, bool inFunctionCall, Sema::VariadicCallType CallType, llvm::SmallBitVector &CheckedVarArgs, UncoveredArgHandler &UncoveredArg, bool IgnoreStringsWithoutSpecifiers) {\n  // CHECK: empty format string?\n  if (StrLen == 0 && numDataArgs > 0) {\n    CheckFormatHandler::EmitFormatDiagnostic(S, inFunctionCall, Args[format_idx], S.PDiag(diag::warn_empty_format_string), FExpr->getBeginLoc(),"}}
[k]={{w,11657,"static void CheckFormatString(Sema &S, const FormatStringLiteral *FExpr, const Expr *OrigFormatExpr, ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, Sema::FormatStringType Type, bool inFunctionCall, Sema::VariadicCallType CallType, llvm::SmallBitVector &CheckedVarArgs, UncoveredArgHandler &UncoveredArg, bool IgnoreStringsWithoutSpecifiers) {\n  // CHECK: empty format string?\n  if (StrLen == 0 && numDataArgs > 0) {\n    CheckFormatHandler::EmitFormatDiagnostic(S, inFunctionCall, Args[format_idx], S.PDiag(diag::warn_empty_format_string), FExpr->getBeginLoc(),"}}
},
},
["warn_empty_if_body"]={
["warn_empty_if_body"]={
Line 5,202: Line 5,202:
[c]=q,
[c]=q,
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{xb,802,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (!ConstevalOrNegatedConsteval && !elseStmt)\n    DiagnoseEmptyStmtBody(RParenLoc, thenStmt, diag::warn_empty_if_body);"}}
[k]={{xb,902,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (!ConstevalOrNegatedConsteval && !elseStmt)\n    DiagnoseEmptyStmtBody(RParenLoc, thenStmt, diag::warn_empty_if_body);"}}
},
},
["warn_empty_init_statement"]={
["warn_empty_init_statement"]={
Line 5,217: Line 5,217:
[c]=A,
[c]=A,
[b]={"377748fd7bbf",1542740345,"[clang][Parse] Diagnose useless null statements / empty init-statements"},
[b]={"377748fd7bbf",1542740345,"[clang][Parse] Diagnose useless null statements / empty init-statements"},
[k]={{Rb,1892,"/// ParseCXXCondition - if/switch/while condition expression.\n///\n///      condition:\n///        expression\n///        type-specifier-seq declarator \'=\' assignment-expression\n/// [C++11] type-specifier-seq declarator \'=\' initializer-clause\n/// [C++11] type-specifier-seq declarator braced-init-list\n/// [Clang] type-specifier-seq ref-qualifier[opt] \'[\' identifier-list \']\'\n///            brace-or-equal-initializer\n/// [GNU]  type-specifier-seq declarator simple-asm-expr[opt] attributes[opt]\n///            \'=\' assignment-expression\n///\n/// In C++1z, a condition may in some contexts be preceded by an\n/// optional init-statement. This function will parse that too.\n///\n/// \\param InitStmt If non-null, an init-statement is permitted, and if present\n/// will be parsed and stored here.\n///\n/// \\param Loc The location of the start of the statement that requires this\n/// condition, e.g., the \"for\" in a for loop.\n///\n/// \\param MissingOK Whether an empty condition is acceptable here. Otherwise\n/// it is considered an error to be recovered from.\n///\n/// \\param FRI If non-null, a for range declaration is permitted, and if\n/// present will be parsed and stored here, and a null result will be returned.\n///\n/// \\param EnterForConditionScope If true, enter a continue/break scope at the\n/// appropriate moment for a \'for\' loop.\n///\n/// \\returns The parsed condition.\nSema::ConditionResult Parser::ParseCXXCondition(StmtResult *InitStmt, SourceLocation Loc, Sema::ConditionKind CK, bool MissingOK, ForRangeInfo *FRI, bool EnterForConditionScope) {\n  case ConditionOrInitStatement::Expression: {\n    // We can have an empty expression here.\n    //  if (; true);\n    if (InitStmt && Tok.is(tok::semi)) {\n      if (!Tok.hasLeadingEmptyMacro() && !SemiLoc.isMacroID()) {\n        Diag(SemiLoc, diag::warn_empty_init_statement) << (CK == Sema::ConditionKind::Switch) << FixItHint::CreateRemoval(SemiLoc);"},{Yb,2019,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // Parse the second part of the for specifier.\n  if (!ForEach && !ForRangeInfo.ParsedForRangeDecl() && !SecondPart.isInvalid()) {\n    // Parse the second part of the for specifier.\n    if (Tok.is(tok::semi)) { // for (...;;\n    } else if (Tok.is(tok::r_paren)) {\n    } else {\n      if (getLangOpts().CPlusPlus) {\n        if (ForRangeInfo.ParsedForRangeDecl()) {\n          if (EmptyInitStmtSemiLoc.isValid()) {\n            Diag(EmptyInitStmtSemiLoc, diag::warn_empty_init_statement) << /*for-loop*/ 2 << FixItHint::CreateRemoval(EmptyInitStmtSemiLoc);"}}
[k]={{Rb,2093,"/// ParseCXXCondition - if/switch/while condition expression.\n///\n///      condition:\n///        expression\n///        type-specifier-seq declarator \'=\' assignment-expression\n/// [C++11] type-specifier-seq declarator \'=\' initializer-clause\n/// [C++11] type-specifier-seq declarator braced-init-list\n/// [Clang] type-specifier-seq ref-qualifier[opt] \'[\' identifier-list \']\'\n///            brace-or-equal-initializer\n/// [GNU]  type-specifier-seq declarator simple-asm-expr[opt] attributes[opt]\n///            \'=\' assignment-expression\n///\n/// In C++1z, a condition may in some contexts be preceded by an\n/// optional init-statement. This function will parse that too.\n///\n/// \\param InitStmt If non-null, an init-statement is permitted, and if present\n/// will be parsed and stored here.\n///\n/// \\param Loc The location of the start of the statement that requires this\n/// condition, e.g., the \"for\" in a for loop.\n///\n/// \\param MissingOK Whether an empty condition is acceptable here. Otherwise\n/// it is considered an error to be recovered from.\n///\n/// \\param FRI If non-null, a for range declaration is permitted, and if\n/// present will be parsed and stored here, and a null result will be returned.\n///\n/// \\param EnterForConditionScope If true, enter a continue/break scope at the\n/// appropriate moment for a \'for\' loop.\n///\n/// \\returns The parsed condition.\nSema::ConditionResult Parser::ParseCXXCondition(StmtResult *InitStmt, SourceLocation Loc, Sema::ConditionKind CK, bool MissingOK, ForRangeInfo *FRI, bool EnterForConditionScope) {\n  case ConditionOrInitStatement::Expression: {\n    // We can have an empty expression here.\n    //  if (; true);\n    if (InitStmt && Tok.is(tok::semi)) {\n      if (!Tok.hasLeadingEmptyMacro() && !SemiLoc.isMacroID()) {\n        Diag(SemiLoc, diag::warn_empty_init_statement) << (CK == Sema::ConditionKind::Switch) << FixItHint::CreateRemoval(SemiLoc);"},{Yb,2176,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // Parse the second part of the for specifier.\n  if (!ForEach && !ForRangeInfo.ParsedForRangeDecl() && !SecondPart.isInvalid()) {\n    // Parse the second part of the for specifier.\n    if (Tok.is(tok::semi)) { // for (...;;\n    } else if (Tok.is(tok::r_paren)) {\n    } else {\n      if (getLangOpts().CPlusPlus) {\n        if (ForRangeInfo.ParsedForRangeDecl()) {\n          if (EmptyInitStmtSemiLoc.isValid()) {\n            Diag(EmptyInitStmtSemiLoc, diag::warn_empty_init_statement) << /*for-loop*/ 2 << FixItHint::CreateRemoval(EmptyInitStmtSemiLoc);"}}
},
},
["warn_empty_parens_are_function_decl"]={
["warn_empty_parens_are_function_decl"]={
Line 5,231: Line 5,231:
[c]=q,
[c]=q,
[b]={"69f90dce4912",1325736741,"PR10828: Produce a warning when a no-arguments function is declared in block"},
[b]={"69f90dce4912",1325736741,"PR10828: Produce a warning when a no-arguments function is declared in block"},
[k]={{Cb,3387,"/// Produce an appropriate diagnostic for an ambiguity between a function\n/// declarator and a C++ direct-initializer.\nstatic void warnAboutAmbiguousFunction(Sema &S, Declarator &D, DeclaratorChunk &DeclType, QualType RT) {\n  S.Diag(DeclType.Loc, FTI.NumParams ? diag::warn_parens_disambiguated_as_function_declaration : diag::warn_empty_parens_are_function_decl) << ParenRange;"}}
[k]={{Cb,3861,"/// Produce an appropriate diagnostic for an ambiguity between a function\n/// declarator and a C++ direct-initializer.\nstatic void warnAboutAmbiguousFunction(Sema &S, Declarator &D, DeclaratorChunk &DeclType, QualType RT) {\n  S.Diag(DeclType.Loc, FTI.NumParams ? diag::warn_parens_disambiguated_as_function_declaration : diag::warn_empty_parens_are_function_decl) << ParenRange;"}}
},
},
["warn_empty_range_based_for_body"]={
["warn_empty_range_based_for_body"]={
Line 5,245: Line 5,245:
[c]=q,
[c]=q,
[b]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)"},
[b]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)"},
[k]={{xb,2811,"/// FinishCXXForRangeStmt - Attach the body to a C++0x for-range statement.\n/// This is a separate step from ActOnCXXForRangeStmt because analysis of the\n/// body cannot be performed until after the type of the range variable is\n/// determined.\nStmtResult Sema::FinishCXXForRangeStmt(Stmt *S, Stmt *B) {\n  DiagnoseEmptyStmtBody(ForStmt->getRParenLoc(), B, diag::warn_empty_range_based_for_body);"}}
[k]={{xb,3276,"/// FinishCXXForRangeStmt - Attach the body to a C++0x for-range statement.\n/// This is a separate step from ActOnCXXForRangeStmt because analysis of the\n/// body cannot be performed until after the type of the range variable is\n/// determined.\nStmtResult Sema::FinishCXXForRangeStmt(Stmt *S, Stmt *B) {\n  DiagnoseEmptyStmtBody(ForStmt->getRParenLoc(), B, diag::warn_empty_range_based_for_body);"}}
},
},
["warn_empty_switch_body"]={
["warn_empty_switch_body"]={
Line 5,259: Line 5,259:
[c]=q,
[c]=q,
[b]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)"},
[b]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)"},
[k]={{xb,1383,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (BodyStmt)\n    DiagnoseEmptyStmtBody(CondExpr->getEndLoc(), BodyStmt, diag::warn_empty_switch_body);"}}
[k]={{xb,1620,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (BodyStmt)\n    DiagnoseEmptyStmtBody(CondExpr->getEndLoc(), BodyStmt, diag::warn_empty_switch_body);"}}
},
},
["warn_empty_while_body"]={
["warn_empty_while_body"]={
Line 5,273: Line 5,273:
[c]=q,
[c]=q,
[b]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)"},
[b]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)"},
[k]={{w,16018,"void Sema::DiagnoseEmptyLoopBody(const Stmt *S, const Stmt *PossibleBody) {\n  if (const ForStmt *FS = dyn_cast<ForStmt>(S)) {\n  } else if (const WhileStmt *WS = dyn_cast<WhileStmt>(S)) {\n    DiagID = diag::warn_empty_while_body;"}}
[k]={{w,17908,"void Sema::DiagnoseEmptyLoopBody(const Stmt *S, const Stmt *PossibleBody) {\n  if (const ForStmt *FS = dyn_cast<ForStmt>(S)) {\n  } else if (const WhileStmt *WS = dyn_cast<WhileStmt>(S)) {\n    DiagID = diag::warn_empty_while_body;"}}
},
},
["warn_enum_constant_in_bool_context"]={
["warn_enum_constant_in_bool_context"]={
Line 5,288: Line 5,288:
[c]=q,
[c]=q,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{M,11965,"// C99 6.5.[13,14]\ninline QualType Sema::CheckLogicalOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (EnumConstantInBoolContext)\n    Diag(Loc, diag::warn_enum_constant_in_bool_context);"}}
[k]={{M,13933,"// C99 6.5.[13,14]\ninline QualType Sema::CheckLogicalOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (EnumConstantInBoolContext)\n    Diag(Loc, diag::warn_enum_constant_in_bool_context);"}}
},
},
["warn_enum_value_overflow"]={
["warn_enum_value_overflow"]={
Line 5,300: Line 5,300:
[c]=q,
[c]=q,
[b]={vd,1236199783,yd},
[b]={vd,1236199783,yd},
[k]={{G,16970,"EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum, EnumConstantDecl *LastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, Expr *Val) {\n  if (!Val) {\n    if (Enum->isDependentType())\n    else if (!LastEnumConst) {\n    } else {\n      // Check for overflow on increment.\n      if (EnumVal < LastEnumConst->getInitVal()) {\n        // If we\'re not in C++, diagnose the overflow of enumerator values,\n        // which in C99 means that the enumerator value is not representable in\n        // an int (C99 6.7.2.2p2). However, we support GCC\'s extension that\n        // permits enumerator values that are representable in some larger\n        // integral type.\n        if (!getLangOpts().CPlusPlus && !T.isNull())\n          Diag(IdLoc, diag::warn_enum_value_overflow);"}}
[k]={{G,19403,"EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum, EnumConstantDecl *LastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, Expr *Val) {\n  if (!Val) {\n    if (Enum->isDependentType())\n    else if (!LastEnumConst) {\n    } else {\n      // Check for overflow on increment.\n      if (EnumVal < LastEnumConst->getInitVal()) {\n        // If we\'re not in C++, diagnose the overflow of enumerator values,\n        // which in C99 means that the enumerator value is not representable in\n        // an int (C99 6.7.2.2p2). However, we support GCC\'s extension that\n        // permits enumerator values that are representable in some larger\n        // integral type.\n        if (!getLangOpts().CPlusPlus && !T.isNull())\n          Diag(IdLoc, diag::warn_enum_value_overflow);"}}
},
},
["warn_equality_with_extra_parens"]={
["warn_equality_with_extra_parens"]={
Line 5,314: Line 5,314:
[c]=q,
[c]=q,
[b]={"8b6ec6870f65",1296584662,"Warn for \"if ((a == b))\" where the equality expression is needlessly wrapped inside parentheses."},
[b]={"8b6ec6870f65",1296584662,"Warn for \"if ((a == b))\" where the equality expression is needlessly wrapped inside parentheses."},
[k]={{M,18166,"/// Redundant parentheses over an equality comparison can indicate\n/// that the user intended an assignment used as condition.\nvoid Sema::DiagnoseEqualityWithExtraParens(ParenExpr *ParenE) {\n  if (BinaryOperator *opE = dyn_cast<BinaryOperator>(E))\n    if (opE->getOpcode() == BO_EQ && opE->getLHS()->IgnoreParenImpCasts()->isModifiableLvalue(Context) == Expr::MLV_Valid) {\n      Diag(Loc, diag::warn_equality_with_extra_parens) << E->getSourceRange();"}}
[k]={{M,20911,"/// Redundant parentheses over an equality comparison can indicate\n/// that the user intended an assignment used as condition.\nvoid Sema::DiagnoseEqualityWithExtraParens(ParenExpr *ParenE) {\n  if (BinaryOperator *opE = dyn_cast<BinaryOperator>(E))\n    if (opE->getOpcode() == BO_EQ && opE->getLHS()->IgnoreParenImpCasts()->isModifiableLvalue(Context) == Expr::MLV_Valid) {\n      Diag(Loc, diag::warn_equality_with_extra_parens) << E->getSourceRange();"}}
},
},
["warn_exception_caught_by_earlier_handler"]={
["warn_exception_caught_by_earlier_handler"]={
Line 5,328: Line 5,328:
[c]=q,
[c]=q,
[b]={"63c4da01c819",1248887745,"Check for identical types in C++ catch expression. Patch by Erik Verbruggen."},
[b]={"63c4da01c819",1248887745,"Check for identical types in C++ catch expression. Patch by Erik Verbruggen."},
[k]={{xb,3913,"/// 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(H->getExceptionDecl()->getTypeSpecStartLoc(), diag::warn_exception_caught_by_earlier_handler) << H->getCaughtType();"},{xb,3928,"/// 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(H->getExceptionDecl()->getTypeSpecStartLoc(), diag::warn_exception_caught_by_earlier_handler) << H->getCaughtType();"}}
[k]={{xb,4543,"/// 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(H->getExceptionDecl()->getTypeSpecStartLoc(), diag::warn_exception_caught_by_earlier_handler) << H->getCaughtType();"},{xb,4563,"/// 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(H->getExceptionDecl()->getTypeSpecStartLoc(), diag::warn_exception_caught_by_earlier_handler) << H->getCaughtType();"}}
},
},
["warn_exception_spec_deprecated"]={
["warn_exception_spec_deprecated"]={
Line 5,343: Line 5,343:
[c]=ib,
[c]=ib,
[b]={"8ca78a16f4a5",1371088971,"Add -Wdeprecated warnings and fixits for things deprecated in C++11:"},
[b]={"8ca78a16f4a5",1371088971,"Add -Wdeprecated warnings and fixits for things deprecated in C++11:"},
[k]={{db,3487,"static void diagnoseDynamicExceptionSpecification(Parser &P, SourceRange Range, bool IsNoexcept) {\n  if (P.getLangOpts().CPlusPlus11) {\n    P.Diag(Range.getBegin(), P.getLangOpts().CPlusPlus17 && !IsNoexcept ? diag::ext_dynamic_exception_spec : diag::warn_exception_spec_deprecated) << Range;"}}
[k]={{db,4011,"static void diagnoseDynamicExceptionSpecification(Parser &P, SourceRange Range, bool IsNoexcept) {\n  if (P.getLangOpts().CPlusPlus11) {\n    P.Diag(Range.getBegin(), P.getLangOpts().CPlusPlus17 && !IsNoexcept ? diag::ext_dynamic_exception_spec : diag::warn_exception_spec_deprecated) << Range;"}}
},
},
["warn_exit_time_destructor"]={
["warn_exit_time_destructor"]={
Line 5,358: Line 5,358:
[c]=q,
[c]=q,
[b]={"98766db78583",1300928501,"Add a new warning for exit-time destructors."},
[b]={"98766db78583",1300928501,"Add a new warning for exit-time destructors."},
[k]={{F,13598,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  Diag(VD->getLocation(), diag::warn_exit_time_destructor);"}}
[k]={{F,15897,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  Diag(VD->getLocation(), diag::warn_exit_time_destructor);"}}
},
},
["warn_expected_consistent_version_separator"]={
["warn_expected_consistent_version_separator"]={
Line 5,372: Line 5,372:
[c]=A,
[c]=A,
[b]={"ce72e63d1156",1412272646,"Diagnose mixed use of \'_\' and \'.\' as version"},
[b]={"ce72e63d1156",1412272646,"Diagnose mixed use of \'_\' and \'.\' as version"},
[k]={{Mb,985,"/// Parse a version number.\n///\n/// version:\n///  simple-integer\n///  simple-integer \'.\' simple-integer\n///  simple-integer \'_\' simple-integer\n///  simple-integer \'.\' simple-integer \'.\' simple-integer\n///  simple-integer \'_\' simple-integer \'_\' simple-integer\nVersionTuple Parser::ParseVersionTuple(SourceRange &Range) {\n  // Warn if separators, be it \'.\' or \'_\', do not match.\n  if (AfterMajorSeparator != AfterMinorSeparator)\n    Diag(Tok, diag::warn_expected_consistent_version_separator);"}}
[k]={{Mb,1084,"/// Parse a version number.\n///\n/// version:\n///  simple-integer\n///  simple-integer \'.\' simple-integer\n///  simple-integer \'_\' simple-integer\n///  simple-integer \'.\' simple-integer \'.\' simple-integer\n///  simple-integer \'_\' simple-integer \'_\' simple-integer\nVersionTuple Parser::ParseVersionTuple(SourceRange &Range) {\n  // Warn if separators, be it \'.\' or \'_\', do not match.\n  if (AfterMajorSeparator != AfterMinorSeparator)\n    Diag(Tok, diag::warn_expected_consistent_version_separator);"}}
},
},
["warn_expected_qualified_after_typename"]={
["warn_expected_qualified_after_typename"]={
Line 5,384: Line 5,384:
[c]=A,
[c]=A,
[b]={"dd876125df22",1303644253,"Downgrade unnecessary \"typename\" from error to warning in Microsoft mode. "},
[b]={"dd876125df22",1303644253,"Downgrade unnecessary \"typename\" from error to warning in Microsoft mode. "},
[k]={{tc,1790,"/// TryAnnotateTypeOrScopeToken - If the current token position is on a\n/// typename (possibly qualified in C++) or a C++ scope specifier not followed\n/// by a typename, TryAnnotateTypeOrScopeToken will replace one or more tokens\n/// with a single annotation token representing the typename or C++ scope\n/// respectively.\n/// This simplifies handling of C++ scope specifiers and allows efficient\n/// backtracking without the need to re-parse and resolve nested-names and\n/// typenames.\n/// It will mainly be called when we expect to treat identifiers as typenames\n/// (if they are typenames). For example, in C we do not expect identifiers\n/// inside expressions to be treated as typenames so it will not be called\n/// for expressions in C.\n/// The benefit for C/ObjC is that a typename will be annotated and\n/// Actions.getTypeName will not be needed to be called again (e.g. getTypeName\n/// will not be called twice, once to check whether we have a declaration\n/// specifier, and another one to get the actual type inside\n/// ParseDeclarationSpecifiers).\n///\n/// This returns true if an error occurred.\n///\n/// Note that this routine emits an error if you call it with ::new or ::delete\n/// as the current tokens, so only call it in contexts where these are invalid.\nbool Parser::TryAnnotateTypeOrScopeToken(ImplicitTypenameContext AllowImplicitTypename) {\n  if (Tok.is(tok::kw_typename)) {\n    // MSVC lets you do stuff like:\n    //  typename typedef T_::D D;\n    //\n    // We will consume the typedef token here and put it back after we have\n    // parsed the first identifier, transforming it into something more like:\n    //  typename T_::D typedef D;\n    if (getLangOpts().MSVCCompat && NextToken().is(tok::kw_typedef)) {\n      if (!Result)\n        Diag(Tok.getLocation(), diag::warn_expected_qualified_after_typename);"},{tc,1815,"/// TryAnnotateTypeOrScopeToken - If the current token position is on a\n/// typename (possibly qualified in C++) or a C++ scope specifier not followed\n/// by a typename, TryAnnotateTypeOrScopeToken will replace one or more tokens\n/// with a single annotation token representing the typename or C++ scope\n/// respectively.\n/// This simplifies handling of C++ scope specifiers and allows efficient\n/// backtracking without the need to re-parse and resolve nested-names and\n/// typenames.\n/// It will mainly be called when we expect to treat identifiers as typenames\n/// (if they are typenames). For example, in C we do not expect identifiers\n/// inside expressions to be treated as typenames so it will not be called\n/// for expressions in C.\n/// The benefit for C/ObjC is that a typename will be annotated and\n/// Actions.getTypeName will not be needed to be called again (e.g. getTypeName\n/// will not be called twice, once to check whether we have a declaration\n/// specifier, and another one to get the actual type inside\n/// ParseDeclarationSpecifiers).\n///\n/// This returns true if an error occurred.\n///\n/// Note that this routine emits an error if you call it with ::new or ::delete\n/// as the current tokens, so only call it in contexts where these are invalid.\nbool Parser::TryAnnotateTypeOrScopeToken(ImplicitTypenameContext AllowImplicitTypename) {\n  if (Tok.is(tok::kw_typename)) {\n    if (SS.isEmpty()) {\n      if (Tok.is(tok::identifier) || Tok.is(tok::annot_template_id) || Tok.is(tok::annot_decltype)) {\n        // Attempt to recover by skipping the invalid \'typename\'\n        if (Tok.is(tok::annot_decltype) || (!TryAnnotateTypeOrScopeToken(AllowImplicitTypename) && Tok.isAnnotation())) {\n          // MS compatibility: MSVC permits using known types with typename.\n          // e.g. \"typedef typename T* pointer_type\"\n          if (getLangOpts().MicrosoftExt)\n            DiagID = diag::warn_expected_qualified_after_typename;"}}
[k]={{tc,1968,"/// TryAnnotateTypeOrScopeToken - If the current token position is on a\n/// typename (possibly qualified in C++) or a C++ scope specifier not followed\n/// by a typename, TryAnnotateTypeOrScopeToken will replace one or more tokens\n/// with a single annotation token representing the typename or C++ scope\n/// respectively.\n/// This simplifies handling of C++ scope specifiers and allows efficient\n/// backtracking without the need to re-parse and resolve nested-names and\n/// typenames.\n/// It will mainly be called when we expect to treat identifiers as typenames\n/// (if they are typenames). For example, in C we do not expect identifiers\n/// inside expressions to be treated as typenames so it will not be called\n/// for expressions in C.\n/// The benefit for C/ObjC is that a typename will be annotated and\n/// Actions.getTypeName will not be needed to be called again (e.g. getTypeName\n/// will not be called twice, once to check whether we have a declaration\n/// specifier, and another one to get the actual type inside\n/// ParseDeclarationSpecifiers).\n///\n/// This returns true if an error occurred.\n///\n/// Note that this routine emits an error if you call it with ::new or ::delete\n/// as the current tokens, so only call it in contexts where these are invalid.\nbool Parser::TryAnnotateTypeOrScopeToken(ImplicitTypenameContext AllowImplicitTypename) {\n  if (Tok.is(tok::kw_typename)) {\n    // MSVC lets you do stuff like:\n    //  typename typedef T_::D D;\n    //\n    // We will consume the typedef token here and put it back after we have\n    // parsed the first identifier, transforming it into something more like:\n    //  typename T_::D typedef D;\n    if (getLangOpts().MSVCCompat && NextToken().is(tok::kw_typedef)) {\n      if (!Result)\n        Diag(Tok.getLocation(), diag::warn_expected_qualified_after_typename);"},{tc,1996,"/// TryAnnotateTypeOrScopeToken - If the current token position is on a\n/// typename (possibly qualified in C++) or a C++ scope specifier not followed\n/// by a typename, TryAnnotateTypeOrScopeToken will replace one or more tokens\n/// with a single annotation token representing the typename or C++ scope\n/// respectively.\n/// This simplifies handling of C++ scope specifiers and allows efficient\n/// backtracking without the need to re-parse and resolve nested-names and\n/// typenames.\n/// It will mainly be called when we expect to treat identifiers as typenames\n/// (if they are typenames). For example, in C we do not expect identifiers\n/// inside expressions to be treated as typenames so it will not be called\n/// for expressions in C.\n/// The benefit for C/ObjC is that a typename will be annotated and\n/// Actions.getTypeName will not be needed to be called again (e.g. getTypeName\n/// will not be called twice, once to check whether we have a declaration\n/// specifier, and another one to get the actual type inside\n/// ParseDeclarationSpecifiers).\n///\n/// This returns true if an error occurred.\n///\n/// Note that this routine emits an error if you call it with ::new or ::delete\n/// as the current tokens, so only call it in contexts where these are invalid.\nbool Parser::TryAnnotateTypeOrScopeToken(ImplicitTypenameContext AllowImplicitTypename) {\n  if (Tok.is(tok::kw_typename)) {\n    if (SS.isEmpty()) {\n      if (Tok.is(tok::identifier) || Tok.is(tok::annot_template_id) || Tok.is(tok::annot_decltype)) {\n        // Attempt to recover by skipping the invalid \'typename\'\n        if (Tok.is(tok::annot_decltype) || (!TryAnnotateTypeOrScopeToken(AllowImplicitTypename) && Tok.isAnnotation())) {\n          // MS compatibility: MSVC permits using known types with typename.\n          // e.g. \"typedef typename T* pointer_type\"\n          if (getLangOpts().MicrosoftExt)\n            DiagID = diag::warn_expected_qualified_after_typename;"}}
},
},
["warn_expecting_lock_held_on_loop"]={
["warn_expecting_lock_held_on_loop"]={
Line 5,399: Line 5,399:
[c]=q,
[c]=q,
[b]={"afbbd8e5adac",1314125194,"Thread-safety analysis: adding in a basic lockset tracking system. This"},
[b]={"afbbd8e5adac",1314125194,"Thread-safety analysis: adding in a basic lockset tracking system. This"},
[k]={{eb,1650,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexHeldEndOfScope(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) override {\n    case LEK_LockedSomeLoopIterations:\n      DiagID = diag::warn_expecting_lock_held_on_loop;"}}
[k]={{eb,1912,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexHeldEndOfScope(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) override {\n    case LEK_LockedSomeLoopIterations:\n      DiagID = diag::warn_expecting_lock_held_on_loop;"}}
},
},
["warn_expecting_locked"]={
["warn_expecting_locked"]={
Line 5,414: Line 5,414:
[c]=q,
[c]=q,
[b]={"6e6dbb76180b",1341267414,"Thread safety analysis: fixed incorrect error message at the end of a locks_required function."},
[b]={"6e6dbb76180b",1341267414,"Thread safety analysis: fixed incorrect error message at the end of a locks_required function."},
[k]={{eb,1656,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexHeldEndOfScope(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) override {\n    case LEK_NotLockedAtEndOfFunction:\n      DiagID = diag::warn_expecting_locked;"}}
[k]={{eb,1918,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexHeldEndOfScope(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) override {\n    case LEK_NotLockedAtEndOfFunction:\n      DiagID = diag::warn_expecting_locked;"}}
},
},
["warn_experimental_header_unit"]={
["warn_experimental_header_unit"]={
Line 5,428: Line 5,428:
[c]="Modules Issue",
[c]="Modules Issue",
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{"clang/lib/Sema/SemaModule.cpp",495,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, Module *Mod, ModuleIdPath Path) {\n  if (Mod->isHeaderUnit())\n    Diag(ImportLoc, diag::warn_experimental_header_unit);"}}
[k]={{"clang/lib/Sema/SemaModule.cpp",551,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, Module *Mod, ModuleIdPath Path) {\n  if (Mod->isHeaderUnit())\n    Diag(ImportLoc, diag::warn_experimental_header_unit);"}}
},
},
["warn_explicit_instantiation_after_specialization"]={
["warn_explicit_instantiation_after_specialization"]={
Line 5,442: Line 5,442:
[c]=q,
[c]=q,
[b]={"e4caa48dbb74",1472685805,"DR259: Demote the pedantic error for an explicit instantiation after an"},
[b]={"e4caa48dbb74",1472685805,"DR259: Demote the pedantic error for an explicit instantiation after an"},
[k]={{wb,7611,"/// 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(NewLoc, diag::warn_explicit_instantiation_after_specialization) << PrevDecl;"}}
[k]={{wb,9263,"/// 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(NewLoc, diag::warn_explicit_instantiation_after_specialization) << PrevDecl;"}}
},
},
["warn_explicit_instantiation_inline_0x"]={
["warn_explicit_instantiation_inline_0x"]={
Line 5,457: Line 5,457:
[c]=q,
[c]=q,
[b]={"83c19296ff37",1318909443,"Add -Wc++11-compat warning for an inline specifier on an explicit instantiation."},
[b]={"83c19296ff37",1318909443,"Add -Wc++11-compat warning for an inline specifier on an explicit instantiation."},
[k]={{wb,8571,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // C++0x [temp.explicit]p1:\n  //  [...] An explicit instantiation of a function template shall not use the\n  //  inline or constexpr specifiers.\n  // Presumably, this also applies to member functions of class templates as\n  // well.\n  if (D.getDeclSpec().isInlineSpecified())\n    Diag(D.getDeclSpec().getInlineSpecLoc(), getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_inline : diag::warn_explicit_instantiation_inline_0x) << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());"}}
[k]={{wb,10411,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // C++0x [temp.explicit]p1:\n  //  [...] An explicit instantiation of a function template shall not use the\n  //  inline or constexpr specifiers.\n  // Presumably, this also applies to member functions of class templates as\n  // well.\n  if (D.getDeclSpec().isInlineSpecified())\n    Diag(D.getDeclSpec().getInlineSpecLoc(), getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_inline : diag::warn_explicit_instantiation_inline_0x) << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());"}}
},
},
["warn_explicit_instantiation_must_be_global_0x"]={
["warn_explicit_instantiation_must_be_global_0x"]={
Line 5,472: Line 5,472:
[c]=q,
[c]=q,
[b]={"c97d7a2c6a3a",1273599574,"The C++98/03 standard is disturbingly silent about out-of-scope"},
[b]={"c97d7a2c6a3a",1273599574,"The C++98/03 standard is disturbingly silent about out-of-scope"},
[k]={{wb,8122,"/// Check the scope of an explicit instantiation.\n///\n/// \\returns true if a serious error occurs, false otherwise.\nstatic bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName) {\n  if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(OrigContext)) {\n  } else\n    S.Diag(InstLoc, S.getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_must_be_global : diag::warn_explicit_instantiation_must_be_global_0x) << D;"}}
[k]={{wb,9869,"/// Check the scope of an explicit instantiation.\n///\n/// \\returns true if a serious error occurs, false otherwise.\nstatic bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName) {\n  if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(OrigContext)) {\n  } else\n    S.Diag(InstLoc, S.getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_must_be_global : diag::warn_explicit_instantiation_must_be_global_0x) << D;"}}
},
},
["warn_explicit_instantiation_out_of_scope_0x"]={
["warn_explicit_instantiation_out_of_scope_0x"]={
Line 5,487: Line 5,487:
[c]=q,
[c]=q,
[b]={"c97d7a2c6a3a",1273599574,"The C++98/03 standard is disturbingly silent about out-of-scope"},
[b]={"c97d7a2c6a3a",1273599574,"The C++98/03 standard is disturbingly silent about out-of-scope"},
[k]={{wb,8118,"/// Check the scope of an explicit instantiation.\n///\n/// \\returns true if a serious error occurs, false otherwise.\nstatic bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName) {\n  if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(OrigContext)) {\n    if (WasQualifiedName)\n      S.Diag(InstLoc, S.getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_out_of_scope : diag::warn_explicit_instantiation_out_of_scope_0x) << D << NS;"}}
[k]={{wb,9857,"/// Check the scope of an explicit instantiation.\n///\n/// \\returns true if a serious error occurs, false otherwise.\nstatic bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName) {\n  if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(OrigContext)) {\n    if (WasQualifiedName)\n      S.Diag(InstLoc, S.getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_out_of_scope : diag::warn_explicit_instantiation_out_of_scope_0x) << D << NS;"}}
},
},
["warn_explicit_instantiation_unqualified_wrong_namespace_0x"]={
["warn_explicit_instantiation_unqualified_wrong_namespace_0x"]={
Line 5,502: Line 5,502:
[c]=q,
[c]=q,
[b]={"c97d7a2c6a3a",1273599574,"The C++98/03 standard is disturbingly silent about out-of-scope"},
[b]={"c97d7a2c6a3a",1273599574,"The C++98/03 standard is disturbingly silent about out-of-scope"},
[k]={{wb,8120,"/// Check the scope of an explicit instantiation.\n///\n/// \\returns true if a serious error occurs, false otherwise.\nstatic bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName) {\n  if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(OrigContext)) {\n    if (WasQualifiedName)\n    else\n      S.Diag(InstLoc, S.getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_unqualified_wrong_namespace : diag::warn_explicit_instantiation_unqualified_wrong_namespace_0x) << D << NS;"}}
[k]={{wb,9863,"/// Check the scope of an explicit instantiation.\n///\n/// \\returns true if a serious error occurs, false otherwise.\nstatic bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName) {\n  if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(OrigContext)) {\n    if (WasQualifiedName)\n    else\n      S.Diag(InstLoc, S.getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_unqualified_wrong_namespace : diag::warn_explicit_instantiation_unqualified_wrong_namespace_0x) << D << NS;"}}
},
},
["warn_ext_c2x_attributes"]={
["warn_ext_c2x_attributes"]={
Line 5,517: Line 5,517:
[c]=A,
[c]=A,
[b]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives"},
[b]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives"},
[k]={{db,3945,"/// 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 (getLangOpts().CPlusPlus) {\n  } else {\n    Diag(OpenLoc, getLangOpts().C2x ? diag::warn_pre_c2x_compat_attributes : diag::warn_ext_c2x_attributes);"}}
[k]={{db,4528,"/// 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 (getLangOpts().CPlusPlus) {\n  } else {\n    Diag(OpenLoc, getLangOpts().C2x ? diag::warn_pre_c2x_compat_attributes : diag::warn_ext_c2x_attributes);"}}
},
},
["warn_ext_cxx11_attributes"]={
["warn_ext_cxx11_attributes"]={
Line 5,532: Line 5,532:
[c]=A,
[c]=A,
[b]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives"},
[b]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives"},
[k]={{db,3943,"/// 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 (getLangOpts().CPlusPlus) {\n    Diag(OpenLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_attribute : diag::warn_ext_cxx11_attributes);"}}
[k]={{db,4525,"/// 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 (getLangOpts().CPlusPlus) {\n    Diag(OpenLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_attribute : diag::warn_ext_cxx11_attributes);"}}
},
},
["warn_ext_int_deprecated"]={
["warn_ext_int_deprecated"]={
Line 5,546: Line 5,546:
[c]=ib,
[c]=ib,
[b]={md,1612659633,nd},
[b]={md,1612659633,nd},
[k]={{Mb,7165,"void Parser::DiagnoseBitIntUse(const Token &Tok) {\n  if (Tok.is(tok::kw__ExtInt)) {\n    Diag(Loc, diag::warn_ext_int_deprecated) << FixItHint::CreateReplacement(Loc, \"_BitInt\");"}}
[k]={{Mb,7954,"void Parser::DiagnoseBitIntUse(const Token &Tok) {\n  if (Tok.is(tok::kw__ExtInt)) {\n    Diag(Loc, diag::warn_ext_int_deprecated) << FixItHint::CreateReplacement(Loc, \"_BitInt\");"}}
},
},
["warn_extern_init"]={
["warn_extern_init"]={
Line 5,560: Line 5,560:
[c]=q,
[c]=q,
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{G,11835,"/// 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->isLocalVarDecl()) {\n  } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n  } else if (VDecl->isFileVarDecl()) {\n    // In C, extern is typically used to avoid tentative definitions when\n    // declaring variables in headers, but adding an intializer makes it a\n    // definition. This is somewhat confusing, so GCC and Clang both warn on it.\n    // In C++, extern is often used to give implictly static const variables\n    // external linkage, so don\'t warn in that case. If selectany is present,\n    // this might be header code intended for C and C++ inclusion, so apply the\n    // C++ rules.\n    if (VDecl->getStorageClass() == SC_Extern && ((!getLangOpts().CPlusPlus && !VDecl->hasAttr<SelectAnyAttr>()) || !Context.getBaseElementType(VDecl->getType()).isConstQualified()) && !(getLangOpts().CPlusPlus && VDecl->isExternC()) && !isTemplateInstantiation(VDecl->getTemplateSpecializationKind()))\n      Diag(VDecl->getLocation(), diag::warn_extern_init);"}}
[k]={{G,13556,"/// 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->isLocalVarDecl()) {\n  } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n  } else if (VDecl->isFileVarDecl()) {\n    // In C, extern is typically used to avoid tentative definitions when\n    // declaring variables in headers, but adding an intializer makes it a\n    // definition. This is somewhat confusing, so GCC and Clang both warn on it.\n    // In C++, extern is often used to give implictly static const variables\n    // external linkage, so don\'t warn in that case. If selectany is present,\n    // this might be header code intended for C and C++ inclusion, so apply the\n    // C++ rules.\n    if (VDecl->getStorageClass() == SC_Extern && ((!getLangOpts().CPlusPlus && !VDecl->hasAttr<SelectAnyAttr>()) || !Context.getBaseElementType(VDecl->getType()).isConstQualified()) && !(getLangOpts().CPlusPlus && VDecl->isExternC()) && !isTemplateInstantiation(VDecl->getTemplateSpecializationKind()))\n      Diag(VDecl->getLocation(), diag::warn_extern_init);"}}
},
},
["warn_extra_semi_after_mem_fn_def"]={
["warn_extra_semi_after_mem_fn_def"]={
Line 5,575: Line 5,575:
[c]=A,
[c]=A,
[b]={"87f5dc53b23e",1343022325,"Add diagnostics for comma at end of enum and for extra semicolon at namespace"},
[b]={"87f5dc53b23e",1343022325,"Add diagnostics for comma at end of enum and for extra semicolon at namespace"},
[k]={{tc,189,"void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) {\n  if (Kind != AfterMemberFunctionDefinition || HadMultipleSemis)\n  else\n    Diag(StartLoc, diag::warn_extra_semi_after_mem_fn_def) << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));"}}
[k]={{tc,213,"void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) {\n  if (Kind != AfterMemberFunctionDefinition || HadMultipleSemis)\n  else\n    Diag(StartLoc, diag::warn_extra_semi_after_mem_fn_def) << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));"}}
},
},
["warn_falloff_nonvoid_coroutine"]={
["warn_falloff_nonvoid_coroutine"]={
Line 5,589: Line 5,589:
[c]=q,
[c]=q,
[b]={"709d1b30ab9e",1477553431,"[coroutines] Build fallthrough and set_exception statements."},
[b]={"709d1b30ab9e",1477553431,"[coroutines] Build fallthrough and set_exception statements."},
[k]={{eb,537,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForCoroutine(const Decl *Func) {\n    D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_coroutine;"}}
[k]={{eb,588,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForCoroutine(const Decl *Func) {\n    D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_coroutine;"}}
},
},
["warn_falloff_nonvoid_function"]={
["warn_falloff_nonvoid_function"]={
Line 5,603: Line 5,603:
[c]=q,
[c]=q,
[b]={"33979f75a0fd",1248307017,"Add warning for falling off the end of a function that should return a"},
[b]={"33979f75a0fd",1248307017,"Add warning for falling off the end of a function that should return a"},
[k]={{eb,509,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_function;"}}
[k]={{eb,557,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_function;"}}
},
},
["warn_falloff_nonvoid_lambda"]={
["warn_falloff_nonvoid_lambda"]={
Line 5,617: Line 5,617:
[c]=vc,
[c]=vc,
[b]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions."},
[b]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions."},
[k]={{eb,559,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForLambda() {\n    D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_lambda;"}}
[k]={{eb,618,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForLambda() {\n    D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_lambda;"}}
},
},
["warn_falloff_noreturn_function"]={
["warn_falloff_noreturn_function"]={
Line 5,631: Line 5,631:
[c]=q,
[c]=q,
[b]={"8e79f99b1638",1248403741,"Implement new warning for functions declared \'noreturn\' when they fall off the end."},
[b]={"8e79f99b1638",1248403741,"Implement new warning for functions declared \'noreturn\' when they fall off the end."},
[k]={{eb,506,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    D.diag_MaybeFallThrough_HasNoReturn = diag::warn_falloff_noreturn_function;"},{eb,508,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    D.diag_AlwaysFallThrough_HasNoReturn = diag::warn_falloff_noreturn_function;"}}
[k]={{eb,551,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    D.diag_MaybeFallThrough_HasNoReturn = diag::warn_falloff_noreturn_function;"},{eb,555,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    D.diag_AlwaysFallThrough_HasNoReturn = diag::warn_falloff_noreturn_function;"}}
},
},
["warn_fe_backend_frame_larger_than"]={
["warn_fe_backend_frame_larger_than"]={
Line 5,645: Line 5,645:
[c]=Yc,
[c]=Yc,
[b]={"728c5540eef2",1391711443,"Wired-up the new LLVM diagnostic system into clang diagnostic system."},
[b]={"728c5540eef2",1391711443,"Wired-up the new LLVM diagnostic system into clang diagnostic system."},
[k]={{"clang/lib/CodeGen/CodeGenFunction.cpp",963,"#include \"clang/Basic/Sanitizers.def\"\n  if (CGM.getCodeGenOpts().WarnStackSize != UINT_MAX && !CGM.getDiags().isIgnored(diag::warn_fe_backend_frame_larger_than, Loc))"}}
[k]={{"clang/lib/CodeGen/CodeGenFunction.cpp",1104,"#include \"clang/Basic/Sanitizers.def\"\n  if (CGM.getCodeGenOpts().WarnStackSize != UINT_MAX && !CGM.getDiags().isIgnored(diag::warn_fe_backend_frame_larger_than, Loc))"}}
},
},
["warn_fe_backend_invalid_feature_flag"]={
["warn_fe_backend_invalid_feature_flag"]={
Line 5,659: Line 5,659:
[c]=u,
[c]=u,
[b]={"910ad36e1a25",1664072190,"[Clang] Improve diagnostics about the invalid target feature."},
[b]={"910ad36e1a25",1664072190,"[Clang] Improve diagnostics about the invalid target feature."},
[k]={{"clang/lib/Basic/TargetInfo.cpp",559,"bool TargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeatureVec) const {\n  for (const auto &F : FeatureVec) {\n    // Apply the feature via the target.\n    if (Name[0] != \'+\' && Name[0] != \'-\')\n      Diags.Report(diag::warn_fe_backend_invalid_feature_flag) << Name;"}}
[k]={{"clang/lib/Basic/TargetInfo.cpp",531,"bool TargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeatureVec) const {\n  for (const auto &F : FeatureVec) {\n    // Apply the feature via the target.\n    if (Name[0] != \'+\' && Name[0] != \'-\')\n      Diags.Report(diag::warn_fe_backend_invalid_feature_flag) << Name;"}}
},
},
["warn_fe_backend_optimization_failure"]={
["warn_fe_backend_optimization_failure"]={
Line 5,673: Line 5,673:
[c]=Yc,
[c]=Yc,
[b]={"f8a767df67f3",1405712419,"Recommit: Handle diagnostic warnings in Frontend diagnostic handler."},
[b]={"f8a767df67f3",1405712419,"Recommit: Handle diagnostic warnings in Frontend diagnostic handler."},
[k]={{"clang/lib/CodeGen/CodeGenAction.cpp",697,"void BackendConsumer::OptimizationFailureHandler(const llvm::DiagnosticInfoOptimizationFailure &D) { EmitOptimizationMessage(D, diag::warn_fe_backend_optimization_failure); }"}}
[k]={{"clang/lib/CodeGen/CodeGenAction.cpp",844,"void BackendConsumer::OptimizationFailureHandler(const llvm::DiagnosticInfoOptimizationFailure &D) { EmitOptimizationMessage(D, diag::warn_fe_backend_optimization_failure); }"}}
},
},
["warn_fe_backend_plugin"]={
["warn_fe_backend_plugin"]={
Line 5,700: Line 5,700:
[c]=u,
[c]=u,
[b]={"c0f0d50653e1",1684947541,"[HIP] emit macro `__HIP_NO_IMAGE_SUPPORT`"},
[b]={"c0f0d50653e1",1684947541,"[HIP] emit macro `__HIP_NO_IMAGE_SUPPORT`"},
[k]={{"clang/lib/Basic/Targets.cpp",756,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Compute the default target features, we need the target to handle this\n  // because features may have dependencies on one another.\n  llvm::erase_if(Opts->FeaturesAsWritten, [&](StringRef Name) {\n    if (Target->isReadOnlyFeature(Name.substr(1))) {\n      Diags.Report(diag::warn_fe_backend_readonly_feature_flag) << Name;"}}
[k]={{"clang/lib/Basic/Targets.cpp",823,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // Compute the default target features, we need the target to handle this\n  // because features may have dependencies on one another.\n  llvm::erase_if(Opts->FeaturesAsWritten, [&](StringRef Name) {\n    if (Target->isReadOnlyFeature(Name.substr(1))) {\n      Diags.Report(diag::warn_fe_backend_readonly_feature_flag) << Name;"}}
},
},
["warn_fe_backend_resource_limit"]={
["warn_fe_backend_resource_limit"]={
Line 5,727: Line 5,727:
[c]=u,
[c]=u,
[b]={"39d2ae0afb23",1594050762,"[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support."},
[b]={"39d2ae0afb23",1594050762,"[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support."},
[k]={{Lc,113,"bool CompilerInstance::createTarget() {\n  if (!getTarget().hasStrictFP() && !getLangOpts().ExpStrictFP) {\n    if (FPExc != LangOptions::FPE_Default && FPExc != LangOptions::FPE_Ignore) {\n      getDiagnostics().Report(diag::warn_fe_backend_unsupported_fp_exceptions);"}}
[k]={{Lc,137,"bool CompilerInstance::createTarget() {\n  if (!getTarget().hasStrictFP() && !getLangOpts().ExpStrictFP) {\n    if (FPExc != LangOptions::FPE_Default && FPExc != LangOptions::FPE_Ignore) {\n      getDiagnostics().Report(diag::warn_fe_backend_unsupported_fp_exceptions);"}}
},
},
["warn_fe_backend_unsupported_fp_rounding"]={
["warn_fe_backend_unsupported_fp_rounding"]={
Line 5,741: Line 5,741:
[c]=u,
[c]=u,
[b]={"39d2ae0afb23",1594050762,"[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support."},
[b]={"39d2ae0afb23",1594050762,"[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support."},
[k]={{Lc,108,"bool CompilerInstance::createTarget() {\n  if (!getTarget().hasStrictFP() && !getLangOpts().ExpStrictFP) {\n    if (getLangOpts().RoundingMath) {\n      getDiagnostics().Report(diag::warn_fe_backend_unsupported_fp_rounding);"}}
[k]={{Lc,132,"bool CompilerInstance::createTarget() {\n  if (!getTarget().hasStrictFP() && !getLangOpts().ExpStrictFP) {\n    if (getLangOpts().RoundingMath) {\n      getDiagnostics().Report(diag::warn_fe_backend_unsupported_fp_rounding);"}}
},
},
["warn_fe_backend_warning_attr"]={
["warn_fe_backend_warning_attr"]={
Line 5,755: Line 5,755:
[c]=Yc,
[c]=Yc,
[b]={"846e562dcc6a",1629911893,"[Clang] add support for error+warning fn attrs"},
[b]={"846e562dcc6a",1629911893,"[Clang] add support for error+warning fn attrs"},
[k]={{"clang/lib/CodeGen/CodeGenAction.cpp",707,"void BackendConsumer::DontCallDiagHandler(const DiagnosticInfoDontCall &D) {\n  Diags.Report(LocCookie, D.getSeverity() == DiagnosticSeverity::DS_Error ? diag::err_fe_backend_error_attr : diag::warn_fe_backend_warning_attr) << llvm::demangle(D.getFunctionName()) << D.getNote();"}}
[k]={{"clang/lib/CodeGen/CodeGenAction.cpp",858,"void BackendConsumer::DontCallDiagHandler(const DiagnosticInfoDontCall &D) {\n  Diags.Report(LocCookie, D.getSeverity() == DiagnosticSeverity::DS_Error ? diag::err_fe_backend_error_attr : diag::warn_fe_backend_warning_attr) << llvm::demangle(D.getFunctionName()) << D.getNote();"}}
},
},
["warn_fe_cc_log_diagnostics_failure"]={
["warn_fe_cc_log_diagnostics_failure"]={
Line 5,767: Line 5,767:
[c]=u,
[c]=u,
[b]={"6b58486466dc",1302199874,"Frontend: Sketch support for -diagnostic-log-file, which still doesn\'t do anything."},
[b]={"6b58486466dc",1302199874,"Frontend: Sketch support for -diagnostic-log-file, which still doesn\'t do anything."},
[k]={{Lc,239,"// Diagnostics\nstatic void SetUpDiagnosticLog(DiagnosticOptions *DiagOpts, const CodeGenOptions *CodeGenOpts, DiagnosticsEngine &Diags) {\n  if (DiagOpts->DiagnosticLogFile != \"-\") {\n    if (EC) {\n      Diags.Report(diag::warn_fe_cc_log_diagnostics_failure) << DiagOpts->DiagnosticLogFile << EC.message();"}}
[k]={{Lc,298,"// Diagnostics\nstatic void SetUpDiagnosticLog(DiagnosticOptions *DiagOpts, const CodeGenOptions *CodeGenOpts, DiagnosticsEngine &Diags) {\n  if (DiagOpts->DiagnosticLogFile != \"-\") {\n    if (EC) {\n      Diags.Report(diag::warn_fe_cc_log_diagnostics_failure) << DiagOpts->DiagnosticLogFile << EC.message();"}}
},
},
["warn_fe_cc_print_header_failure"]={
["warn_fe_cc_print_header_failure"]={
Line 5,779: Line 5,779:
[c]=u,
[c]=u,
[b]={"9aa47fcb55a5",1296704700,"Frontend: Switch -header-include-file output to use unbuffered raw_ostreams with"},
[b]={"9aa47fcb55a5",1296704700,"Frontend: Switch -header-include-file output to use unbuffered raw_ostreams with"},
[k]={{"clang/lib/Frontend/HeaderIncludeGen.cpp",141,"void clang::AttachHeaderIncludeGen(Preprocessor &PP, const DependencyOutputOptions &DepOpts, bool ShowAllHeaders, StringRef OutputPath, bool ShowDepth, bool MSStyle) {\n  // Open the output file, if used.\n  if (!OutputPath.empty()) {\n    if (EC) {\n      PP.getDiagnostics().Report(clang::diag::warn_fe_cc_print_header_failure) << EC.message();"}}
[k]={{"clang/lib/Frontend/HeaderIncludeGen.cpp",167,"void clang::AttachHeaderIncludeGen(Preprocessor &PP, const DependencyOutputOptions &DepOpts, bool ShowAllHeaders, StringRef OutputPath, bool ShowDepth, bool MSStyle) {\n  // Open the output file, if used.\n  if (!OutputPath.empty()) {\n    if (EC) {\n      PP.getDiagnostics().Report(clang::diag::warn_fe_cc_print_header_failure) << EC.message();"}}
},
},
["warn_fe_frame_larger_than"]={
["warn_fe_frame_larger_than"]={
Line 5,793: Line 5,793:
[c]=Yc,
[c]=Yc,
[b]={"fb8d02b17973",1402006259,"Implement -Wframe-larger-than backend diagnostic"},
[b]={"fb8d02b17973",1402006259,"Implement -Wframe-larger-than backend diagnostic"},
[k]={{"clang/lib/CodeGen/CodeGenAction.cpp",522,"bool BackendConsumer::StackSizeDiagHandler(const llvm::DiagnosticInfoStackSize &D) {\n  Diags.Report(*Loc, diag::warn_fe_frame_larger_than) << D.getStackSize() << D.getStackLimit() << llvm::demangle(D.getFunction().getName());"}}
[k]={{"clang/lib/CodeGen/CodeGenAction.cpp",638,"bool BackendConsumer::StackSizeDiagHandler(const llvm::DiagnosticInfoStackSize &D) {\n  Diags.Report(*Loc, diag::warn_fe_frame_larger_than) << D.getStackSize() << D.getStackLimit() << llvm::demangle(D.getFunction().getName());"}}
},
},
["warn_fe_inline_asm"]={
["warn_fe_inline_asm"]={
Line 5,831: Line 5,831:
[c]=u,
[c]=u,
[b]={"6dac935b1f58",1259831652,"Fix two more diagnostic-on-stderr instances that thought they could hide from me -- they thought wro..."},
[b]={"6dac935b1f58",1259831652,"Fix two more diagnostic-on-stderr instances that thought they could hide from me -- they thought wro..."},
[k]={{"clang/lib/Frontend/InitPreprocessor.cpp",49,"// Append a #define line to Buf for Macro.  Macro should be of the form XXX,\n// in which case we emit \"#define XXX 1\" or \"XXX=Y z W\" in which case we emit\n// \"#define XXX Y z W\".  To get a #define with no value, use \"XXX=\".\nstatic void DefineBuiltinMacro(MacroBuilder &Builder, StringRef Macro, DiagnosticsEngine &Diags) {\n  if (MacroName.size() != Macro.size()) {\n    if (End != StringRef::npos)\n      Diags.Report(diag::warn_fe_macro_contains_embedded_newline) << MacroName;"}}
[k]={{"clang/lib/Frontend/InitPreprocessor.cpp",51,"// Append a #define line to Buf for Macro.  Macro should be of the form XXX,\n// in which case we emit \"#define XXX 1\" or \"XXX=Y z W\" in which case we emit\n// \"#define XXX Y z W\".  To get a #define with no value, use \"XXX=\".\nstatic void DefineBuiltinMacro(MacroBuilder &Builder, StringRef Macro, DiagnosticsEngine &Diags) {\n  if (MacroName.size() != Macro.size()) {\n    if (End != StringRef::npos)\n      Diags.Report(diag::warn_fe_macro_contains_embedded_newline) << MacroName;"}}
},
},
["warn_fe_override_module"]={
["warn_fe_override_module"]={
Line 5,845: Line 5,845:
[c]=u,
[c]=u,
[b]={"6cf2df29e702",1422512759,"Make a codegen warning a real warning instead of a getCustomDiagID()."},
[b]={"6cf2df29e702",1422512759,"Make a codegen warning a real warning instead of a getCustomDiagID()."},
[k]={{"clang/lib/CodeGen/CodeGenAction.cpp",1047,"void CodeGenAction::ExecuteAction() {\n  if (TheModule->getTargetTriple() != TargetOpts.Triple) {\n    Diagnostics.Report(SourceLocation(), diag::warn_fe_override_module) << TargetOpts.Triple;"}}
[k]={{"clang/lib/CodeGen/CodeGenAction.cpp",1234,"void CodeGenAction::ExecuteAction() {\n  if (TheModule->getTargetTriple() != TargetOpts.Triple) {\n    Diagnostics.Report(SourceLocation(), diag::warn_fe_override_module) << TargetOpts.Triple;"}}
},
},
["warn_fe_serialized_diag_failure"]={
["warn_fe_serialized_diag_failure"]={
Line 5,859: Line 5,859:
[c]=u,
[c]=u,
[b]={"4610ea2bcf1d",1319847159,"Start work on SerializedDiagnosticPrinter, a new DiagnosticConsumer that serializes out the diagnost..."},
[b]={"4610ea2bcf1d",1319847159,"Start work on SerializedDiagnosticPrinter, a new DiagnosticConsumer that serializes out the diagnost..."},
[k]={{sd,701,"void SDiagsWriter::finish() {\n  if (EC) {\n    getMetaDiags()->Report(diag::warn_fe_serialized_diag_failure) << State->OutputFile << EC.message();"},{sd,712,"void SDiagsWriter::finish() {\n  if (OS->has_error()) {\n    getMetaDiags()->Report(diag::warn_fe_serialized_diag_failure) << State->OutputFile << OS->error().message();"}}
[k]={{sd,802,"void SDiagsWriter::finish() {\n  if (EC) {\n    getMetaDiags()->Report(diag::warn_fe_serialized_diag_failure) << State->OutputFile << EC.message();"},{sd,814,"void SDiagsWriter::finish() {\n  if (OS->has_error()) {\n    getMetaDiags()->Report(diag::warn_fe_serialized_diag_failure) << State->OutputFile << OS->error().message();"}}
},
},
["warn_fe_serialized_diag_failure_during_finalisation"]={
["warn_fe_serialized_diag_failure_during_finalisation"]={
Line 5,873: Line 5,873:
[c]=u,
[c]=u,
[b]={"00c9a504aeed",1594351623,"CrashTracer: clang at clang: llvm::BitstreamWriter::ExitBlock"},
[b]={"00c9a504aeed",1594351623,"CrashTracer: clang at clang: llvm::BitstreamWriter::ExitBlock"},
[k]={{sd,508,"void SDiagsWriter::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) {\n  if (IsFinishing) {\n    getMetaDiags()->Report(diag::warn_fe_serialized_diag_failure_during_finalisation) << diagnostic;"}}
[k]={{sd,578,"void SDiagsWriter::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) {\n  if (IsFinishing) {\n    getMetaDiags()->Report(diag::warn_fe_serialized_diag_failure_during_finalisation) << diagnostic;"}}
},
},
["warn_fe_serialized_diag_merge_failure"]={
["warn_fe_serialized_diag_merge_failure"]={
Line 5,887: Line 5,887:
[c]=u,
[c]=u,
[b]={"5a6a2fcdeef3",1414102811,"Driver: Include driver diagnostics when we --serialize-diagnostics"},
[b]={"5a6a2fcdeef3",1414102811,"Driver: Include driver diagnostics when we --serialize-diagnostics"},
[k]={{sd,669,"void SDiagsWriter::RemoveOldDiagnostics() {\n  getMetaDiags()->Report(diag::warn_fe_serialized_diag_merge_failure);"},{sd,695,"void SDiagsWriter::finish() {\n  if (MergeChildRecords) {\n    if (llvm::sys::fs::exists(State->OutputFile))\n      if (SDiagsMerger(*this).mergeRecordsFromFile(State->OutputFile.c_str()))\n        getMetaDiags()->Report(diag::warn_fe_serialized_diag_merge_failure);"}}
[k]={{sd,769,"void SDiagsWriter::RemoveOldDiagnostics() {\n  getMetaDiags()->Report(diag::warn_fe_serialized_diag_merge_failure);"},{sd,795,"void SDiagsWriter::finish() {\n  if (MergeChildRecords) {\n    if (llvm::sys::fs::exists(State->OutputFile))\n      if (SDiagsMerger(*this).mergeRecordsFromFile(State->OutputFile.c_str()))\n        getMetaDiags()->Report(diag::warn_fe_serialized_diag_merge_failure);"}}
},
},
["warn_fe_source_mgr"]={
["warn_fe_source_mgr"]={
Line 5,914: Line 5,914:
[c]=u,
[c]=u,
[b]={"abb6eea19ce3",1474916014,"CC1: Add -save-stats option"},
[b]={"abb6eea19ce3",1474916014,"CC1: Add -save-stats option"},
[k]={{Lc,898,"bool CompilerInstance::ExecuteAction(FrontendAction &Act) {\n  if (!StatsFile.empty()) {\n    if (EC) {\n      getDiagnostics().Report(diag::warn_fe_unable_to_open_stats_file) << StatsFile << EC.message();"}}
[k]={{Lc,1102,"bool CompilerInstance::ExecuteAction(FrontendAction &Act) {\n  if (!StatsFile.empty()) {\n    if (EC) {\n      getDiagnostics().Report(diag::warn_fe_unable_to_open_stats_file) << StatsFile << EC.message();"}}
},
},
["warn_field_is_uninit"]={
["warn_field_is_uninit"]={
Line 5,928: Line 5,928:
[c]=q,
[c]=q,
[b]={"e22a04aba9bc",1257375760,"Diagnose using a field to initialize itself.  Patch by Brandon Pearcy!"},
[b]={"e22a04aba9bc",1257375760,"Diagnose using a field to initialize itself.  Patch by Brandon Pearcy!"},
[k]={{F,3288,"class UninitializedFieldVisitor : public EvaluatedExprVisitor<UninitializedFieldVisitor> {\n  void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, bool AddressOf) {\n    unsigned diag = IsReference ? diag::warn_reference_field_is_uninit : diag::warn_field_is_uninit;"},{F,3482,"// Diagnose value-uses of fields to initialize themselves, e.g.\n//  foo(foo)\n// where foo is not also a parameter to the constructor.\n// Also diagnose across field uninitialized use such as\n//  x(y), y(x)\n// TODO: implement -Wuninitialized and fold this into that framework.\nstatic void DiagnoseUninitializedFields(Sema &SemaRef, const CXXConstructorDecl *Constructor) {\n  if (SemaRef.getDiagnostics().isIgnored(diag::warn_field_is_uninit, Constructor->getLocation())) {"}}
[k]={{F,3860,"class UninitializedFieldVisitor : public EvaluatedExprVisitor<UninitializedFieldVisitor> {\n  void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, bool AddressOf) {\n    unsigned diag = IsReference ? diag::warn_reference_field_is_uninit : diag::warn_field_is_uninit;"},{F,4061,"// Diagnose value-uses of fields to initialize themselves, e.g.\n//  foo(foo)\n// where foo is not also a parameter to the constructor.\n// Also diagnose across field uninitialized use such as\n//  x(y), y(x)\n// TODO: implement -Wuninitialized and fold this into that framework.\nstatic void DiagnoseUninitializedFields(Sema &SemaRef, const CXXConstructorDecl *Constructor) {\n  if (SemaRef.getDiagnostics().isIgnored(diag::warn_field_is_uninit, Constructor->getLocation())) {"}}
},
},
["warn_final_dtor_non_final_class"]={
["warn_final_dtor_non_final_class"]={
Line 5,942: Line 5,942:
[c]=q,
[c]=q,
[b]={"94f3f3e7f46a",1567276544,"[NFC] Fix for rL370594"},
[b]={"94f3f3e7f46a",1567276544,"[NFC] Fix for rL370594"},
[k]={{F,5966,"/// 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  // Warn if the class has a final destructor but is not itself marked final.\n  if (!Record->hasAttr<FinalAttr>()) {\n    if (const CXXDestructorDecl *dtor = Record->getDestructor()) {\n      if (const FinalAttr *FA = dtor->getAttr<FinalAttr>()) {\n        Diag(FA->getLocation(), diag::warn_final_dtor_non_final_class) << FA->isSpelledAsSealed() << FixItHint::CreateInsertion(getLocForEndOfToken(Record->getLocation()), (FA->isSpelledAsSealed() ? \" sealed\" : \" final\"));"}}
[k]={{F,6984,"/// 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  // Warn if the class has a final destructor but is not itself marked final.\n  if (!Record->hasAttr<FinalAttr>()) {\n    if (const CXXDestructorDecl *dtor = Record->getDestructor()) {\n      if (const FinalAttr *FA = dtor->getAttr<FinalAttr>()) {\n        Diag(FA->getLocation(), diag::warn_final_dtor_non_final_class) << FA->isSpelledAsSealed() << FixItHint::CreateInsertion(getLocForEndOfToken(Record->getLocation()), (FA->isSpelledAsSealed() ? \" sealed\" : \" final\"));"}}
},
},
["warn_fixedpoint_constant_overflow"]={
["warn_fixedpoint_constant_overflow"]={
Line 5,956: Line 5,956:
[c]=u,
[c]=u,
[b]={"474177c05381",1579695612,"[AST] Improve overflow diagnostics for fixed-point constant evaluation."},
[b]={"474177c05381",1579695612,"[AST] Improve overflow diagnostics for fixed-point constant evaluation."},
[k]={{Pc,12426,"bool FixedPointExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_FixedPointCast: {\n    if (Overflowed) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << Result.toString() << E->getType();"},{Pc,12442,"bool FixedPointExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_IntegralToFixedPoint: {\n    if (Overflowed) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << IntResult.toString() << E->getType();"},{Pc,12459,"bool FixedPointExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_FloatingToFixedPoint: {\n    if (Overflowed) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << Result.toString() << E->getType();"},{Pc,12538,"bool FixedPointExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  if (OpOverflow || ConversionOverflow) {\n    if (Info.checkingForUndefinedBehavior())\n      Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << Result.toString() << E->getType();"}}
[k]={{Pc,13934,"bool FixedPointExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_FixedPointCast: {\n    if (Overflowed) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << Result.toString() << E->getType();"},{Pc,13953,"bool FixedPointExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_IntegralToFixedPoint: {\n    if (Overflowed) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << IntResult.toString() << E->getType();"},{Pc,13973,"bool FixedPointExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_FloatingToFixedPoint: {\n    if (Overflowed) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << Result.toString() << E->getType();"},{Pc,14061,"bool FixedPointExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  if (OpOverflow || ConversionOverflow) {\n    if (Info.checkingForUndefinedBehavior())\n      Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << Result.toString() << E->getType();"}}
},
},
["warn_fixit_no_changes"]={
["warn_fixit_no_changes"]={
Line 5,968: Line 5,968:
[c]=u,
[c]=u,
[b]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the"},
[b]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the"},
[k]={{"clang/lib/Frontend/Rewrite/FixItRewriter.cpp",71,"bool FixItRewriter::WriteFixedFiles(std::vector<std::pair<std::string, std::string>> *RewrittenFiles) {\n  if (NumFailures > 0 && !FixItOpts->FixWhatYouCan) {\n    Diag(FullSourceLoc(), diag::warn_fixit_no_changes);"}}
[k]={{"clang/lib/Frontend/Rewrite/FixItRewriter.cpp",82,"bool FixItRewriter::WriteFixedFiles(std::vector<std::pair<std::string, std::string>> *RewrittenFiles) {\n  if (NumFailures > 0 && !FixItOpts->FixWhatYouCan) {\n    Diag(FullSourceLoc(), diag::warn_fixit_no_changes);"}}
},
},
["warn_flag_enum_constant_out_of_range"]={
["warn_flag_enum_constant_out_of_range"]={
Line 5,982: Line 5,982:
[c]=q,
[c]=q,
[b]={"724f14e75c50",1417136000,"Create a new \'flag_enum\' attribute."},
[b]={"724f14e75c50",1417136000,"Create a new \'flag_enum\' attribute."},
[k]={{G,17460,"void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange, Decl *EnumDeclX, ArrayRef<Decl *> Elements, Scope *S, const ParsedAttributesView &Attrs) {\n  if (Enum->isClosedFlag()) {\n    for (Decl *D : Elements) {\n      if (InitVal != 0 && !InitVal.isPowerOf2() && !IsValueInFlagEnum(Enum, InitVal, true))\n        Diag(ECD->getLocation(), diag::warn_flag_enum_constant_out_of_range) << ECD << Enum;"}}
[k]={{G,19931,"void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange, Decl *EnumDeclX, ArrayRef<Decl *> Elements, Scope *S, const ParsedAttributesView &Attrs) {\n  if (Enum->isClosedFlag()) {\n    for (Decl *D : Elements) {\n      if (InitVal != 0 && !InitVal.isPowerOf2() && !IsValueInFlagEnum(Enum, InitVal, true))\n        Diag(ECD->getLocation(), diag::warn_flag_enum_constant_out_of_range) << ECD << Enum;"}}
},
},
["warn_float_compare_literal"]={
["warn_float_compare_literal"]={
Line 5,996: Line 5,996:
[c]=q,
[c]=q,
[b]={Rc,1620118562,Qc},
[b]={Rc,1620118562,Qc},
[k]={{w,11624,"/// Check for comparisons of floating-point values using == and !=. Issue a\n/// warning if the comparison is not likely to do what the programmer intended.\nvoid Sema::CheckFloatComparison(SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opcode) {\n  if (getCastAndLiteral(LHS, RHS) || getCastAndLiteral(RHS, LHS)) {\n    if (SourceTy && TargetTy && SourceTy->isFloatingPoint() && TargetTy->isFloatingPoint()) {\n      if (Lossy) {\n        Diag(Loc, diag::warn_float_compare_literal) << (Opcode == BO_EQ) << QualType(SourceTy, 0) << LHS->getSourceRange() << RHS->getSourceRange();"}}
[k]={{w,13002,"/// Check for comparisons of floating-point values using == and !=. Issue a\n/// warning if the comparison is not likely to do what the programmer intended.\nvoid Sema::CheckFloatComparison(SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opcode) {\n  if (getCastAndLiteral(LHS, RHS) || getCastAndLiteral(RHS, LHS)) {\n    if (SourceTy && TargetTy && SourceTy->isFloatingPoint() && TargetTy->isFloatingPoint()) {\n      if (Lossy) {\n        Diag(Loc, diag::warn_float_compare_literal) << (Opcode == BO_EQ) << QualType(SourceTy, 0) << LHS->getSourceRange() << RHS->getSourceRange();"}}
},
},
["warn_float_overflow"]={
["warn_float_overflow"]={
Line 6,010: Line 6,010:
[c]=q,
[c]=q,
[b]={"62abc944d673",1267227357,"At sabre\'s request, drop the FP bounds diagnostics down to warnings and file"},
[b]={"62abc944d673",1267227357,"At sabre\'s request, drop the FP bounds diagnostics down to warnings and file"},
[k]={{M,3308,"static Expr *BuildFloatingLiteral(Sema &S, NumericLiteralParser &Literal, QualType Ty, SourceLocation Loc) {\n  // Overflow is always an error, but underflow is only an error if\n  // we underflowed to zero (APFloat reports denormals as underflow).\n  if ((result & APFloat::opOverflow) || ((result & APFloat::opUnderflow) && Val.isZero())) {\n    if (result & APFloat::opOverflow) {\n      diagnostic = diag::warn_float_overflow;"}}
[k]={{M,3802,"static Expr *BuildFloatingLiteral(Sema &S, NumericLiteralParser &Literal, QualType Ty, SourceLocation Loc) {\n  // Overflow is always an error, but underflow is only an error if\n  // we underflowed to zero (APFloat reports denormals as underflow).\n  if ((result & APFloat::opOverflow) || ((result & APFloat::opUnderflow) && Val.isZero())) {\n    if (result & APFloat::opOverflow) {\n      diagnostic = diag::warn_float_overflow;"}}
},
},
["warn_float_underflow"]={
["warn_float_underflow"]={
Line 6,024: Line 6,024:
[c]=q,
[c]=q,
[b]={"62abc944d673",1267227357,"At sabre\'s request, drop the FP bounds diagnostics down to warnings and file"},
[b]={"62abc944d673",1267227357,"At sabre\'s request, drop the FP bounds diagnostics down to warnings and file"},
[k]={{M,3311,"static Expr *BuildFloatingLiteral(Sema &S, NumericLiteralParser &Literal, QualType Ty, SourceLocation Loc) {\n  // Overflow is always an error, but underflow is only an error if\n  // we underflowed to zero (APFloat reports denormals as underflow).\n  if ((result & APFloat::opOverflow) || ((result & APFloat::opUnderflow) && Val.isZero())) {\n    if (result & APFloat::opOverflow) {\n    } else {\n      diagnostic = diag::warn_float_underflow;"}}
[k]={{M,3805,"static Expr *BuildFloatingLiteral(Sema &S, NumericLiteralParser &Literal, QualType Ty, SourceLocation Loc) {\n  // Overflow is always an error, but underflow is only an error if\n  // we underflowed to zero (APFloat reports denormals as underflow).\n  if ((result & APFloat::opOverflow) || ((result & APFloat::opUnderflow) && Val.isZero())) {\n    if (result & APFloat::opOverflow) {\n    } else {\n      diagnostic = diag::warn_float_underflow;"}}
},
},
["warn_floatingpoint_eq"]={
["warn_floatingpoint_eq"]={
Line 6,039: Line 6,039:
[c]=q,
[c]=q,
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{w,11663,"/// Check for comparisons of floating-point values using == and !=. Issue a\n/// warning if the comparison is not likely to do what the programmer intended.\nvoid Sema::CheckFloatComparison(SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opcode) {\n  Diag(Loc, diag::warn_floatingpoint_eq) << LHS->getSourceRange() << RHS->getSourceRange();"}}
[k]={{w,13044,"/// Check for comparisons of floating-point values using == and !=. Issue a\n/// warning if the comparison is not likely to do what the programmer intended.\nvoid Sema::CheckFloatComparison(SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opcode) {\n  Diag(Loc, diag::warn_floatingpoint_eq) << LHS->getSourceRange() << RHS->getSourceRange();"}}
},
},
["warn_for_range_begin_end_types_differ"]={
["warn_for_range_begin_end_types_differ"]={
Line 6,054: Line 6,054:
[c]=q,
[c]=q,
[b]={"01694c340db8",1458470020,"P0184R0: Allow types of \'begin\' and \'end\' expressions in range-based for loops to differ."},
[b]={"01694c340db8",1458470020,"P0184R0: Allow types of \'begin\' and \'end\' expressions in range-based for loops to differ."},
[k]={{xb,2548,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  if (RangeVarType->isDependentType()) {\n  } else if (!BeginDeclStmt.get()) {\n    if (!Context.hasSameType(BeginType, EndType)) {\n      Diag(RangeLoc, getLangOpts().CPlusPlus17 ? diag::warn_for_range_begin_end_types_differ : diag::ext_for_range_begin_end_types_differ) << BeginType << EndType;"}}
[k]={{xb,2968,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  if (RangeVarType->isDependentType()) {\n  } else if (!BeginDeclStmt.get()) {\n    if (!Context.hasSameType(BeginType, EndType)) {\n      Diag(RangeLoc, getLangOpts().CPlusPlus17 ? diag::warn_for_range_begin_end_types_differ : diag::ext_for_range_begin_end_types_differ) << BeginType << EndType;"}}
},
},
["warn_for_range_const_ref_binds_temp_built_from_ref"]={
["warn_for_range_const_ref_binds_temp_built_from_ref"]={
Line 6,069: Line 6,069:
[c]=q,
[c]=q,
[b]={Ic,1576908663,Bc},
[b]={Ic,1576908663,Bc},
[k]={{xb,2699,"// 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->getLocation(), diag::warn_for_range_const_ref_binds_temp_built_from_ref) << VD << VariableType << ReferenceReturnType;"},{xb,2770,"/// DiagnoseForRangeVariableCopies - Diagnose three cases and fixes for them.\n/// 1) for (const foo &x : foos) where foos only returns a copy.  Suggest\n///    using \"const foo x\" to show that a copy is made\n/// 2) for (const bar &x : foos) where bar is a temporary initialized by bar.\n///    Suggest either \"const bar x\" to keep the copying or \"const foo& x\" to\n///    prevent the copy.\n/// 3) for (const foo x : foos) where x is constructed from a reference foo.\n///    Suggest \"const foo &x\" to prevent the copy.\nstatic void DiagnoseForRangeVariableCopies(Sema &SemaRef, const CXXForRangeStmt *ForStmt) {\n  if (SemaRef.Diags.isIgnored(diag::warn_for_range_const_ref_binds_temp_built_from_ref, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_ref_binds_ret_temp, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_copy, ForStmt->getBeginLoc())) {"}}
[k]={{xb,3141,"// 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->getLocation(), diag::warn_for_range_const_ref_binds_temp_built_from_ref) << VD << VariableType << ReferenceReturnType;"},{xb,3228,"/// DiagnoseForRangeVariableCopies - Diagnose three cases and fixes for them.\n/// 1) for (const foo &x : foos) where foos only returns a copy.  Suggest\n///    using \"const foo x\" to show that a copy is made\n/// 2) for (const bar &x : foos) where bar is a temporary initialized by bar.\n///    Suggest either \"const bar x\" to keep the copying or \"const foo& x\" to\n///    prevent the copy.\n/// 3) for (const foo x : foos) where x is constructed from a reference foo.\n///    Suggest \"const foo &x\" to prevent the copy.\nstatic void DiagnoseForRangeVariableCopies(Sema &SemaRef, const CXXForRangeStmt *ForStmt) {\n  if (SemaRef.Diags.isIgnored(diag::warn_for_range_const_ref_binds_temp_built_from_ref, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_ref_binds_ret_temp, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_copy, ForStmt->getBeginLoc())) {"}}
},
},
["warn_for_range_copy"]={
["warn_for_range_copy"]={
Line 6,084: Line 6,084:
[c]=q,
[c]=q,
[b]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops."},
[b]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops."},
[k]={{xb,2754,"// 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->getLocation(), diag::warn_for_range_copy) << VD << VariableType;"},{xb,2770,"/// DiagnoseForRangeVariableCopies - Diagnose three cases and fixes for them.\n/// 1) for (const foo &x : foos) where foos only returns a copy.  Suggest\n///    using \"const foo x\" to show that a copy is made\n/// 2) for (const bar &x : foos) where bar is a temporary initialized by bar.\n///    Suggest either \"const bar x\" to keep the copying or \"const foo& x\" to\n///    prevent the copy.\n/// 3) for (const foo x : foos) where x is constructed from a reference foo.\n///    Suggest \"const foo &x\" to prevent the copy.\nstatic void DiagnoseForRangeVariableCopies(Sema &SemaRef, const CXXForRangeStmt *ForStmt) {\n  if (SemaRef.Diags.isIgnored(diag::warn_for_range_const_ref_binds_temp_built_from_ref, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_ref_binds_ret_temp, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_copy, ForStmt->getBeginLoc())) {"}}
[k]={{xb,3206,"// 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->getLocation(), diag::warn_for_range_copy) << VD << VariableType;"},{xb,3232,"/// DiagnoseForRangeVariableCopies - Diagnose three cases and fixes for them.\n/// 1) for (const foo &x : foos) where foos only returns a copy.  Suggest\n///    using \"const foo x\" to show that a copy is made\n/// 2) for (const bar &x : foos) where bar is a temporary initialized by bar.\n///    Suggest either \"const bar x\" to keep the copying or \"const foo& x\" to\n///    prevent the copy.\n/// 3) for (const foo x : foos) where x is constructed from a reference foo.\n///    Suggest \"const foo &x\" to prevent the copy.\nstatic void DiagnoseForRangeVariableCopies(Sema &SemaRef, const CXXForRangeStmt *ForStmt) {\n  if (SemaRef.Diags.isIgnored(diag::warn_for_range_const_ref_binds_temp_built_from_ref, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_ref_binds_ret_temp, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_copy, ForStmt->getBeginLoc())) {"}}
},
},
["warn_for_range_ref_binds_ret_temp"]={
["warn_for_range_ref_binds_ret_temp"]={
Line 6,099: Line 6,099:
[c]=q,
[c]=q,
[b]={Ic,1576908663,Bc},
[b]={Ic,1576908663,Bc},
[k]={{xb,2709,"// 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->getLocation(), diag::warn_for_range_ref_binds_ret_temp) << VD << RangeInitType;"},{xb,2770,"/// DiagnoseForRangeVariableCopies - Diagnose three cases and fixes for them.\n/// 1) for (const foo &x : foos) where foos only returns a copy.  Suggest\n///    using \"const foo x\" to show that a copy is made\n/// 2) for (const bar &x : foos) where bar is a temporary initialized by bar.\n///    Suggest either \"const bar x\" to keep the copying or \"const foo& x\" to\n///    prevent the copy.\n/// 3) for (const foo x : foos) where x is constructed from a reference foo.\n///    Suggest \"const foo &x\" to prevent the copy.\nstatic void DiagnoseForRangeVariableCopies(Sema &SemaRef, const CXXForRangeStmt *ForStmt) {\n  if (SemaRef.Diags.isIgnored(diag::warn_for_range_const_ref_binds_temp_built_from_ref, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_ref_binds_ret_temp, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_copy, ForStmt->getBeginLoc())) {"}}
[k]={{xb,3155,"// 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->getLocation(), diag::warn_for_range_ref_binds_ret_temp) << VD << RangeInitType;"},{xb,3230,"/// DiagnoseForRangeVariableCopies - Diagnose three cases and fixes for them.\n/// 1) for (const foo &x : foos) where foos only returns a copy.  Suggest\n///    using \"const foo x\" to show that a copy is made\n/// 2) for (const bar &x : foos) where bar is a temporary initialized by bar.\n///    Suggest either \"const bar x\" to keep the copying or \"const foo& x\" to\n///    prevent the copy.\n/// 3) for (const foo x : foos) where x is constructed from a reference foo.\n///    Suggest \"const foo &x\" to prevent the copy.\nstatic void DiagnoseForRangeVariableCopies(Sema &SemaRef, const CXXForRangeStmt *ForStmt) {\n  if (SemaRef.Diags.isIgnored(diag::warn_for_range_const_ref_binds_temp_built_from_ref, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_ref_binds_ret_temp, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_copy, ForStmt->getBeginLoc())) {"}}
},
},
["warn_format_P_no_precision"]={
["warn_format_P_no_precision"]={
Line 6,113: Line 6,113:
[c]=Qb,
[c]=Qb,
[b]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]"},
[b]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]"},
[k]={{w,9843,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // Precision is mandatory for %P specifier.\n  if (CS.getKind() == ConversionSpecifier::PArg && FS.getPrecision().getHowSpecified() == OptionalAmount::NotSpecified) {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_P_no_precision), getLocationOfByte(startSpecifier),"}}
[k]={{w,10897,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // Precision is mandatory for %P specifier.\n  if (CS.getKind() == ConversionSpecifier::PArg && FS.getPrecision().getHowSpecified() == OptionalAmount::NotSpecified) {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_P_no_precision), getLocationOfByte(startSpecifier),"}}
},
},
["warn_format_argument_needs_cast"]={
["warn_format_argument_needs_cast"]={
Line 6,127: Line 6,127:
[c]=Qb,
[c]=Qb,
[b]={"aee343819532",1346885786,"Format strings: suggest casts for NS(U)Integer and [SU]Int32 on Darwin."},
[b]={"aee343819532",1346885786,"Format strings: suggest casts for NS(U)Integer and [SU]Int32 on Darwin."},
[k]={{w,10219,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n    } else {\n      if (ShouldNotPrintDirectly && !IsScopedEnum) {\n        unsigned Diag = Match == ArgType::NoMatchPedantic ? diag::warn_format_argument_needs_cast_pedantic : diag::warn_format_argument_needs_cast;"}}
[k]={{w,11330,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n    } else {\n      if (ShouldNotPrintDirectly && !IsScopedEnum) {\n        unsigned Diag = Match == ArgType::NoMatchPedantic ? diag::warn_format_argument_needs_cast_pedantic : diag::warn_format_argument_needs_cast;"}}
},
},
["warn_format_argument_needs_cast_pedantic"]={
["warn_format_argument_needs_cast_pedantic"]={
Line 6,142: Line 6,142:
[c]=q,
[c]=q,
[b]={"ec7d7f312e5c",1529704480,"[Sema] -Wformat-pedantic only for NSInteger/NSUInteger %zu/%zi on Darwin"},
[b]={"ec7d7f312e5c",1529704480,"[Sema] -Wformat-pedantic only for NSInteger/NSUInteger %zu/%zi on Darwin"},
[k]={{w,10219,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n    } else {\n      if (ShouldNotPrintDirectly && !IsScopedEnum) {\n        unsigned Diag = Match == ArgType::NoMatchPedantic ? diag::warn_format_argument_needs_cast_pedantic : diag::warn_format_argument_needs_cast;"}}
[k]={{w,11329,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n    } else {\n      if (ShouldNotPrintDirectly && !IsScopedEnum) {\n        unsigned Diag = Match == ArgType::NoMatchPedantic ? diag::warn_format_argument_needs_cast_pedantic : diag::warn_format_argument_needs_cast;"}}
},
},
["warn_format_bool_as_character"]={
["warn_format_bool_as_character"]={
Line 6,156: Line 6,156:
[c]=Qb,
[c]=Qb,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{w,10016,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // Diagnose attempts to print a boolean value as a character. Unlike other\n  // -Wformat diagnostics, this is fine from a type perspective, but it still\n  // doesn\'t make sense.\n  if (FS.getConversionSpecifier().getKind() == ConversionSpecifier::cArg && E->isKnownToHaveBooleanValue()) {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_bool_as_character) << FSString, E->getExprLoc(), false, CSR);"}}
[k]={{w,11104,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // Diagnose attempts to print a boolean value as a character. Unlike other\n  // -Wformat diagnostics, this is fine from a type perspective, but it still\n  // doesn\'t make sense.\n  if (FS.getConversionSpecifier().getKind() == ConversionSpecifier::cArg && E->isKnownToHaveBooleanValue()) {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_bool_as_character) << FSString, E->getExprLoc(), false, CSR);"}}
},
},
["warn_format_conversion_argument_type_mismatch"]={
["warn_format_conversion_argument_type_mismatch"]={
Line 6,170: Line 6,170:
[c]=Qb,
[c]=Qb,
[b]={"bc53ed1ee624",1401509534,"Format strings: check against an enum\'s underlying type."},
[b]={"bc53ed1ee624",1401509534,"Format strings: check against an enum\'s underlying type."},
[k]={{w,9778,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // FreeBSD kernel extensions.\n  if (CS.getKind() == ConversionSpecifier::FreeBSDbArg || CS.getKind() == ConversionSpecifier::FreeBSDDArg) {\n    if (AT.isValid() && !AT.matchesType(S.Context, Ex->getType()))\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT.getRepresentativeTypeName(S.Context) << Ex->getType() << false << Ex->getSourceRange(), Ex->getBeginLoc(), /*IsStringLocation*/ false, getSpecifierRange(startSpecifier, specifierLen));"},{w,9784,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // FreeBSD kernel extensions.\n  if (CS.getKind() == ConversionSpecifier::FreeBSDbArg || CS.getKind() == ConversionSpecifier::FreeBSDDArg) {\n    if (AT2.isValid() && !AT2.matchesType(S.Context, Ex->getType()))\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT2.getRepresentativeTypeName(S.Context) << Ex->getType() << false << Ex->getSourceRange(), Ex->getBeginLoc(), /*IsStringLocation*/ false, getSpecifierRange(startSpecifier, specifierLen));"},{w,10163,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n      case ArgType::NoMatch:\n        Diag = diag::warn_format_conversion_argument_type_mismatch;"},{w,10225,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n    } else {\n      if (ShouldNotPrintDirectly && !IsScopedEnum) {\n      } else {\n        EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT.getRepresentativeTypeName(S.Context) << ExprTy << IsEnum << E->getSourceRange(), E->getBeginLoc(), /*IsStringLocation*/ false, SpecRange, Hints);"},{w,10250,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n  } else {\n    case Sema::VAK_ValidInCXX11: {\n      case ArgType::NoMatch:\n        Diag = diag::warn_format_conversion_argument_type_mismatch;"},{w,10285,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n  } else {\n    if (EmitTypeMismatch) {\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT.getRepresentativeTypeName(S.Context) << ExprTy << false << E->getSourceRange(), E->getBeginLoc(), false, CSR);"},{w,10400,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  unsigned Diag = Pedantic ? diag::warn_format_conversion_argument_type_mismatch_pedantic : diag::warn_format_conversion_argument_type_mismatch;"}}
[k]={{w,10803,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // FreeBSD kernel extensions.\n  if (CS.getKind() == ConversionSpecifier::FreeBSDbArg || CS.getKind() == ConversionSpecifier::FreeBSDDArg) {\n    if (AT.isValid() && !AT.matchesType(S.Context, Ex->getType()))\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT.getRepresentativeTypeName(S.Context) << Ex->getType() << false << Ex->getSourceRange(), Ex->getBeginLoc(), /*IsStringLocation*/ false, getSpecifierRange(startSpecifier, specifierLen));"},{w,10814,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // FreeBSD kernel extensions.\n  if (CS.getKind() == ConversionSpecifier::FreeBSDbArg || CS.getKind() == ConversionSpecifier::FreeBSDDArg) {\n    if (AT2.isValid() && !AT2.matchesType(S.Context, Ex->getType()))\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT2.getRepresentativeTypeName(S.Context) << Ex->getType() << false << Ex->getSourceRange(), Ex->getBeginLoc(), /*IsStringLocation*/ false, getSpecifierRange(startSpecifier, specifierLen));"},{w,11264,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n      case ArgType::NoMatch:\n        Diag = diag::warn_format_conversion_argument_type_mismatch;"},{w,11340,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n    } else {\n      if (ShouldNotPrintDirectly && !IsScopedEnum) {\n      } else {\n        EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT.getRepresentativeTypeName(S.Context) << ExprTy << IsEnum << E->getSourceRange(), E->getBeginLoc(), /*IsStringLocation*/ false, SpecRange, Hints);"},{w,11369,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n  } else {\n    case Sema::VAK_ValidInCXX11: {\n      case ArgType::NoMatch:\n        Diag = diag::warn_format_conversion_argument_type_mismatch;"},{w,11420,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n  } else {\n    if (EmitTypeMismatch) {\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT.getRepresentativeTypeName(S.Context) << ExprTy << false << E->getSourceRange(), E->getBeginLoc(), false, CSR);"},{w,11582,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  unsigned Diag = Pedantic ? diag::warn_format_conversion_argument_type_mismatch_pedantic : diag::warn_format_conversion_argument_type_mismatch;"}}
},
},
["warn_format_conversion_argument_type_mismatch_confusion"]={
["warn_format_conversion_argument_type_mismatch_confusion"]={
Line 6,185: Line 6,185:
[c]=q,
[c]=q,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{w,10160,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n      case ArgType::NoMatchTypeConfusion:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_confusion;"},{w,10247,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n  } else {\n    case Sema::VAK_ValidInCXX11: {\n      case ArgType::NoMatchTypeConfusion:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_confusion;"}}
[k]={{w,11261,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n      case ArgType::NoMatchTypeConfusion:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_confusion;"},{w,11366,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n  } else {\n    case Sema::VAK_ValidInCXX11: {\n      case ArgType::NoMatchTypeConfusion:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_confusion;"}}
},
},
["warn_format_conversion_argument_type_mismatch_pedantic"]={
["warn_format_conversion_argument_type_mismatch_pedantic"]={
Line 6,200: Line 6,200:
[c]=q,
[c]=q,
[b]={"b480296e6cb4",1425438730,"Add a format warning for \"%p\" with non-void* args"},
[b]={"b480296e6cb4",1425438730,"Add a format warning for \"%p\" with non-void* args"},
[k]={{w,10157,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n      case ArgType::NoMatchPedantic:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_pedantic;"},{w,10244,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n  } else {\n    case Sema::VAK_ValidInCXX11: {\n      case ArgType::NoMatchPedantic:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_pedantic;"},{w,10400,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  unsigned Diag = Pedantic ? diag::warn_format_conversion_argument_type_mismatch_pedantic : diag::warn_format_conversion_argument_type_mismatch;"}}
[k]={{w,11258,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n      case ArgType::NoMatchPedantic:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_pedantic;"},{w,11363,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  if (Success) {\n  } else {\n    case Sema::VAK_ValidInCXX11: {\n      case ArgType::NoMatchPedantic:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_pedantic;"},{w,11581,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  unsigned Diag = Pedantic ? diag::warn_format_conversion_argument_type_mismatch_pedantic : diag::warn_format_conversion_argument_type_mismatch;"}}
},
},
["warn_format_invalid_annotation"]={
["warn_format_invalid_annotation"]={
Line 6,214: Line 6,214:
[c]=Qb,
[c]=Qb,
[b]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]"},
[b]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]"},
[k]={{w,9816,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // Check for use of public/private annotation outside of os_log().\n  if (FSType != Sema::FST_OSLog) {\n    if (FS.isPublic().isSet()) {\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_annotation) << \"public\", getLocationOfByte(FS.isPublic().getPosition()),"},{w,9820,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // Check for use of public/private annotation outside of os_log().\n  if (FSType != Sema::FST_OSLog) {\n    if (FS.isPrivate().isSet()) {\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_annotation) << \"private\", getLocationOfByte(FS.isPrivate().getPosition()),"}}
[k]={{w,10858,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // Check for use of public/private annotation outside of os_log().\n  if (FSType != Sema::FST_OSLog) {\n    if (FS.isPublic().isSet()) {\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_annotation) << \"public\", getLocationOfByte(FS.isPublic().getPosition()),"},{w,10865,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // Check for use of public/private annotation outside of os_log().\n  if (FSType != Sema::FST_OSLog) {\n    if (FS.isPrivate().isSet()) {\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_annotation) << \"private\", getLocationOfByte(FS.isPrivate().getPosition()),"}}
},
},
["warn_format_invalid_conversion"]={
["warn_format_invalid_conversion"]={
Line 6,228: Line 6,228:
[c]=Qb,
[c]=Qb,
[b]={"ce81542d6107",1279574757,"Hook up \'invalid conversion\' warning for scanf format strings."},
[b]={"ce81542d6107",1279574757,"Hook up \'invalid conversion\' warning for scanf format strings."},
[k]={{w,9471,"bool CheckFormatHandler::HandleInvalidConversionSpecifier(unsigned argIndex, SourceLocation Loc, const char *startSpec, unsigned specifierLen, const char *csStart, unsigned csLen) {\n  EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_conversion) << Specifier, Loc,"}}
[k]={{w,10347,"bool CheckFormatHandler::HandleInvalidConversionSpecifier(unsigned argIndex, SourceLocation Loc, const char *startSpec, unsigned specifierLen, const char *csStart, unsigned csLen) {\n  EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_conversion) << Specifier, Loc,"}}
},
},
["warn_format_invalid_positional_specifier"]={
["warn_format_invalid_positional_specifier"]={
Line 6,242: Line 6,242:
[c]=Qb,
[c]=Qb,
[b]={Fc,1279246282,Ec},
[b]={Fc,1279246282,Ec},
[k]={{w,9376,"void CheckFormatHandler::HandleInvalidPosition(const char *startSpecifier, unsigned specifierLen, analyze_format_string::PositionContext p) { EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_positional_specifier) << (unsigned)p, getLocationOfByte(startSpecifier), /*IsStringLocation*/ true, getSpecifierRange(startSpecifier, specifierLen)); }"}}
[k]={{w,10226,"void CheckFormatHandler::HandleInvalidPosition(const char *startSpecifier, unsigned specifierLen, analyze_format_string::PositionContext p) { EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_positional_specifier) << (unsigned)p, getLocationOfByte(startSpecifier), /*IsStringLocation*/ true, getSpecifierRange(startSpecifier, specifierLen)); }"}}
},
},
["warn_format_mix_positional_nonpositional_args"]={
["warn_format_mix_positional_nonpositional_args"]={
Line 6,256: Line 6,256:
[c]=Qb,
[c]=Qb,
[b]={Fc,1279246282,Ec},
[b]={Fc,1279246282,Ec},
[k]={{w,9477,"void CheckFormatHandler::HandlePositionalNonpositionalArgs(SourceLocation Loc, const char *startSpec, unsigned specifierLen) { EmitFormatDiagnostic(S.PDiag(diag::warn_format_mix_positional_nonpositional_args), Loc, /*isStringLoc*/ true, getSpecifierRange(startSpec, specifierLen)); }"}}
[k]={{w,10358,"void CheckFormatHandler::HandlePositionalNonpositionalArgs(SourceLocation Loc, const char *startSpec, unsigned specifierLen) { EmitFormatDiagnostic(S.PDiag(diag::warn_format_mix_positional_nonpositional_args), Loc, /*isStringLoc*/ true, getSpecifierRange(startSpec, specifierLen)); }"}}
},
},
["warn_format_non_standard"]={
["warn_format_non_standard"]={
Line 6,271: Line 6,271:
[c]=q,
[c]=q,
[b]={"c9dd94685283",1329905821,"Warn about non-standard format strings (pr12017)"},
[b]={"c9dd94685283",1329905821,"Warn about non-standard format strings (pr12017)"},
[k]={{w,9343,"void CheckFormatHandler::HandleNonStandardLengthModifier(const analyze_format_string::FormatSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  if (FixedLM) {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << LM.toString() << 0, getLocationOfByte(LM.getStart()),"},{w,9349,"void CheckFormatHandler::HandleNonStandardLengthModifier(const analyze_format_string::FormatSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  if (FixedLM) {\n  } else {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << LM.toString() << 0, getLocationOfByte(LM.getStart()),"},{w,9360,"void CheckFormatHandler::HandleNonStandardConversionSpecifier(const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen) {\n  if (FixedCS) {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << CS.toString() << /*conversion specifier*/ 1, getLocationOfByte(CS.getStart()),"},{w,9366,"void CheckFormatHandler::HandleNonStandardConversionSpecifier(const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen) {\n  if (FixedCS) {\n  } else {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << CS.toString() << /*conversion specifier*/ 1, getLocationOfByte(CS.getStart()),"}}
[k]={{w,10168,"void CheckFormatHandler::HandleNonStandardLengthModifier(const analyze_format_string::FormatSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  if (FixedLM) {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << LM.toString() << 0, getLocationOfByte(LM.getStart()),"},{w,10179,"void CheckFormatHandler::HandleNonStandardLengthModifier(const analyze_format_string::FormatSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  if (FixedLM) {\n  } else {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << LM.toString() << 0, getLocationOfByte(LM.getStart()),"},{w,10195,"void CheckFormatHandler::HandleNonStandardConversionSpecifier(const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen) {\n  if (FixedCS) {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << CS.toString() << /*conversion specifier*/ 1, getLocationOfByte(CS.getStart()),"},{w,10206,"void CheckFormatHandler::HandleNonStandardConversionSpecifier(const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen) {\n  if (FixedCS) {\n  } else {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << CS.toString() << /*conversion specifier*/ 1, getLocationOfByte(CS.getStart()),"}}
},
},
["warn_format_non_standard_conversion_spec"]={
["warn_format_non_standard_conversion_spec"]={
Line 6,286: Line 6,286:
[c]=q,
[c]=q,
[b]={"c9dd94685283",1329905821,"Warn about non-standard format strings (pr12017)"},
[b]={"c9dd94685283",1329905821,"Warn about non-standard format strings (pr12017)"},
[k]={{w,9873,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n  else if (!FS.hasStandardLengthModifier())\n  else if (!FS.hasStandardLengthConversionCombination())\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_non_standard_conversion_spec);"},{w,10369,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n  else if (!FS.hasStandardLengthModifier())\n  else if (!FS.hasStandardLengthConversionCombination())\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_non_standard_conversion_spec);"}}
[k]={{w,10934,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n  else if (!FS.hasStandardLengthModifier())\n  else if (!FS.hasStandardLengthConversionCombination())\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_non_standard_conversion_spec);"},{w,11547,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n  else if (!FS.hasStandardLengthModifier())\n  else if (!FS.hasStandardLengthConversionCombination())\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_non_standard_conversion_spec);"}}
},
},
["warn_format_non_standard_positional_arg"]={
["warn_format_non_standard_positional_arg"]={
Line 6,301: Line 6,301:
[c]=q,
[c]=q,
[b]={"aa8c61cf94b7",1331287854,"-Wformat-non-iso: warn about positional arguments (pr12017)"},
[b]={"aa8c61cf94b7",1331287854,"-Wformat-non-iso: warn about positional arguments (pr12017)"},
[k]={{w,9372,"void CheckFormatHandler::HandlePosition(const char *startPos, unsigned posLen) {\n  EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard_positional_arg), getLocationOfByte(startPos),"}}
[k]={{w,10216,"void CheckFormatHandler::HandlePosition(const char *startPos, unsigned posLen) {\n  EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard_positional_arg), getLocationOfByte(startPos),"}}
},
},
["warn_format_nonliteral"]={
["warn_format_nonliteral"]={
Line 6,316: Line 6,316:
[c]=q,
[c]=q,
[b]={Fc,1279246282,Ec},
[b]={Fc,1279246282,Ec},
[k]={{w,9220,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // If there are no arguments specified, warn with -Wformat-security, otherwise\n  // warn only with -Wformat-nonliteral.\n  if (Args.size() == firstDataArg) {\n  } else {\n    Diag(FormatLoc, diag::warn_format_nonliteral) << OrigFormatExpr->getSourceRange();"}}
[k]={{w,9982,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // If there are no arguments specified, warn with -Wformat-security, otherwise\n  // warn only with -Wformat-nonliteral.\n  if (Args.size() == firstDataArg) {\n  } else {\n    Diag(FormatLoc, diag::warn_format_nonliteral) << OrigFormatExpr->getSourceRange();"}}
},
},
["warn_format_nonliteral_noargs"]={
["warn_format_nonliteral_noargs"]={
Line 6,330: Line 6,330:
[c]=Qb,
[c]=Qb,
[b]={Fc,1279246282,Ec},
[b]={Fc,1279246282,Ec},
[k]={{w,9206,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // If there are no arguments specified, warn with -Wformat-security, otherwise\n  // warn only with -Wformat-nonliteral.\n  if (Args.size() == firstDataArg) {\n    Diag(FormatLoc, diag::warn_format_nonliteral_noargs) << OrigFormatExpr->getSourceRange();"}}
[k]={{w,9965,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // If there are no arguments specified, warn with -Wformat-security, otherwise\n  // warn only with -Wformat-nonliteral.\n  if (Args.size() == firstDataArg) {\n    Diag(FormatLoc, diag::warn_format_nonliteral_noargs) << OrigFormatExpr->getSourceRange();"}}
},
},
["warn_format_nonsensical_length"]={
["warn_format_nonsensical_length"]={
Line 6,344: Line 6,344:
[c]=Qb,
[c]=Qb,
[b]={"b65a9d5a1a0b",1279656223,"Rename diagnostic so that it can be reused with scanf checking.  No functionality change."},
[b]={"b65a9d5a1a0b",1279656223,"Rename diagnostic so that it can be reused with scanf checking.  No functionality change."},
[k]={{w,9326,"void CheckFormatHandler::HandleInvalidLengthModifier(const analyze_format_string::FormatSpecifier &FS, const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen, unsigned DiagID) {\n  if (FixedLM) {\n  } else {\n    if (DiagID == diag::warn_format_nonsensical_length)"},{w,9869,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_nonsensical_length);"},{w,10365,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_nonsensical_length);"}}
[k]={{w,10146,"void CheckFormatHandler::HandleInvalidLengthModifier(const analyze_format_string::FormatSpecifier &FS, const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen, unsigned DiagID) {\n  if (FixedLM) {\n  } else {\n    if (DiagID == diag::warn_format_nonsensical_length)"},{w,10929,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_nonsensical_length);"},{w,11542,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_nonsensical_length);"}}
},
},
["warn_format_string_is_wide_literal"]={
["warn_format_string_is_wide_literal"]={
Line 6,358: Line 6,358:
[c]=Qb,
[c]=Qb,
[b]={Fc,1279246282,Ec},
[b]={Fc,1279246282,Ec},
[k]={{w,10421,"static void CheckFormatString(Sema &S, const FormatStringLiteral *FExpr, const Expr *OrigFormatExpr, ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, Sema::FormatStringType Type, bool inFunctionCall, Sema::VariadicCallType CallType, llvm::SmallBitVector &CheckedVarArgs, UncoveredArgHandler &UncoveredArg, bool IgnoreStringsWithoutSpecifiers) {\n  // CHECK: is the format string a wide literal?\n  if (!FExpr->isAscii() && !FExpr->isUTF8()) {\n    CheckFormatHandler::EmitFormatDiagnostic(S, inFunctionCall, Args[format_idx], S.PDiag(diag::warn_format_string_is_wide_literal), FExpr->getBeginLoc(),"}}
[k]={{w,11621,"static void CheckFormatString(Sema &S, const FormatStringLiteral *FExpr, const Expr *OrigFormatExpr, ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, Sema::FormatStringType Type, bool inFunctionCall, Sema::VariadicCallType CallType, llvm::SmallBitVector &CheckedVarArgs, UncoveredArgHandler &UncoveredArg, bool IgnoreStringsWithoutSpecifiers) {\n  // CHECK: is the format string a wide literal?\n  if (!FExpr->isAscii() && !FExpr->isUTF8()) {\n    CheckFormatHandler::EmitFormatDiagnostic(S, inFunctionCall, Args[format_idx], S.PDiag(diag::warn_format_string_is_wide_literal), FExpr->getBeginLoc(),"}}
},
},
["warn_format_zero_positional_specifier"]={
["warn_format_zero_positional_specifier"]={
Line 6,372: Line 6,372:
[c]=Qb,
[c]=Qb,
[b]={Fc,1279246282,Ec},
[b]={Fc,1279246282,Ec},
[k]={{w,9379,"void CheckFormatHandler::HandleZeroPosition(const char *startPos, unsigned posLen) {\n  EmitFormatDiagnostic(S.PDiag(diag::warn_format_zero_positional_specifier), getLocationOfByte(startPos),"}}
[k]={{w,10233,"void CheckFormatHandler::HandleZeroPosition(const char *startPos, unsigned posLen) {\n  EmitFormatDiagnostic(S.PDiag(diag::warn_format_zero_positional_specifier), getLocationOfByte(startPos),"}}
},
},
["warn_fortify_scanf_overflow"]={
["warn_fortify_scanf_overflow"]={
Line 6,386: Line 6,386:
[c]=q,
[c]=q,
[b]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."},
[b]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."},
[k]={{w,1058,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BIsscanf: {\n    auto Diagnose = [&](unsigned ArgIndex, unsigned DestSize, unsigned SourceSize) {\n      DiagID = diag::warn_fortify_scanf_overflow;"}}
[k]={{w,1195,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BIsscanf: {\n    auto Diagnose = [&](unsigned ArgIndex, unsigned DestSize, unsigned SourceSize) {\n      DiagID = diag::warn_fortify_scanf_overflow;"}}
},
},
["warn_fortify_source_format_overflow"]={
["warn_fortify_source_format_overflow"]={
Line 6,400: Line 6,400:
[c]=q,
[c]=q,
[b]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[b]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"},
[k]={{w,1103,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin___sprintf_chk: {\n    if (auto *Format = dyn_cast<StringLiteral>(FormatExpr)) {\n      if (!analyze_format_string::ParsePrintfString(H, FormatBytes, FormatBytes + StrLen, getLangOpts(), Context.getTargetInfo(), false)) {\n        DiagID = diag::warn_fortify_source_format_overflow;"}}
[k]={{w,1252,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin___sprintf_chk: {\n    if (auto *Format = dyn_cast<StringLiteral>(FormatExpr)) {\n      if (!analyze_format_string::ParsePrintfString(H, FormatBytes, FormatBytes + StrLen, getLangOpts(), Context.getTargetInfo(), false)) {\n        DiagID = diag::warn_fortify_source_format_overflow;"}}
},
},
["warn_fortify_source_overflow"]={
["warn_fortify_source_overflow"]={
Line 6,414: Line 6,414:
[c]=q,
[c]=q,
[b]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics"},
[b]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics"},
[k]={{w,1167,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin_mempcpy: {\n    DiagID = diag::warn_fortify_source_overflow;"}}
[k]={{w,1318,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin_mempcpy: {\n    DiagID = diag::warn_fortify_source_overflow;"}}
},
},
["warn_fortify_source_size_mismatch"]={
["warn_fortify_source_size_mismatch"]={
Line 6,428: Line 6,428:
[c]=q,
[c]=q,
[b]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics"},
[b]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics"},
[k]={{w,1153,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin_stpncpy: {\n    DiagID = diag::warn_fortify_source_size_mismatch;"},{w,1176,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin_vsnprintf: {\n    DiagID = diag::warn_fortify_source_size_mismatch;"}}
[k]={{w,1304,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin_stpncpy: {\n    DiagID = diag::warn_fortify_source_size_mismatch;"},{w,1327,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin_vsnprintf: {\n    DiagID = diag::warn_fortify_source_size_mismatch;"}}
},
},
["warn_fortify_strlen_overflow"]={
["warn_fortify_strlen_overflow"]={
Line 6,442: Line 6,442:
[c]=q,
[c]=q,
[b]={Kc,1615397021,zc},
[b]={Kc,1615397021,zc},
[k]={{w,1024,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BIstrcpy: {\n    DiagID = diag::warn_fortify_strlen_overflow;"},{w,1031,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin___strcpy_chk: {\n    DiagID = diag::warn_fortify_strlen_overflow;"}}
[k]={{w,1159,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BIstrcpy: {\n    DiagID = diag::warn_fortify_strlen_overflow;"},{w,1166,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  case Builtin::BI__builtin___strcpy_chk: {\n    DiagID = diag::warn_fortify_strlen_overflow;"}}
},
},
["warn_forward_class_redefinition"]={
["warn_forward_class_redefinition"]={
Line 6,456: Line 6,456:
[c]=q,
[c]=q,
[b]={"04c4455dd443",1327365615,"objective-c: Ignore with warning forward class declaration whose name"},
[b]={"04c4455dd443",1327365615,"objective-c: Ignore with warning forward class declaration whose name"},
[k]={{mc,2483,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  for (unsigned i = 0; i != NumElts; ++i) {\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      if (!TDD || !TDD->getUnderlyingType()->isObjCObjectType()) {\n      } else {\n        // a forward class declaration matching a typedef name of a class refers\n        // to the underlying class. Just ignore the forward class with a warning\n        // as this will force the intended behavior which is to lookup the\n        // typedef name.\n        if (isa<ObjCObjectType>(TDD->getUnderlyingType())) {\n          Diag(AtClassLoc, diag::warn_forward_class_redefinition) << IdentList[i];"}}
[k]={{mc,3090,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  for (unsigned i = 0; i != NumElts; ++i) {\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      if (!TDD || !TDD->getUnderlyingType()->isObjCObjectType()) {\n      } else {\n        // a forward class declaration matching a typedef name of a class refers\n        // to the underlying class. Just ignore the forward class with a warning\n        // as this will force the intended behavior which is to lookup the\n        // typedef name.\n        if (isa<ObjCObjectType>(TDD->getUnderlyingType())) {\n          Diag(AtClassLoc, diag::warn_forward_class_redefinition) << IdentList[i];"}}
},
},
["warn_four_char_character_literal"]={
["warn_four_char_character_literal"]={
Line 6,471: Line 6,471:
[c]=N,
[c]=N,
[b]={"8fa45e1fd527",1601988326,"Convert diagnostics about multi-character literals from extension to warning"},
[b]={"8fa45e1fd527",1601988326,"Convert diagnostics about multi-character literals from extension to warning"},
[k]={{Wc,1620,"/// \\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 (NumCharsSoFar > 1) {\n    if (isOrdinary() && NumCharsSoFar == 4)\n      PP.Diag(Loc, diag::warn_four_char_character_literal);"}}
[k]={{Wc,1796,"/// \\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 (NumCharsSoFar > 1) {\n    if (isOrdinary() && NumCharsSoFar == 4)\n      PP.Diag(Loc, diag::warn_four_char_character_literal);"}}
},
},
["warn_frame_address"]={
["warn_frame_address"]={
Line 6,486: Line 6,486:
[c]=q,
[c]=q,
[b]={Ic,1576908663,Bc},
[b]={Ic,1576908663,Bc},
[k]={{w,2305,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_return_address: {\n    if (!TheCall->getArg(0)->isValueDependent() && TheCall->getArg(0)->EvaluateAsInt(Result, getASTContext()) && Result.Val.getInt() != 0)\n      Diag(TheCall->getBeginLoc(), diag::warn_frame_address) << ((BuiltinID == Builtin::BI__builtin_return_address) ? \"__builtin_return_address\" : \"__builtin_frame_address\") << TheCall->getSourceRange();"}}
[k]={{w,2596,"#include \"clang/Basic/Builtins.def\"\n  case Builtin::BI__builtin_return_address: {\n    if (!TheCall->getArg(0)->isValueDependent() && TheCall->getArg(0)->EvaluateAsInt(Result, getASTContext()) && Result.Val.getInt() != 0)\n      Diag(TheCall->getBeginLoc(), diag::warn_frame_address) << ((BuiltinID == Builtin::BI__builtin_return_address) ? \"__builtin_return_address\" : \"__builtin_frame_address\") << TheCall->getSourceRange();"}}
},
},
["warn_framework_include_private_from_public"]={
["warn_framework_include_private_from_public"]={
Line 6,500: Line 6,500:
[c]=N,
[c]=N,
[b]={"1b3b69fbda70",1529965457,"Warning for framework include violation from Headers to PrivateHeaders"},
[b]={"1b3b69fbda70",1529965457,"Warning for framework include violation from Headers to PrivateHeaders"},
[k]={{"clang/lib/Lex/HeaderSearch.cpp",752,"static void diagnoseFrameworkInclude(DiagnosticsEngine &Diags, SourceLocation IncludeLoc, StringRef Includer, StringRef IncludeFilename, const FileEntry *IncludeFE, bool isAngled = false, bool FoundByHeaderMap = false) {\n  // Headers in Foo.framework/Headers should not include headers\n  // from Foo.framework/PrivateHeaders, since this violates public/private\n  // API boundaries and can cause modular dependency cycles.\n  if (!IsIncluderPrivateHeader && IsIncludeeInFramework && IsIncludeePrivateHeader && FromFramework == ToFramework)\n    Diags.Report(IncludeLoc, diag::warn_framework_include_private_from_public) << IncludeFilename;"}}
[k]={{"clang/lib/Lex/HeaderSearch.cpp",853,"static void diagnoseFrameworkInclude(DiagnosticsEngine &Diags, SourceLocation IncludeLoc, StringRef Includer, StringRef IncludeFilename, const FileEntry *IncludeFE, bool isAngled = false, bool FoundByHeaderMap = false) {\n  // Headers in Foo.framework/Headers should not include headers\n  // from Foo.framework/PrivateHeaders, since this violates public/private\n  // API boundaries and can cause modular dependency cycles.\n  if (!IsIncluderPrivateHeader && IsIncludeeInFramework && IsIncludeePrivateHeader && FromFramework == ToFramework)\n    Diags.Report(IncludeLoc, diag::warn_framework_include_private_from_public) << IncludeFilename;"}}
},
},
["warn_free_nonheap_object"]={
["warn_free_nonheap_object"]={
Line 6,514: Line 6,514:
[c]=q,
[c]=q,
[b]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"},
[b]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"},
[k]={{w,11476,"void CheckFreeArgumentsOnLvalue(Sema &S, const std::string &CalleeName, const UnaryOperator *UnaryExpr, const Decl *D) {\n  if (isa<FieldDecl, FunctionDecl, VarDecl>(D)) {\n    S.Diag(UnaryExpr->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << cast<NamedDecl>(D);"},{w,11498,"void CheckFreeArgumentsPlus(Sema &S, const std::string &CalleeName, const UnaryOperator *UnaryExpr) {\n  S.Diag(Lambda->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 2 /*object: lambda expression*/;"},{w,11506,"void CheckFreeArgumentsStackArray(Sema &S, const std::string &CalleeName, const DeclRefExpr *Lvalue) {\n  S.Diag(Lvalue->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << Var;"},{w,11531,"void CheckFreeArgumentsCast(Sema &S, const std::string &CalleeName, const CastExpr *Cast) {\n  S.Diag(Cast->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << OS.str();"},{w,11556,"/// Alerts the user that they are attempting to free a non-malloc\'d object.\nvoid Sema::CheckFreeArguments(const CallExpr *E) {\n  { // Prefer something that doesn\'t involve a cast to make things simpler.\n    if (const auto *Label = dyn_cast<AddrLabelExpr>(Arg)) {\n      Diag(Label->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << Label->getLabel()->getIdentifier();"},{w,11561,"/// Alerts the user that they are attempting to free a non-malloc\'d object.\nvoid Sema::CheckFreeArguments(const CallExpr *E) {\n  { // Prefer something that doesn\'t involve a cast to make things simpler.\n    if (isa<BlockExpr>(Arg)) {\n      Diag(Arg->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 1 /*object: block*/;"}}
[k]={{w,12824,"void CheckFreeArgumentsOnLvalue(Sema &S, const std::string &CalleeName, const UnaryOperator *UnaryExpr, const Decl *D) {\n  if (isa<FieldDecl, FunctionDecl, VarDecl>(D)) {\n    S.Diag(UnaryExpr->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << cast<NamedDecl>(D);"},{w,12851,"void CheckFreeArgumentsPlus(Sema &S, const std::string &CalleeName, const UnaryOperator *UnaryExpr) {\n  S.Diag(Lambda->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 2 /*object: lambda expression*/;"},{w,12861,"void CheckFreeArgumentsStackArray(Sema &S, const std::string &CalleeName, const DeclRefExpr *Lvalue) {\n  S.Diag(Lvalue->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << Var;"},{w,12891,"void CheckFreeArgumentsCast(Sema &S, const std::string &CalleeName, const CastExpr *Cast) {\n  S.Diag(Cast->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << OS.str();"},{w,12918,"/// Alerts the user that they are attempting to free a non-malloc\'d object.\nvoid Sema::CheckFreeArguments(const CallExpr *E) {\n  { // Prefer something that doesn\'t involve a cast to make things simpler.\n    if (const auto *Label = dyn_cast<AddrLabelExpr>(Arg)) {\n      Diag(Label->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << Label->getLabel()->getIdentifier();"},{w,12924,"/// Alerts the user that they are attempting to free a non-malloc\'d object.\nvoid Sema::CheckFreeArguments(const CallExpr *E) {\n  { // Prefer something that doesn\'t involve a cast to make things simpler.\n    if (isa<BlockExpr>(Arg)) {\n      Diag(Arg->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 1 /*object: block*/;"}}
},
},
["warn_fun_excludes_mutex"]={
["warn_fun_excludes_mutex"]={
Line 6,529: Line 6,529:
[c]=q,
[c]=q,
[b]={"ee5db8b5c4ab",1315518770,"Thread Safety:  In C++0x Mutexes are the objects that control access to shared variables, while Lock..."},
[b]={"ee5db8b5c4ab",1315518770,"Thread Safety:  In C++0x Mutexes are the objects that control access to shared variables, while Lock..."},
[k]={{eb,1744,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleFunExcludesLock(StringRef Kind, Name FunName, Name LockName, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_fun_excludes_mutex) << Kind << FunName << LockName);"}}
[k]={{eb,2035,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleFunExcludesLock(StringRef Kind, Name FunName, Name LockName, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_fun_excludes_mutex) << Kind << FunName << LockName);"}}
},
},
["warn_fun_requires_lock"]={
["warn_fun_requires_lock"]={
Line 6,544: Line 6,544:
[c]=q,
[c]=q,
[b]={"69b367af17e0",1315506451,"Thread safety: Adding basic support for locks required and excluded attributes"},
[b]={"69b367af17e0",1315506451,"Thread safety: Adding basic support for locks required and excluded attributes"},
[k]={{eb,1715,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    if (PossibleMatch) {\n    } else {\n      case POK_FunctionCall:\n        DiagID = diag::warn_fun_requires_lock;"}}
[k]={{eb,1997,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    if (PossibleMatch) {\n    } else {\n      case POK_FunctionCall:\n        DiagID = diag::warn_fun_requires_lock;"}}
},
},
["warn_fun_requires_lock_precise"]={
["warn_fun_requires_lock_precise"]={
Line 6,559: Line 6,559:
[c]=q,
[c]=q,
[b]={"5ff1644e624e",1347307103,"Thread-safety analysis: differentiate between two forms of analysis; a precise"},
[b]={"5ff1644e624e",1347307103,"Thread-safety analysis: differentiate between two forms of analysis; a precise"},
[k]={{eb,1690,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    if (PossibleMatch) {\n      case POK_FunctionCall:\n        DiagID = diag::warn_fun_requires_lock_precise;"}}
[k]={{eb,1967,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    if (PossibleMatch) {\n      case POK_FunctionCall:\n        DiagID = diag::warn_fun_requires_lock_precise;"}}
},
},
["warn_fun_requires_negative_cap"]={
["warn_fun_requires_negative_cap"]={
Line 6,574: Line 6,574:
[c]=q,
[c]=q,
[b]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata"},
[b]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata"},
[k]={{eb,1739,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleNegativeNotHeld(const NamedDecl *D, Name LockName, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_fun_requires_negative_cap) << D << LockName);"}}
[k]={{eb,2029,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleNegativeNotHeld(const NamedDecl *D, Name LockName, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_fun_requires_negative_cap) << D << LockName);"}}
},
},
["warn_func_template_missing"]={
["warn_func_template_missing"]={
Line 6,589: Line 6,589:
[c]=q,
[c]=q,
[b]={"7dcc97e7ac0a",1461046792,"Warn if function or variable cannot be implicitly instantiated"},
[b]={"7dcc97e7ac0a",1461046792,"Warn if function or variable cannot be implicitly instantiated"},
[k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",4055,"/// Instantiate the definition of the given function from its\n/// template.\n///\n/// \\param PointOfInstantiation the point at which the instantiation was\n/// required. Note that this is not precisely a \"point of instantiation\"\n/// for the function, but it\'s close.\n///\n/// \\param Function the already-instantiated declaration of a\n/// function template specialization or member function of a class template\n/// specialization.\n///\n/// \\param Recursive if true, recursively instantiates any functions that\n/// are required by this instantiation.\n///\n/// \\param DefinitionRequired if true, then we are performing an explicit\n/// instantiation where the body of the function is required. Complain if\n/// there is no such body.\nvoid Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, FunctionDecl *Function, bool Recursive, bool DefinitionRequired, bool AtEndOfTU) {\n  // FIXME: We need to track the instantiation stack in order to know which\n  // definitions should be visible within this instantiation.\n  if (DiagnoseUninstantiableTemplate(PointOfInstantiation, Function, Function->getInstantiatedFromMemberFunction(), PatternDecl, PatternDef, TSK,\n    if (DefinitionRequired)\n    else if (TSK == TSK_ExplicitInstantiationDefinition || (Function->isConstexpr() && !Recursive)) {\n    } else if (TSK == TSK_ImplicitInstantiation) {\n      if (AtEndOfTU && !getDiagnostics().hasErrorOccurred() && !getSourceManager().isInSystemHeader(PatternDecl->getBeginLoc())) {\n        Diag(PointOfInstantiation, diag::warn_func_template_missing) << Function;"}}
[k]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",4901,"/// Instantiate the definition of the given function from its\n/// template.\n///\n/// \\param PointOfInstantiation the point at which the instantiation was\n/// required. Note that this is not precisely a \"point of instantiation\"\n/// for the function, but it\'s close.\n///\n/// \\param Function the already-instantiated declaration of a\n/// function template specialization or member function of a class template\n/// specialization.\n///\n/// \\param Recursive if true, recursively instantiates any functions that\n/// are required by this instantiation.\n///\n/// \\param DefinitionRequired if true, then we are performing an explicit\n/// instantiation where the body of the function is required. Complain if\n/// there is no such body.\nvoid Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, FunctionDecl *Function, bool Recursive, bool DefinitionRequired, bool AtEndOfTU) {\n  // FIXME: We need to track the instantiation stack in order to know which\n  // definitions should be visible within this instantiation.\n  if (DiagnoseUninstantiableTemplate(PointOfInstantiation, Function, Function->getInstantiatedFromMemberFunction(), PatternDecl, PatternDef, TSK,\n    if (DefinitionRequired)\n    else if (TSK == TSK_ExplicitInstantiationDefinition || (Function->isConstexpr() && !Recursive)) {\n    } else if (TSK == TSK_ImplicitInstantiation) {\n      if (AtEndOfTU && !getDiagnostics().hasErrorOccurred() && !getSourceManager().isInSystemHeader(PatternDecl->getBeginLoc())) {\n        Diag(PointOfInstantiation, diag::warn_func_template_missing) << Function;"}}
},
},
["warn_function_attribute_ignored_in_stmt"]={
["warn_function_attribute_ignored_in_stmt"]={
Line 6,603: Line 6,603:
[c]=q,
[c]=q,
[b]={Rc,1620118562,Qc},
[b]={Rc,1620118562,Qc},
[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",222,"static Attr *handleNoInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  if (!NIA.isClangNoInline()) {\n    S.Diag(St->getBeginLoc(), diag::warn_function_attribute_ignored_in_stmt) << \"[[clang::noinline]]\";"},{"clang/lib/Sema/SemaStmtAttr.cpp",235,"static Attr *handleAlwaysInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  if (!AIA.isClangAlwaysInline()) {\n    S.Diag(St->getBeginLoc(), diag::warn_function_attribute_ignored_in_stmt) << \"[[clang::always_inline]]\";"}}
[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",276,"static Attr *handleNoInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  if (!NIA.isClangNoInline()) {\n    S.Diag(St->getBeginLoc(), diag::warn_function_attribute_ignored_in_stmt) << \"[[clang::noinline]]\";"},{"clang/lib/Sema/SemaStmtAttr.cpp",291,"static Attr *handleAlwaysInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  if (!AIA.isClangAlwaysInline()) {\n    S.Diag(St->getBeginLoc(), diag::warn_function_attribute_ignored_in_stmt) << \"[[clang::always_inline]]\";"}}
},
},
["warn_function_def_in_objc_container"]={
["warn_function_def_in_objc_container"]={
Line 6,617: Line 6,617:
[c]=q,
[c]=q,
[b]={"3451df8f5dfc",1401296555,"Objective-C. Deprecate use of function definitions"},
[b]={"3451df8f5dfc",1401296555,"Objective-C. Deprecate use of function definitions"},
[k]={{G,13466,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  if (getCurLexicalContext()->isObjCContainer() && getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation)\n    Diag(FD->getLocation(), diag::warn_function_def_in_objc_container);"}}
[k]={{G,15430,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  if (getCurLexicalContext()->isObjCContainer() && getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation)\n    Diag(FD->getLocation(), diag::warn_function_def_in_objc_container);"}}
},
},
["warn_function_stmt_attribute_precedence"]={
["warn_function_stmt_attribute_precedence"]={
Line 6,631: Line 6,631:
[c]=q,
[c]=q,
[b]={Rc,1620118562,Qc},
[b]={Rc,1620118562,Qc},
[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",206,"template <typename OtherAttr, int DiagIdx> static bool CheckStmtInlineAttr(Sema &SemaRef, const Stmt *OrigSt, const Stmt *CurSt, const AttributeCommonInfo &A) {\n  for (const auto &Tup : llvm::zip_longest(OrigCEF.getCallExprs(), CEF.getCallExprs())) {\n    // If the original call expression already had a callee, we already\n    // diagnosed this, so skip it here. We can\'t skip if there isn\'t a 1:1\n    // relationship between the two lists of call expressions.\n    if (!CanSuppressDiag || !(*std::get<0>(Tup))->getCalleeDecl()) {\n      if (Callee && (Callee->hasAttr<OtherAttr>() || Callee->hasAttr<FlattenAttr>())) {\n        SemaRef.Diag(CurSt->getBeginLoc(), diag::warn_function_stmt_attribute_precedence) << A << (Callee->hasAttr<OtherAttr>() ? DiagIdx : 1);"}}
[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",252,"template <typename OtherAttr, int DiagIdx> static bool CheckStmtInlineAttr(Sema &SemaRef, const Stmt *OrigSt, const Stmt *CurSt, const AttributeCommonInfo &A) {\n  for (const auto &Tup : llvm::zip_longest(OrigCEF.getCallExprs(), CEF.getCallExprs())) {\n    // If the original call expression already had a callee, we already\n    // diagnosed this, so skip it here. We can\'t skip if there isn\'t a 1:1\n    // relationship between the two lists of call expressions.\n    if (!CanSuppressDiag || !(*std::get<0>(Tup))->getCalleeDecl()) {\n      if (Callee && (Callee->hasAttr<OtherAttr>() || Callee->hasAttr<FlattenAttr>())) {\n        SemaRef.Diag(CurSt->getBeginLoc(), diag::warn_function_stmt_attribute_precedence) << A << (Callee->hasAttr<OtherAttr>() ? DiagIdx : 1);"}}
},
},
["warn_gc_attribute_weak_on_local"]={
["warn_gc_attribute_weak_on_local"]={
Line 6,645: Line 6,645:
[c]=q,
[c]=q,
[b]={"c32830cd6469",1307477746,"More coherent diagnostic when a stack variable is"},
[b]={"c32830cd6469",1307477746,"More coherent diagnostic when a stack variable is"},
[k]={{G,7632,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (NewVD->hasLocalStorage() && T.isObjCGCWeak() && !NewVD->hasAttr<BlocksAttr>()) {\n    if (getLangOpts().getGC() != LangOptions::NonGC)\n      Diag(NewVD->getLocation(), diag::warn_gc_attribute_weak_on_local);"}}
[k]={{G,8648,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  if (NewVD->hasLocalStorage() && T.isObjCGCWeak() && !NewVD->hasAttr<BlocksAttr>()) {\n    if (getLangOpts().getGC() != LangOptions::NonGC)\n      Diag(NewVD->getLocation(), diag::warn_gc_attribute_weak_on_local);"}}
},
},
["warn_gcc_attribute_location"]={
["warn_gcc_attribute_location"]={
Line 6,659: Line 6,659:
[c]=A,
[c]=A,
[b]={"5d153e313394",1407171831,"Diagnose GNU-style attributes preceding virt-specifiers, but only when the attribute is known to GCC..."},
[b]={"5d153e313394",1407171831,"Diagnose GNU-style attributes preceding virt-specifiers, but only when the attribute is known to GCC..."},
[k]={{db,2192,"/// Parse a C++ member-declarator up to, but not including, the optional\n/// brace-or-equal-initializer or pure-specifier.\nbool Parser::ParseCXXMemberDeclaratorBeforeInitializer(Declarator &DeclaratorInfo, VirtSpecifiers &VS, ExprResult &BitfieldSize, LateParsedAttrList &LateParsedAttrs) {\n  // For compatibility with code written to older Clang, also accept a\n  // virt-specifier *after* the GNU attributes.\n  if (BitfieldSize.isUnset() && VS.isUnset()) {\n    if (!VS.isUnset()) {\n      // If we saw any GNU-style attributes that are known to GCC followed by a\n      // virt-specifier, issue a GCC-compat warning.\n      for (const ParsedAttr &AL : DeclaratorInfo.getAttributes())\n        if (AL.isKnownToGCC() && !AL.isCXX11Attribute())\n          Diag(AL.getLoc(), diag::warn_gcc_attribute_location);"}}
[k]={{db,2566,"/// Parse a C++ member-declarator up to, but not including, the optional\n/// brace-or-equal-initializer or pure-specifier.\nbool Parser::ParseCXXMemberDeclaratorBeforeInitializer(Declarator &DeclaratorInfo, VirtSpecifiers &VS, ExprResult &BitfieldSize, LateParsedAttrList &LateParsedAttrs) {\n  // For compatibility with code written to older Clang, also accept a\n  // virt-specifier *after* the GNU attributes.\n  if (BitfieldSize.isUnset() && VS.isUnset()) {\n    if (!VS.isUnset()) {\n      // If we saw any GNU-style attributes that are known to GCC followed by a\n      // virt-specifier, issue a GCC-compat warning.\n      for (const ParsedAttr &AL : DeclaratorInfo.getAttributes())\n        if (AL.isKnownToGCC() && !AL.isCXX11Attribute())\n          Diag(AL.getLoc(), diag::warn_gcc_attribute_location);"}}
},
},
["warn_gcc_ignores_type_attr"]={
["warn_gcc_ignores_type_attr"]={
Line 6,673: Line 6,673:
[c]=q,
[c]=q,
[b]={"b9a457af35b2",1525361630,"Allow writing calling convention attributes on function types."},
[b]={"b9a457af35b2",1525361630,"Allow writing calling convention attributes on function types."},
[k]={{Cb,7553,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  for (ParsedAttr &attr : AttrsCopy) {\n    if (attr.isStandardAttributeSyntax() || attr.isRegularKeywordAttribute()) {\n      // [[gnu::...]] attributes are treated as declaration attributes, so may\n      // not appertain to a DeclaratorChunk. If we handle them as type\n      // attributes, accept them in that position and diagnose the GCC\n      // incompatibility.\n      if (attr.isGNUScope()) {\n        if (TAL == TAL_DeclChunk) {\n          state.getSema().Diag(attr.getLoc(), IsTypeAttr ? diag::warn_gcc_ignores_type_attr : diag::warn_cxx11_gnu_attribute_on_type) << attr;"}}
[k]={{Cb,8545,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  for (ParsedAttr &attr : AttrsCopy) {\n    if (attr.isStandardAttributeSyntax() || attr.isRegularKeywordAttribute()) {\n      // [[gnu::...]] attributes are treated as declaration attributes, so may\n      // not appertain to a DeclaratorChunk. If we handle them as type\n      // attributes, accept them in that position and diagnose the GCC\n      // incompatibility.\n      if (attr.isGNUScope()) {\n        if (TAL == TAL_DeclChunk) {\n          state.getSema().Diag(attr.getLoc(), IsTypeAttr ? diag::warn_gcc_ignores_type_attr : diag::warn_cxx11_gnu_attribute_on_type) << attr;"}}
},
},
["warn_gcc_requires_variadic_function"]={
["warn_gcc_requires_variadic_function"]={
Line 6,687: Line 6,687:
[c]=q,
[c]=q,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{H,3520,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // FirstArg == 0 is is always valid.\n  if (FirstArg != 0) {\n    if (Kind == StrftimeFormat) {\n    } else if (isFunctionOrMethodVariadic(D)) {\n    } else {\n      S.Diag(D->getLocation(), diag::warn_gcc_requires_variadic_function) << AL;"}}
[k]={{H,4032,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // FirstArg == 0 is is always valid.\n  if (FirstArg != 0) {\n    if (Kind == StrftimeFormat) {\n    } else if (isFunctionOrMethodVariadic(D)) {\n    } else {\n      S.Diag(D->getLocation(), diag::warn_gcc_requires_variadic_function) << AL;"}}
},
},
["warn_gcc_variable_decl_in_for_loop"]={
["warn_gcc_variable_decl_in_for_loop"]={
Line 6,701: Line 6,701:
[c]=A,
[c]=A,
[b]={"4d456455684c",1530221760,"[Parse] Make -Wgcc-compat complain about for loop inits in C89"},
[b]={"4d456455684c",1530221760,"[Parse] Make -Wgcc-compat complain about for loop inits in C89"},
[k]={{Yb,1913,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // Parse the first part of the for specifier.\n  if (Tok.is(tok::semi)) { // for (;\n  } else if (getLangOpts().CPlusPlus && Tok.is(tok::identifier) && isForRangeIdentifier()) {\n  } else if (isForInitDeclaration()) { // for (int X = 4;\n    // Parse declaration, which eats the \';\'.\n    if (!C99orCXXorObjC) { // Use of C99-style for loops in C90 mode?\n      Diag(Tok, diag::warn_gcc_variable_decl_in_for_loop);"}}
[k]={{Yb,2055,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // Parse the first part of the for specifier.\n  if (Tok.is(tok::semi)) { // for (;\n  } else if (getLangOpts().CPlusPlus && Tok.is(tok::identifier) && isForRangeIdentifier()) {\n  } else if (isForInitDeclaration()) { // for (int X = 4;\n    // Parse declaration, which eats the \';\'.\n    if (!C99orCXXorObjC) { // Use of C99-style for loops in C90 mode?\n      Diag(Tok, diag::warn_gcc_variable_decl_in_for_loop);"}}
},
},
["warn_global_constructor"]={
["warn_global_constructor"]={
Line 6,716: Line 6,716:
[c]=q,
[c]=q,
[b]={"47e40931c9af",1280694059,"Make a first pass at implementing -Wglobal-constructors.  I\'m worried that this"},
[b]={"47e40931c9af",1280694059,"Make a first pass at implementing -Wglobal-constructors.  I\'m worried that this"},
[k]={{G,12432,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    } else if (IsGlobal && !getDiagnostics().isIgnored(diag::warn_global_constructor, var->getLocation())) {"},{G,12442,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    if (HasConstInit) {\n    } else if (var->isConstexpr()) {\n    } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n    } else if (IsGlobal && !getDiagnostics().isIgnored(diag::warn_global_constructor, var->getLocation())) {\n      if (!(RD && !RD->hasTrivialDestructor())) {\n        // checkConstInit() here permits trivial default initialization even in\n        // C++11 onwards, where such an initializer is not a constant initializer\n        // but nonetheless doesn\'t require a global constructor.\n        if (!checkConstInit())\n          Diag(var->getLocation(), diag::warn_global_constructor) << Init->getSourceRange();"}}
[k]={{G,14234,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    } else if (IsGlobal && !getDiagnostics().isIgnored(diag::warn_global_constructor, var->getLocation())) {"},{G,14245,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    if (HasConstInit) {\n    } else if (var->isConstexpr()) {\n    } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n    } else if (IsGlobal && !getDiagnostics().isIgnored(diag::warn_global_constructor, var->getLocation())) {\n      if (!(RD && !RD->hasTrivialDestructor())) {\n        // checkConstInit() here permits trivial default initialization even in\n        // C++11 onwards, where such an initializer is not a constant initializer\n        // but nonetheless doesn\'t require a global constructor.\n        if (!checkConstInit())\n          Diag(var->getLocation(), diag::warn_global_constructor) << Init->getSourceRange();"}}
},
},
["warn_global_destructor"]={
["warn_global_destructor"]={
Line 6,731: Line 6,731:
[c]=q,
[c]=q,
[b]={"47e40931c9af",1280694059,"Make a first pass at implementing -Wglobal-constructors.  I\'m worried that this"},
[b]={"47e40931c9af",1280694059,"Make a first pass at implementing -Wglobal-constructors.  I\'m worried that this"},
[k]={{F,13602,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // TODO: this should be re-enabled for static locals by !CXAAtExit\n  if (!VD->isStaticLocal())\n    Diag(VD->getLocation(), diag::warn_global_destructor);"}}
[k]={{F,15901,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // TODO: this should be re-enabled for static locals by !CXAAtExit\n  if (!VD->isStaticLocal())\n    Diag(VD->getLocation(), diag::warn_global_destructor);"}}
},
},
["warn_gnu_inline_attribute_requires_inline"]={
["warn_gnu_inline_attribute_requires_inline"]={
Line 6,745: Line 6,745:
[c]=q,
[c]=q,
[b]={"ddf6ca0355a8",1240254748,"the __gnuc_inline__ attribute is actually named __gnu_inline__,"},
[b]={"ddf6ca0355a8",1240254748,"the __gnuc_inline__ attribute is actually named __gnu_inline__,"},
[k]={{H,4479,"static void handleGNUInlineAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!Fn->isInlineSpecified()) {\n    S.Diag(AL.getLoc(), diag::warn_gnu_inline_attribute_requires_inline);"}}
[k]={{H,5105,"static void handleGNUInlineAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!Fn->isInlineSpecified()) {\n    S.Diag(AL.getLoc(), diag::warn_gnu_inline_attribute_requires_inline);"}}
},
},
["warn_gnu_inline_cplusplus_without_extern"]={
["warn_gnu_inline_cplusplus_without_extern"]={
Line 6,759: Line 6,759:
[c]=q,
[c]=q,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{H,4484,"static void handleGNUInlineAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.LangOpts.CPlusPlus && Fn->getStorageClass() != SC_Extern)\n    S.Diag(AL.getLoc(), diag::warn_gnu_inline_cplusplus_without_extern);"}}
[k]={{H,5110,"static void handleGNUInlineAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.LangOpts.CPlusPlus && Fn->getStorageClass() != SC_Extern)\n    S.Diag(AL.getLoc(), diag::warn_gnu_inline_cplusplus_without_extern);"}}
},
},
["warn_gnu_null_ptr_arith"]={
["warn_gnu_null_ptr_arith"]={
Line 6,774: Line 6,774:
[c]=q,
[c]=q,
[b]={"3d0a540857ed",1505852800,"Teach clang to tolerate the \'p = nullptr + n\' idiom used by glibc"},
[b]={"3d0a540857ed",1505852800,"Teach clang to tolerate the \'p = nullptr + n\' idiom used by glibc"},
[k]={{M,9882,"/// Diagnose invalid arithmetic on a null pointer.\n///\n/// If \\p IsGNUIdiom is true, the operation is using the \'p = (i8*)nullptr + n\'\n/// idiom, which we recognize as a GNU extension.\n///\nstatic void diagnoseArithmeticOnNullPointer(Sema &S, SourceLocation Loc, Expr *Pointer, bool IsGNUIdiom) {\n  if (IsGNUIdiom)\n    S.Diag(Loc, diag::warn_gnu_null_ptr_arith) << Pointer->getSourceRange();"}}
[k]={{M,11456,"/// Diagnose invalid arithmetic on a null pointer.\n///\n/// If \\p IsGNUIdiom is true, the operation is using the \'p = (i8*)nullptr + n\'\n/// idiom, which we recognize as a GNU extension.\n///\nstatic void diagnoseArithmeticOnNullPointer(Sema &S, SourceLocation Loc, Expr *Pointer, bool IsGNUIdiom) {\n  if (IsGNUIdiom)\n    S.Diag(Loc, diag::warn_gnu_null_ptr_arith) << Pointer->getSourceRange();"}}
},
},
["warn_guarded_pass_by_reference"]={
["warn_guarded_pass_by_reference"]={
Line 6,789: Line 6,789:
[c]=q,
[c]=q,
[b]={"c60dc2cfb9ad",1411081346,"Thread Safety Analysis: add new warning flag, -Wthread-safety-reference, which"},
[b]={"c60dc2cfb9ad",1411081346,"Thread Safety Analysis: add new warning flag, -Wthread-safety-reference, which"},
[k]={{eb,1693,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    if (PossibleMatch) {\n      case POK_PassByRef:\n        DiagID = diag::warn_guarded_pass_by_reference;"},{eb,1718,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    if (PossibleMatch) {\n    } else {\n      case POK_PassByRef:\n        DiagID = diag::warn_guarded_pass_by_reference;"}}
[k]={{eb,1970,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    if (PossibleMatch) {\n      case POK_PassByRef:\n        DiagID = diag::warn_guarded_pass_by_reference;"},{eb,2000,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    if (PossibleMatch) {\n    } else {\n      case POK_PassByRef:\n        DiagID = diag::warn_guarded_pass_by_reference;"}}
},
},
["warn_has_warning_invalid_option"]={
["warn_has_warning_invalid_option"]={
Line 6,803: Line 6,803:
[c]=N,
[c]=N,
[b]={"a35d67dfd927",1318448790,"Implement built-in macro \'__has_warning\', which allows one to query if a warning flag is valid.  Fix..."},
[b]={"a35d67dfd927",1318448790,"Implement built-in macro \'__has_warning\', which allows one to query if a warning flag is valid.  Fix..."},
[k]={{"clang/lib/Lex/PPMacroExpansion.cpp",1675,"#include \"clang/Basic/TransformTypeTraits.def\"\n  } else if (II == Ident__has_constexpr_builtin) {\n  } else if (II == Ident__is_identifier) {\n  } else if (II == Ident__has_attribute) {\n  } else if (II == Ident__has_declspec) {\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n  } else if (II == Ident__has_warning) {\n    // The argument should be a parenthesized string literal.\n    EvaluateFeatureLikeBuiltinMacro(OS, Tok, II, *this, false, [this](Token &Tok, bool &HasLexedNextToken) -> int {\n      // FIXME: Should we accept \"-R...\" flags here, or should that be\n      // handled by a separate __has_remark?\n      if (WarningName.size() < 3 || WarningName[0] != \'-\' || WarningName[1] != \'W\') {\n        Diag(StrStartLoc, diag::warn_has_warning_invalid_option);"}}
[k]={{"clang/lib/Lex/PPMacroExpansion.cpp",1821,"#include \"clang/Basic/TransformTypeTraits.def\"\n  } else if (II == Ident__has_constexpr_builtin) {\n  } else if (II == Ident__is_identifier) {\n  } else if (II == Ident__has_attribute) {\n  } else if (II == Ident__has_declspec) {\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n  } else if (II == Ident__has_warning) {\n    // The argument should be a parenthesized string literal.\n    EvaluateFeatureLikeBuiltinMacro(OS, Tok, II, *this, false, [this](Token &Tok, bool &HasLexedNextToken) -> int {\n      // FIXME: Should we accept \"-R...\" flags here, or should that be\n      // handled by a separate __has_remark?\n      if (WarningName.size() < 3 || WarningName[0] != \'-\' || WarningName[1] != \'W\') {\n        Diag(StrStartLoc, diag::warn_has_warning_invalid_option);"}}
},
},
["warn_header_guard"]={
["warn_header_guard"]={
Line 6,817: Line 6,817:
[c]=N,
[c]=N,
[b]={"33a4b3db0de5",1371072057,"Introducing -Wheader-guard, a warning that checks header guards actually work"},
[b]={"33a4b3db0de5",1371072057,"Introducing -Wheader-guard, a warning that checks header guards actually work"},
[k]={{"clang/lib/Lex/PPLexerChange.cpp",341,"/// 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  // See if this file had a controlling macro.\n  if (CurPPLexer) { // Not ending a macro, ignore it.\n    if (const IdentifierInfo *ControllingMacro = CurPPLexer->MIOpt.GetControllingMacroAtEndOfFile()) {\n      // Okay, this has a controlling macro, remember in HeaderFileInfo.\n      if (const FileEntry *FE = CurPPLexer->getFileEntry()) {\n        if (const IdentifierInfo *DefinedMacro = CurPPLexer->MIOpt.GetDefinedMacro()) {\n          if (!isMacroDefined(ControllingMacro) && DefinedMacro != ControllingMacro && CurLexer->isFirstTimeLexingFile()) {\n            if (ED <= MaxHalfLength) {\n              Diag(CurPPLexer->MIOpt.GetMacroLocation(), diag::warn_header_guard) << CurPPLexer->MIOpt.GetMacroLocation() << ControllingMacro;"}}
[k]={{"clang/lib/Lex/PPLexerChange.cpp",396,"/// 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  // See if this file had a controlling macro.\n  if (CurPPLexer) { // Not ending a macro, ignore it.\n    if (const IdentifierInfo *ControllingMacro = CurPPLexer->MIOpt.GetControllingMacroAtEndOfFile()) {\n      // Okay, this has a controlling macro, remember in HeaderFileInfo.\n      if (const FileEntry *FE = CurPPLexer->getFileEntry()) {\n        if (const IdentifierInfo *DefinedMacro = CurPPLexer->MIOpt.GetDefinedMacro()) {\n          if (!isMacroDefined(ControllingMacro) && DefinedMacro != ControllingMacro && CurLexer->isFirstTimeLexingFile()) {\n            if (ED <= MaxHalfLength) {\n              Diag(CurPPLexer->MIOpt.GetMacroLocation(), diag::warn_header_guard) << CurPPLexer->MIOpt.GetMacroLocation() << ControllingMacro;"}}
},
},
["warn_hip_omp_target_directives"]={
["warn_hip_omp_target_directives"]={
Line 6,831: Line 6,831:
[c]=q,
[c]=q,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{Md,4798,"StmtResult Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP && (isOpenMPTargetExecutionDirective(Kind) || isOpenMPTargetDataManagementDirective(Kind)))\n    Diag(StartLoc, diag::warn_hip_omp_target_directives);"},{Md,10829,"StmtResult Sema::ActOnOpenMPTeamsDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP && (DSAStack->getParentDirective() == OMPD_target))\n    Diag(StartLoc, diag::warn_hip_omp_target_directives);"},{Md,18817,"bool Sema::ActOnStartOpenMPDeclareTargetContext(DeclareTargetContextInfo &DTCI) {\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP)\n    Diag(DTCI.Loc, diag::warn_hip_omp_target_directives);"},{Md,18878,"void Sema::ActOnOpenMPDeclareTargetName(NamedDecl *ND, SourceLocation Loc, OMPDeclareTargetDeclAttr::MapTypeTy MT, DeclareTargetContextInfo &DTCI) {\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP)\n    Diag(Loc, diag::warn_hip_omp_target_directives);"}}
[k]={{Md,6107,"StmtResult Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP && (isOpenMPTargetExecutionDirective(Kind) || isOpenMPTargetDataManagementDirective(Kind)))\n    Diag(StartLoc, diag::warn_hip_omp_target_directives);"},{Md,13343,"StmtResult Sema::ActOnOpenMPTeamsDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP && (DSAStack->getParentDirective() == OMPD_target))\n    Diag(StartLoc, diag::warn_hip_omp_target_directives);"},{Md,22989,"bool Sema::ActOnStartOpenMPDeclareTargetContext(DeclareTargetContextInfo &DTCI) {\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP)\n    Diag(DTCI.Loc, diag::warn_hip_omp_target_directives);"},{Md,23065,"void Sema::ActOnOpenMPDeclareTargetName(NamedDecl *ND, SourceLocation Loc, OMPDeclareTargetDeclAttr::MapTypeTy MT, DeclareTargetContextInfo &DTCI) {\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP)\n    Diag(Loc, diag::warn_hip_omp_target_directives);"}}
},
},
["warn_iboutlet_object_type"]={
["warn_iboutlet_object_type"]={
Line 6,845: Line 6,845:
[c]=q,
[c]=q,
[b]={"5d6044e41357",1320170915,"Downgrade err_iboutlet_object_type to a warning.  It was breaking a bunch of code.  We will reconsid..."},
[b]={"5d6044e41357",1320170915,"Downgrade err_iboutlet_object_type to a warning.  It was breaking a bunch of code.  We will reconsid..."},
[k]={{H,1319,"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    if (!VD->getType()->getAs<ObjCObjectPointerType>()) {\n      S.Diag(AL.getLoc(), diag::warn_iboutlet_object_type) << AL << VD->getType() << 0;"},{H,1324,"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    if (!PD->getType()->getAs<ObjCObjectPointerType>()) {\n      S.Diag(AL.getLoc(), diag::warn_iboutlet_object_type) << AL << PD->getType() << 1;"}}
[k]={{H,1474,"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    if (!VD->getType()->getAs<ObjCObjectPointerType>()) {\n      S.Diag(AL.getLoc(), diag::warn_iboutlet_object_type) << AL << VD->getType() << 0;"},{H,1481,"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    if (!PD->getType()->getAs<ObjCObjectPointerType>()) {\n      S.Diag(AL.getLoc(), diag::warn_iboutlet_object_type) << AL << PD->getType() << 1;"}}
},
},
["warn_iboutletcollection_property_assign"]={
["warn_iboutletcollection_property_assign"]={
Line 6,859: Line 6,859:
[c]=q,
[c]=q,
[b]={"f030d16c920f",1372181690,"Objective-C: Warn when IBOutletCollection property"},
[b]={"f030d16c920f",1372181690,"Objective-C: Warn when IBOutletCollection property"},
[k]={{Gc,2147,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    if (PropertyDecl->hasAttr<IBOutletCollectionAttr>())\n      Diag(Loc, diag::warn_iboutletcollection_property_assign);"}}
[k]={{Gc,2702,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    if (PropertyDecl->hasAttr<IBOutletCollectionAttr>())\n      Diag(Loc, diag::warn_iboutletcollection_property_assign);"}}
},
},
["warn_identity_field_assign"]={
["warn_identity_field_assign"]={
Line 6,873: Line 6,873:
[c]=q,
[c]=q,
[b]={"b8124d1af1d2",1341280986,"Rename -Wself-assign-memvar to -Wself-assign-field to improve local consistency a bit."},
[b]={"b8124d1af1d2",1341280986,"Rename -Wself-assign-memvar to -Wself-assign-field to improve local consistency a bit."},
[k]={{M,12421,"static void CheckIdentityFieldAssignment(Expr *LHSExpr, Expr *RHSExpr, SourceLocation Loc, Sema &Sema) {\n  if (ML && MR) {\n    Sema.Diag(Loc, diag::warn_identity_field_assign) << 0;"},{M,12431,"static void CheckIdentityFieldAssignment(Expr *LHSExpr, Expr *RHSExpr, SourceLocation Loc, Sema &Sema) {\n  if (OL && OR && OL->getDecl() == OR->getDecl()) {\n    if (RL && RR && RL->getDecl() == RR->getDecl())\n      Sema.Diag(Loc, diag::warn_identity_field_assign) << 1;"}}
[k]={{M,14427,"static void CheckIdentityFieldAssignment(Expr *LHSExpr, Expr *RHSExpr, SourceLocation Loc, Sema &Sema) {\n  if (ML && MR) {\n    Sema.Diag(Loc, diag::warn_identity_field_assign) << 0;"},{M,14451,"static void CheckIdentityFieldAssignment(Expr *LHSExpr, Expr *RHSExpr, SourceLocation Loc, Sema &Sema) {\n  if (OL && OR && OL->getDecl() == OR->getDecl()) {\n    if (RL && RR && RL->getDecl() == RR->getDecl())\n      Sema.Diag(Loc, diag::warn_identity_field_assign) << 1;"}}
},
},
["warn_ignored_clang_option"]={
["warn_ignored_clang_option"]={
Line 6,887: Line 6,887:
[c]=u,
[c]=u,
[b]={"c91996817fa3",1498944981,"Add an option group for deprecated warnings. Add the removed"},
[b]={"c91996817fa3",1498944981,"Add an option group for deprecated warnings. Add the removed"},
[k]={{U,5137,"#endif\n  for (const Arg *A : Args.filtered(options::OPT_clang_ignored_legacy_options_Group)) {\n    D.Diag(diag::warn_ignored_clang_option) << A->getAsString(Args);"}}
[k]={{U,5947,"#endif\n  for (const Arg *A : Args.filtered(options::OPT_clang_ignored_legacy_options_Group)) {\n    D.Diag(diag::warn_ignored_clang_option) << A->getAsString(Args);"}}
},
},
["warn_ignored_gcc_optimization"]={
["warn_ignored_gcc_optimization"]={
Line 6,901: Line 6,901:
[c]=u,
[c]=u,
[b]={"2fe501eef908",1405079037,"GCC compatibility: Create a Group to ignore unsupported optimization."},
[b]={"2fe501eef908",1405079037,"GCC compatibility: Create a Group to ignore unsupported optimization."},
[k]={{U,5132,"#endif\n  // Warn about ignored options to clang.\n  for (const Arg *A : Args.filtered(options::OPT_clang_ignored_gcc_optimization_f_Group)) {\n    D.Diag(diag::warn_ignored_gcc_optimization) << A->getAsString(Args);"}}
[k]={{U,5941,"#endif\n  // Warn about ignored options to clang.\n  for (const Arg *A : Args.filtered(options::OPT_clang_ignored_gcc_optimization_f_Group)) {\n    D.Diag(diag::warn_ignored_gcc_optimization) << A->getAsString(Args);"}}
},
},
["warn_ignored_hip_only_option"]={
["warn_ignored_hip_only_option"]={
Line 6,915: Line 6,915:
[c]=u,
[c]=u,
[b]={"39f50da2a357",1568041174,"Support -fstack-clash-protection for x86"},
[b]={"39f50da2a357",1568041174,"Support -fstack-clash-protection for x86"},
[k]={{sc,399,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  if (Args.hasArg(OPT_fgpu_allow_device_init) && !LangOpts.HIP)\n    Diags.Report(diag::warn_ignored_hip_only_option) << Args.getLastArg(OPT_fgpu_allow_device_init)->getAsString(Args);"},{sc,402,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  if (Args.hasArg(OPT_gpu_max_threads_per_block_EQ) && !LangOpts.HIP)\n    Diags.Report(diag::warn_ignored_hip_only_option) << Args.getLastArg(OPT_gpu_max_threads_per_block_EQ)->getAsString(Args);"}}
[k]={{sc,522,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  if (Args.hasArg(OPT_fgpu_allow_device_init) && !LangOpts.HIP)\n    Diags.Report(diag::warn_ignored_hip_only_option) << Args.getLastArg(OPT_fgpu_allow_device_init)->getAsString(Args);"},{sc,526,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  if (Args.hasArg(OPT_gpu_max_threads_per_block_EQ) && !LangOpts.HIP)\n    Diags.Report(diag::warn_ignored_hip_only_option) << Args.getLastArg(OPT_gpu_max_threads_per_block_EQ)->getAsString(Args);"}}
},
},
["warn_ignored_ms_inheritance"]={
["warn_ignored_ms_inheritance"]={
Line 6,929: Line 6,929:
[c]=q,
[c]=q,
[b]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords"},
[b]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords"},
[k]={{H,7126,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  if (RD->hasDefinition()) {\n  } else {\n    if (isa<ClassTemplatePartialSpecializationDecl>(RD)) {\n      Diag(CI.getLoc(), diag::warn_ignored_ms_inheritance) << 1 /*partial specialization*/;"},{H,7130,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  if (RD->hasDefinition()) {\n  } else {\n    if (RD->getDescribedClassTemplate()) {\n      Diag(CI.getLoc(), diag::warn_ignored_ms_inheritance) << 0 /*primary template*/;"}}
[k]={{H,8082,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  if (RD->hasDefinition()) {\n  } else {\n    if (isa<ClassTemplatePartialSpecializationDecl>(RD)) {\n      Diag(CI.getLoc(), diag::warn_ignored_ms_inheritance) << 1 /*partial specialization*/;"},{H,8087,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  if (RD->hasDefinition()) {\n  } else {\n    if (RD->getDescribedClassTemplate()) {\n      Diag(CI.getLoc(), diag::warn_ignored_ms_inheritance) << 0 /*primary template*/;"}}
},
},
["warn_ignored_objc_externally_retained"]={
["warn_ignored_objc_externally_retained"]={
Line 6,943: Line 6,943:
[c]=q,
[c]=q,
[b]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained"},
[b]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained"},
[k]={{H,7447,"static bool tryMakeVariablePseudoStrong(Sema &S, VarDecl *VD, bool DiagnoseFailure) {\n  if (!Ty->isObjCRetainableType()) {\n    if (DiagnoseFailure) {\n      S.Diag(VD->getBeginLoc(), diag::warn_ignored_objc_externally_retained) << 0;"},{H,7464,"static bool tryMakeVariablePseudoStrong(Sema &S, VarDecl *VD, bool DiagnoseFailure) {\n  // The attributes only really makes sense for __strong variables; ignore any\n  // attempts to annotate a parameter with any other lifetime qualifier.\n  if (LifetimeQual != Qualifiers::OCL_Strong) {\n    if (DiagnoseFailure) {\n      S.Diag(VD->getBeginLoc(), diag::warn_ignored_objc_externally_retained) << 1;"},{H,7481,"static void handleObjCExternallyRetainedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (auto *VD = dyn_cast<VarDecl>(D)) {\n    if (!VD->hasLocalStorage()) {\n      S.Diag(D->getBeginLoc(), diag::warn_ignored_objc_externally_retained) << 0;"}}
[k]={{H,8452,"static bool tryMakeVariablePseudoStrong(Sema &S, VarDecl *VD, bool DiagnoseFailure) {\n  if (!Ty->isObjCRetainableType()) {\n    if (DiagnoseFailure) {\n      S.Diag(VD->getBeginLoc(), diag::warn_ignored_objc_externally_retained) << 0;"},{H,8470,"static bool tryMakeVariablePseudoStrong(Sema &S, VarDecl *VD, bool DiagnoseFailure) {\n  // The attributes only really makes sense for __strong variables; ignore any\n  // attempts to annotate a parameter with any other lifetime qualifier.\n  if (LifetimeQual != Qualifiers::OCL_Strong) {\n    if (DiagnoseFailure) {\n      S.Diag(VD->getBeginLoc(), diag::warn_ignored_objc_externally_retained) << 1;"},{H,8489,"static void handleObjCExternallyRetainedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (auto *VD = dyn_cast<VarDecl>(D)) {\n    if (!VD->hasLocalStorage()) {\n      S.Diag(D->getBeginLoc(), diag::warn_ignored_objc_externally_retained) << 0;"}}
},
},
["warn_ignoring_fdiscard_for_bitcode"]={
["warn_ignoring_fdiscard_for_bitcode"]={
Line 6,957: Line 6,957:
[c]=u,
[c]=u,
[b]={Ub,1534346725,Tb},
[b]={Ub,1534346725,Tb},
[k]={{U,4450,"#endif\n  // Discard value names in assert builds unless otherwise specified.\n  if (Args.hasFlag(options::OPT_fdiscard_value_names, options::OPT_fno_discard_value_names, !IsAssertBuild)) {\n    if (Args.hasArg(options::OPT_fdiscard_value_names) && llvm::any_of(Inputs, [](const clang::driver::InputInfo &II) { return types::isLLVMIR(II.getType()); })) {\n      D.Diag(diag::warn_ignoring_fdiscard_for_bitcode);"}}
[k]={{U,5132,"#endif\n  // Discard value names in assert builds unless otherwise specified.\n  if (Args.hasFlag(options::OPT_fdiscard_value_names, options::OPT_fno_discard_value_names, !IsAssertBuild)) {\n    if (Args.hasArg(options::OPT_fdiscard_value_names) && llvm::any_of(Inputs, [](const clang::driver::InputInfo &II) { return types::isLLVMIR(II.getType()); })) {\n      D.Diag(diag::warn_ignoring_fdiscard_for_bitcode);"}}
},
},
["warn_ignoring_ftabstop_value"]={
["warn_ignoring_ftabstop_value"]={
Line 6,969: Line 6,969:
[c]=u,
[c]=u,
[b]={"3d756f1a9e05",1263352010,"diagnose invalid values of -ftabstop, patch by Christian Adaker!"},
[b]={"3d756f1a9e05",1263352010,"diagnose invalid values of -ftabstop, patch by Christian Adaker!"},
[k]={{sc,1966,"#include \"clang/Driver/Options.inc\"\n  if (Opts.TabStop == 0 || Opts.TabStop > DiagnosticOptions::MaxTabStop) {\n    Diags->Report(diag::warn_ignoring_ftabstop_value) << Opts.TabStop << DiagnosticOptions::DefaultTabStop;"}}
[k]={{sc,2401,"#include \"clang/Driver/Options.inc\"\n  if (Opts.TabStop == 0 || Opts.TabStop > DiagnosticOptions::MaxTabStop) {\n    Diags->Report(diag::warn_ignoring_ftabstop_value) << Opts.TabStop << DiagnosticOptions::DefaultTabStop;"}}
},
},
["warn_ignoring_verify_debuginfo_preserve_export"]={
["warn_ignoring_verify_debuginfo_preserve_export"]={
Line 6,983: Line 6,983:
[c]=u,
[c]=u,
[b]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[b]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[k]={{sc,1396,"#include \"clang/Driver/Options.inc\"\n  if (!Opts.EnableDIPreservationVerify && Opts.DIBugsReportFilePath.size()) {\n    Diags.Report(diag::warn_ignoring_verify_debuginfo_preserve_export) << Opts.DIBugsReportFilePath;"}}
[k]={{sc,1712,"#include \"clang/Driver/Options.inc\"\n  if (!Opts.EnableDIPreservationVerify && Opts.DIBugsReportFilePath.size()) {\n    Diags.Report(diag::warn_ignoring_verify_debuginfo_preserve_export) << Opts.DIBugsReportFilePath;"}}
},
},
["warn_imp_cast_drops_unaligned"]={
["warn_imp_cast_drops_unaligned"]={
Line 6,997: Line 6,997:
[c]=q,
[c]=q,
[b]={Rc,1620118562,Qc},
[b]={Rc,1620118562,Qc},
[k]={{Sb,4011,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  case ICK_Qualification: {\n    if (!isCast(CCK) && !ToType->getPointeeType().getQualifiers().hasUnaligned() && From->getType()->getPointeeType().getQualifiers().hasUnaligned()) {\n      Diag(From->getBeginLoc(), diag::warn_imp_cast_drops_unaligned) << InitialFromType << ToType;"}}
[k]={{Sb,4740,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  case ICK_Qualification: {\n    if (!isCast(CCK) && !ToType->getPointeeType().getQualifiers().hasUnaligned() && From->getType()->getPointeeType().getQualifiers().hasUnaligned()) {\n      Diag(From->getBeginLoc(), diag::warn_imp_cast_drops_unaligned) << InitialFromType << ToType;"}}
},
},
["warn_impcast_bitfield_precision_constant"]={
["warn_impcast_bitfield_precision_constant"]={
Line 7,011: Line 7,011:
[c]=Z,
[c]=Z,
[b]={"d2a5312e14e3",1289345087,"Add a warning for implicit truncation of constant values due to"},
[b]={"d2a5312e14e3",1289345087,"Add a warning for implicit truncation of constant values due to"},
[k]={{w,12659,"/// 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  S.Diag(InitLoc, OneAssignedToOneBitBitfield ? diag::warn_impcast_single_bit_bitield_precision_constant : diag::warn_impcast_bitfield_precision_constant) << PrettyValue << PrettyTrunc << OriginalInit->getType() << Init->getSourceRange();"}}
[k]={{w,14157,"/// 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  S.Diag(InitLoc, OneAssignedToOneBitBitfield ? diag::warn_impcast_single_bit_bitield_precision_constant : diag::warn_impcast_bitfield_precision_constant) << PrettyValue << PrettyTrunc << OriginalInit->getType() << Init->getSourceRange();"}}
},
},
["warn_impcast_bool_to_null_pointer"]={
["warn_impcast_bool_to_null_pointer"]={
Line 7,025: Line 7,025:
[c]=Z,
[c]=Z,
[b]={"66a7b0476768",1302335297,"Clean up the bool conversion warning. Group it with other conversion"},
[b]={"66a7b0476768",1302335297,"Clean up the bool conversion warning. Group it with other conversion"},
[k]={{"clang/lib/Sema/SemaOverload.cpp",2679,"/// CheckPointerConversion - Check the pointer conversion from the\n/// expression From to the type ToType. This routine checks for\n/// ambiguous or inaccessible derived-to-base pointer\n/// conversions for which IsPointerConversion has already returned\n/// true. It returns true and produces a diagnostic if there was an\n/// error, or returns false otherwise.\nbool Sema::CheckPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess, bool Diagnose) {\n  if (Diagnose && !IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() && From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) == Expr::NPCK_ZeroExpression) {\n    if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))\n      DiagRuntimeBehavior(From->getExprLoc(), From, PDiag(diag::warn_impcast_bool_to_null_pointer) << ToType << From->getSourceRange());"}}
[k]={{"clang/lib/Sema/SemaOverload.cpp",3128,"/// CheckPointerConversion - Check the pointer conversion from the\n/// expression From to the type ToType. This routine checks for\n/// ambiguous or inaccessible derived-to-base pointer\n/// conversions for which IsPointerConversion has already returned\n/// true. It returns true and produces a diagnostic if there was an\n/// error, or returns false otherwise.\nbool Sema::CheckPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess, bool Diagnose) {\n  if (Diagnose && !IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() && From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) == Expr::NPCK_ZeroExpression) {\n    if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))\n      DiagRuntimeBehavior(From->getExprLoc(), From, PDiag(diag::warn_impcast_bool_to_null_pointer) << ToType << From->getSourceRange());"}}
},
},
["warn_impcast_complex_scalar"]={
["warn_impcast_complex_scalar"]={
Line 7,040: Line 7,040:
[c]=Z,
[c]=Z,
[b]={Fd,1257564610,Bd},
[b]={Fd,1257564610,Bd},
[k]={{w,13150,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // Strip complex types.\n  if (isa<ComplexType>(Source)) {\n    if (!isa<ComplexType>(Target)) {\n      return DiagnoseImpCast(S, E, T, CC, S.getLangOpts().CPlusPlus ? diag::err_impcast_complex_scalar : diag::warn_impcast_complex_scalar);"}}
[k]={{w,14763,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // Strip complex types.\n  if (isa<ComplexType>(Source)) {\n    if (!isa<ComplexType>(Target)) {\n      return DiagnoseImpCast(S, E, T, CC, S.getLangOpts().CPlusPlus ? diag::err_impcast_complex_scalar : diag::warn_impcast_complex_scalar);"}}
},
},
["warn_impcast_constant_value_to_objc_bool"]={
["warn_impcast_constant_value_to_objc_bool"]={
Line 7,054: Line 7,054:
[c]=Z,
[c]=Z,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{w,12750,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (isObjCSignedCharBool(S, T) && IntegerValue != 0 && IntegerValue != 1) {\n    return adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CContext, diag::warn_impcast_constant_value_to_objc_bool) << PrettySourceValue);"},{w,13106,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // If the we\'re converting a constant to an ObjC BOOL on a platform where BOOL\n  // is a typedef for signed char (macOS), then that constant value has to be 1\n  // or 0.\n  if (isObjCSignedCharBool(S, T) && Source->isIntegralType(S.Context)) {\n    if (E->EvaluateAsInt(Result, S.getASTContext(), Expr::SE_AllowSideEffects)) {\n      if (Result.Val.getInt() != 1 && Result.Val.getInt() != 0) {\n        adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CC, diag::warn_impcast_constant_value_to_objc_bool) << toString(Result.Val.getInt(), 10));"}}
[k]={{w,14280,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (isObjCSignedCharBool(S, T) && IntegerValue != 0 && IntegerValue != 1) {\n    return adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CContext, diag::warn_impcast_constant_value_to_objc_bool) << PrettySourceValue);"},{w,14707,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // If the we\'re converting a constant to an ObjC BOOL on a platform where BOOL\n  // is a typedef for signed char (macOS), then that constant value has to be 1\n  // or 0.\n  if (isObjCSignedCharBool(S, T) && Source->isIntegralType(S.Context)) {\n    if (E->EvaluateAsInt(Result, S.getASTContext(), Expr::SE_AllowSideEffects)) {\n      if (Result.Val.getInt() != 1 && Result.Val.getInt() != 0) {\n        adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CC, diag::warn_impcast_constant_value_to_objc_bool) << toString(Result.Val.getInt(), 10));"}}
},
},
["warn_impcast_different_enum_types"]={
["warn_impcast_different_enum_types"]={
Line 7,068: Line 7,068:
[c]=Z,
[c]=Z,
[b]={"a78f193e7ecf",1298342707,"Warn about implicit conversions between values of different, named"},
[b]={"a78f193e7ecf",1298342707,"Warn about implicit conversions between values of different, named"},
[k]={{w,13450,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (const EnumType *SourceEnum = Source->getAs<EnumType>())\n    if (const EnumType *TargetEnum = Target->getAs<EnumType>())\n      if (SourceEnum->getDecl()->hasNameForLinkage() && TargetEnum->getDecl()->hasNameForLinkage() && SourceEnum != TargetEnum) {\n        return DiagnoseImpCast(S, E, SourceType, T, CC, diag::warn_impcast_different_enum_types);"}}
[k]={{w,15131,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (const EnumType *SourceEnum = Source->getAs<EnumType>())\n    if (const EnumType *TargetEnum = Target->getAs<EnumType>())\n      if (SourceEnum->getDecl()->hasNameForLinkage() && TargetEnum->getDecl()->hasNameForLinkage() && SourceEnum != TargetEnum) {\n        return DiagnoseImpCast(S, E, SourceType, T, CC, diag::warn_impcast_different_enum_types);"}}
},
},
["warn_impcast_double_promotion"]={
["warn_impcast_double_promotion"]={
Line 7,083: Line 7,083:
[c]=q,
[c]=q,
[b]={"148e0d3d5d8d",1446078532,"[Sema] Implement -Wdouble-promotion for clang."},
[b]={"148e0d3d5d8d",1446078532,"[Sema] Implement -Wdouble-promotion for clang."},
[k]={{w,13207,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // If the source is floating point...\n  if (SourceBT && SourceBT->isFloatingPoint()) {\n    // ...and the target is floating point...\n    if (TargetBT && TargetBT->isFloatingPoint()) {\n      }\n      // ... or possibly if we\'re increasing rank, too\n      else if (Order < 0) {\n        DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_double_promotion);"}}
[k]={{w,14826,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // If the source is floating point...\n  if (SourceBT && SourceBT->isFloatingPoint()) {\n    // ...and the target is floating point...\n    if (TargetBT && TargetBT->isFloatingPoint()) {\n      }\n      // ... or possibly if we\'re increasing rank, too\n      else if (Order < 0) {\n        DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_double_promotion);"}}
},
},
["warn_impcast_fixed_point_range"]={
["warn_impcast_fixed_point_range"]={
Line 7,097: Line 7,097:
[c]=q,
[c]=q,
[b]={"d3f3e16293e5",1547845465,"[Fixed Point Arithmetic] Fixed Point Addition Constant Expression Evaluation"},
[b]={"d3f3e16293e5",1547845465,"[Fixed Point Arithmetic] Fixed Point Addition Constant Expression Evaluation"},
[k]={{w,13254,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // Valid casts involving fixed point types should be accounted for here.\n  if (Source->isFixedPointType()) {\n    if (Target->isUnsaturatedFixedPointType()) {\n      if (E->EvaluateAsFixedPoint(Result, S.Context, Expr::SE_AllowSideEffects, S.isConstantEvaluated())) {\n        if (Value > MaxVal || Value < MinVal) {\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_fixed_point_range) << Value.toString() << T << E->getSourceRange() << clang::SourceRange(CC));"},{w,13267,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // Valid casts involving fixed point types should be accounted for here.\n  if (Source->isFixedPointType()) {\n    if (Target->isUnsaturatedFixedPointType()) {\n    } else if (Target->isIntegerType()) {\n      if (!S.isConstantEvaluated() && E->EvaluateAsFixedPoint(Result, S.Context, Expr::SE_AllowSideEffects)) {\n        if (Overflowed) {\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_fixed_point_range) << FXResult.toString() << T << E->getSourceRange() << clang::SourceRange(CC));"},{w,13282,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // Valid casts involving fixed point types should be accounted for here.\n  if (Source->isFixedPointType()) {\n  } else if (Target->isUnsaturatedFixedPointType()) {\n    if (Source->isIntegerType()) {\n      if (!S.isConstantEvaluated() && E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n        if (Overflowed) {\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_fixed_point_range) << toString(Value, /*Radix=*/10) << T << E->getSourceRange() << clang::SourceRange(CC));"}}
[k]={{w,14877,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // Valid casts involving fixed point types should be accounted for here.\n  if (Source->isFixedPointType()) {\n    if (Target->isUnsaturatedFixedPointType()) {\n      if (E->EvaluateAsFixedPoint(Result, S.Context, Expr::SE_AllowSideEffects, S.isConstantEvaluated())) {\n        if (Value > MaxVal || Value < MinVal) {\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_fixed_point_range) << Value.toString() << T << E->getSourceRange() << clang::SourceRange(CC));"},{w,14898,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // Valid casts involving fixed point types should be accounted for here.\n  if (Source->isFixedPointType()) {\n    if (Target->isUnsaturatedFixedPointType()) {\n    } else if (Target->isIntegerType()) {\n      if (!S.isConstantEvaluated() && E->EvaluateAsFixedPoint(Result, S.Context, Expr::SE_AllowSideEffects)) {\n        if (Overflowed) {\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_fixed_point_range) << FXResult.toString() << T << E->getSourceRange() << clang::SourceRange(CC));"},{w,14919,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // Valid casts involving fixed point types should be accounted for here.\n  if (Source->isFixedPointType()) {\n  } else if (Target->isUnsaturatedFixedPointType()) {\n    if (Source->isIntegerType()) {\n      if (!S.isConstantEvaluated() && E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n        if (Overflowed) {\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_fixed_point_range) << toString(Value, /*Radix=*/10) << T << E->getSourceRange() << clang::SourceRange(CC));"}}
},
},
["warn_impcast_float_integer"]={
["warn_impcast_float_integer"]={
Line 7,112: Line 7,112:
[c]=Z,
[c]=Z,
[b]={Fd,1257564610,Bd},
[b]={Fd,1257564610,Bd},
[k]={{w,12731,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (!IsConstant) {\n    return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{w,12756,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (Result == llvm::APFloat::opOK && isExact) {\n    return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{w,12770,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (IsLiteral) {\n  } else if (IntegerValue == 0) {\n    if (Value.isZero()) { // Skip -0.0 to 0 conversion.\n      return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{w,12777,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (IsLiteral) {\n  } else if (IntegerValue == 0) {\n  } else {\n    if (IntegerValue.isUnsigned()) {\n      if (!IntegerValue.isMaxValue()) {\n        return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{w,12781,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (IsLiteral) {\n  } else if (IntegerValue == 0) {\n  } else {\n    if (IntegerValue.isUnsigned()) {\n    } else { // IntegerValue.isSigned()\n      if (!IntegerValue.isMaxSignedValue() && !IntegerValue.isMinSignedValue()) {\n        return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{w,12822,"/// Analyze the given compound assignment for the possible losing of\n/// floating-point precision.\nstatic void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {\n  // If source is floating point but target is an integer.\n  if (ResultBT->isInteger())\n    return DiagnoseImpCast(S, E, E->getRHS()->getType(), E->getLHS()->getType(), E->getExprLoc(), diag::warn_impcast_float_integer);"}}
[k]={{w,14257,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (!IsConstant) {\n    return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{w,14286,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (Result == llvm::APFloat::opOK && isExact) {\n    return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{w,14306,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (IsLiteral) {\n  } else if (IntegerValue == 0) {\n    if (Value.isZero()) { // Skip -0.0 to 0 conversion.\n      return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{w,14314,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (IsLiteral) {\n  } else if (IntegerValue == 0) {\n  } else {\n    if (IntegerValue.isUnsigned()) {\n      if (!IntegerValue.isMaxValue()) {\n        return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{w,14320,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (IsLiteral) {\n  } else if (IntegerValue == 0) {\n  } else {\n    if (IntegerValue.isUnsigned()) {\n    } else { // IntegerValue.isSigned()\n      if (!IntegerValue.isMaxSignedValue() && !IntegerValue.isMinSignedValue()) {\n        return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{w,14370,"/// Analyze the given compound assignment for the possible losing of\n/// floating-point precision.\nstatic void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {\n  // If source is floating point but target is an integer.\n  if (ResultBT->isInteger())\n    return DiagnoseImpCast(S, E, E->getRHS()->getType(), E->getLHS()->getType(), E->getExprLoc(), diag::warn_impcast_float_integer);"}}
},
},
["warn_impcast_float_precision"]={
["warn_impcast_float_precision"]={
Line 7,127: Line 7,127:
[c]=Z,
[c]=Z,
[b]={Fd,1257564610,Bd},
[b]={Fd,1257564610,Bd},
[k]={{w,13200,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // If the source is floating point...\n  if (SourceBT && SourceBT->isFloatingPoint()) {\n    // ...and the target is floating point...\n    if (TargetBT && TargetBT->isFloatingPoint()) {\n      if (Order > 0) {\n        DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_float_precision);"}}
[k]={{w,14819,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // If the source is floating point...\n  if (SourceBT && SourceBT->isFloatingPoint()) {\n    // ...and the target is floating point...\n    if (TargetBT && TargetBT->isFloatingPoint()) {\n      if (Order > 0) {\n        DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_float_precision);"}}
},
},
["warn_impcast_float_result_precision"]={
["warn_impcast_float_result_precision"]={
Line 7,142: Line 7,142:
[c]=Z,
[c]=Z,
[b]={"5704dc0c7f6c",1521108215,"More warnings when double truncation to float: compound assignment is supported now."},
[b]={"5704dc0c7f6c",1521108215,"More warnings when double truncation to float: compound assignment is supported now."},
[k]={{w,12831,"/// Analyze the given compound assignment for the possible losing of\n/// floating-point precision.\nstatic void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {\n  if (Order < 0 && !S.SourceMgr.isInSystemMacro(E->getOperatorLoc()))\n    DiagnoseImpCast(S, E->getRHS(), E->getLHS()->getType(), E->getOperatorLoc(), diag::warn_impcast_float_result_precision);"}}
[k]={{w,14381,"/// Analyze the given compound assignment for the possible losing of\n/// floating-point precision.\nstatic void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {\n  if (Order < 0 && !S.SourceMgr.isInSystemMacro(E->getOperatorLoc()))\n    DiagnoseImpCast(S, E->getRHS(), E->getLHS()->getType(), E->getOperatorLoc(), diag::warn_impcast_float_result_precision);"}}
},
},
["warn_impcast_float_to_integer"]={
["warn_impcast_float_to_integer"]={
Line 7,157: Line 7,157:
[c]=Z,
[c]=Z,
[b]={"be234c30ada7",1461272695,"Split interesting warnings off from -Wfloat-conversion"},
[b]={"be234c30ada7",1461272695,"Split interesting warnings off from -Wfloat-conversion"},
[k]={{w,12785,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (IsLiteral) {\n  } else if (IntegerValue == 0) {\n  } else {\n    DiagID = diag::warn_impcast_float_to_integer;"}}
[k]={{w,14324,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (IsLiteral) {\n  } else if (IntegerValue == 0) {\n  } else {\n    DiagID = diag::warn_impcast_float_to_integer;"}}
},
},
["warn_impcast_float_to_integer_out_of_range"]={
["warn_impcast_float_to_integer_out_of_range"]={
Line 7,172: Line 7,172:
[c]=Z,
[c]=Z,
[b]={"7130a9393470",1525726376,"Correct warning on Float->Integer conversions."},
[b]={"7130a9393470",1525726376,"Correct warning on Float->Integer conversions."},
[k]={{w,12762,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // Conversion of a floating-point value to a non-bool integer where the\n  // integral part cannot be represented by the integer type is undefined.\n  if (!IsBool && Result == llvm::APFloat::opInvalidOp)\n    return DiagnoseImpCast(S, E, T, CContext, IsLiteral ? diag::warn_impcast_literal_float_to_integer_out_of_range : diag::warn_impcast_float_to_integer_out_of_range, PruneWarnings);"}}
[k]={{w,14296,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // Conversion of a floating-point value to a non-bool integer where the\n  // integral part cannot be represented by the integer type is undefined.\n  if (!IsBool && Result == llvm::APFloat::opInvalidOp)\n    return DiagnoseImpCast(S, E, T, CContext, IsLiteral ? diag::warn_impcast_literal_float_to_integer_out_of_range : diag::warn_impcast_float_to_integer_out_of_range, PruneWarnings);"}}
},
},
["warn_impcast_float_to_integer_zero"]={
["warn_impcast_float_to_integer_zero"]={
Line 7,187: Line 7,187:
[c]=Z,
[c]=Z,
[b]={"be234c30ada7",1461272695,"Split interesting warnings off from -Wfloat-conversion"},
[b]={"be234c30ada7",1461272695,"Split interesting warnings off from -Wfloat-conversion"},
[k]={{w,12773,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (IsLiteral) {\n  } else if (IntegerValue == 0) {\n    DiagID = diag::warn_impcast_float_to_integer_zero;"}}
[k]={{w,14309,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (IsLiteral) {\n  } else if (IntegerValue == 0) {\n    DiagID = diag::warn_impcast_float_to_integer_zero;"}}
},
},
["warn_impcast_float_to_objc_signed_char_bool"]={
["warn_impcast_float_to_objc_signed_char_bool"]={
Line 7,201: Line 7,201:
[c]=Z,
[c]=Z,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{w,12728,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (!IsConstant) {\n    if (isObjCSignedCharBool(S, T)) {\n      return adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CContext, diag::warn_impcast_float_to_objc_signed_char_bool) << E->getType());"}}
[k]={{w,14252,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (!IsConstant) {\n    if (isObjCSignedCharBool(S, T)) {\n      return adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CContext, diag::warn_impcast_float_to_objc_signed_char_bool) << E->getType());"}}
},
},
["warn_impcast_floating_point_to_bool"]={
["warn_impcast_floating_point_to_bool"]={
Line 7,215: Line 7,215:
[c]=q,
[c]=q,
[b]={"f4ad23292111",1346168670,"Warn about suspicious implicit conversions from floating point to bool"},
[b]={"f4ad23292111",1346168670,"Warn about suspicious implicit conversions from floating point to bool"},
[k]={{w,12871,"static void CheckImplicitArgumentConversions(Sema &S, CallExpr *TheCall, SourceLocation CC) {\n  for (unsigned i = 0; i < NumArgs; ++i) {\n    if (IsSwapped) {\n      DiagnoseImpCast(S, CurrA->IgnoreParenImpCasts(), CurrA->getType(), CC, diag::warn_impcast_floating_point_to_bool);"},{w,13238,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // If the source is floating point...\n  if (SourceBT && SourceBT->isFloatingPoint()) {\n    // Detect the case where a call result is converted from floating-point to\n    // to bool, and the final argument to the call is converted from bool, to\n    // discover this typo:\n    //\n    //    bool b = fabs(x < 1.0);  // should be \"bool b = fabs(x) < 1.0;\"\n    //\n    // FIXME: This is an incredibly special case; is there some more general\n    // way to detect this class of misplaced-parentheses bug?\n    if (Target->isBooleanType() && isa<CallExpr>(E)) {\n      if (unsigned NumArgs = CEx->getNumArgs()) {\n        if (isa<ImplicitCastExpr>(LastA) && InnerE->getType()->isBooleanType()) {\n          DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_floating_point_to_bool);"}}
[k]={{w,14429,"static void CheckImplicitArgumentConversions(Sema &S, CallExpr *TheCall, SourceLocation CC) {\n  for (unsigned i = 0; i < NumArgs; ++i) {\n    if (IsSwapped) {\n      DiagnoseImpCast(S, CurrA->IgnoreParenImpCasts(), CurrA->getType(), CC, diag::warn_impcast_floating_point_to_bool);"},{w,14859,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // If the source is floating point...\n  if (SourceBT && SourceBT->isFloatingPoint()) {\n    // Detect the case where a call result is converted from floating-point to\n    // to bool, and the final argument to the call is converted from bool, to\n    // discover this typo:\n    //\n    //    bool b = fabs(x < 1.0);  // should be \"bool b = fabs(x) < 1.0;\"\n    //\n    // FIXME: This is an incredibly special case; is there some more general\n    // way to detect this class of misplaced-parentheses bug?\n    if (Target->isBooleanType() && isa<CallExpr>(E)) {\n      if (unsigned NumArgs = CEx->getNumArgs()) {\n        if (isa<ImplicitCastExpr>(LastA) && InnerE->getType()->isBooleanType()) {\n          DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_floating_point_to_bool);"}}
},
},
["warn_impcast_high_order_zero_bits"]={
["warn_impcast_high_order_zero_bits"]={
Line 7,230: Line 7,230:
[c]=Z,
[c]=Z,
[b]={"cf7d2256d6b2",1538460150,"Added warning for unary minus used with unsigned type"},
[b]={"cf7d2256d6b2",1538460150,"Added warning for unary minus used with unsigned type"},
[k]={{w,13382,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (TargetRange.Width > SourceTypeRange.Width) {\n    if (auto *UO = dyn_cast<UnaryOperator>(E))\n      if (UO->getOpcode() == UO_Minus)\n        if (Source->isUnsignedIntegerType()) {\n          if (Target->isUnsignedIntegerType())\n            return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_high_order_zero_bits);"}}
[k]={{w,15047,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (TargetRange.Width > SourceTypeRange.Width) {\n    if (auto *UO = dyn_cast<UnaryOperator>(E))\n      if (UO->getOpcode() == UO_Minus)\n        if (Source->isUnsignedIntegerType()) {\n          if (Target->isUnsignedIntegerType())\n            return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_high_order_zero_bits);"}}
},
},
["warn_impcast_int_to_objc_signed_char_bool"]={
["warn_impcast_int_to_objc_signed_char_bool"]={
Line 7,245: Line 7,245:
[c]=Z,
[c]=Z,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{w,13342,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (isObjCSignedCharBool(S, T) && !Source->isCharType() && !E->isKnownToHaveBooleanValue(/*Semantic=*/false)) {\n    return adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CC, diag::warn_impcast_int_to_objc_signed_char_bool) << E->getType());"}}
[k]={{w,14998,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (isObjCSignedCharBool(S, T) && !Source->isCharType() && !E->isKnownToHaveBooleanValue(/*Semantic=*/false)) {\n    return adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CC, diag::warn_impcast_int_to_objc_signed_char_bool) << E->getType());"}}
},
},
["warn_impcast_integer_64_32"]={
["warn_impcast_integer_64_32"]={
Line 7,260: Line 7,260:
[c]=Z,
[c]=Z,
[b]={"b61e9d03c1ab",1257584633,"Support -Wshorten-64-to-32 for integer types only, which seems to satisfy the"},
[b]={"b61e9d03c1ab",1257584633,"Support -Wshorten-64-to-32 for integer types only, which seems to satisfy the"},
[k]={{w,13372,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (LikelySourceRange.Width > TargetRange.Width) {\n    if (TargetRange.Width == 32 && S.Context.getIntWidth(E->getType()) == 64)\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_64_32,"}}
[k]={{w,15036,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (LikelySourceRange.Width > TargetRange.Width) {\n    if (TargetRange.Width == 32 && S.Context.getIntWidth(E->getType()) == 64)\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_64_32,"}}
},
},
["warn_impcast_integer_float_precision"]={
["warn_impcast_integer_float_precision"]={
Line 7,275: Line 7,275:
[c]=Z,
[c]=Z,
[b]={"2028d97d09b8",1564014770,"[Sema] Enable -Wimplicit-float-conversion for integral to floating point precision loss"},
[b]={"2028d97d09b8",1564014770,"[Sema] Enable -Wimplicit-float-conversion for integral to floating point precision loss"},
[k]={{w,13321,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // If we are casting an integer type to a floating point type without\n  // initialization-list syntax, we might lose accuracy if the floating\n  // point type has a narrower significand than the integer type.\n  if (SourceBT && TargetBT && SourceBT->isIntegerType() && TargetBT->isFloatingType() && !IsListInit) {\n    if (SourcePrecision > 0 && TargetPrecision > 0 && SourcePrecision > TargetPrecision) {\n      if (std::optional<llvm::APSInt> SourceInt = E->getIntegerConstantExpr(S.Context)) {\n      } else {\n        DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_float_precision);"}}
[k]={{w,14974,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // If we are casting an integer type to a floating point type without\n  // initialization-list syntax, we might lose accuracy if the floating\n  // point type has a narrower significand than the integer type.\n  if (SourceBT && TargetBT && SourceBT->isIntegerType() && TargetBT->isFloatingType() && !IsListInit) {\n    if (SourcePrecision > 0 && TargetPrecision > 0 && SourcePrecision > TargetPrecision) {\n      if (std::optional<llvm::APSInt> SourceInt = E->getIntegerConstantExpr(S.Context)) {\n      } else {\n        DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_float_precision);"}}
},
},
["warn_impcast_integer_float_precision_constant"]={
["warn_impcast_integer_float_precision_constant"]={
Line 7,289: Line 7,289:
[c]=Z,
[c]=Z,
[b]={"2028d97d09b8",1564014770,"[Sema] Enable -Wimplicit-float-conversion for integral to floating point precision loss"},
[b]={"2028d97d09b8",1564014770,"[Sema] Enable -Wimplicit-float-conversion for integral to floating point precision loss"},
[k]={{w,13317,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // If we are casting an integer type to a floating point type without\n  // initialization-list syntax, we might lose accuracy if the floating\n  // point type has a narrower significand than the integer type.\n  if (SourceBT && TargetBT && SourceBT->isIntegerType() && TargetBT->isFloatingType() && !IsListInit) {\n    if (SourcePrecision > 0 && TargetPrecision > 0 && SourcePrecision > TargetPrecision) {\n      if (std::optional<llvm::APSInt> SourceInt = E->getIntegerConstantExpr(S.Context)) {\n        if (ConversionStatus != llvm::APFloat::opOK) {\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_integer_float_precision_constant) << PrettySourceValue << PrettyTargetValue << E->getType() << T << E->getSourceRange() << clang::SourceRange(CC));"}}
[k]={{w,14967,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // If we are casting an integer type to a floating point type without\n  // initialization-list syntax, we might lose accuracy if the floating\n  // point type has a narrower significand than the integer type.\n  if (SourceBT && TargetBT && SourceBT->isIntegerType() && TargetBT->isFloatingType() && !IsListInit) {\n    if (SourcePrecision > 0 && TargetPrecision > 0 && SourcePrecision > TargetPrecision) {\n      if (std::optional<llvm::APSInt> SourceInt = E->getIntegerConstantExpr(S.Context)) {\n        if (ConversionStatus != llvm::APFloat::opOK) {\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_integer_float_precision_constant) << PrettySourceValue << PrettyTargetValue << E->getType() << T << E->getSourceRange() << clang::SourceRange(CC));"}}
},
},
["warn_impcast_integer_precision"]={
["warn_impcast_integer_precision"]={
Line 7,304: Line 7,304:
[c]=Z,
[c]=Z,
[b]={Fd,1257564610,Bd},
[b]={Fd,1257564610,Bd},
[k]={{w,13374,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (LikelySourceRange.Width > TargetRange.Width) {\n    return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_precision);"}}
[k]={{w,15038,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (LikelySourceRange.Width > TargetRange.Width) {\n    return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_precision);"}}
},
},
["warn_impcast_integer_precision_constant"]={
["warn_impcast_integer_precision_constant"]={
Line 7,318: Line 7,318:
[c]=Z,
[c]=Z,
[b]={"18a2c2c0b9d2",1289341332,"Split out -Wconversion warnings about constant precision into their"},
[b]={"18a2c2c0b9d2",1289341332,"Split out -Wconversion warnings about constant precision into their"},
[k]={{w,13363,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (LikelySourceRange.Width > TargetRange.Width) {\n    if (E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects, S.isConstantEvaluated())) {\n      S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_integer_precision_constant) << PrettySourceValue << PrettyTargetValue << E->getType() << T << E->getSourceRange() << SourceRange(CC));"},{w,13400,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (TargetRange.Width == LikelySourceRange.Width && !TargetRange.NonNegative && LikelySourceRange.NonNegative && Source->isSignedIntegerType()) {\n    if (E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects) && !S.SourceMgr.isInSystemMacro(CC)) {\n      if (isSameWidthConstantConversion(S, E, T, CC)) {\n        S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_integer_precision_constant) << PrettySourceValue << PrettyTargetValue << E->getType() << T << E->getSourceRange() << SourceRange(CC));"}}
[k]={{w,15025,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (LikelySourceRange.Width > TargetRange.Width) {\n    if (E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects, S.isConstantEvaluated())) {\n      S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_integer_precision_constant) << PrettySourceValue << PrettyTargetValue << E->getType() << T << E->getSourceRange() << SourceRange(CC));"},{w,15071,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (TargetRange.Width == LikelySourceRange.Width && !TargetRange.NonNegative && LikelySourceRange.NonNegative && Source->isSignedIntegerType()) {\n    if (E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects) && !S.SourceMgr.isInSystemMacro(CC)) {\n      if (isSameWidthConstantConversion(S, E, T, CC)) {\n        S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_integer_precision_constant) << PrettySourceValue << PrettyTargetValue << E->getType() << T << E->getSourceRange() << SourceRange(CC));"}}
},
},
["warn_impcast_integer_sign"]={
["warn_impcast_integer_sign"]={
Line 7,333: Line 7,333:
[c]=Z,
[c]=Z,
[b]={"cc7e5bff5c80",1273136313,"Rearchitect -Wconversion and -Wsign-compare.  Instead of computing them"},
[b]={"cc7e5bff5c80",1273136313,"Rearchitect -Wconversion and -Wsign-compare.  Instead of computing them"},
[k]={{w,13416,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if ((!isa<EnumType>(Target) || !isa<EnumType>(Source)) && ((TargetRange.NonNegative && !LikelySourceRange.NonNegative) || (!TargetRange.NonNegative && LikelySourceRange.NonNegative && LikelySourceRange.Width == TargetRange.Width))) {\n    unsigned DiagID = diag::warn_impcast_integer_sign;"}}
[k]={{w,15094,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if ((!isa<EnumType>(Target) || !isa<EnumType>(Source)) && ((TargetRange.NonNegative && !LikelySourceRange.NonNegative) || (!TargetRange.NonNegative && LikelySourceRange.NonNegative && LikelySourceRange.Width == TargetRange.Width))) {\n    unsigned DiagID = diag::warn_impcast_integer_sign;"}}
},
},
["warn_impcast_integer_sign_conditional"]={
["warn_impcast_integer_sign_conditional"]={
Line 7,348: Line 7,348:
[c]=Z,
[c]=Z,
[b]={"cc7e5bff5c80",1273136313,"Rearchitect -Wconversion and -Wsign-compare.  Instead of computing them"},
[b]={"cc7e5bff5c80",1273136313,"Rearchitect -Wconversion and -Wsign-compare.  Instead of computing them"},
[k]={{w,13424,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if ((!isa<EnumType>(Target) || !isa<EnumType>(Source)) && ((TargetRange.NonNegative && !LikelySourceRange.NonNegative) || (!TargetRange.NonNegative && LikelySourceRange.NonNegative && LikelySourceRange.Width == TargetRange.Width))) {\n    // Traditionally, gcc has warned about this under -Wsign-compare.\n    // We also want to warn about it in -Wconversion.\n    // So if -Wconversion is off, use a completely identical diagnostic\n    // in the sign-compare group.\n    // The conditional-checking code will\n    if (ICContext) {\n      DiagID = diag::warn_impcast_integer_sign_conditional;"},{w,13490,"static void CheckConditionalOperator(Sema &S, AbstractConditionalOperator *E, SourceLocation CC, QualType T) {\n  if (!S.Diags.isIgnored(diag::warn_impcast_integer_sign_conditional, CC))"}}
[k]={{w,15102,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if ((!isa<EnumType>(Target) || !isa<EnumType>(Source)) && ((TargetRange.NonNegative && !LikelySourceRange.NonNegative) || (!TargetRange.NonNegative && LikelySourceRange.NonNegative && LikelySourceRange.Width == TargetRange.Width))) {\n    // Traditionally, gcc has warned about this under -Wsign-compare.\n    // We also want to warn about it in -Wconversion.\n    // So if -Wconversion is off, use a completely identical diagnostic\n    // in the sign-compare group.\n    // The conditional-checking code will\n    if (ICContext) {\n      DiagID = diag::warn_impcast_integer_sign_conditional;"},{w,15173,"static void CheckConditionalOperator(Sema &S, AbstractConditionalOperator *E, SourceLocation CC, QualType T) {\n  if (!S.Diags.isIgnored(diag::warn_impcast_integer_sign_conditional, CC))"}}
},
},
["warn_impcast_literal_float_to_integer"]={
["warn_impcast_literal_float_to_integer"]={
Line 7,362: Line 7,362:
[c]=Z,
[c]=Z,
[b]={"22c7a79a1da4",1297940749,"Implement a sub-group of -Wconversion: -Wliteral-conversion. This"},
[b]={"22c7a79a1da4",1297940749,"Implement a sub-group of -Wconversion: -Wliteral-conversion. This"},
[k]={{w,12767,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (IsLiteral) {\n    DiagID = diag::warn_impcast_literal_float_to_integer;"}}
[k]={{w,14302,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  if (IsLiteral) {\n    DiagID = diag::warn_impcast_literal_float_to_integer;"}}
},
},
["warn_impcast_literal_float_to_integer_out_of_range"]={
["warn_impcast_literal_float_to_integer_out_of_range"]={
Line 7,376: Line 7,376:
[c]=Z,
[c]=Z,
[b]={"7130a9393470",1525726376,"Correct warning on Float->Integer conversions."},
[b]={"7130a9393470",1525726376,"Correct warning on Float->Integer conversions."},
[k]={{w,12762,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // Conversion of a floating-point value to a non-bool integer where the\n  // integral part cannot be represented by the integer type is undefined.\n  if (!IsBool && Result == llvm::APFloat::opInvalidOp)\n    return DiagnoseImpCast(S, E, T, CContext, IsLiteral ? diag::warn_impcast_literal_float_to_integer_out_of_range : diag::warn_impcast_float_to_integer_out_of_range, PruneWarnings);"}}
[k]={{w,14295,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // Conversion of a floating-point value to a non-bool integer where the\n  // integral part cannot be represented by the integer type is undefined.\n  if (!IsBool && Result == llvm::APFloat::opInvalidOp)\n    return DiagnoseImpCast(S, E, T, CContext, IsLiteral ? diag::warn_impcast_literal_float_to_integer_out_of_range : diag::warn_impcast_float_to_integer_out_of_range, PruneWarnings);"}}
},
},
["warn_impcast_nonnegative_result"]={
["warn_impcast_nonnegative_result"]={
Line 7,391: Line 7,391:
[c]=Z,
[c]=Z,
[b]={"cf7d2256d6b2",1538460150,"Added warning for unary minus used with unsigned type"},
[b]={"cf7d2256d6b2",1538460150,"Added warning for unary minus used with unsigned type"},
[k]={{w,13384,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (TargetRange.Width > SourceTypeRange.Width) {\n    if (auto *UO = dyn_cast<UnaryOperator>(E))\n      if (UO->getOpcode() == UO_Minus)\n        if (Source->isUnsignedIntegerType()) {\n          if (Target->isSignedIntegerType())\n            return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_nonnegative_result);"}}
[k]={{w,15050,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  if (TargetRange.Width > SourceTypeRange.Width) {\n    if (auto *UO = dyn_cast<UnaryOperator>(E))\n      if (UO->getOpcode() == UO_Minus)\n        if (Source->isUnsignedIntegerType()) {\n          if (Target->isSignedIntegerType())\n            return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_nonnegative_result);"}}
},
},
["warn_impcast_null_pointer_to_integer"]={
["warn_impcast_null_pointer_to_integer"]={
Line 7,405: Line 7,405:
[c]=Z,
[c]=Z,
[b]={"beaf34531ef1",1306699142,"Add a new warning on NULL pointer constant to integer conversion."},
[b]={"beaf34531ef1",1306699142,"Add a new warning on NULL pointer constant to integer conversion."},
[k]={{w,12877,"static void DiagnoseNullConversion(Sema &S, Expr *E, QualType T, SourceLocation CC) {\n  if (S.Diags.isIgnored(diag::warn_impcast_null_pointer_to_integer, E->getExprLoc()))"},{w,12914,"static void DiagnoseNullConversion(Sema &S, Expr *E, QualType T, SourceLocation CC) {\n  S.Diag(Loc, diag::warn_impcast_null_pointer_to_integer) << HasNullPtrType << T << SourceRange(CC) << FixItHint::CreateReplacement(Loc, S.getFixItZeroLiteralForType(T, Loc));"}}
[k]={{w,14436,"static void DiagnoseNullConversion(Sema &S, Expr *E, QualType T, SourceLocation CC) {\n  if (S.Diags.isIgnored(diag::warn_impcast_null_pointer_to_integer, E->getExprLoc()))"},{w,14476,"static void DiagnoseNullConversion(Sema &S, Expr *E, QualType T, SourceLocation CC) {\n  S.Diag(Loc, diag::warn_impcast_null_pointer_to_integer) << HasNullPtrType << T << SourceRange(CC) << FixItHint::CreateReplacement(Loc, S.getFixItZeroLiteralForType(T, Loc));"}}
},
},
["warn_impcast_objective_c_literal_to_bool"]={
["warn_impcast_objective_c_literal_to_bool"]={
Line 7,419: Line 7,419:
[c]=Z,
[c]=Z,
[b]={"1e632af0d498",1390952426,"A new conversion warning for when an Objective-C object literal is implicitly"},
[b]={"1e632af0d498",1390952426,"A new conversion warning for when an Objective-C object literal is implicitly"},
[k]={{w,13091,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // Diagnose implicit casts to bool.\n  if (Target->isSpecificBuiltinType(BuiltinType::Bool)) {\n    if (isa<ObjCStringLiteral>(E) || isa<ObjCArrayLiteral>(E) || isa<ObjCDictionaryLiteral>(E) || isa<ObjCBoxedExpr>(E)) {\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_objective_c_literal_to_bool);"}}
[k]={{w,14688,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // Diagnose implicit casts to bool.\n  if (Target->isSpecificBuiltinType(BuiltinType::Bool)) {\n    if (isa<ObjCStringLiteral>(E) || isa<ObjCArrayLiteral>(E) || isa<ObjCDictionaryLiteral>(E) || isa<ObjCBoxedExpr>(E)) {\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_objective_c_literal_to_bool);"}}
},
},
["warn_impcast_pointer_to_bool"]={
["warn_impcast_pointer_to_bool"]={
Line 7,433: Line 7,433:
[c]=Z,
[c]=Z,
[b]={"3bb8b56a5d90",1393382166,"PR16074, implement warnings to catch pointer to boolean true and pointer to"},
[b]={"3bb8b56a5d90",1393382166,"PR16074, implement warnings to catch pointer to boolean true and pointer to"},
[k]={{w,13859,"/// 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  unsigned DiagID = IsCompare ? diag::warn_null_pointer_compare : diag::warn_impcast_pointer_to_bool;"}}
[k]={{w,15571,"/// 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  unsigned DiagID = IsCompare ? diag::warn_null_pointer_compare : diag::warn_impcast_pointer_to_bool;"}}
},
},
["warn_impcast_single_bit_bitield_precision_constant"]={
["warn_impcast_single_bit_bitield_precision_constant"]={
Line 7,447: Line 7,447:
[c]=Z,
[c]=Z,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{w,12659,"/// 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  S.Diag(InitLoc, OneAssignedToOneBitBitfield ? diag::warn_impcast_single_bit_bitield_precision_constant : diag::warn_impcast_bitfield_precision_constant) << PrettyValue << PrettyTrunc << OriginalInit->getType() << Init->getSourceRange();"}}
[k]={{w,14156,"/// 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  S.Diag(InitLoc, OneAssignedToOneBitBitfield ? diag::warn_impcast_single_bit_bitield_precision_constant : diag::warn_impcast_bitfield_precision_constant) << PrettyValue << PrettyTrunc << OriginalInit->getType() << Init->getSourceRange();"}}
},
},
["warn_impcast_string_literal_to_bool"]={
["warn_impcast_string_literal_to_bool"]={
Line 7,462: Line 7,462:
[c]=Z,
[c]=Z,
[b]={"021baa373f58",1316808600,"Add a new warning to -Wliteral-conversion to catch cases where a string literal"},
[b]={"021baa373f58",1316808600,"Add a new warning to -Wliteral-conversion to catch cases where a string literal"},
[k]={{w,13087,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // Diagnose implicit casts to bool.\n  if (Target->isSpecificBuiltinType(BuiltinType::Bool)) {\n    if (isa<StringLiteral>(E))\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_string_literal_to_bool);"}}
[k]={{w,14682,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // Diagnose implicit casts to bool.\n  if (Target->isSpecificBuiltinType(BuiltinType::Bool)) {\n    if (isa<StringLiteral>(E))\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_string_literal_to_bool);"}}
},
},
["warn_impcast_vector_scalar"]={
["warn_impcast_vector_scalar"]={
Line 7,477: Line 7,477:
[c]=Z,
[c]=Z,
[b]={Fd,1257564610,Bd},
[b]={Fd,1257564610,Bd},
[k]={{w,13130,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // Strip vector types.\n  if (isa<VectorType>(Source)) {\n    if (!isa<VectorType>(Target)) {\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_vector_scalar);"}}
[k]={{w,14740,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // Strip vector types.\n  if (isa<VectorType>(Source)) {\n    if (!isa<VectorType>(Target)) {\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_vector_scalar);"}}
},
},
["warn_impl_required_for_class_property"]={
["warn_impl_required_for_class_property"]={
Line 7,491: Line 7,491:
[c]=q,
[c]=q,
[b]={"16a7d637dd44",1460502115,"ObjC class properties: add diagnostics for unimplemented class properties."},
[b]={"16a7d637dd44",1460502115,"ObjC class properties: add diagnostics for unimplemented class properties."},
[k]={{Gc,1598,"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    unsigned diag = isa<ObjCCategoryDecl>(CDecl) ? (Prop->isClassProperty() ? diag::warn_impl_required_in_category_for_class_property : diag::warn_setter_getter_impl_required_in_category) : (Prop->isClassProperty() ? diag::warn_impl_required_for_class_property : diag::warn_setter_getter_impl_required);"}}
[k]={{Gc,2018,"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    unsigned diag = isa<ObjCCategoryDecl>(CDecl) ? (Prop->isClassProperty() ? diag::warn_impl_required_in_category_for_class_property : diag::warn_setter_getter_impl_required_in_category) : (Prop->isClassProperty() ? diag::warn_impl_required_for_class_property : diag::warn_setter_getter_impl_required);"}}
},
},
["warn_impl_required_in_category_for_class_property"]={
["warn_impl_required_in_category_for_class_property"]={
Line 7,505: Line 7,505:
[c]=q,
[c]=q,
[b]={"16a7d637dd44",1460502115,"ObjC class properties: add diagnostics for unimplemented class properties."},
[b]={"16a7d637dd44",1460502115,"ObjC class properties: add diagnostics for unimplemented class properties."},
[k]={{Gc,1598,"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    unsigned diag = isa<ObjCCategoryDecl>(CDecl) ? (Prop->isClassProperty() ? diag::warn_impl_required_in_category_for_class_property : diag::warn_setter_getter_impl_required_in_category) : (Prop->isClassProperty() ? diag::warn_impl_required_for_class_property : diag::warn_setter_getter_impl_required);"}}
[k]={{Gc,2015,"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    unsigned diag = isa<ObjCCategoryDecl>(CDecl) ? (Prop->isClassProperty() ? diag::warn_impl_required_in_category_for_class_property : diag::warn_setter_getter_impl_required_in_category) : (Prop->isClassProperty() ? diag::warn_impl_required_for_class_property : diag::warn_setter_getter_impl_required);"}}
},
},
["warn_implements_nscopying"]={
["warn_implements_nscopying"]={
Line 7,517: Line 7,517:
[c]=q,
[c]=q,
[b]={"3f8917abf6f2",1250028145,"Patch to warn if a property which is \'assign\' by default"},
[b]={"3f8917abf6f2",1250028145,"Patch to warn if a property which is \'assign\' by default"},
[k]={{Gc,487,"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  // Issue a warning if property is \'assign\' as default and its\n  // object, which is gc\'able conforms to NSCopying protocol\n  if (getLangOpts().getGC() != LangOptions::NonGC && isAssign && !(Attributes & ObjCPropertyAttribute::kind_assign)) {\n    if (const ObjCObjectPointerType *ObjPtrTy = T->getAs<ObjCObjectPointerType>()) {\n      if (IDecl)\n        if (ObjCProtocolDecl *PNSCopying = LookupProtocol(&Context.Idents.get(\"NSCopying\"), AtLoc))\n          if (IDecl->ClassImplementsProtocol(PNSCopying, true))\n            Diag(AtLoc, diag::warn_implements_nscopying) << PropertyId;"}}
[k]={{Gc,601,"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  // Issue a warning if property is \'assign\' as default and its\n  // object, which is gc\'able conforms to NSCopying protocol\n  if (getLangOpts().getGC() != LangOptions::NonGC && isAssign && !(Attributes & ObjCPropertyAttribute::kind_assign)) {\n    if (const ObjCObjectPointerType *ObjPtrTy = T->getAs<ObjCObjectPointerType>()) {\n      if (IDecl)\n        if (ObjCProtocolDecl *PNSCopying = LookupProtocol(&Context.Idents.get(\"NSCopying\"), AtLoc))\n          if (IDecl->ClassImplementsProtocol(PNSCopying, true))\n            Diag(AtLoc, diag::warn_implements_nscopying) << PropertyId;"}}
},
},
["warn_implicit_atomic_property"]={
["warn_implicit_atomic_property"]={
Line 7,532: Line 7,532:
[c]=q,
[c]=q,
[b]={"382c040da2a6",1292624896,"Warn when synthesizing a property which is"},
[b]={"382c040da2a6",1292624896,"Warn when synthesizing a property which is"},
[k]={{Gc,924,"/// 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        Diag(AtLoc, diag::warn_implicit_atomic_property);"}}
[k]={{Gc,1125,"/// 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        Diag(AtLoc, diag::warn_implicit_atomic_property);"}}
},
},
["warn_implicit_decl_no_jmp_buf"]={
["warn_implicit_decl_no_jmp_buf"]={
Line 7,546: Line 7,546:
[c]=q,
[c]=q,
[b]={"3be25e79477d",1564550198,"[Fix] Customize warnings for missing built-in types"},
[b]={"3be25e79477d",1564550198,"[Fix] Customize warnings for missing built-in types"},
[k]={{G,2206,"/// LazilyCreateBuiltin - The specified Builtin-ID was first used at\n/// file scope.  lazily create a decl for it. ForRedeclaration is true\n/// if we\'re creating this built-in in anticipation of redeclaring the\n/// built-in.\nNamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, Scope *S, bool ForRedeclaration, SourceLocation Loc) {\n  if (Error) {\n    // If we could not find a type for setjmp it is because the jmp_buf type was\n    // not defined prior to the setjmp declaration.\n    if (Error == ASTContext::GE_Missing_setjmp) {\n      Diag(Loc, diag::warn_implicit_decl_no_jmp_buf) << Context.BuiltinInfo.getName(ID);"}}
[k]={{G,2451,"/// LazilyCreateBuiltin - The specified Builtin-ID was first used at\n/// file scope.  lazily create a decl for it. ForRedeclaration is true\n/// if we\'re creating this built-in in anticipation of redeclaring the\n/// built-in.\nNamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, Scope *S, bool ForRedeclaration, SourceLocation Loc) {\n  if (Error) {\n    // If we could not find a type for setjmp it is because the jmp_buf type was\n    // not defined prior to the setjmp declaration.\n    if (Error == ASTContext::GE_Missing_setjmp) {\n      Diag(Loc, diag::warn_implicit_decl_no_jmp_buf) << Context.BuiltinInfo.getName(ID);"}}
},
},
["warn_implicit_decl_requires_sysheader"]={
["warn_implicit_decl_requires_sysheader"]={
Line 7,560: Line 7,560:
[c]=q,
[c]=q,
[b]={"5d96e0a3a795",1405112031,"Consolidate header inclusion diagnostics"},
[b]={"5d96e0a3a795",1405112031,"Consolidate header inclusion diagnostics"},
[k]={{G,2212,"/// LazilyCreateBuiltin - The specified Builtin-ID was first used at\n/// file scope.  lazily create a decl for it. ForRedeclaration is true\n/// if we\'re creating this built-in in anticipation of redeclaring the\n/// built-in.\nNamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, Scope *S, bool ForRedeclaration, SourceLocation Loc) {\n  if (Error) {\n    Diag(Loc, diag::warn_implicit_decl_requires_sysheader) << getHeaderName(Context.BuiltinInfo, ID, Error) << Context.BuiltinInfo.getName(ID);"}}
[k]={{G,2458,"/// LazilyCreateBuiltin - The specified Builtin-ID was first used at\n/// file scope.  lazily create a decl for it. ForRedeclaration is true\n/// if we\'re creating this built-in in anticipation of redeclaring the\n/// built-in.\nNamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, Scope *S, bool ForRedeclaration, SourceLocation Loc) {\n  if (Error) {\n    Diag(Loc, diag::warn_implicit_decl_requires_sysheader) << getHeaderName(Context.BuiltinInfo, ID, Error) << Context.BuiltinInfo.getName(ID);"}}
},
},
["warn_implicit_function_decl"]={
["warn_implicit_function_decl"]={
Line 7,575: Line 7,575:
[c]=q,
[c]=q,
[b]={vd,1236199783,yd},
[b]={vd,1236199783,yd},
[k]={{G,14018,"/// 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  // OpenCL v2.0 s6.9.u - Implicit function declaration is not supported.\n  else if (getLangOpts().C99)\n  else\n    diag_id = diag::warn_implicit_function_decl;"}}
[k]={{G,16055,"/// 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  // OpenCL v2.0 s6.9.u - Implicit function declaration is not supported.\n  else if (getLangOpts().C99)\n  else\n    diag_id = diag::warn_implicit_function_decl;"}}
},
},
["warn_implicitly_retains_self"]={
["warn_implicitly_retains_self"]={
Line 7,590: Line 7,590:
[c]=q,
[c]=q,
[b]={"4a67508685ab",1349286929,"objective-C arc: Warn under arc about a use of an ivar inside a block"},
[b]={"4a67508685ab",1349286929,"objective-C arc: Warn under arc about a use of an ivar inside a block"},
[k]={{G,13586,"static void diagnoseImplicitlyRetainedSelf(Sema &S) {\n  // If the location where \'self\' is implicitly retained is inside a escaping\n  // block, emit a diagnostic.\n  for (const std::pair<SourceLocation, const BlockDecl *> &P : S.ImplicitlyRetainedSelfLocs)\n    if (IsOrNestedInEscapingBlock(P.second))\n      S.Diag(P.first, diag::warn_implicitly_retains_self) << FixItHint::CreateInsertion(P.first, \"self->\");"}}
[k]={{G,15554,"static void diagnoseImplicitlyRetainedSelf(Sema &S) {\n  // If the location where \'self\' is implicitly retained is inside a escaping\n  // block, emit a diagnostic.\n  for (const std::pair<SourceLocation, const BlockDecl *> &P : S.ImplicitlyRetainedSelfLocs)\n    if (IsOrNestedInEscapingBlock(P.second))\n      S.Diag(P.first, diag::warn_implicitly_retains_self) << FixItHint::CreateInsertion(P.first, \"self->\");"}}
},
},
["warn_import_on_definition"]={
["warn_import_on_definition"]={
Line 7,604: Line 7,604:
[c]=u,
[c]=u,
[b]={Ic,1576908663,Bc},
[b]={Ic,1576908663,Bc},
[k]={{H,6777,"WebAssemblyImportModuleAttr *Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) {\n  if (FD->hasBody()) {\n    Diag(AL.getLoc(), diag::warn_import_on_definition) << 0;"},{H,6794,"WebAssemblyImportNameAttr *Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) {\n  if (FD->hasBody()) {\n    Diag(AL.getLoc(), diag::warn_import_on_definition) << 1;"},{H,6808,"static void handleWebAssemblyImportModuleAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (FD->hasBody()) {\n    S.Diag(AL.getLoc(), diag::warn_import_on_definition) << 0;"},{H,6823,"static void handleWebAssemblyImportNameAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (FD->hasBody()) {\n    S.Diag(AL.getLoc(), diag::warn_import_on_definition) << 1;"}}
[k]={{H,7688,"WebAssemblyImportModuleAttr *Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) {\n  if (FD->hasBody()) {\n    Diag(AL.getLoc(), diag::warn_import_on_definition) << 0;"},{H,7708,"WebAssemblyImportNameAttr *Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) {\n  if (FD->hasBody()) {\n    Diag(AL.getLoc(), diag::warn_import_on_definition) << 1;"},{H,7724,"static void handleWebAssemblyImportModuleAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (FD->hasBody()) {\n    S.Diag(AL.getLoc(), diag::warn_import_on_definition) << 0;"},{H,7741,"static void handleWebAssemblyImportNameAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (FD->hasBody()) {\n    S.Diag(AL.getLoc(), diag::warn_import_on_definition) << 1;"}}
},
},
["warn_inaccessible_base_class"]={
["warn_inaccessible_base_class"]={
Line 7,618: Line 7,618:
[c]=q,
[c]=q,
[b]={"44b21749b9d6",1421631842,"PR6037"},
[b]={"44b21749b9d6",1421631842,"PR6037"},
[k]={{F,2520,"/// Performs the actual work of attaching the given base class\n/// specifiers to a C++ class.\nbool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, MutableArrayRef<CXXBaseSpecifier *> Bases) {\n  // Check that the only base classes that are duplicate are virtual.\n  for (unsigned idx = 0; idx < NumGoodBases; ++idx) {\n    if (IndirectBaseTypes.count(CanonicalBase)) {\n      if (Paths.isAmbiguous(CanonicalBase))\n        Diag(Bases[idx]->getBeginLoc(), diag::warn_inaccessible_base_class) << BaseType << getAmbiguousPathsDisplayString(Paths) << Bases[idx]->getSourceRange();"}}
[k]={{F,2966,"/// Performs the actual work of attaching the given base class\n/// specifiers to a C++ class.\nbool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, MutableArrayRef<CXXBaseSpecifier *> Bases) {\n  // Check that the only base classes that are duplicate are virtual.\n  for (unsigned idx = 0; idx < NumGoodBases; ++idx) {\n    if (IndirectBaseTypes.count(CanonicalBase)) {\n      if (Paths.isAmbiguous(CanonicalBase))\n        Diag(Bases[idx]->getBeginLoc(), diag::warn_inaccessible_base_class) << BaseType << getAmbiguousPathsDisplayString(Paths) << Bases[idx]->getSourceRange();"}}
},
},
["warn_incompatible_analyzer_plugin_api"]={
["warn_incompatible_analyzer_plugin_api"]={
Line 7,632: Line 7,632:
[c]=u,
[c]=u,
[b]={"075d73bcced3",1313556963,"[analyzer] Add a warning for an incompatible plugin version."},
[b]={"075d73bcced3",1313556963,"[analyzer] Add a warning for an incompatible plugin version."},
[k]={{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",79,"#include \"clang/StaticAnalyzer/Checkers/Checkers.inc\"\n  // Register checkers from plugins.\n  for (const std::string &Plugin : Plugins) {\n    if (!isCompatibleAPIVersion(PluginAPIVersion)) {\n      Diags.Report(diag::warn_incompatible_analyzer_plugin_api) << llvm::sys::path::filename(Plugin);"}}
[k]={{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",88,"#include \"clang/StaticAnalyzer/Checkers/Checkers.inc\"\n  // Register checkers from plugins.\n  for (const std::string &Plugin : Plugins) {\n    if (!isCompatibleAPIVersion(PluginAPIVersion)) {\n      Diags.Report(diag::warn_incompatible_analyzer_plugin_api) << llvm::sys::path::filename(Plugin);"}}
},
},
["warn_incompatible_branch_protection_option"]={
["warn_incompatible_branch_protection_option"]={
Line 7,646: Line 7,646:
[c]="Nullability Issue",
[c]="Nullability Issue",
[b]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for"},
[b]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for"},
[k]={{U,1403,"static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool isAArch64) {\n  if (!(isAArch64 || (Triple.isArmT32() && Triple.isArmMClass())))\n    D.Diag(diag::warn_incompatible_branch_protection_option) << Triple.getArchName();"}}
[k]={{U,1598,"static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool isAArch64) {\n  if (!(isAArch64 || (Triple.isArmT32() && Triple.isArmMClass())))\n    D.Diag(diag::warn_incompatible_branch_protection_option) << Triple.getArchName();"}}
},
},
["warn_incompatible_exception_specs"]={
["warn_incompatible_exception_specs"]={
Line 7,660: Line 7,660:
[c]=q,
[c]=q,
[b]={"1be59c510612",1477099939,"[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for"},
[b]={"1be59c510612",1477099939,"[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for"},
[k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",837,"bool Sema::CheckExceptionSpecCompatibility(Expr *From, QualType ToType) {\n  // This is not an error in C++17 onwards, unless the noexceptness doesn\'t\n  // match, but in that case we have a full-on type mismatch, not just a\n  // type sugar mismatch.\n  if (getLangOpts().CPlusPlus17) {\n    DiagID = diag::warn_incompatible_exception_specs;"}}
[k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",946,"bool Sema::CheckExceptionSpecCompatibility(Expr *From, QualType ToType) {\n  // This is not an error in C++17 onwards, unless the noexceptness doesn\'t\n  // match, but in that case we have a full-on type mismatch, not just a\n  // type sugar mismatch.\n  if (getLangOpts().CPlusPlus17) {\n    DiagID = diag::warn_incompatible_exception_specs;"}}
},
},
["warn_incompatible_qualified_id"]={
["warn_incompatible_qualified_id"]={
Line 7,672: Line 7,672:
[c]=q,
[c]=q,
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{M,15354,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleObjCQualifiedId: {\n    if (getLangOpts().CPlusPlus) {\n    } else {\n      DiagKind = diag::warn_incompatible_qualified_id;"},{M,15432,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  if ((DiagKind == diag::warn_incompatible_qualified_id || DiagKind == diag::err_incompatible_qualified_id) && PDecl && IFace && !IFace->hasDefinition())"}}
[k]={{M,17688,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleObjCQualifiedId: {\n    if (getLangOpts().CPlusPlus) {\n    } else {\n      DiagKind = diag::warn_incompatible_qualified_id;"},{M,17765,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  if ((DiagKind == diag::warn_incompatible_qualified_id || DiagKind == diag::err_incompatible_qualified_id) && PDecl && IFace && !IFace->hasDefinition())"}}
},
},
["warn_incompatible_sysroot"]={
["warn_incompatible_sysroot"]={
Line 7,686: Line 7,686:
[c]=u,
[c]=u,
[b]={"e60e7c2987f1",1461968914,"Add a new warning to notify users of mismatched SDK and deployment target"},
[b]={"e60e7c2987f1",1461968914,"Add a new warning to notify users of mismatched SDK and deployment target"},
[k]={{Uc,2021,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {\n    if (SDK.size() > 0) {\n      if (!SDKName.startswith(getPlatformFamily()) && !dropSDKNamePrefix(SDKName).startswith(getPlatformFamily()))\n        getDriver().Diag(diag::warn_incompatible_sysroot) << SDKName << getPlatformFamily();"}}
[k]={{Uc,2342,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {\n    if (SDK.size() > 0) {\n      if (!SDKName.startswith(getPlatformFamily()) && !dropSDKNamePrefix(SDKName).startswith(getPlatformFamily()))\n        getDriver().Diag(diag::warn_incompatible_sysroot) << SDKName << getPlatformFamily();"}}
},
},
["warn_incompatible_vectors"]={
["warn_incompatible_vectors"]={
Line 7,701: Line 7,701:
[c]=q,
[c]=q,
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{M,15363,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleVectors:\n    if (getLangOpts().CPlusPlus) {\n    } else {\n      DiagKind = diag::warn_incompatible_vectors;"}}
[k]={{M,17695,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  case IncompatibleVectors:\n    if (getLangOpts().CPlusPlus) {\n    } else {\n      DiagKind = diag::warn_incompatible_vectors;"}}
},
},
["warn_incomplete_encoded_type"]={
["warn_incomplete_encoded_type"]={
Line 7,715: Line 7,715:
[c]=q,
[c]=q,
[b]={"4bf437ecd8cc",1408749472,"Objective-C. Warn when @encode\'ing provides an incomplete"},
[b]={"4bf437ecd8cc",1408749472,"Objective-C. Warn when @encode\'ing provides an incomplete"},
[k]={{Hc,935,"ExprResult Sema::BuildObjCEncodeExpression(SourceLocation AtLoc, TypeSourceInfo *EncodedTypeInfo, SourceLocation RParenLoc) {\n  if (EncodedType->isDependentType())\n  else {\n    if (!NotEncodedT.isNull())\n      Diag(AtLoc, diag::warn_incomplete_encoded_type) << EncodedType << NotEncodedT;"}}
[k]={{Hc,1148,"ExprResult Sema::BuildObjCEncodeExpression(SourceLocation AtLoc, TypeSourceInfo *EncodedTypeInfo, SourceLocation RParenLoc) {\n  if (EncodedType->isDependentType())\n  else {\n    if (!NotEncodedT.isNull())\n      Diag(AtLoc, diag::warn_incomplete_encoded_type) << EncodedType << NotEncodedT;"}}
},
},
["warn_inconsistent_array_form"]={
["warn_inconsistent_array_form"]={
Line 7,730: Line 7,730:
[c]=q,
[c]=q,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{G,3102,"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(NewParam->getLocation(), diag::warn_inconsistent_array_form) << NewParam << NewParamOT;"}}
[k]={{G,3445,"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(NewParam->getLocation(), diag::warn_inconsistent_array_form) << NewParam << NewParamOT;"}}
},
},
["warn_inconsistent_destructor_marked_not_override_overriding"]={
["warn_inconsistent_destructor_marked_not_override_overriding"]={
Line 7,745: Line 7,745:
[c]=q,
[c]=q,
[b]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata"},
[b]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata"},
[k]={{F,2819,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  if (MD->size_overridden_methods() > 0) {\n    if (isa<CXXDestructorDecl>(MD))\n      EmitDiag(diag::warn_inconsistent_destructor_marked_not_override_overriding, diag::warn_suggest_destructor_marked_not_override_overriding);"}}
[k]={{F,3314,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  if (MD->size_overridden_methods() > 0) {\n    if (isa<CXXDestructorDecl>(MD))\n      EmitDiag(diag::warn_inconsistent_destructor_marked_not_override_overriding, diag::warn_suggest_destructor_marked_not_override_overriding);"}}
},
},
["warn_inconsistent_function_marked_not_override_overriding"]={
["warn_inconsistent_function_marked_not_override_overriding"]={
Line 7,759: Line 7,759:
[c]=q,
[c]=q,
[b]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata"},
[b]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata"},
[k]={{F,2821,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  if (MD->size_overridden_methods() > 0) {\n    if (isa<CXXDestructorDecl>(MD))\n    else\n      EmitDiag(diag::warn_inconsistent_function_marked_not_override_overriding, diag::warn_suggest_function_marked_not_override_overriding);"}}
[k]={{F,3317,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  if (MD->size_overridden_methods() > 0) {\n    if (isa<CXXDestructorDecl>(MD))\n    else\n      EmitDiag(diag::warn_inconsistent_function_marked_not_override_overriding, diag::warn_suggest_function_marked_not_override_overriding);"}}
},
},
["warn_increment_bool"]={
["warn_increment_bool"]={
Line 7,773: Line 7,773:
[c]=ib,
[c]=ib,
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{M,12669,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n  if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n    S.Diag(OpLoc, S.getLangOpts().CPlusPlus17 ? diag::ext_increment_bool : diag::warn_increment_bool) << Op->getSourceRange();"}}
[k]={{M,14707,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n  if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n    S.Diag(OpLoc, S.getLangOpts().CPlusPlus17 ? diag::ext_increment_bool : diag::warn_increment_bool) << Op->getSourceRange();"}}
},
},
["warn_independentclass_attribute"]={
["warn_independentclass_attribute"]={
Line 7,787: Line 7,787:
[c]=q,
[c]=q,
[b]={"7a60b6db76f5",1429209524,"[Objective-C Sema] patch to introduce IndependentClass"},
[b]={"7a60b6db76f5",1429209524,"[Objective-C Sema] patch to introduce IndependentClass"},
[k]={{H,2653,"static void handleObjCIndependentClass(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n  } else {\n    S.Diag(D->getLocation(), diag::warn_independentclass_attribute);"}}
[k]={{H,3025,"static void handleObjCIndependentClass(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n  } else {\n    S.Diag(D->getLocation(), diag::warn_independentclass_attribute);"}}
},
},
["warn_indirection_through_null"]={
["warn_indirection_through_null"]={
Line 7,801: Line 7,801:
[c]=q,
[c]=q,
[b]={"395610654363",1278483263,"implement PR7569, warning about assignment to null, which "},
[b]={"395610654363",1278483263,"implement PR7569, warning about assignment to null, which "},
[k]={{M,524,"static void CheckForNullPointerDereference(Sema &S, Expr *E) {\n  if (UO && UO->getOpcode() == UO_Deref && UO->getSubExpr()->getType()->isPointerType()) {\n    if ((!isTargetAddressSpace(AS) || (isTargetAddressSpace(AS) && toTargetAddressSpace(AS) == 0)) && UO->getSubExpr()->IgnoreParenCasts()->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull) && !UO->getType().isVolatileQualified()) {\n      S.DiagRuntimeBehavior(UO->getOperatorLoc(), UO, S.PDiag(diag::warn_indirection_through_null) << UO->getSubExpr()->getSourceRange());"}}
[k]={{M,576,"static void CheckForNullPointerDereference(Sema &S, Expr *E) {\n  if (UO && UO->getOpcode() == UO_Deref && UO->getSubExpr()->getType()->isPointerType()) {\n    if ((!isTargetAddressSpace(AS) || (isTargetAddressSpace(AS) && toTargetAddressSpace(AS) == 0)) && UO->getSubExpr()->IgnoreParenCasts()->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull) && !UO->getType().isVolatileQualified()) {\n      S.DiagRuntimeBehavior(UO->getOperatorLoc(), UO, S.PDiag(diag::warn_indirection_through_null) << UO->getSubExpr()->getSourceRange());"}}
},
},
["warn_infinite_recursive_function"]={
["warn_infinite_recursive_function"]={
Line 7,816: Line 7,816:
[c]=q,
[c]=q,
[b]={"2f024f432d62",1387593223,"Add -Winfinite-recursion to Clang"},
[b]={"2f024f432d62",1387593223,"Add -Winfinite-recursion to Clang"},
[k]={{eb,268,"static void checkRecursiveFunction(Sema &S, const FunctionDecl *FD, const Stmt *Body, AnalysisDeclContext &AC) {\n  // Emit diagnostic if a recursive function call is detected for all paths.\n  if (checkForRecursiveFunctionCall(FD, cfg))\n    S.Diag(Body->getBeginLoc(), diag::warn_infinite_recursive_function);"},{eb,2277,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  if (!Diags.isIgnored(diag::warn_infinite_recursive_function, D->getBeginLoc())) {"}}
[k]={{eb,290,"static void checkRecursiveFunction(Sema &S, const FunctionDecl *FD, const Stmt *Body, AnalysisDeclContext &AC) {\n  // Emit diagnostic if a recursive function call is detected for all paths.\n  if (checkForRecursiveFunctionCall(FD, cfg))\n    S.Diag(Body->getBeginLoc(), diag::warn_infinite_recursive_function);"},{eb,2680,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  if (!Diags.isIgnored(diag::warn_infinite_recursive_function, D->getBeginLoc())) {"}}
},
},
["warn_init_list_constant_narrowing"]={
["warn_init_list_constant_narrowing"]={
Line 7,831: Line 7,831:
[c]=q,
[c]=q,
[b]={"a6667816d589",1311722430,"This patch implements as much of the narrowing conversion error specified by"},
[b]={"a6667816d589",1311722430,"This patch implements as much of the narrowing conversion error specified by"},
[k]={{fb,8823,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n  case NK_Constant_Narrowing:\n    S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_constant_narrowing : diag::warn_init_list_constant_narrowing) << PostInit->getSourceRange() << ConstantValue.getAsString(S.getASTContext(), ConstantType) << EntityType.getLocalUnqualifiedType();"}}
[k]={{fb,10427,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n  case NK_Constant_Narrowing:\n    S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_constant_narrowing : diag::warn_init_list_constant_narrowing) << PostInit->getSourceRange() << ConstantValue.getAsString(S.getASTContext(), ConstantType) << EntityType.getLocalUnqualifiedType();"}}
},
},
["warn_init_list_type_narrowing"]={
["warn_init_list_type_narrowing"]={
Line 7,846: Line 7,846:
[c]=q,
[c]=q,
[b]={"66e05fe63099",1326864109,"Move narrowing conversion detection code from SemaInit to SemaOverload, ready"},
[b]={"66e05fe63099",1326864109,"Move narrowing conversion detection code from SemaInit to SemaOverload, ready"},
[k]={{fb,8818,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n  case NK_Type_Narrowing:\n    S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_type_narrowing : diag::warn_init_list_type_narrowing) << PostInit->getSourceRange() << PreNarrowingType.getLocalUnqualifiedType() << EntityType.getLocalUnqualifiedType();"}}
[k]={{fb,10416,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n  case NK_Type_Narrowing:\n    S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_type_narrowing : diag::warn_init_list_type_narrowing) << PostInit->getSourceRange() << PreNarrowingType.getLocalUnqualifiedType() << EntityType.getLocalUnqualifiedType();"}}
},
},
["warn_init_list_variable_narrowing"]={
["warn_init_list_variable_narrowing"]={
Line 7,861: Line 7,861:
[c]=q,
[c]=q,
[b]={"a6667816d589",1311722430,"This patch implements as much of the narrowing conversion error specified by"},
[b]={"a6667816d589",1311722430,"This patch implements as much of the narrowing conversion error specified by"},
[k]={{fb,8828,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n  case NK_Variable_Narrowing:\n    S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_variable_narrowing : diag::warn_init_list_variable_narrowing) << PostInit->getSourceRange() << PreNarrowingType.getLocalUnqualifiedType() << EntityType.getLocalUnqualifiedType();"}}
[k]={{fb,10438,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n  case NK_Variable_Narrowing:\n    S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_variable_narrowing : diag::warn_init_list_variable_narrowing) << PostInit->getSourceRange() << PreNarrowingType.getLocalUnqualifiedType() << EntityType.getLocalUnqualifiedType();"}}
},
},
["warn_init_ptr_member_to_parameter_addr"]={
["warn_init_ptr_member_to_parameter_addr"]={
Line 7,875: Line 7,875:
[c]=q,
[c]=q,
[b]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and"},
[b]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and"},
[k]={{fb,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;"}}
[k]={{fb,8225,"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_initializer_out_of_order"]={
["warn_initializer_out_of_order"]={
Line 7,890: Line 7,890:
[c]=q,
[c]=q,
[b]={"bb7b658ab5d0",1270885043,"Diagnose misordered initializers in constructor templates immediately instead of"},
[b]={"bb7b658ab5d0",1270885043,"Diagnose misordered initializers in constructor templates immediately instead of"},
[k]={{F,4661,"static void DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef, const CXXConstructorDecl *Constructor, ArrayRef<CXXCtorInitializer *> Inits) {\n  for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {\n    if (!SemaRef.Diags.isIgnored(diag::warn_initializer_out_of_order, Init->getSourceLocation())) {"},{F,4739,"static void DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef, const CXXConstructorDecl *Constructor, ArrayRef<CXXCtorInitializer *> Inits) {\n  // Introduce a new scope as SemaDiagnosticBuilder needs to be destroyed to\n  // emit the diagnostic before we can try adding notes.\n  {\n    Sema::SemaDiagnosticBuilder D = SemaRef.Diag(Inits[WarnIndexes.front() - 1]->getSourceLocation(), WarnIndexes.size() == 1 ? diag::warn_initializer_out_of_order : diag::warn_some_initializers_out_of_order);"}}
[k]={{F,5504,"static void DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef, const CXXConstructorDecl *Constructor, ArrayRef<CXXCtorInitializer *> Inits) {\n  for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {\n    if (!SemaRef.Diags.isIgnored(diag::warn_initializer_out_of_order, Init->getSourceLocation())) {"},{F,5586,"static void DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef, const CXXConstructorDecl *Constructor, ArrayRef<CXXCtorInitializer *> Inits) {\n  // Introduce a new scope as SemaDiagnosticBuilder needs to be destroyed to\n  // emit the diagnostic before we can try adding notes.\n  {\n    Sema::SemaDiagnosticBuilder D = SemaRef.Diag(Inits[WarnIndexes.front() - 1]->getSourceLocation(), WarnIndexes.size() == 1 ? diag::warn_initializer_out_of_order : diag::warn_some_initializers_out_of_order);"}}
},
},
["warn_initializer_overrides"]={
["warn_initializer_overrides"]={
Line 7,904: Line 7,904:
[c]=q,
[c]=q,
[b]={vd,1236199783,yd},
[b]={vd,1236199783,yd},
[k]={{fb,317,"/// 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    unsigned DiagID = SemaRef.getLangOpts().CPlusPlus ? (UnionOverride ? diag::ext_initializer_union_overrides : diag::ext_initializer_overrides) : diag::warn_initializer_overrides;"}}
[k]={{fb,416,"/// 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    unsigned DiagID = SemaRef.getLangOpts().CPlusPlus ? (UnionOverride ? diag::ext_initializer_union_overrides : diag::ext_initializer_overrides) : diag::warn_initializer_overrides;"}}
},
},
["warn_inline_namespace_reopened_noninline"]={
["warn_inline_namespace_reopened_noninline"]={
Line 7,918: Line 7,918:
[c]=q,
[c]=q,
[b]={"a912197fff7a",1305906511,"Downgrade the error about re-opening an inline namespace as non-inline"},
[b]={"a912197fff7a",1305906511,"Downgrade the error about re-opening an inline namespace as non-inline"},
[k]={{F,9763,"/// Diagnose a mismatch in \'inline\' qualifiers when a namespace is\n/// reopened.\nstatic void DiagnoseNamespaceInlineMismatch(Sema &S, SourceLocation KeywordLoc, SourceLocation Loc, IdentifierInfo *II, bool *IsInline, NamespaceDecl *PrevNS) {\n  if (PrevNS->isInline())\n    S.Diag(Loc, diag::warn_inline_namespace_reopened_noninline) << FixItHint::CreateInsertion(KeywordLoc, \"inline \");"}}
[k]={{F,11363,"/// Diagnose a mismatch in \'inline\' qualifiers when a namespace is\n/// reopened.\nstatic void DiagnoseNamespaceInlineMismatch(Sema &S, SourceLocation KeywordLoc, SourceLocation Loc, IdentifierInfo *II, bool *IsInline, NamespaceDecl *PrevNS) {\n  if (PrevNS->isInline())\n    S.Diag(Loc, diag::warn_inline_namespace_reopened_noninline) << FixItHint::CreateInsertion(KeywordLoc, \"inline \");"}}
},
},
["warn_inst_method_not_found"]={
["warn_inst_method_not_found"]={
Line 7,932: Line 7,932:
[c]=q,
[c]=q,
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{Hc,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;"}}
[k]={{Hc,1746,"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_instance_method_not_found_with_typo"]={
["warn_instance_method_not_found_with_typo"]={
Line 7,946: Line 7,946:
[c]=q,
[c]=q,
[b]={"4cc5552b9b94",1371569496,"Objective-C [qoi]: privide typo correction for selectors"},
[b]={"4cc5552b9b94",1371569496,"Objective-C [qoi]: privide typo correction for selectors"},
[k]={{Hc,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;"}}
[k]={{Hc,1754,"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_instance_method_on_class_found"]={
["warn_instance_method_on_class_found"]={
Line 7,960: Line 7,960:
[c]=q,
[c]=q,
[b]={"3b9819b4a2f1",1302115208,"Fix lookup for class messages sent to qualified-class"},
[b]={"3b9819b4a2f1",1302115208,"Fix lookup for class messages sent to qualified-class"},
[k]={{Hc,2393,"/// 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      // Handle messages to Class.\n      // We allow sending a message to a qualified Class (\"Class<foo>\"), which\n      // is ok as long as one of the protocols implements the selector (if not,\n      // warn).\n      if (!ReceiverType->isObjCClassOrClassKindOfType()) {\n        if (!Method) {\n          // warn if instance method found for a Class message.\n          if (Method && !isMethodDeclaredInRootProtocol(*this, Method)) {\n            Diag(SelLoc, diag::warn_instance_method_on_class_found) << Method->getSelector() << Sel;"}}
[k]={{Hc,2986,"/// 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      // Handle messages to Class.\n      // We allow sending a message to a qualified Class (\"Class<foo>\"), which\n      // is ok as long as one of the protocols implements the selector (if not,\n      // warn).\n      if (!ReceiverType->isObjCClassOrClassKindOfType()) {\n        if (!Method) {\n          // warn if instance method found for a Class message.\n          if (Method && !isMethodDeclaredInRootProtocol(*this, Method)) {\n            Diag(SelLoc, diag::warn_instance_method_on_class_found) << Method->getSelector() << Sel;"}}
},
},
["warn_int_to_pointer_cast"]={
["warn_int_to_pointer_cast"]={
Line 7,974: Line 7,974:
[c]=q,
[c]=q,
[b]={"282ad876bd89",1350413594,"Implement GCC\'s -Wint-to-pointer-cast."},
[b]={"282ad876bd89",1350413594,"Implement GCC\'s -Wint-to-pointer-cast."},
[k]={{"clang/lib/Sema/SemaCast.cpp",1895,"static void checkIntToPointerCast(bool CStyle, const SourceRange &OpRange, const Expr *SrcExpr, QualType DestType, Sema &Self) {\n  // Not warning on reinterpret_cast, boolean, constant expressions, etc\n  // are not explicit design choices, but consistent with GCC\'s behavior.\n  // Feel free to modify them if you\'ve reason/evidence for an alternative.\n  if (CStyle && SrcType->isIntegralType(Self.Context) && !SrcType->isBooleanType() && !SrcType->isEnumeralType() && !SrcExpr->isIntegerConstantExpr(Self.Context) && Self.Context.getTypeSize(DestType) > Self.Context.getTypeSize(SrcType)) {\n    unsigned Diag = DestType->isVoidPointerType() ? diag::warn_int_to_void_pointer_cast : diag::warn_int_to_pointer_cast;"}}
[k]={{"clang/lib/Sema/SemaCast.cpp",2213,"static void checkIntToPointerCast(bool CStyle, const SourceRange &OpRange, const Expr *SrcExpr, QualType DestType, Sema &Self) {\n  // Not warning on reinterpret_cast, boolean, constant expressions, etc\n  // are not explicit design choices, but consistent with GCC\'s behavior.\n  // Feel free to modify them if you\'ve reason/evidence for an alternative.\n  if (CStyle && SrcType->isIntegralType(Self.Context) && !SrcType->isBooleanType() && !SrcType->isEnumeralType() && !SrcExpr->isIntegerConstantExpr(Self.Context) && Self.Context.getTypeSize(DestType) > Self.Context.getTypeSize(SrcType)) {\n    unsigned Diag = DestType->isVoidPointerType() ? diag::warn_int_to_void_pointer_cast : diag::warn_int_to_pointer_cast;"}}
},
},
["warn_int_to_void_pointer_cast"]={
["warn_int_to_void_pointer_cast"]={
Line 7,988: Line 7,988:
[c]=q,
[c]=q,
[b]={"e3dc7f74bec5",1369864246,"Split off casts to void* for -Wint-to-pointer-cast to subgroup -Wint-to-void-pointer-cast."},
[b]={"e3dc7f74bec5",1369864246,"Split off casts to void* for -Wint-to-pointer-cast to subgroup -Wint-to-void-pointer-cast."},
[k]={{"clang/lib/Sema/SemaCast.cpp",1895,"static void checkIntToPointerCast(bool CStyle, const SourceRange &OpRange, const Expr *SrcExpr, QualType DestType, Sema &Self) {\n  // Not warning on reinterpret_cast, boolean, constant expressions, etc\n  // are not explicit design choices, but consistent with GCC\'s behavior.\n  // Feel free to modify them if you\'ve reason/evidence for an alternative.\n  if (CStyle && SrcType->isIntegralType(Self.Context) && !SrcType->isBooleanType() && !SrcType->isEnumeralType() && !SrcExpr->isIntegerConstantExpr(Self.Context) && Self.Context.getTypeSize(DestType) > Self.Context.getTypeSize(SrcType)) {\n    unsigned Diag = DestType->isVoidPointerType() ? diag::warn_int_to_void_pointer_cast : diag::warn_int_to_pointer_cast;"}}
[k]={{"clang/lib/Sema/SemaCast.cpp",2212,"static void checkIntToPointerCast(bool CStyle, const SourceRange &OpRange, const Expr *SrcExpr, QualType DestType, Sema &Self) {\n  // Not warning on reinterpret_cast, boolean, constant expressions, etc\n  // are not explicit design choices, but consistent with GCC\'s behavior.\n  // Feel free to modify them if you\'ve reason/evidence for an alternative.\n  if (CStyle && SrcType->isIntegralType(Self.Context) && !SrcType->isBooleanType() && !SrcType->isEnumeralType() && !SrcExpr->isIntegerConstantExpr(Self.Context) && Self.Context.getTypeSize(DestType) > Self.Context.getTypeSize(SrcType)) {\n    unsigned Diag = DestType->isVoidPointerType() ? diag::warn_int_to_void_pointer_cast : diag::warn_int_to_pointer_cast;"}}
},
},
["warn_integer_constant_overflow"]={
["warn_integer_constant_overflow"]={
Line 8,002: Line 8,002:
[c]=u,
[c]=u,
[b]={"e735ff93e828",1359065505,"Patch to check for integer overflow. It has been"},
[b]={"e735ff93e828",1359065505,"Patch to check for integer overflow. It has been"},
[k]={{Pc,2422,"/// Perform the given integer operation, which is known to need at most BitWidth\n/// bits, and check for overflow in the original type (if that type was not an\n/// unsigned type).\ntemplate <typename Operation> static bool CheckedIntArithmetic(EvalInfo &Info, const Expr *E, const APSInt &LHS, const APSInt &RHS, unsigned BitWidth, Operation Op, APSInt &Result) {\n  if (Result.extend(BitWidth) != Value) {\n    if (Info.checkingForUndefinedBehavior())\n      Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_integer_constant_overflow) << toString(Result, 10) << E->getType();"},{Pc,12116,"bool IntExprEvaluator::VisitUnaryOperator(const UnaryOperator *E) {\n  case UO_Minus: {\n    if (Value.isSigned() && Value.isMinSignedValue() && E->canOverflow()) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_integer_constant_overflow) << toString(Value, 10) << E->getType();"}}
[k]={{Pc,2774,"/// Perform the given integer operation, which is known to need at most BitWidth\n/// bits, and check for overflow in the original type (if that type was not an\n/// unsigned type).\ntemplate <typename Operation> static bool CheckedIntArithmetic(EvalInfo &Info, const Expr *E, const APSInt &LHS, const APSInt &RHS, unsigned BitWidth, Operation Op, APSInt &Result) {\n  if (Result.extend(BitWidth) != Value) {\n    if (Info.checkingForUndefinedBehavior())\n      Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_integer_constant_overflow) << toString(Result, 10) << E->getType();"},{Pc,13597,"bool IntExprEvaluator::VisitUnaryOperator(const UnaryOperator *E) {\n  case UO_Minus: {\n    if (Value.isSigned() && Value.isMinSignedValue() && E->canOverflow()) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_integer_constant_overflow) << toString(Value, 10) << E->getType();"}}
},
},
["warn_integer_constants_in_conditional_always_true"]={
["warn_integer_constants_in_conditional_always_true"]={
Line 8,016: Line 8,016:
[c]=q,
[c]=q,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{w,13055,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  if (const auto *CO = dyn_cast<ConditionalOperator>(E)) {\n    if (LHS->getValue() != 0 && RHS->getValue() != 0)\n      S.Diag(ExprLoc, diag::warn_integer_constants_in_conditional_always_true);"}}
[k]={{w,14649,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  if (const auto *CO = dyn_cast<ConditionalOperator>(E)) {\n    if (LHS->getValue() != 0 && RHS->getValue() != 0)\n      S.Diag(ExprLoc, diag::warn_integer_constants_in_conditional_always_true);"}}
},
},
["warn_internal_linkage_local_storage"]={
["warn_internal_linkage_local_storage"]={
Line 8,030: Line 8,030:
[c]=q,
[c]=q,
[b]={"ae6ebd3af525",1447190924,"Implement __attribute__((internal_linkage))."},
[b]={"ae6ebd3af525",1447190924,"Implement __attribute__((internal_linkage))."},
[k]={{H,4305,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const ParsedAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // Attribute does not apply to non-static local variables.\n    if (VD->hasLocalStorage()) {\n      Diag(VD->getLocation(), diag::warn_internal_linkage_local_storage);"},{H,4322,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const InternalLinkageAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // Attribute does not apply to non-static local variables.\n    if (VD->hasLocalStorage()) {\n      Diag(VD->getLocation(), diag::warn_internal_linkage_local_storage);"}}
[k]={{H,4912,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const ParsedAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // Attribute does not apply to non-static local variables.\n    if (VD->hasLocalStorage()) {\n      Diag(VD->getLocation(), diag::warn_internal_linkage_local_storage);"},{H,4933,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const InternalLinkageAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // Attribute does not apply to non-static local variables.\n    if (VD->hasLocalStorage()) {\n      Diag(VD->getLocation(), diag::warn_internal_linkage_local_storage);"}}
},
},
["warn_interrupt_attribute_invalid"]={
["warn_interrupt_attribute_invalid"]={
Line 8,044: Line 8,044:
[c]=q,
[c]=q,
[b]={"b0d74bfe81b6",1548266537,"Merge similar target diagnostics for interrupt attribute into one; NFC"},
[b]={"b0d74bfe81b6",1548266537,"Merge similar target diagnostics for interrupt attribute into one; NFC"},
[k]={{H,6526,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (hasFunctionProto(D) && getFunctionOrMethodNumParams(D) != 0) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MSP430*/ 1 << 0;"},{H,6531,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MSP430*/ 1 << 1;"},{H,6591,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (hasFunctionProto(D) && getFunctionOrMethodNumParams(D) != 0) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MIPS*/ 0 << 0;"},{H,6596,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MIPS*/ 0 << 1;"},{H,6864,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (hasFunctionProto(D) && getFunctionOrMethodNumParams(D) != 0) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*RISC-V*/ 2 << 0;"},{H,6869,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*RISC-V*/ 2 << 1;"}}
[k]={{H,7386,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (hasFunctionProto(D) && getFunctionOrMethodNumParams(D) != 0) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MSP430*/ 1 << 0;"},{H,7392,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MSP430*/ 1 << 1;"},{H,7459,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (hasFunctionProto(D) && getFunctionOrMethodNumParams(D) != 0) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MIPS*/ 0 << 0;"},{H,7465,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MIPS*/ 0 << 1;"},{H,7785,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (hasFunctionProto(D) && getFunctionOrMethodNumParams(D) != 0) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*RISC-V*/ 2 << 0;"},{H,7791,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*RISC-V*/ 2 << 1;"}}
},
},
["warn_invalid_asm_cast_lvalue"]={
["warn_invalid_asm_cast_lvalue"]={
Line 8,056: Line 8,056:
[c]="Inline Assembly Issue",
[c]="Inline Assembly Issue",
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{"clang/lib/Sema/SemaStmtAsm.cpp",75,"/// Emit a warning about usage of \"noop\"-like casts for lvalues (GNU extension)\n/// and fix the argument with removing LValueToRValue cast from the expression.\nstatic void emitAndFixInvalidAsmCastLValue(const Expr *LVal, Expr *BadArgument, Sema &S) {\n  if (!S.getLangOpts().HeinousExtensions) {\n  } else {\n    S.Diag(LVal->getBeginLoc(), diag::warn_invalid_asm_cast_lvalue) << BadArgument->getSourceRange();"}}
[k]={{"clang/lib/Sema/SemaStmtAsm.cpp",79,"/// Emit a warning about usage of \"noop\"-like casts for lvalues (GNU extension)\n/// and fix the argument with removing LValueToRValue cast from the expression.\nstatic void emitAndFixInvalidAsmCastLValue(const Expr *LVal, Expr *BadArgument, Sema &S) {\n  if (!S.getLangOpts().HeinousExtensions) {\n  } else {\n    S.Diag(LVal->getBeginLoc(), diag::warn_invalid_asm_cast_lvalue) << BadArgument->getSourceRange();"}}
},
},
["warn_invalid_initializer_from_system_header"]={
["warn_invalid_initializer_from_system_header"]={
Line 8,070: Line 8,070:
[c]=q,
[c]=q,
[b]={"bcb70eee1a38",1404345069,"Enable clang to continue to parse libstdc++4.6 and stlport after r210091."},
[b]={"bcb70eee1a38",1404345069,"Enable clang to continue to parse libstdc++4.6 and stlport after r210091."},
[k]={{fb,462,"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          SemaRef.Diag(CtorDecl->getLocation(), diag::warn_invalid_initializer_from_system_header);"}}
[k]={{fb,605,"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          SemaRef.Diag(CtorDecl->getLocation(), diag::warn_invalid_initializer_from_system_header);"}}
},
},
["warn_invalid_ios_deployment_target"]={
["warn_invalid_ios_deployment_target"]={
Line 8,084: Line 8,084:
[c]=u,
[c]=u,
[b]={"fb82a59a8cc2",1501528600,"[Driver] Allow users to silence the warning that is issued when the"},
[b]={"fb82a59a8cc2",1501528600,"[Driver] Allow users to silence the warning that is issued when the"},
[k]={{Uc,1984,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // Set the tool chain target information.\n  if (Platform == MacOS) {\n  } else if (Platform == IPhoneOS) {\n    // For 32-bit targets, the deployment target for iOS has to be earlier than\n    // iOS 11.\n    if (getTriple().isArch32Bit() && Major >= 11) {\n      // If the deployment target is explicitly specified, print a diagnostic.\n      if (OSTarget->isExplicitlySpecified()) {\n        if (OSTarget->getEnvironment() == MacCatalyst)\n        else\n          getDriver().Diag(diag::warn_invalid_ios_deployment_target) << OSTarget->getAsString(Args, Opts);"}}
[k]={{Uc,2291,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // Set the tool chain target information.\n  if (Platform == MacOS) {\n  } else if (Platform == IPhoneOS) {\n    // For 32-bit targets, the deployment target for iOS has to be earlier than\n    // iOS 11.\n    if (getTriple().isArch32Bit() && Major >= 11) {\n      // If the deployment target is explicitly specified, print a diagnostic.\n      if (OSTarget->isExplicitlySpecified()) {\n        if (OSTarget->getEnvironment() == MacCatalyst)\n        else\n          getDriver().Diag(diag::warn_invalid_ios_deployment_target) << OSTarget->getAsString(Args, Opts);"}}
},
},
["warn_invalid_utf8_in_comment"]={
["warn_invalid_utf8_in_comment"]={
Line 8,099: Line 8,099:
[c]=N,
[c]=N,
[b]={Bb,1625925174,zb},
[b]={Bb,1625925174,zb},
[k]={{vb,2260,"/// We have just read the // characters from input.  Skip until we find the\n/// newline character that terminates the comment.  Then update BufferPtr and\n/// return.\n///\n/// If we\'re in KeepCommentMode or any CommentHandler has inserted\n/// some tokens, this will store the first token and return true.\nbool Lexer::SkipLineComment(Token &Result, const char *CurPtr, bool &TokAtPhysicalStartOfLine) {\n  while (true) {\n    if (!isASCII(C)) {\n      if (Length == 0) {\n        if (!UnicodeDecodingAlreadyDiagnosed && !isLexingRawMode())\n          Diag(CurPtr, diag::warn_invalid_utf8_in_comment);"},{vb,2617,"#endif\n    MultiByteUTF8:\n      if (Length == 0) {\n        if (!UnicodeDecodingAlreadyDiagnosed && !isLexingRawMode())\n          Diag(CurPtr - 1, diag::warn_invalid_utf8_in_comment);"}}
[k]={{vb,2479,"/// We have just read the // characters from input.  Skip until we find the\n/// newline character that terminates the comment.  Then update BufferPtr and\n/// return.\n///\n/// If we\'re in KeepCommentMode or any CommentHandler has inserted\n/// some tokens, this will store the first token and return true.\nbool Lexer::SkipLineComment(Token &Result, const char *CurPtr, bool &TokAtPhysicalStartOfLine) {\n  while (true) {\n    if (!isASCII(C)) {\n      if (Length == 0) {\n        if (!UnicodeDecodingAlreadyDiagnosed && !isLexingRawMode())\n          Diag(CurPtr, diag::warn_invalid_utf8_in_comment);"},{vb,2850,"#endif\n    MultiByteUTF8:\n      if (Length == 0) {\n        if (!UnicodeDecodingAlreadyDiagnosed && !isLexingRawMode())\n          Diag(CurPtr - 1, diag::warn_invalid_utf8_in_comment);"}}
},
},
["warn_is_constant_evaluated_always_true_constexpr"]={
["warn_is_constant_evaluated_always_true_constexpr"]={
Line 8,113: Line 8,113:
[c]=u,
[c]=u,
[b]={"b06305e44949",1572372408,"[Diagnostics] Warn for std::is_constant_evaluated in constexpr mode"},
[b]={"b06305e44949",1572372408,"[Diagnostics] Warn for std::is_constant_evaluated in constexpr mode"},
[k]={{Pc,10802,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_is_constant_evaluated: {\n    if (Info.InConstantContext && !Info.CheckingPotentialConstantExpression && (Info.CallStackDepth == 1 || (Info.CallStackDepth == 2 && Callee->isInStdNamespace() && Callee->getIdentifier() && Callee->getIdentifier()->isStr(\"is_constant_evaluated\")))) {\n      // FIXME: Find a better way to avoid duplicated diagnostics.\n      if (Info.EvalStatus.Diag)\n        Info.report((Info.CallStackDepth == 1) ? E->getExprLoc() : Info.CurrentCall->CallLoc, diag::warn_is_constant_evaluated_always_true_constexpr) << (Info.CallStackDepth == 1 ? \"__builtin_is_constant_evaluated\" : \"std::is_constant_evaluated\");"}}
[k]={{Pc,12131,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_is_constant_evaluated: {\n    if (Info.InConstantContext && !Info.CheckingPotentialConstantExpression && (Info.CallStackDepth == 1 || (Info.CallStackDepth == 2 && Callee->isInStdNamespace() && Callee->getIdentifier() && Callee->getIdentifier()->isStr(\"is_constant_evaluated\")))) {\n      // FIXME: Find a better way to avoid duplicated diagnostics.\n      if (Info.EvalStatus.Diag)\n        Info.report((Info.CallStackDepth == 1) ? E->getExprLoc() : Info.CurrentCall->CallLoc, diag::warn_is_constant_evaluated_always_true_constexpr) << (Info.CallStackDepth == 1 ? \"__builtin_is_constant_evaluated\" : \"std::is_constant_evaluated\");"}}
},
},
["warn_ivar_use_hidden"]={
["warn_ivar_use_hidden"]={
Line 8,127: Line 8,127:
[c]=q,
[c]=q,
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{M,2554,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n  if (LookForIvars) {\n  } else if (CurMethod->isInstanceMethod()) {\n    // We should warn if a local variable hides an ivar.\n    if (ObjCInterfaceDecl *IFace = CurMethod->getClassInterface()) {\n      if (ObjCIvarDecl *IV = IFace->lookupInstanceVariable(II, ClassDeclared)) {\n        if (IV->getAccessControl() != ObjCIvarDecl::Private || declaresSameEntity(IFace, ClassDeclared))\n          Diag(Loc, diag::warn_ivar_use_hidden) << IV->getDeclName();"}}
[k]={{M,2983,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n  if (LookForIvars) {\n  } else if (CurMethod->isInstanceMethod()) {\n    // We should warn if a local variable hides an ivar.\n    if (ObjCInterfaceDecl *IFace = CurMethod->getClassInterface()) {\n      if (ObjCIvarDecl *IV = IFace->lookupInstanceVariable(II, ClassDeclared)) {\n        if (IV->getAccessControl() != ObjCIvarDecl::Private || declaresSameEntity(IFace, ClassDeclared))\n          Diag(Loc, diag::warn_ivar_use_hidden) << IV->getDeclName();"}}
},
},
["warn_ivars_in_interface"]={
["warn_ivars_in_interface"]={
Line 8,142: Line 8,142:
[c]=q,
[c]=q,
[b]={"e1ada58ef434",1337103796,"Remove word \'block\' from option and diagnostic I added"},
[b]={"e1ada58ef434",1337103796,"Remove word \'block\' from option and diagnostic I added"},
[k]={{G,16160,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n  if (LangOpts.ObjCRuntime.isNonFragile() && !NewID->isInvalidDecl() && isa<ObjCInterfaceDecl>(EnclosingDecl))\n    Diag(Loc, diag::warn_ivars_in_interface);"}}
[k]={{G,18457,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n  if (LangOpts.ObjCRuntime.isNonFragile() && !NewID->isInvalidDecl() && isa<ObjCInterfaceDecl>(EnclosingDecl))\n    Diag(Loc, diag::warn_ivars_in_interface);"}}
},
},
["warn_jump_out_of_seh_finally"]={
["warn_jump_out_of_seh_finally"]={
Line 8,156: Line 8,156:
[c]=q,
[c]=q,
[b]={"d64657f2989f",1425869279,"Warn when jumping out of a __finally block via continue, break, return, __leave."},
[b]={"d64657f2989f",1425869279,"Warn when jumping out of a __finally block via continue, break, return, __leave."},
[k]={{xd,855,"/// 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) {\n        S.Diag(From->getBeginLoc(), diag::warn_jump_out_of_seh_finally);"},{xb,2850,"static void CheckJumpOutOfSEHFinally(Sema &S, SourceLocation Loc, const Scope &DestScope) {\n  if (!S.CurrentSEHFinally.empty() && DestScope.Contains(*S.CurrentSEHFinally.back())) {\n    S.Diag(Loc, diag::warn_jump_out_of_seh_finally);"}}
[k]={{xd,941,"/// 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) {\n        S.Diag(From->getBeginLoc(), diag::warn_jump_out_of_seh_finally);"},{xb,3322,"static void CheckJumpOutOfSEHFinally(Sema &S, SourceLocation Loc, const Scope &DestScope) {\n  if (!S.CurrentSEHFinally.empty() && DestScope.Contains(*S.CurrentSEHFinally.back())) {\n    S.Diag(Loc, diag::warn_jump_out_of_seh_finally);"}}
},
},
["warn_kern_is_inline"]={
["warn_kern_is_inline"]={
Line 8,170: Line 8,170:
[c]=q,
[c]=q,
[b]={"c66a10652a94",1453249617,"[CUDA] Only allow __global__ on free functions and static member functions."},
[b]={"c66a10652a94",1453249617,"[CUDA] Only allow __global__ on free functions and static member functions."},
[k]={{H,4433,"static void handleGlobalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Only warn for \"inline\" when compiling for host, to cut down on noise.\n  if (FD->isInlineSpecified() && !S.getLangOpts().CUDAIsDevice)\n    S.Diag(FD->getBeginLoc(), diag::warn_kern_is_inline) << FD;"}}
[k]={{H,5059,"static void handleGlobalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Only warn for \"inline\" when compiling for host, to cut down on noise.\n  if (FD->isInlineSpecified() && !S.getLangOpts().CUDAIsDevice)\n    S.Diag(FD->getBeginLoc(), diag::warn_kern_is_inline) << FD;"}}
},
},
["warn_kern_is_method"]={
["warn_kern_is_method"]={
Line 8,185: Line 8,185:
[c]=q,
[c]=q,
[b]={"c66a10652a94",1453249617,"[CUDA] Only allow __global__ on free functions and static member functions."},
[b]={"c66a10652a94",1453249617,"[CUDA] Only allow __global__ on free functions and static member functions."},
[k]={{H,4429,"static void handleGlobalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *Method = dyn_cast<CXXMethodDecl>(FD)) {\n    S.Diag(Method->getBeginLoc(), diag::warn_kern_is_method) << Method;"}}
[k]={{H,5055,"static void handleGlobalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *Method = dyn_cast<CXXMethodDecl>(FD)) {\n    S.Diag(Method->getBeginLoc(), diag::warn_kern_is_method) << Method;"}}
},
},
["warn_left_shift_always"]={
["warn_left_shift_always"]={
Line 8,199: Line 8,199:
[c]=q,
[c]=q,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{w,13038,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  if (const auto *BO = dyn_cast<BinaryOperator>(E)) {\n    // Do not diagnose unsigned shifts.\n    if (Opc == BO_Shl) {\n      if (LHS && LHS->getValue() == 0)\n        S.Diag(ExprLoc, diag::warn_left_shift_always) << 0;"},{w,13040,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  if (const auto *BO = dyn_cast<BinaryOperator>(E)) {\n    // Do not diagnose unsigned shifts.\n    if (Opc == BO_Shl) {\n      if (LHS && LHS->getValue() == 0)\n      else if (!E->isValueDependent() && LHS && RHS && RHS->getValue().isNonNegative() && E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects))\n        S.Diag(ExprLoc, diag::warn_left_shift_always) << (Result.Val.getInt() != 0);"}}
[k]={{w,14628,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  if (const auto *BO = dyn_cast<BinaryOperator>(E)) {\n    // Do not diagnose unsigned shifts.\n    if (Opc == BO_Shl) {\n      if (LHS && LHS->getValue() == 0)\n        S.Diag(ExprLoc, diag::warn_left_shift_always) << 0;"},{w,14632,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  if (const auto *BO = dyn_cast<BinaryOperator>(E)) {\n    // Do not diagnose unsigned shifts.\n    if (Opc == BO_Shl) {\n      if (LHS && LHS->getValue() == 0)\n      else if (!E->isValueDependent() && LHS && RHS && RHS->getValue().isNonNegative() && E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects))\n        S.Diag(ExprLoc, diag::warn_left_shift_always) << (Result.Val.getInt() != 0);"}}
},
},
["warn_left_shift_in_bool_context"]={
["warn_left_shift_in_bool_context"]={
Line 8,214: Line 8,214:
[c]=q,
[c]=q,
[b]={ob,1567434909,tb},
[b]={ob,1567434909,tb},
[k]={{w,13042,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  if (const auto *BO = dyn_cast<BinaryOperator>(E)) {\n    // Do not diagnose unsigned shifts.\n    if (Opc == BO_Shl) {\n      if (LHS && LHS->getValue() == 0)\n      else if (!E->isValueDependent() && LHS && RHS && RHS->getValue().isNonNegative() && E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects))\n      else if (E->getType()->isSignedIntegerType())\n        S.Diag(ExprLoc, diag::warn_left_shift_in_bool_context) << E;"}}
[k]={{w,14635,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  if (const auto *BO = dyn_cast<BinaryOperator>(E)) {\n    // Do not diagnose unsigned shifts.\n    if (Opc == BO_Shl) {\n      if (LHS && LHS->getValue() == 0)\n      else if (!E->isValueDependent() && LHS && RHS && RHS->getValue().isNonNegative() && E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects))\n      else if (E->getType()->isSignedIntegerType())\n        S.Diag(ExprLoc, diag::warn_left_shift_in_bool_context) << E;"}}
},
},
["warn_lock_exclusive_and_shared"]={
["warn_lock_exclusive_and_shared"]={
Line 8,229: Line 8,229:
[c]=q,
[c]=q,
[b]={"46b057681a7f",1315505978,"Thread safety: shared vs. exclusive locks"},
[b]={"46b057681a7f",1315505978,"Thread safety: shared vs. exclusive locks"},
[k]={{eb,1667,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleExclusiveAndShared(StringRef Kind, Name LockName, SourceLocation Loc1, SourceLocation Loc2) override {\n    PartialDiagnosticAt Warning(Loc1, S.PDiag(diag::warn_lock_exclusive_and_shared) << Kind << LockName);"}}
[k]={{eb,1934,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleExclusiveAndShared(StringRef Kind, Name LockName, SourceLocation Loc1, SourceLocation Loc2) override {\n    PartialDiagnosticAt Warning(Loc1, S.PDiag(diag::warn_lock_exclusive_and_shared) << Kind << LockName);"}}
},
},
["warn_lock_some_predecessors"]={
["warn_lock_some_predecessors"]={
Line 8,244: Line 8,244:
[c]=q,
[c]=q,
[b]={"922866783b07",1328244326,"Thread safety analysis:"},
[b]={"922866783b07",1328244326,"Thread safety analysis:"},
[k]={{eb,1647,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexHeldEndOfScope(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) override {\n    case LEK_LockedSomePredecessors:\n      DiagID = diag::warn_lock_some_predecessors;"}}
[k]={{eb,1909,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexHeldEndOfScope(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) override {\n    case LEK_LockedSomePredecessors:\n      DiagID = diag::warn_lock_some_predecessors;"}}
},
},
["warn_logical_and_in_logical_or"]={
["warn_logical_and_in_logical_or"]={
Line 8,259: Line 8,259:
[c]=q,
[c]=q,
[b]={"f89a56c74b35",1289941212,"Warn about arg1 && arg2 || arg3, as GCC 4.3+ does. Fixes rdar://8659922"},
[b]={"f89a56c74b35",1289941212,"Warn about arg1 && arg2 || arg3, as GCC 4.3+ does. Fixes rdar://8659922"},
[k]={{M,13696,"/// 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  Self.Diag(Bop->getOperatorLoc(), diag::warn_logical_and_in_logical_or) << Bop->getSourceRange() << OpLoc;"}}
[k]={{M,15781,"/// 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  Self.Diag(Bop->getOperatorLoc(), diag::warn_logical_and_in_logical_or) << Bop->getSourceRange() << OpLoc;"}}
},
},
["warn_logical_instead_of_bitwise"]={
["warn_logical_instead_of_bitwise"]={
Line 8,273: Line 8,273:
[c]=q,
[c]=q,
[b]={"8406c5197b7f",1279050092,"Add a warning to catch a bug recently caught by code review, like this:"},
[b]={"8406c5197b7f",1279050092,"Add a warning to catch a bug recently caught by code review, like this:"},
[k]={{M,11990,"// C99 6.5.[13,14]\ninline QualType Sema::CheckLogicalOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Diagnose cases where the user write a logical and/or but probably meant a\n  // bitwise one.  We do this when the LHS is a non-bool integer and the RHS\n  // is a constant.\n  if (!EnumConstantInBoolContext && LHS.get()->getType()->isIntegerType() && !LHS.get()->getType()->isBooleanType() && RHS.get()->getType()->isIntegerType() && !RHS.get()->isValueDependent() &&\n    if (RHS.get()->EvaluateAsInt(EVResult, Context)) {\n      if ((getLangOpts().Bool && !RHS.get()->getType()->isBooleanType() && !RHS.get()->getExprLoc().isMacroID()) || (Result != 0 && Result != 1)) {\n        Diag(Loc, diag::warn_logical_instead_of_bitwise) << RHS.get()->getSourceRange() << (Opc == BO_LAnd ? \"&&\" : \"||\");"}}
[k]={{M,13936,"// C99 6.5.[13,14]\ninline QualType Sema::CheckLogicalOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Diagnose cases where the user write a logical and/or but probably meant a\n  // bitwise one.  We do this when the LHS is a non-bool integer and the RHS\n  // is a constant.\n  if (!EnumConstantInBoolContext && LHS.get()->getType()->isIntegerType() && !LHS.get()->getType()->isBooleanType() && RHS.get()->getType()->isIntegerType() && !RHS.get()->isValueDependent() &&\n    if (RHS.get()->EvaluateAsInt(EVResult, Context)) {\n      if ((getLangOpts().Bool && !RHS.get()->getType()->isBooleanType() && !RHS.get()->getExprLoc().isMacroID()) || (Result != 0 && Result != 1)) {\n        Diag(Loc, diag::warn_logical_instead_of_bitwise) << RHS.get()->getSourceRange() << (Opc == BO_LAnd ? \"&&\" : \"||\");"}}
},
},
["warn_logical_not_on_lhs_of_check"]={
["warn_logical_not_on_lhs_of_check"]={
Line 8,287: Line 8,287:
[c]=q,
[c]=q,
[b]={"44f6f2ee4233",1477585926,"Expand -Wlogical-not-parentheses to also fire on `!x & A`."},
[b]={"44f6f2ee4233",1477585926,"Expand -Wlogical-not-parentheses to also fire on `!x & A`."},
[k]={{M,10816,"/// Warns on !x < y, !x & y where !(x < y), !(x & y) was probably intended.\nstatic void diagnoseLogicalNotOnLHSofCheck(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  S.Diag(UO->getOperatorLoc(), diag::warn_logical_not_on_lhs_of_check) << Loc << IsBitwiseOp;"}}
[k]={{M,12546,"/// Warns on !x < y, !x & y where !(x < y), !(x & y) was probably intended.\nstatic void diagnoseLogicalNotOnLHSofCheck(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  S.Diag(UO->getOperatorLoc(), diag::warn_logical_not_on_lhs_of_check) << Loc << IsBitwiseOp;"}}
},
},
["warn_loop_ctrl_binds_to_inner"]={
["warn_loop_ctrl_binds_to_inner"]={
Line 8,301: Line 8,301:
[c]=q,
[c]=q,
[b]={"09f9924acf1a",1390489500,"Fix to PR8880 (clang dies processing a for loop)"},
[b]={"09f9924acf1a",1390489500,"Fix to PR8880 (clang dies processing a for loop)"},
[k]={{xb,1851,"void Sema::CheckBreakContinueBinding(Expr *E) {\n  if (BCFinder.BreakFound() && BreakParent) {\n    if (BreakParent->getFlags() & Scope::SwitchScope) {\n    } else {\n      Diag(BCFinder.GetBreakLoc(), diag::warn_loop_ctrl_binds_to_inner) << \"break\";"},{xb,1854,"void Sema::CheckBreakContinueBinding(Expr *E) {\n  if (BCFinder.BreakFound() && BreakParent) {\n  } else if (BCFinder.ContinueFound() && CurScope->getContinueParent()) {\n    Diag(BCFinder.GetContinueLoc(), diag::warn_loop_ctrl_binds_to_inner) << \"continue\";"}}
[k]={{xb,2123,"void Sema::CheckBreakContinueBinding(Expr *E) {\n  if (BCFinder.BreakFound() && BreakParent) {\n    if (BreakParent->getFlags() & Scope::SwitchScope) {\n    } else {\n      Diag(BCFinder.GetBreakLoc(), diag::warn_loop_ctrl_binds_to_inner) << \"break\";"},{xb,2127,"void Sema::CheckBreakContinueBinding(Expr *E) {\n  if (BCFinder.BreakFound() && BreakParent) {\n  } else if (BCFinder.ContinueFound() && CurScope->getContinueParent()) {\n    Diag(BCFinder.GetContinueLoc(), diag::warn_loop_ctrl_binds_to_inner) << \"continue\";"}}
},
},
["warn_loop_state_mismatch"]={
["warn_loop_state_mismatch"]={
Line 8,316: Line 8,316:
[c]=q,
[c]=q,
[b]={"3277a6129b79",1381343424,"Consumed analysis: improve loop handling.  The prior version of the analysis"},
[b]={"3277a6129b79",1381343424,"Consumed analysis: improve loop handling.  The prior version of the analysis"},
[k]={{eb,1791,"class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {\n  void warnLoopStateMismatch(SourceLocation Loc, StringRef VariableName) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_loop_state_mismatch) << VariableName);"}}
[k]={{eb,2092,"class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {\n  void warnLoopStateMismatch(SourceLocation Loc, StringRef VariableName) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_loop_state_mismatch) << VariableName);"}}
},
},
["warn_main_one_arg"]={
["warn_main_one_arg"]={
Line 8,330: Line 8,330:
[c]=q,
[c]=q,
[b]={"02dee0a46a39",1248496613,"Semantic checking for main()."},
[b]={"02dee0a46a39",1248496613,"Semantic checking for main()."},
[k]={{G,10661,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  if (nparams == 1 && !FD->isInvalidDecl()) {\n    Diag(FD->getLocation(), diag::warn_main_one_arg);"}}
[k]={{G,12218,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  if (nparams == 1 && !FD->isInvalidDecl()) {\n    Diag(FD->getLocation(), diag::warn_main_one_arg);"}}
},
},
["warn_main_redefined"]={
["warn_main_redefined"]={
Line 8,344: Line 8,344:
[c]=q,
[c]=q,
[b]={"da8a3b903b45",1439561609,"[Sema] main can\'t be declared as global variable, in C++."},
[b]={"da8a3b903b45",1439561609,"[Sema] main can\'t be declared as global variable, in C++."},
[k]={{G,7159,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // Special handling of variable named \'main\'.\n  if (Name.getAsIdentifierInfo() && Name.getAsIdentifierInfo()->isStr(\"main\") && NewVD->getDeclContext()->getRedeclContext()->isTranslationUnit() && !getLangOpts().Freestanding && !NewVD->getDescribedVarTemplate()) {\n    // C++ [basic.start.main]p3\n    // A program that declares a variable main at global scope is ill-formed.\n    if (getLangOpts().CPlusPlus)\n    // In C, and external-linkage variable named main results in undefined\n    // behavior.\n    else if (NewVD->hasExternalFormalLinkage())\n      Diag(D.getBeginLoc(), diag::warn_main_redefined);"}}
[k]={{G,8114,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // Special handling of variable named \'main\'.\n  if (Name.getAsIdentifierInfo() && Name.getAsIdentifierInfo()->isStr(\"main\") && NewVD->getDeclContext()->getRedeclContext()->isTranslationUnit() && !getLangOpts().Freestanding && !NewVD->getDescribedVarTemplate()) {\n    // C++ [basic.start.main]p3\n    // A program that declares a variable main at global scope is ill-formed.\n    if (getLangOpts().CPlusPlus)\n    // In C, and external-linkage variable named main results in undefined\n    // behavior.\n    else if (NewVD->hasExternalFormalLinkage())\n      Diag(D.getBeginLoc(), diag::warn_main_redefined);"}}
},
},
["warn_main_returns_bool_literal"]={
["warn_main_returns_bool_literal"]={
Line 8,358: Line 8,358:
[c]=q,
[c]=q,
[b]={"9bb192ed9996",1480383317,"Add a warning for \'main\' returning \'true\' or \'false\'."},
[b]={"9bb192ed9996",1480383317,"Add a warning for \'main\' returning \'true\' or \'false\'."},
[k]={{xb,3411,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  if (const FunctionDecl *FD = getCurFunctionDecl()) {\n    if (FD->isMain() && RetValExp)\n      if (isa<CXXBoolLiteralExpr>(RetValExp))\n        Diag(ReturnLoc, diag::warn_main_returns_bool_literal) << RetValExp->getSourceRange();"}}
[k]={{xb,3965,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  if (const FunctionDecl *FD = getCurFunctionDecl()) {\n    if (FD->isMain() && RetValExp)\n      if (isa<CXXBoolLiteralExpr>(RetValExp))\n        Diag(ReturnLoc, diag::warn_main_returns_bool_literal) << RetValExp->getSourceRange();"}}
},
},
["warn_max_tokens"]={
["warn_max_tokens"]={
Line 8,373: Line 8,373:
[c]=u,
[c]=u,
[b]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[b]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[k]={{"clang/lib/Parse/ParsePragma.cpp",3474,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (PP.getTokenCount() > MaxTokens) {\n    PP.Diag(Loc, diag::warn_max_tokens) << PP.getTokenCount() << (unsigned)MaxTokens;"}}
[k]={{"clang/lib/Parse/ParsePragma.cpp",3995,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (PP.getTokenCount() > MaxTokens) {\n    PP.Diag(Loc, diag::warn_max_tokens) << PP.getTokenCount() << (unsigned)MaxTokens;"}}
},
},
["warn_max_tokens_total"]={
["warn_max_tokens_total"]={
Line 8,388: Line 8,388:
[c]=u,
[c]=u,
[b]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[b]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[k]={{tc,647,"/// ParseTopLevelDecl - Parse one top-level declaration, return whatever the\n/// action tells us to.  This returns true if the EOF was encountered.\n///\n///  top-level-declaration:\n///          declaration\n/// [C++20]  module-import-declaration\nbool Parser::ParseTopLevelDecl(DeclGroupPtrTy &Result, Sema::ModuleImportState &ImportState) {\n  case tok::annot_repl_input_end:\n    // Check whether -fmax-tokens= was reached.\n    if (PP.getMaxTokens() != 0 && PP.getTokenCount() > PP.getMaxTokens()) {\n      PP.Diag(Tok.getLocation(), diag::warn_max_tokens_total) << PP.getTokenCount() << PP.getMaxTokens();"}}
[k]={{tc,700,"/// ParseTopLevelDecl - Parse one top-level declaration, return whatever the\n/// action tells us to.  This returns true if the EOF was encountered.\n///\n///  top-level-declaration:\n///          declaration\n/// [C++20]  module-import-declaration\nbool Parser::ParseTopLevelDecl(DeclGroupPtrTy &Result, Sema::ModuleImportState &ImportState) {\n  case tok::annot_repl_input_end:\n    // Check whether -fmax-tokens= was reached.\n    if (PP.getMaxTokens() != 0 && PP.getTokenCount() > PP.getMaxTokens()) {\n      PP.Diag(Tok.getLocation(), diag::warn_max_tokens_total) << PP.getTokenCount() << PP.getMaxTokens();"}}
},
},
["warn_max_unsigned_zero"]={
["warn_max_unsigned_zero"]={
Line 8,402: Line 8,402:
[c]=q,
[c]=q,
[b]={"67c0071517e5",1480981306,"Warn on unsigned zero in call to std::max"},
[b]={"67c0071517e5",1480981306,"Warn on unsigned zero in call to std::max"},
[k]={{w,10899,"//===--- 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::warn_max_unsigned_zero) << IsFirstArgZero << Call->getCallee()->getSourceRange() << ZeroRange;"}}
[k]={{w,12131,"//===--- 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::warn_max_unsigned_zero) << IsFirstArgZero << Call->getCallee()->getSourceRange() << ZeroRange;"}}
},
},
["warn_maybe_capture_bad_target_this_ptr"]={
["warn_maybe_capture_bad_target_this_ptr"]={
Line 8,416: Line 8,416:
[c]=q,
[c]=q,
[b]={Kc,1615397021,zc},
[b]={Kc,1615397021,zc},
[k]={{"clang/lib/Sema/SemaCUDA.cpp",789,"// Check the wrong-sided reference capture of lambda for CUDA/HIP.\n// A lambda function may capture a stack variable by reference when it is\n// defined and uses the capture by reference when the lambda is called. When\n// the capture and use happen on different sides, the capture is invalid and\n// should be diagnosed.\nvoid Sema::CUDACheckLambdaCapture(CXXMethodDecl *Callee, const sema::Capture &Capture) {\n  if (Capture.isVariableCapture()) {\n  } else if (Capture.isThisCapture()) {\n    SemaDiagnosticBuilder(DiagKind, Capture.getLocation(), diag::warn_maybe_capture_bad_target_this_ptr, Callee, *this);"}}
[k]={{"clang/lib/Sema/SemaCUDA.cpp",891,"// Check the wrong-sided reference capture of lambda for CUDA/HIP.\n// A lambda function may capture a stack variable by reference when it is\n// defined and uses the capture by reference when the lambda is called. When\n// the capture and use happen on different sides, the capture is invalid and\n// should be diagnosed.\nvoid Sema::CUDACheckLambdaCapture(CXXMethodDecl *Callee, const sema::Capture &Capture) {\n  if (Capture.isVariableCapture()) {\n  } else if (Capture.isThisCapture()) {\n    SemaDiagnosticBuilder(DiagKind, Capture.getLocation(), diag::warn_maybe_capture_bad_target_this_ptr, Callee, *this);"}}
},
},
["warn_maybe_falloff_nonvoid_coroutine"]={
["warn_maybe_falloff_nonvoid_coroutine"]={
Line 8,430: Line 8,430:
[c]=q,
[c]=q,
[b]={"709d1b30ab9e",1477553431,"[coroutines] Build fallthrough and set_exception statements."},
[b]={"709d1b30ab9e",1477553431,"[coroutines] Build fallthrough and set_exception statements."},
[k]={{eb,535,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForCoroutine(const Decl *Func) {\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_coroutine;"},{eb,570,"struct CheckFallThroughDiagnostics {\n  bool checkDiagnostics(DiagnosticsEngine &D, bool ReturnsVoid, bool HasNoReturn) const {\n    if (funMode == Coroutine) {\n      return (ReturnsVoid || D.isIgnored(diag::warn_maybe_falloff_nonvoid_function, FuncLoc) || D.isIgnored(diag::warn_maybe_falloff_nonvoid_coroutine, FuncLoc)) && (!HasNoReturn);"}}
[k]={{eb,585,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForCoroutine(const Decl *Func) {\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_coroutine;"},{eb,639,"struct CheckFallThroughDiagnostics {\n  bool checkDiagnostics(DiagnosticsEngine &D, bool ReturnsVoid, bool HasNoReturn) const {\n    if (funMode == Coroutine) {\n      return (ReturnsVoid || D.isIgnored(diag::warn_maybe_falloff_nonvoid_function, FuncLoc) || D.isIgnored(diag::warn_maybe_falloff_nonvoid_coroutine, FuncLoc)) && (!HasNoReturn);"}}
},
},
["warn_maybe_falloff_nonvoid_function"]={
["warn_maybe_falloff_nonvoid_function"]={
Line 8,444: Line 8,444:
[c]=q,
[c]=q,
[b]={"33979f75a0fd",1248307017,"Add warning for falling off the end of a function that should return a"},
[b]={"33979f75a0fd",1248307017,"Add warning for falling off the end of a function that should return a"},
[k]={{eb,507,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_function;"},{eb,567,"struct CheckFallThroughDiagnostics {\n  bool checkDiagnostics(DiagnosticsEngine &D, bool ReturnsVoid, bool HasNoReturn) const {\n    if (funMode == Function) {\n      return (ReturnsVoid || D.isIgnored(diag::warn_maybe_falloff_nonvoid_function, FuncLoc)) && (!HasNoReturn || D.isIgnored(diag::warn_noreturn_function_has_return_expr, FuncLoc)) && (!ReturnsVoid || D.isIgnored(diag::warn_suggest_noreturn_block, FuncLoc));"},{eb,570,"struct CheckFallThroughDiagnostics {\n  bool checkDiagnostics(DiagnosticsEngine &D, bool ReturnsVoid, bool HasNoReturn) const {\n    if (funMode == Coroutine) {\n      return (ReturnsVoid || D.isIgnored(diag::warn_maybe_falloff_nonvoid_function, FuncLoc) || D.isIgnored(diag::warn_maybe_falloff_nonvoid_coroutine, FuncLoc)) && (!HasNoReturn);"}}
[k]={{eb,553,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_function;"},{eb,628,"struct CheckFallThroughDiagnostics {\n  bool checkDiagnostics(DiagnosticsEngine &D, bool ReturnsVoid, bool HasNoReturn) const {\n    if (funMode == Function) {\n      return (ReturnsVoid || D.isIgnored(diag::warn_maybe_falloff_nonvoid_function, FuncLoc)) && (!HasNoReturn || D.isIgnored(diag::warn_noreturn_function_has_return_expr, FuncLoc)) && (!ReturnsVoid || D.isIgnored(diag::warn_suggest_noreturn_block, FuncLoc));"},{eb,638,"struct CheckFallThroughDiagnostics {\n  bool checkDiagnostics(DiagnosticsEngine &D, bool ReturnsVoid, bool HasNoReturn) const {\n    if (funMode == Coroutine) {\n      return (ReturnsVoid || D.isIgnored(diag::warn_maybe_falloff_nonvoid_function, FuncLoc) || D.isIgnored(diag::warn_maybe_falloff_nonvoid_coroutine, FuncLoc)) && (!HasNoReturn);"}}
},
},
["warn_maybe_falloff_nonvoid_lambda"]={
["warn_maybe_falloff_nonvoid_lambda"]={
Line 8,458: Line 8,458:
[c]=vc,
[c]=vc,
[b]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions."},
[b]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions."},
[k]={{eb,557,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForLambda() {\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_lambda;"}}
[k]={{eb,614,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForLambda() {\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_lambda;"}}
},
},
["warn_maybe_uninit_var"]={
["warn_maybe_uninit_var"]={
Line 8,473: Line 8,473:
[c]=q,
[c]=q,
[b]={"c8c4e5f37103",1300165058,"Split warnings from -Wuninitialized-experimental into \"must-be-initialized\" and \"may-be-initialized\"..."},
[b]={"c8c4e5f37103",1300165058,"Split warnings from -Wuninitialized-experimental into \"must-be-initialized\" and \"may-be-initialized\"..."},
[k]={{eb,883,"/// 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  if (!Diagnosed)\n    S.Diag(Use.getUser()->getBeginLoc(), diag::warn_maybe_uninit_var) << VD->getDeclName() << IsCapturedByBlock << Use.getUser()->getSourceRange();"},{eb,2242,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  if (!Diags.isIgnored(diag::warn_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_sometimes_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_maybe_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_uninit_const_reference, D->getBeginLoc())) {"}}
[k]={{eb,990,"/// 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  if (!Diagnosed)\n    S.Diag(Use.getUser()->getBeginLoc(), diag::warn_maybe_uninit_var) << VD->getDeclName() << IsCapturedByBlock << Use.getUser()->getSourceRange();"},{eb,2631,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  if (!Diags.isIgnored(diag::warn_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_sometimes_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_maybe_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_uninit_const_reference, D->getBeginLoc())) {"}}
},
},
["warn_maynot_respond"]={
["warn_maynot_respond"]={
Line 8,485: Line 8,485:
[c]=q,
[c]=q,
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{Hc,2503,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (!Method) {\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    } else {\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n        if (!Method) {\n          if (!Method && (!Receiver || !isSelfExpr(Receiver))) {\n            // If we still haven\'t found a method, look in the global pool. This\n            // behavior isn\'t very desirable, however we need it for GCC\n            // compatibility. FIXME: should we deviate??\n            if (OCIType->qual_empty()) {\n              if (Method && !forwardClass)\n                Diag(SelLoc, diag::warn_maynot_respond) << OCIType->getInterfaceDecl()->getIdentifier() << Sel << RecRange;"}}
[k]={{Hc,3120,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (!Method) {\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    } else {\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n        if (!Method) {\n          if (!Method && (!Receiver || !isSelfExpr(Receiver))) {\n            // If we still haven\'t found a method, look in the global pool. This\n            // behavior isn\'t very desirable, however we need it for GCC\n            // compatibility. FIXME: should we deviate??\n            if (OCIType->qual_empty()) {\n              if (Method && !forwardClass)\n                Diag(SelLoc, diag::warn_maynot_respond) << OCIType->getInterfaceDecl()->getIdentifier() << Sel << RecRange;"}}
},
},
["warn_member_extra_qualification"]={
["warn_member_extra_qualification"]={
Line 8,499: Line 8,499:
[c]=q,
[c]=q,
[b]={"6d76e6cd9250",1285967968,"Better diagnostic for superfluous scope specifier inside a class definition for member functions. + ..."},
[b]={"6d76e6cd9250",1285967968,"Better diagnostic for superfluous scope specifier inside a class definition for member functions. + ..."},
[k]={{G,5500,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // If the user provided a superfluous scope specifier that refers back to the\n  // class in which the entity is already declared, diagnose and ignore it.\n  //\n  // class X {\n  //  void X::f();\n  // };\n  //\n  // Note, it was once ill-formed to give redundant qualification in all\n  // contexts, but that rule was removed by DR482.\n  if (Cur->Equals(DC)) {\n    if (Cur->isRecord()) {\n      Diag(Loc, LangOpts.MicrosoftExt ? diag::warn_member_extra_qualification : diag::err_member_extra_qualification) << Name << FixItHint::CreateRemoval(SS.getRange());"}}
[k]={{G,6176,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // If the user provided a superfluous scope specifier that refers back to the\n  // class in which the entity is already declared, diagnose and ignore it.\n  //\n  // class X {\n  //  void X::f();\n  // };\n  //\n  // Note, it was once ill-formed to give redundant qualification in all\n  // contexts, but that rule was removed by DR482.\n  if (Cur->Equals(DC)) {\n    if (Cur->isRecord()) {\n      Diag(Loc, LangOpts.MicrosoftExt ? diag::warn_member_extra_qualification : diag::err_member_extra_qualification) << Name << FixItHint::CreateRemoval(SS.getRange());"}}
},
},
["warn_memsize_comparison"]={
["warn_memsize_comparison"]={
Line 8,513: Line 8,513:
[c]=q,
[c]=q,
[b]={"0e6daefe8f11",1388101119,"Warn on mismatched parentheses in memcmp and friends."},
[b]={"0e6daefe8f11",1388101119,"Warn on mismatched parentheses in memcmp and friends."},
[k]={{w,10928,"/// Takes the expression passed to the size_t parameter of functions\n/// such as memcmp, strncat, etc and warns if it\'s a comparison.\n///\n/// This is to catch typos like `if (memcmp(&a, &b, sizeof(a) > 0))`.\nstatic bool CheckMemorySizeofForComparison(Sema &S, const Expr *E, IdentifierInfo *FnName, SourceLocation FnLoc, SourceLocation RParenLoc) {\n  S.Diag(Size->getOperatorLoc(), diag::warn_memsize_comparison) << SizeRange << FnName;"}}
[k]={{w,12168,"/// Takes the expression passed to the size_t parameter of functions\n/// such as memcmp, strncat, etc and warns if it\'s a comparison.\n///\n/// This is to catch typos like `if (memcmp(&a, &b, sizeof(a) > 0))`.\nstatic bool CheckMemorySizeofForComparison(Sema &S, const Expr *E, IdentifierInfo *FnName, SourceLocation FnLoc, SourceLocation RParenLoc) {\n  S.Diag(Size->getOperatorLoc(), diag::warn_memsize_comparison) << SizeRange << FnName;"}}
},
},
["warn_messaging_unqualified_id"]={
["warn_messaging_unqualified_id"]={
Line 8,528: Line 8,528:
[c]=q,
[c]=q,
[b]={"d9f1284009d5",1503677537,"[ObjC] Add a -Wobjc-messaging-id warning"},
[b]={"d9f1284009d5",1503677537,"[ObjC] Add a -Wobjc-messaging-id warning"},
[k]={{Hc,2550,"/// 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 && Method->isDirectMethod()) {\n  } else if (ReceiverType->isObjCIdType() && !isImplicit) {\n    Diag(Receiver->getExprLoc(), diag::warn_messaging_unqualified_id);"}}
[k]={{Hc,3180,"/// 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 && Method->isDirectMethod()) {\n  } else if (ReceiverType->isObjCIdType() && !isImplicit) {\n    Diag(Receiver->getExprLoc(), diag::warn_messaging_unqualified_id);"}}
},
},
["warn_method_param_declaration"]={
["warn_method_param_declaration"]={
Line 8,543: Line 8,543:
[c]=A,
[c]=A,
[b]={"c677f693971f",1299956070,"Place duplicate argument declaration in in"},
[b]={"c677f693971f",1299956070,"Place duplicate argument declaration in in"},
[k]={{mc,3962,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  for (unsigned i = 0, e = Sel.getNumArgs(); i != e; ++i) {\n    if (R.isSingleResult()) {\n      if (S->isDeclScope(PrevDecl)) {\n        Diag(ArgInfo[i].NameLoc, (MethodDefinition ? diag::warn_method_param_redefinition : diag::warn_method_param_declaration)) << ArgInfo[i].Name;"}}
[k]={{mc,4788,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  for (unsigned i = 0, e = Sel.getNumArgs(); i != e; ++i) {\n    if (R.isSingleResult()) {\n      if (S->isDeclScope(PrevDecl)) {\n        Diag(ArgInfo[i].NameLoc, (MethodDefinition ? diag::warn_method_param_redefinition : diag::warn_method_param_declaration)) << ArgInfo[i].Name;"}}
},
},
["warn_method_param_redefinition"]={
["warn_method_param_redefinition"]={
Line 8,555: Line 8,555:
[c]=A,
[c]=A,
[b]={"ca3566fc20b6",1297290001,"Fix scoping of method declarations and issue "},
[b]={"ca3566fc20b6",1297290001,"Fix scoping of method declarations and issue "},
[k]={{mc,3962,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  for (unsigned i = 0, e = Sel.getNumArgs(); i != e; ++i) {\n    if (R.isSingleResult()) {\n      if (S->isDeclScope(PrevDecl)) {\n        Diag(ArgInfo[i].NameLoc, (MethodDefinition ? diag::warn_method_param_redefinition : diag::warn_method_param_declaration)) << ArgInfo[i].Name;"}}
[k]={{mc,4787,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  for (unsigned i = 0, e = Sel.getNumArgs(); i != e; ++i) {\n    if (R.isSingleResult()) {\n      if (S->isDeclScope(PrevDecl)) {\n        Diag(ArgInfo[i].NameLoc, (MethodDefinition ? diag::warn_method_param_redefinition : diag::warn_method_param_declaration)) << ArgInfo[i].Name;"}}
},
},
["warn_microsoft_dependent_exists"]={
["warn_microsoft_dependent_exists"]={
Line 8,569: Line 8,569:
[c]=A,
[c]=A,
[b]={"43edb32f1f03",1319495470,"Rework Microsoft __if_exists/__if_not_exists parsing and semantic"},
[b]={"43edb32f1f03",1319495470,"Rework Microsoft __if_exists/__if_not_exists parsing and semantic"},
[k]={{db,4257,"void Parser::ParseMicrosoftIfExistsClassDeclaration(DeclSpec::TST TagType, ParsedAttributes &AccessAttrs, AccessSpecifier &CurAS) {\n  case IEB_Dependent:\n    Diag(Result.KeywordLoc, diag::warn_microsoft_dependent_exists) << Result.IsIfExists;"},{"clang/lib/Parse/ParseInit.cpp",525,"// Return true if a comma (or closing brace) is necessary after the\n// __if_exists/if_not_exists statement.\nbool Parser::ParseMicrosoftIfExistsBraceInitializer(ExprVector &InitExprs, bool &InitExprsOk) {\n  case IEB_Dependent:\n    Diag(Result.KeywordLoc, diag::warn_microsoft_dependent_exists) << Result.IsIfExists;"}}
[k]={{db,4866,"void Parser::ParseMicrosoftIfExistsClassDeclaration(DeclSpec::TST TagType, ParsedAttributes &AccessAttrs, AccessSpecifier &CurAS) {\n  case IEB_Dependent:\n    Diag(Result.KeywordLoc, diag::warn_microsoft_dependent_exists) << Result.IsIfExists;"},{"clang/lib/Parse/ParseInit.cpp",571,"// Return true if a comma (or closing brace) is necessary after the\n// __if_exists/if_not_exists statement.\nbool Parser::ParseMicrosoftIfExistsBraceInitializer(ExprVector &InitExprs, bool &InitExprsOk) {\n  case IEB_Dependent:\n    Diag(Result.KeywordLoc, diag::warn_microsoft_dependent_exists) << Result.IsIfExists;"}}
},
},
["warn_microsoft_qualifiers_ignored"]={
["warn_microsoft_qualifiers_ignored"]={
Line 8,583: Line 8,583:
[c]=A,
[c]=A,
[b]={"eaaae27bc512",1417735868,"Parse qualifiers after comma in declarator lists as a Microsoft extension"},
[b]={"eaaae27bc512",1417735868,"Parse qualifiers after comma in declarator lists as a Microsoft extension"},
[k]={{Mb,796,"void Parser::DiagnoseAndSkipExtendedMicrosoftTypeAttributes() {\n  if (EndLoc.isValid()) {\n    Diag(StartLoc, diag::warn_microsoft_qualifiers_ignored) << Range;"}}
[k]={{Mb,880,"void Parser::DiagnoseAndSkipExtendedMicrosoftTypeAttributes() {\n  if (EndLoc.isValid()) {\n    Diag(StartLoc, diag::warn_microsoft_qualifiers_ignored) << Range;"}}
},
},
["warn_mig_server_routine_does_not_return_kern_return_t"]={
["warn_mig_server_routine_does_not_return_kern_return_t"]={
Line 8,597: Line 8,597:
[c]=q,
[c]=q,
[b]={"c333d775636c",1550707262,"[attributes] Add an attribute for server routines in Mach kernel and extensions."},
[b]={"c333d775636c",1550707262,"[attributes] Add an attribute for server routines in Mach kernel and extensions."},
[k]={{H,7524,"static void handleMIGServerRoutineAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check that the return type is a `typedef int kern_return_t` or a typedef\n  // around it, because otherwise MIG convention checks make no sense.\n  // BlockDecl doesn\'t store a return type, so it\'s annoying to check,\n  // so let\'s skip it for now.\n  if (!isa<BlockDecl>(D)) {\n    if (!IsKernReturnT || T.getCanonicalType() != S.getASTContext().IntTy) {\n      S.Diag(D->getBeginLoc(), diag::warn_mig_server_routine_does_not_return_kern_return_t);"}}
[k]={{H,8536,"static void handleMIGServerRoutineAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check that the return type is a `typedef int kern_return_t` or a typedef\n  // around it, because otherwise MIG convention checks make no sense.\n  // BlockDecl doesn\'t store a return type, so it\'s annoying to check,\n  // so let\'s skip it for now.\n  if (!isa<BlockDecl>(D)) {\n    if (!IsKernReturnT || T.getCanonicalType() != S.getASTContext().IntTy) {\n      S.Diag(D->getBeginLoc(), diag::warn_mig_server_routine_does_not_return_kern_return_t);"}}
},
},
["warn_misleading_indentation"]={
["warn_misleading_indentation"]={
Line 8,612: Line 8,612:
[c]=A,
[c]=A,
[b]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[b]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[k]={{Yb,1318,"struct MisleadingIndentationChecker {\n  void Check() {\n    if (P.getActions().getDiagnostics().isIgnored(diag::warn_misleading_indentation, Tok.getLocation()) || ShouldSkip || NumDirectives != P.getPreprocessor().getNumDirectives() || Tok.isOneOf(tok::semi, tok::r_brace) || Tok.isAnnotation() || Tok.getLocation().isMacroID() || PrevLoc.isMacroID() || StmtLoc.isMacroID() || (Kind == MSK_else && P.MisleadingIndentationElseLoc.isInvalid())) {"},{Yb,1331,"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(Tok.getLocation(), diag::warn_misleading_indentation) << Kind;"}}
[k]={{Yb,1418,"struct MisleadingIndentationChecker {\n  void Check() {\n    if (P.getActions().getDiagnostics().isIgnored(diag::warn_misleading_indentation, Tok.getLocation()) || ShouldSkip || NumDirectives != P.getPreprocessor().getNumDirectives() || Tok.isOneOf(tok::semi, tok::r_brace) || Tok.isAnnotation() || Tok.getLocation().isMacroID() || PrevLoc.isMacroID() || StmtLoc.isMacroID() || (Kind == MSK_else && P.MisleadingIndentationElseLoc.isInvalid())) {"},{Yb,1442,"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(Tok.getLocation(), diag::warn_misleading_indentation) << Kind;"}}
},
},
["warn_mismatched_availability"]={
["warn_mismatched_availability"]={
Line 8,626: Line 8,626:
[c]=q,
[c]=q,
[b]={"2d243bfe2f25",1336334185,"Split mergeAvailabilityAttr out of handleAvailabilityAttr. This is important"},
[b]={"2d243bfe2f25",1336334185,"Split mergeAvailabilityAttr out of handleAvailabilityAttr. This is important"},
[k]={{H,2274,"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(OldAA->getLocation(), diag::warn_mismatched_availability);"}}
[k]={{H,2550,"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(OldAA->getLocation(), diag::warn_mismatched_availability);"}}
},
},
["warn_mismatched_availability_override"]={
["warn_mismatched_availability_override"]={
Line 8,640: Line 8,640:
[c]=q,
[c]=q,
[b]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an"},
[b]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an"},
[k]={{H,2267,"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 (Which == -1) {\n          } else if (Which != 1 && AMK == AMK_OptionalProtocolImplementation) {\n          } else {\n            Diag(OldAA->getLocation(), diag::warn_mismatched_availability_override) << Which << AvailabilityAttr::getPrettyPlatformName(Platform->getName()) << FirstVersion.getAsString() << SecondVersion.getAsString() << (AMK == AMK_Override);"}}
[k]={{H,2539,"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 (Which == -1) {\n          } else if (Which != 1 && AMK == AMK_OptionalProtocolImplementation) {\n          } else {\n            Diag(OldAA->getLocation(), diag::warn_mismatched_availability_override) << Which << AvailabilityAttr::getPrettyPlatformName(Platform->getName()) << FirstVersion.getAsString() << SecondVersion.getAsString() << (AMK == AMK_Override);"}}
},
},
["warn_mismatched_availability_override_unavail"]={
["warn_mismatched_availability_override_unavail"]={
Line 8,654: Line 8,654:
[c]=q,
[c]=q,
[b]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an"},
[b]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an"},
[k]={{H,2257,"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 (Which == -1) {\n            Diag(OldAA->getLocation(), diag::warn_mismatched_availability_override_unavail) << AvailabilityAttr::getPrettyPlatformName(Platform->getName()) << (AMK == AMK_Override);"}}
[k]={{H,2526,"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 (Which == -1) {\n            Diag(OldAA->getLocation(), diag::warn_mismatched_availability_override_unavail) << AvailabilityAttr::getPrettyPlatformName(Platform->getName()) << (AMK == AMK_Override);"}}
},
},
["warn_mismatched_delete_new"]={
["warn_mismatched_delete_new"]={
Line 8,668: Line 8,668:
[c]=q,
[c]=q,
[b]={"538ef53c139d",1431620097,"Detect uses of mismatching forms of \'new\' and \'delete\'"},
[b]={"538ef53c139d",1431620097,"Detect uses of mismatching forms of \'new\' and \'delete\'"},
[k]={{"clang/lib/Sema/Sema.cpp",1250,"/// 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  if (!Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation())) {"},{Sb,3020,"static void DiagnoseMismatchedNewDelete(Sema &SemaRef, SourceLocation DeleteLoc, const MismatchingNewDeleteDetector &Detector) {\n  SemaRef.Diag(DeleteLoc, diag::warn_mismatched_delete_new) << Detector.IsArrayForm << H;"},{Sb,3027,"void Sema::AnalyzeDeleteExprMismatch(const CXXDeleteExpr *DE) {\n  if (Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation()))"}}
[k]={{"clang/lib/Sema/Sema.cpp",1428,"/// 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  if (!Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation())) {"},{Sb,3537,"static void DiagnoseMismatchedNewDelete(Sema &SemaRef, SourceLocation DeleteLoc, const MismatchingNewDeleteDetector &Detector) {\n  SemaRef.Diag(DeleteLoc, diag::warn_mismatched_delete_new) << Detector.IsArrayForm << H;"},{Sb,3546,"void Sema::AnalyzeDeleteExprMismatch(const CXXDeleteExpr *DE) {\n  if (Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation()))"}}
},
},
["warn_mismatched_import"]={
["warn_mismatched_import"]={
Line 8,682: Line 8,682:
[c]=u,
[c]=u,
[b]={Ic,1576908663,Bc},
[b]={Ic,1576908663,Bc},
[k]={{H,6772,"WebAssemblyImportModuleAttr *Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) {\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportModuleAttr>()) {\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_import) << 0 << ExistingAttr->getImportModule() << AL.getImportModule();"},{H,6789,"WebAssemblyImportNameAttr *Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) {\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportNameAttr>()) {\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_import) << 1 << ExistingAttr->getImportName() << AL.getImportName();"}}
[k]={{H,7682,"WebAssemblyImportModuleAttr *Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) {\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportModuleAttr>()) {\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_import) << 0 << ExistingAttr->getImportModule() << AL.getImportModule();"},{H,7702,"WebAssemblyImportNameAttr *Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) {\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportNameAttr>()) {\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_import) << 1 << ExistingAttr->getImportName() << AL.getImportName();"}}
},
},
["warn_mismatched_nullability_attr"]={
["warn_mismatched_nullability_attr"]={
Line 8,696: Line 8,696:
[c]="Nullability Issue",
[c]="Nullability Issue",
[b]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++."},
[b]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++."},
[k]={{G,3087,"static void mergeParamDeclTypes(ParmVarDecl *NewParam, const ParmVarDecl *OldParam, Sema &S) {\n  if (auto Oldnullability = OldParam->getType()->getNullability()) {\n    if (auto Newnullability = NewParam->getType()->getNullability()) {\n      if (*Oldnullability != *Newnullability) {\n        S.Diag(NewParam->getLocation(), diag::warn_mismatched_nullability_attr) << DiagNullabilityKind(*Newnullability, ((NewParam->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0)) << DiagNullabilityKind(*Oldnullability, ((OldParam->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0));"}}
[k]={{G,3419,"static void mergeParamDeclTypes(ParmVarDecl *NewParam, const ParmVarDecl *OldParam, Sema &S) {\n  if (auto Oldnullability = OldParam->getType()->getNullability()) {\n    if (auto Newnullability = NewParam->getType()->getNullability()) {\n      if (*Oldnullability != *Newnullability) {\n        S.Diag(NewParam->getLocation(), diag::warn_mismatched_nullability_attr) << DiagNullabilityKind(*Newnullability, ((NewParam->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0)) << DiagNullabilityKind(*Oldnullability, ((OldParam->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0));"}}
},
},
["warn_mismatched_section"]={
["warn_mismatched_section"]={
Line 8,710: Line 8,710:
[c]=q,
[c]=q,
[b]={"9869c3a10fdb",1336876962,"Produce a warning for mismatched section attributes. Completest pr9356."},
[b]={"9869c3a10fdb",1336876962,"Produce a warning for mismatched section attributes. Completest pr9356."},
[k]={{G,2961,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  if (NewCSA && !Old->hasAttr<CodeSegAttr>() && !NewCSA->isImplicit() && isa<CXXMethodDecl>(New)) {\n    Diag(New->getLocation(), diag::warn_mismatched_section) << 0 /*codeseg*/;"},{H,2889,"SectionAttr *Sema::mergeSectionAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  if (SectionAttr *ExistingAttr = D->getAttr<SectionAttr>()) {\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_section) << 1 /*section*/;"},{H,2964,"CodeSegAttr *Sema::mergeCodeSegAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_section) << 0 /*codeseg*/;"}}
[k]={{G,3282,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  if (NewCSA && !Old->hasAttr<CodeSegAttr>() && !NewCSA->isImplicit() && isa<CXXMethodDecl>(New)) {\n    Diag(New->getLocation(), diag::warn_mismatched_section) << 0 /*codeseg*/;"},{H,3297,"SectionAttr *Sema::mergeSectionAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  if (SectionAttr *ExistingAttr = D->getAttr<SectionAttr>()) {\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_section) << 1 /*section*/;"},{H,3381,"CodeSegAttr *Sema::mergeCodeSegAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_section) << 0 /*codeseg*/;"}}
},
},
["warn_misplaced_ellipsis_vararg"]={
["warn_misplaced_ellipsis_vararg"]={
Line 8,724: Line 8,724:
[c]=A,
[c]=A,
[b]={"36ee9fb21957",1407799823,"Reject varargs \'...\' in function prototype if there are more parameters after"},
[b]={"36ee9fb21957",1407799823,"Reject varargs \'...\' in function prototype if there are more parameters after"},
[k]={{Mb,6771,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n      if (!getLangOpts().CPlusPlus) {\n      } else if (ParmDeclarator.getEllipsisLoc().isValid() || Actions.containsUnexpandedParameterPacks(ParmDeclarator)) {\n        Diag(EllipsisLoc, diag::warn_misplaced_ellipsis_vararg) << ParmEllipsis.isValid() << ParmEllipsis;"}}
[k]={{Mb,7506,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n      if (!getLangOpts().CPlusPlus) {\n      } else if (ParmDeclarator.getEllipsisLoc().isValid() || Actions.containsUnexpandedParameterPacks(ParmDeclarator)) {\n        Diag(EllipsisLoc, diag::warn_misplaced_ellipsis_vararg) << ParmEllipsis.isValid() << ParmEllipsis;"}}
},
},
["warn_missing_braces"]={
["warn_missing_braces"]={
Line 8,739: Line 8,739:
[c]=q,
[c]=q,
[b]={"5029d56cc1d2",1267935435,"Implement missing-braces warning and add a test case."},
[b]={"5029d56cc1d2",1267935435,"Implement missing-braces warning and add a test case."},
[k]={{fb,926,"/// Check whether the range of the initializer \\p ParentIList from element\n/// \\p Index onwards can be used to initialize an object of type \\p T. Update\n/// \\p Index to indicate how many elements of the list were consumed.\n///\n/// This also fills in \\p StructuredList, from element \\p StructuredIndex\n/// onwards, with the fully-braced, desugared form of the initialization.\nvoid InitListChecker::CheckImplicitInitList(const InitializedEntity &Entity, InitListExpr *ParentIList, QualType T, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (StructuredSubobjectInitList) {\n    // Complain about missing braces.\n    if (!VerifyOnly && (T->isArrayType() || T->isRecordType()) && !ParentIList->isIdiomaticZeroInitializer(SemaRef.getLangOpts()) && !isIdiomaticBraceElisionEntity(Entity)) {\n      SemaRef.Diag(StructuredSubobjectInitList->getBeginLoc(), diag::warn_missing_braces) << StructuredSubobjectInitList->getSourceRange() << FixItHint::CreateInsertion(StructuredSubobjectInitList->getBeginLoc(), \"{\") << FixItHint::CreateInsertion(SemaRef.getLocForEndOfToken(StructuredSubobjectInitList->getEndLoc()), \"}\");"}}
[k]={{fb,1149,"/// Check whether the range of the initializer \\p ParentIList from element\n/// \\p Index onwards can be used to initialize an object of type \\p T. Update\n/// \\p Index to indicate how many elements of the list were consumed.\n///\n/// This also fills in \\p StructuredList, from element \\p StructuredIndex\n/// onwards, with the fully-braced, desugared form of the initialization.\nvoid InitListChecker::CheckImplicitInitList(const InitializedEntity &Entity, InitListExpr *ParentIList, QualType T, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (StructuredSubobjectInitList) {\n    // Complain about missing braces.\n    if (!VerifyOnly && (T->isArrayType() || T->isRecordType()) && !ParentIList->isIdiomaticZeroInitializer(SemaRef.getLangOpts()) && !isIdiomaticBraceElisionEntity(Entity)) {\n      SemaRef.Diag(StructuredSubobjectInitList->getBeginLoc(), diag::warn_missing_braces) << StructuredSubobjectInitList->getSourceRange() << FixItHint::CreateInsertion(StructuredSubobjectInitList->getBeginLoc(), \"{\") << FixItHint::CreateInsertion(SemaRef.getLocForEndOfToken(StructuredSubobjectInitList->getEndLoc()), \"}\");"}}
},
},
["warn_missing_case"]={
["warn_missing_case"]={
Line 8,753: Line 8,753:
[c]=q,
[c]=q,
[b]={"3a8650af779c",1427476994,"[Sema] Factor diags with %plural. No functionality change intended."},
[b]={"3a8650af779c",1427476994,"[Sema] Factor diags with %plural. No functionality change intended."},
[k]={{xb,1371,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (!HasDependentValue) {\n    // If switch has default case, then ignore it.\n    if (!CaseListIsErroneous && !CaseListIsIncomplete && !HasConstantCond && ET && ET->getDecl()->isCompleteDefinition() && !ET->getDecl()->enumerators().empty()) {\n      // Produce a nice diagnostic if multiple values aren\'t handled.\n      if (!UnhandledNames.empty()) {\n        auto DB = Diag(CondExpr->getExprLoc(), TheDefaultStmt ? diag::warn_def_missing_case : diag::warn_missing_case) << CondExpr->getSourceRange() << (int)UnhandledNames.size();"}}
[k]={{xb,1605,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (!HasDependentValue) {\n    // If switch has default case, then ignore it.\n    if (!CaseListIsErroneous && !CaseListIsIncomplete && !HasConstantCond && ET && ET->getDecl()->isCompleteDefinition() && !ET->getDecl()->enumerators().empty()) {\n      // Produce a nice diagnostic if multiple values aren\'t handled.\n      if (!UnhandledNames.empty()) {\n        auto DB = Diag(CondExpr->getExprLoc(), TheDefaultStmt ? diag::warn_def_missing_case : diag::warn_missing_case) << CondExpr->getSourceRange() << (int)UnhandledNames.size();"}}
},
},
["warn_missing_case_for_condition"]={
["warn_missing_case_for_condition"]={
Line 8,765: Line 8,765:
[c]=q,
[c]=q,
[b]={"d3dfbd6f4fd7",1274152761,"If a switch condition is constant, don\'t warn about missing enum cases."},
[b]={"d3dfbd6f4fd7",1274152761,"If a switch condition is constant, don\'t warn about missing enum cases."},
[k]={{xb,1273,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (!HasDependentValue) {\n    // Complain if we have a constant condition and we didn\'t find a match.\n    if (!CaseListIsErroneous && !CaseListIsIncomplete && ShouldCheckConstantCond) {\n      Diag(CondExpr->getExprLoc(), diag::warn_missing_case_for_condition) << toString(ConstantCondValue, 10) << CondExpr->getSourceRange();"}}
[k]={{xb,1490,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (!HasDependentValue) {\n    // Complain if we have a constant condition and we didn\'t find a match.\n    if (!CaseListIsErroneous && !CaseListIsIncomplete && ShouldCheckConstantCond) {\n      Diag(CondExpr->getExprLoc(), diag::warn_missing_case_for_condition) << toString(ConstantCondValue, 10) << CondExpr->getSourceRange();"}}
},
},
["warn_missing_dependent_template_keyword"]={
["warn_missing_dependent_template_keyword"]={
Line 8,777: Line 8,777:
[c]=A,
[c]=A,
[b]={"9392165a1734",1303460724,"For consistency, change suffix from war_ to warn_ for some Microsoft warnings I introduced lately."},
[b]={"9392165a1734",1303460724,"For consistency, change suffix from war_ to warn_ for some Microsoft warnings I introduced lately."},
[k]={{Rb,477,"/// Parse global scope or nested-name-specifier if present.\n///\n/// Parses a C++ global scope specifier (\'::\') or nested-name-specifier (which\n/// may be preceded by \'::\'). Note that this routine will not parse ::new or\n/// ::delete; it will just leave them in the token stream.\n///\n///      \'::\'[opt] nested-name-specifier\n///      \'::\'\n///\n///      nested-name-specifier:\n///        type-name \'::\'\n///        namespace-name \'::\'\n///        nested-name-specifier identifier \'::\'\n///        nested-name-specifier \'template\'[opt] simple-template-id \'::\'\n///\n///\n/// \\param SS the scope specifier that will be set to the parsed\n/// nested-name-specifier (or empty)\n///\n/// \\param ObjectType if this nested-name-specifier is being parsed following\n/// the \".\" or \"->\" of a member access expression, this parameter provides the\n/// type of the object whose members are being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we will be entering into the context of\n/// the nested-name-specifier after parsing it.\n///\n/// \\param MayBePseudoDestructor When non-NULL, points to a flag that\n/// indicates whether this nested-name-specifier may be part of a\n/// pseudo-destructor name. In this case, the flag will be set false\n/// if we don\'t actually end up parsing a destructor name. Moreover,\n/// if we do end up determining that we are parsing a destructor name,\n/// the last component of the nested-name-specifier is not parsed as\n/// part of the scope specifier.\n///\n/// \\param IsTypename If \\c true, this nested-name-specifier is known to be\n/// part of a type name. This is used to improve error recovery.\n///\n/// \\param LastII When non-NULL, points to an IdentifierInfo* that will be\n/// filled in with the leading identifier in the last component of the\n/// nested-name-specifier, if any.\n///\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n///\n/// \\returns true if there was an error parsing a scope specifier\nbool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool *MayBePseudoDestructor, bool IsTypename, IdentifierInfo **LastII, bool OnlyNamespace, bool InUsingDeclaration) {\n  while (true) {\n    // nested-name-specifier:\n    //  type-name \'<\'\n    if (Next.is(tok::less)) {\n      if (MemberOfUnknownSpecialization && (ObjectType || SS.isSet()) && (IsTypename || isTemplateArgumentList(1) == TPResult::True)) {\n        // If we had errors before, ObjectType can be dependent even without any\n        // templates. Do not report missing template keyword in that case.\n        if (!ObjectHadErrors) {\n          if (getLangOpts().MicrosoftExt)\n            DiagID = diag::warn_missing_dependent_template_keyword;"}}
[k]={{Rb,527,"/// Parse global scope or nested-name-specifier if present.\n///\n/// Parses a C++ global scope specifier (\'::\') or nested-name-specifier (which\n/// may be preceded by \'::\'). Note that this routine will not parse ::new or\n/// ::delete; it will just leave them in the token stream.\n///\n///      \'::\'[opt] nested-name-specifier\n///      \'::\'\n///\n///      nested-name-specifier:\n///        type-name \'::\'\n///        namespace-name \'::\'\n///        nested-name-specifier identifier \'::\'\n///        nested-name-specifier \'template\'[opt] simple-template-id \'::\'\n///\n///\n/// \\param SS the scope specifier that will be set to the parsed\n/// nested-name-specifier (or empty)\n///\n/// \\param ObjectType if this nested-name-specifier is being parsed following\n/// the \".\" or \"->\" of a member access expression, this parameter provides the\n/// type of the object whose members are being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we will be entering into the context of\n/// the nested-name-specifier after parsing it.\n///\n/// \\param MayBePseudoDestructor When non-NULL, points to a flag that\n/// indicates whether this nested-name-specifier may be part of a\n/// pseudo-destructor name. In this case, the flag will be set false\n/// if we don\'t actually end up parsing a destructor name. Moreover,\n/// if we do end up determining that we are parsing a destructor name,\n/// the last component of the nested-name-specifier is not parsed as\n/// part of the scope specifier.\n///\n/// \\param IsTypename If \\c true, this nested-name-specifier is known to be\n/// part of a type name. This is used to improve error recovery.\n///\n/// \\param LastII When non-NULL, points to an IdentifierInfo* that will be\n/// filled in with the leading identifier in the last component of the\n/// nested-name-specifier, if any.\n///\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n///\n/// \\returns true if there was an error parsing a scope specifier\nbool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool *MayBePseudoDestructor, bool IsTypename, IdentifierInfo **LastII, bool OnlyNamespace, bool InUsingDeclaration) {\n  while (true) {\n    // nested-name-specifier:\n    //  type-name \'<\'\n    if (Next.is(tok::less)) {\n      if (MemberOfUnknownSpecialization && (ObjectType || SS.isSet()) && (IsTypename || isTemplateArgumentList(1) == TPResult::True)) {\n        // If we had errors before, ObjectType can be dependent even without any\n        // templates. Do not report missing template keyword in that case.\n        if (!ObjectHadErrors) {\n          if (getLangOpts().MicrosoftExt)\n            DiagID = diag::warn_missing_dependent_template_keyword;"}}
},
},
["warn_missing_explicit_synthesis"]={
["warn_missing_explicit_synthesis"]={
Line 8,792: Line 8,792:
[c]=q,
[c]=q,
[b]={"d5f34f9fee08",1336063410,"objective-c: warn for properties being default synthesized"},
[b]={"d5f34f9fee08",1336063410,"objective-c: warn for properties being default synthesized"},
[k]={{Gc,1572,"/// 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(Prop->getLocation(), diag::warn_missing_explicit_synthesis);"}}
[k]={{Gc,1975,"/// 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(Prop->getLocation(), diag::warn_missing_explicit_synthesis);"}}
},
},
["warn_missing_field_initializers"]={
["warn_missing_field_initializers"]={
Line 8,807: Line 8,807:
[c]=q,
[c]=q,
[b]={"e40b58ec2f66",1268335958,"Implement -Wmissing-field-initializers.  Patch by mikem!"},
[b]={"e40b58ec2f66",1268335958,"Implement -Wmissing-field-initializers.  Patch by mikem!"},
[k]={{fb,1963,"void InitListChecker::CheckStructUnionTypes(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, CXXRecordDecl::base_class_const_range Bases, RecordDecl::field_iterator Field, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool TopLevelObject) {\n  // Emit warnings for missing struct field initializers.\n  if (!VerifyOnly && InitializedSomething && CheckForMissingFields && Field != FieldEnd && !Field->getType()->isIncompleteArrayType() && !RD->isUnion()) {\n    // It is possible we have one or more unnamed bitfields remaining.\n    // Find first (if any) named field and emit warning.\n    for (RecordDecl::field_iterator it = Field, end = RD->field_end(); it != end; ++it) {\n      if (!it->isUnnamedBitfield() && !it->hasInClassInitializer()) {\n        SemaRef.Diag(IList->getSourceRange().getEnd(), diag::warn_missing_field_initializers) << *it;"}}
[k]={{fb,2390,"void InitListChecker::CheckStructUnionTypes(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, CXXRecordDecl::base_class_const_range Bases, RecordDecl::field_iterator Field, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool TopLevelObject) {\n  // Emit warnings for missing struct field initializers.\n  if (!VerifyOnly && InitializedSomething && CheckForMissingFields && Field != FieldEnd && !Field->getType()->isIncompleteArrayType() && !RD->isUnion()) {\n    // It is possible we have one or more unnamed bitfields remaining.\n    // Find first (if any) named field and emit warning.\n    for (RecordDecl::field_iterator it = Field, end = RD->field_end(); it != end; ++it) {\n      if (!it->isUnnamedBitfield() && !it->hasInClassInitializer()) {\n        SemaRef.Diag(IList->getSourceRange().getEnd(), diag::warn_missing_field_initializers) << *it;"}}
},
},
["warn_missing_format_string"]={
["warn_missing_format_string"]={
Line 8,821: Line 8,821:
[c]=Qb,
[c]=Qb,
[b]={Fc,1279246282,Ec},
[b]={Fc,1279246282,Ec},
[k]={{w,9156,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // CHECK: printf/scanf-like function is called with no format string.\n  if (format_idx >= Args.size()) {\n    Diag(Loc, diag::warn_missing_format_string) << Range;"}}
[k]={{w,9913,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // CHECK: printf/scanf-like function is called with no format string.\n  if (format_idx >= Args.size()) {\n    Diag(Loc, diag::warn_missing_format_string) << Range;"}}
},
},
["warn_missing_method_return_type"]={
["warn_missing_method_return_type"]={
Line 8,836: Line 8,836:
[c]=q,
[c]=q,
[b]={"b5a52ca0c935",1311267647,"objc - Diagnose missing method return type specifier under"},
[b]={"b5a52ca0c935",1311267647,"objc - Diagnose missing method return type specifier under"},
[k]={{mc,3937,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  if (ReturnType) {\n  } else { // get the type for \"id\".\n    Diag(MethodLoc, diag::warn_missing_method_return_type) << FixItHint::CreateInsertion(SelectorLocs.front(), \"(id)\");"}}
[k]={{mc,4754,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  if (ReturnType) {\n  } else { // get the type for \"id\".\n    Diag(MethodLoc, diag::warn_missing_method_return_type) << FixItHint::CreateInsertion(SelectorLocs.front(), \"(id)\");"}}
},
},
["warn_missing_prototype"]={
["warn_missing_prototype"]={
Line 8,851: Line 8,851:
[c]=q,
[c]=q,
[b]={"f1b876d5dee3",1238517303,"Implement -Wmissing-prototypes. Fixes PR3911."},
[b]={"f1b876d5dee3",1238517303,"Implement -Wmissing-prototypes. Fixes PR3911."},
[k]={{G,13682,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    if (FD) {\n      if (ShouldWarnAboutMissingPrototype(FD, PossiblePrototype)) {\n        Diag(FD->getLocation(), diag::warn_missing_prototype) << FD;"}}
[k]={{G,15662,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    if (FD) {\n      if (ShouldWarnAboutMissingPrototype(FD, PossiblePrototype)) {\n        Diag(FD->getLocation(), diag::warn_missing_prototype) << FD;"}}
},
},
["warn_missing_sdksettings_for_availability_checking"]={
["warn_missing_sdksettings_for_availability_checking"]={
Line 8,865: Line 8,865:
[c]=q,
[c]=q,
[b]={Kc,1615397021,zc},
[b]={Kc,1615397021,zc},
[k]={{"clang/lib/Sema/Sema.cpp",65,"DarwinSDKInfo *Sema::getDarwinSDKInfoForAvailabilityChecking(SourceLocation Loc, StringRef Platform) {\n  if (!SDKInfo && !WarnedDarwinSDKInfoMissing) {\n    Diag(Loc, diag::warn_missing_sdksettings_for_availability_checking) << Platform;"}}
[k]={{"clang/lib/Sema/Sema.cpp",70,"DarwinSDKInfo *Sema::getDarwinSDKInfoForAvailabilityChecking(SourceLocation Loc, StringRef Platform) {\n  if (!SDKInfo && !WarnedDarwinSDKInfoMissing) {\n    Diag(Loc, diag::warn_missing_sdksettings_for_availability_checking) << Platform;"}}
},
},
["warn_missing_selector_name"]={
["warn_missing_selector_name"]={
Line 8,879: Line 8,879:
[c]=A,
[c]=A,
[b]={"84f498433116",1347923399,"objective-C: improve on warnings about misplacement of method"},
[b]={"84f498433116",1347923399,"objective-C: improve on warnings about misplacement of method"},
[k]={{"clang/lib/Parse/ParseObjc.cpp",1385,"///  objc-method-decl:\n///    objc-selector\n///    objc-keyword-selector objc-parmlist[opt]\n///    objc-type-name objc-selector\n///    objc-type-name objc-keyword-selector objc-parmlist[opt]\n///\n///  objc-keyword-selector:\n///    objc-keyword-decl\n///    objc-keyword-selector objc-keyword-decl\n///\n///  objc-keyword-decl:\n///    objc-selector \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    objc-selector \':\' objc-keyword-attributes[opt] identifier\n///    \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    \':\' objc-keyword-attributes[opt] identifier\n///\n///  objc-parmlist:\n///    objc-parms objc-ellipsis[opt]\n///\n///  objc-parms:\n///    objc-parms , parameter-declaration\n///\n///  objc-ellipsis:\n///    , ...\n///\n///  objc-keyword-attributes:        [OBJC2]\n///    __attribute__((unused))\n///\nDecl *Parser::ParseObjCMethodDecl(SourceLocation mLoc, tok::TokenKind mType, tok::ObjCKeywordKind MethodImplKind, bool MethodDefinition) {\n  while (true) {\n    if (!SelIdent) {\n      if (PP.getLocForEndOfToken(ArgInfo.NameLoc) == ColonLoc) {\n        Diag(ArgInfo.NameLoc, diag::warn_missing_selector_name) << ArgInfo.Name;"}}
[k]={{"clang/lib/Parse/ParseObjc.cpp",1509,"///  objc-method-decl:\n///    objc-selector\n///    objc-keyword-selector objc-parmlist[opt]\n///    objc-type-name objc-selector\n///    objc-type-name objc-keyword-selector objc-parmlist[opt]\n///\n///  objc-keyword-selector:\n///    objc-keyword-decl\n///    objc-keyword-selector objc-keyword-decl\n///\n///  objc-keyword-decl:\n///    objc-selector \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    objc-selector \':\' objc-keyword-attributes[opt] identifier\n///    \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    \':\' objc-keyword-attributes[opt] identifier\n///\n///  objc-parmlist:\n///    objc-parms objc-ellipsis[opt]\n///\n///  objc-parms:\n///    objc-parms , parameter-declaration\n///\n///  objc-ellipsis:\n///    , ...\n///\n///  objc-keyword-attributes:        [OBJC2]\n///    __attribute__((unused))\n///\nDecl *Parser::ParseObjCMethodDecl(SourceLocation mLoc, tok::TokenKind mType, tok::ObjCKeywordKind MethodImplKind, bool MethodDefinition) {\n  while (true) {\n    if (!SelIdent) {\n      if (PP.getLocForEndOfToken(ArgInfo.NameLoc) == ColonLoc) {\n        Diag(ArgInfo.NameLoc, diag::warn_missing_selector_name) << ArgInfo.Name;"}}
},
},
["warn_missing_sentinel"]={
["warn_missing_sentinel"]={
Line 8,893: Line 8,893:
[c]=q,
[c]=q,
[b]={"9e87721d47fd",1242256850,"Look for and diagnose missing sentinel argument on message"},
[b]={"9e87721d47fd",1242256850,"Look for and diagnose missing sentinel argument on message"},
[k]={{M,460,"/// 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 (MissingNilLoc.isInvalid())\n    Diag(Loc, diag::warn_missing_sentinel) << int(calleeType);"},{M,462,"/// 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 (MissingNilLoc.isInvalid())\n  else\n    Diag(MissingNilLoc, diag::warn_missing_sentinel) << int(calleeType) << FixItHint::CreateInsertion(MissingNilLoc, \", \" + NullValue);"}}
[k]={{M,500,"/// 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 (MissingNilLoc.isInvalid())\n    Diag(Loc, diag::warn_missing_sentinel) << int(calleeType);"},{M,502,"/// 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 (MissingNilLoc.isInvalid())\n  else\n    Diag(MissingNilLoc, diag::warn_missing_sentinel) << int(calleeType) << FixItHint::CreateInsertion(MissingNilLoc, \", \" + NullValue);"}}
},
},
["warn_missing_submodule"]={
["warn_missing_submodule"]={
Line 8,907: Line 8,907:
[c]=u,
[c]=u,
[b]={"98a52db80c80",1324340932,"Detect when mapping a #include/#import over to a submodule ends up"},
[b]={"98a52db80c80",1324340932,"Detect when mapping a #include/#import over to a submodule ends up"},
[k]={{Lc,1729,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  // Make the named module visible, if it\'s not already part of the module\n  // we are parsing.\n  if (ModuleName != getLangOpts().CurrentModule) {\n    if (!Module->IsFromModuleFile && !MapPrivateSubModToTopLevel) {\n      getDiagnostics().Report(ImportLoc, diag::warn_missing_submodule) << Module->getFullModuleName() << SourceRange(Path.front().second, Path.back().second);"}}
[k]={{Lc,2112,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  // Make the named module visible, if it\'s not already part of the module\n  // we are parsing.\n  if (ModuleName != getLangOpts().CurrentModule) {\n    if (!Module->IsFromModuleFile && !MapPrivateSubModToTopLevel) {\n      getDiagnostics().Report(ImportLoc, diag::warn_missing_submodule) << Module->getFullModuleName() << SourceRange(Path.front().second, Path.back().second);"}}
},
},
["warn_missing_sysroot"]={
["warn_missing_sysroot"]={
Line 8,921: Line 8,921:
[c]=u,
[c]=u,
[b]={"6c2b11cc50e8",1355960510,"[driver] Have -isysroot warn on nonexistent paths."},
[b]={"6c2b11cc50e8",1355960510,"[driver] Have -isysroot warn on nonexistent paths."},
[k]={{Uc,1871,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // Support allowing the SDKROOT environment variable used by xcrun and other\n  // Xcode tools to define the default sysroot, by making it the default for\n  // isysroot.\n  if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {\n    // Warn if the path does not exist.\n    if (!getVFS().exists(A->getValue()))\n      getDriver().Diag(clang::diag::warn_missing_sysroot) << A->getValue();"},{"clang/lib/Driver/ToolChains/PS4CPU.cpp",220,"toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, StringRef Platform, const char *EnvVar) : Generic_ELF(D, Triple, Args) {\n  if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {\n    if (!llvm::sys::fs::exists(SDKRootDir))\n      D.Diag(clang::diag::warn_missing_sysroot) << SDKRootDir;"}}
[k]={{Uc,2148,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // Support allowing the SDKROOT environment variable used by xcrun and other\n  // Xcode tools to define the default sysroot, by making it the default for\n  // isysroot.\n  if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {\n    // Warn if the path does not exist.\n    if (!getVFS().exists(A->getValue()))\n      getDriver().Diag(clang::diag::warn_missing_sysroot) << A->getValue();"},{"clang/lib/Driver/ToolChains/PS4CPU.cpp",268,"toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, StringRef Platform, const char *EnvVar) : Generic_ELF(D, Triple, Args) {\n  if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {\n    if (!llvm::sys::fs::exists(SDKRootDir))\n      D.Diag(clang::diag::warn_missing_sysroot) << SDKRootDir;"}}
},
},
["warn_missing_type_specifier"]={
["warn_missing_type_specifier"]={
Line 8,936: Line 8,936:
[c]=A,
[c]=A,
[b]={Lb,1237025389,Nb},
[b]={Lb,1237025389,Nb},
[k]={{tc,1157,"/// 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  // If this is C89 and the declspecs were completely missing, fudge in an\n  // implicit int.  We do this here because this is the only place where\n  // declaration-specifiers are completely optional in the grammar.\n  if (getLangOpts().isImplicitIntRequired() && D.getDeclSpec().isEmpty()) {\n    Diag(D.getIdentifierLoc(), diag::warn_missing_type_specifier) << D.getDeclSpec().getSourceRange();"},{Cb,1194,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_unspecified:\n    // Unspecified typespec defaults to int in C90.  However, the C90 grammar\n    // [C90 6.5] only allows a decl-spec if there was *some* type-specifier,\n    // type-qualifier, or storage-class-specifier.  If not, emit an extwarn.\n    // Note that the one exception to this is function definitions, which are\n    // allowed to be completely missing a declspec.  This is handled in the\n    // parser already though by it pretending to have seen an \'int\' in this\n    // case.\n    if (S.getLangOpts().isImplicitIntRequired()) {\n      S.Diag(DeclLoc, diag::warn_missing_type_specifier) << DS.getSourceRange() << FixItHint::CreateInsertion(DS.getBeginLoc(), \"int\");"}}
[k]={{tc,1256,"/// 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  // If this is C89 and the declspecs were completely missing, fudge in an\n  // implicit int.  We do this here because this is the only place where\n  // declaration-specifiers are completely optional in the grammar.\n  if (getLangOpts().isImplicitIntRequired() && D.getDeclSpec().isEmpty()) {\n    Diag(D.getIdentifierLoc(), diag::warn_missing_type_specifier) << D.getDeclSpec().getSourceRange();"},{Cb,1360,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  case DeclSpec::TST_unspecified:\n    // Unspecified typespec defaults to int in C90.  However, the C90 grammar\n    // [C90 6.5] only allows a decl-spec if there was *some* type-specifier,\n    // type-qualifier, or storage-class-specifier.  If not, emit an extwarn.\n    // Note that the one exception to this is function definitions, which are\n    // allowed to be completely missing a declspec.  This is handled in the\n    // parser already though by it pretending to have seen an \'int\' in this\n    // case.\n    if (S.getLangOpts().isImplicitIntRequired()) {\n      S.Diag(DeclLoc, diag::warn_missing_type_specifier) << DS.getSourceRange() << FixItHint::CreateInsertion(DS.getBeginLoc(), \"int\");"}}
},
},
["warn_missing_variable_declarations"]={
["warn_missing_variable_declarations"]={
Line 8,951: Line 8,951:
[c]=q,
[c]=q,
[b]={"7d14b3c9b3f9",1351023572,"Add a new warning -Wmissing-variable-declarations, to warn about variables"},
[b]={"7d14b3c9b3f9",1351023572,"Add a new warning -Wmissing-variable-declarations, to warn about variables"},
[k]={{G,12288,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\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())) {"},{G,12295,"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->getLocation(), diag::warn_missing_variable_declarations) << var;"}}
[k]={{G,14070,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\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())) {"},{G,14078,"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->getLocation(), diag::warn_missing_variable_declarations) << var;"}}
},
},
["warn_missing_whitespace_after_macro_name"]={
["warn_missing_whitespace_after_macro_name"]={
Line 8,963: Line 8,963:
[c]=N,
[c]=N,
[b]={"2425bcb49ae4",1240021405,"enforce requirements imposed by C90 6.8 TC1, fixing PR3919."},
[b]={"2425bcb49ae4",1240021405,"enforce requirements imposed by C90 6.8 TC1, fixing PR3919."},
[k]={{pd,2627,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // If this is a function-like macro definition, parse the argument list,\n  // marking each of the identifiers as being used as macro arguments.  Also,\n  // check other constraints on the first token of the macro body.\n  if (Tok.is(tok::eod)) {\n  } else if (Tok.hasLeadingSpace()) {\n  } else if (Tok.is(tok::l_paren)) {\n  } else if (LangOpts.C99 || LangOpts.CPlusPlus11) {\n  } else {\n    if (isInvalid)\n    else\n      Diag(Tok, diag::warn_missing_whitespace_after_macro_name);"}}
[k]={{pd,2877,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // If this is a function-like macro definition, parse the argument list,\n  // marking each of the identifiers as being used as macro arguments.  Also,\n  // check other constraints on the first token of the macro body.\n  if (Tok.is(tok::eod)) {\n  } else if (Tok.hasLeadingSpace()) {\n  } else if (Tok.is(tok::l_paren)) {\n  } else if (LangOpts.C99 || LangOpts.CPlusPlus11) {\n  } else {\n    if (isInvalid)\n    else\n      Diag(Tok, diag::warn_missing_whitespace_after_macro_name);"}}
},
},
["warn_mixed_decls_code"]={
["warn_mixed_decls_code"]={
Line 8,978: Line 8,978:
[c]=q,
[c]=q,
[b]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."},
[b]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."},
[k]={{xb,387,"StmtResult Sema::ActOnCompoundStmt(SourceLocation L, SourceLocation R, ArrayRef<Stmt *> Elts, bool isStmtExpr) {\n  const unsigned MixedDeclsCodeID = getLangOpts().C99 ? diag::warn_mixed_decls_code : diag::ext_mixed_decls_code;"}}
[k]={{xb,419,"StmtResult Sema::ActOnCompoundStmt(SourceLocation L, SourceLocation R, ArrayRef<Stmt *> Elts, bool isStmtExpr) {\n  const unsigned MixedDeclsCodeID = getLangOpts().C99 ? diag::warn_mixed_decls_code : diag::ext_mixed_decls_code;"}}
},
},
["warn_mixed_sign_comparison"]={
["warn_mixed_sign_comparison"]={
Line 8,993: Line 8,993:
[c]=q,
[c]=q,
[b]={"644a4181c947",1257381604,"Implement -Wsign-compare, or at least the actual comparison part of it."},
[b]={"644a4181c947",1257381604,"Implement -Wsign-compare, or at least the actual comparison part of it."},
[k]={{w,12542,"/// Implements -Wsign-compare.\n///\n/// \\param E the binary operator to check for warnings\nstatic void AnalyzeComparison(Sema &S, BinaryOperator *E) {\n  S.DiagRuntimeBehavior(E->getOperatorLoc(), E, S.PDiag(diag::warn_mixed_sign_comparison) << LHS->getType() << RHS->getType() << LHS->getSourceRange() << RHS->getSourceRange());"}}
[k]={{w,14019,"/// Implements -Wsign-compare.\n///\n/// \\param E the binary operator to check for warnings\nstatic void AnalyzeComparison(Sema &S, BinaryOperator *E) {\n  S.DiagRuntimeBehavior(E->getOperatorLoc(), E, S.PDiag(diag::warn_mixed_sign_comparison) << LHS->getType() << RHS->getType() << LHS->getSourceRange() << RHS->getSourceRange());"}}
},
},
["warn_mmap_incomplete_framework_module_declaration"]={
["warn_mmap_incomplete_framework_module_declaration"]={
Line 9,007: Line 9,007:
[c]=N,
[c]=N,
[b]={"9f6020bcc522",1527816378,"[Modules] Warning for module declarations lacking \'framework\' qualifier"},
[b]={"9f6020bcc522",1527816378,"[Modules] Warning for module declarations lacking \'framework\' qualifier"},
[k]={{Ac,229,"OptionalFileEntryRef ModuleMap::findHeader(Module *M, const Module::UnresolvedHeaderDirective &Header, SmallVectorImpl<char> &RelativePathName, bool &NeedsFramework) {\n  if (!NormalHdrFile && Directory->getName().endswith(\".framework\")) {\n    if (GetFrameworkFile()) {\n      Diags.Report(Header.FileNameLoc, diag::warn_mmap_incomplete_framework_module_declaration) << Header.FileName << M->getFullModuleName();"}}
[k]={{Ac,247,"OptionalFileEntryRef ModuleMap::findHeader(Module *M, const Module::UnresolvedHeaderDirective &Header, SmallVectorImpl<char> &RelativePathName, bool &NeedsFramework) {\n  if (!NormalHdrFile && Directory->getName().endswith(\".framework\")) {\n    if (GetFrameworkFile()) {\n      Diags.Report(Header.FileNameLoc, diag::warn_mmap_incomplete_framework_module_declaration) << Header.FileName << M->getFullModuleName();"}}
},
},
["warn_mmap_mismatched_private_module_name"]={
["warn_mmap_mismatched_private_module_name"]={
Line 9,021: Line 9,021:
[c]=N,
[c]=N,
[b]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings"},
[b]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings"},
[k]={{Ac,1631,"/// Private modules are canonicalized as Foo_Private. Clang provides extra\n/// module map search logic to find the appropriate private module when PCH\n/// is used with implicit module maps. Warn when private modules are written\n/// in other ways (FooPrivate and Foo.Private), providing notes and fixits.\nvoid ModuleMapParser::diagnosePrivateModules(SourceLocation ExplicitLoc, SourceLocation FrameworkLoc) {\n  for (auto E = Map.module_begin(); E != Map.module_end(); ++E) {\n    // FooPrivate and whatnots -> Foo_Private\n    if (!ActiveModule->Parent && !M->Parent && M->Name != ActiveModule->Name && ActiveModule->Name != Canonical) {\n      Diags.Report(ActiveModule->DefinitionLoc, diag::warn_mmap_mismatched_private_module_name) << ActiveModule->Name;"},{Ac,1842,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  if (Map.HeaderInfo.getHeaderSearchOpts().ImplicitModuleMaps && !Diags.isIgnored(diag::warn_mmap_mismatched_private_submodule, StartLoc) && !Diags.isIgnored(diag::warn_mmap_mismatched_private_module_name, StartLoc) && ActiveModule->ModuleMapIsPrivate)"}}
[k]={{Ac,1879,"/// Private modules are canonicalized as Foo_Private. Clang provides extra\n/// module map search logic to find the appropriate private module when PCH\n/// is used with implicit module maps. Warn when private modules are written\n/// in other ways (FooPrivate and Foo.Private), providing notes and fixits.\nvoid ModuleMapParser::diagnosePrivateModules(SourceLocation ExplicitLoc, SourceLocation FrameworkLoc) {\n  for (auto E = Map.module_begin(); E != Map.module_end(); ++E) {\n    // FooPrivate and whatnots -> Foo_Private\n    if (!ActiveModule->Parent && !M->Parent && M->Name != ActiveModule->Name && ActiveModule->Name != Canonical) {\n      Diags.Report(ActiveModule->DefinitionLoc, diag::warn_mmap_mismatched_private_module_name) << ActiveModule->Name;"},{Ac,2114,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  if (Map.HeaderInfo.getHeaderSearchOpts().ImplicitModuleMaps && !Diags.isIgnored(diag::warn_mmap_mismatched_private_submodule, StartLoc) && !Diags.isIgnored(diag::warn_mmap_mismatched_private_module_name, StartLoc) && ActiveModule->ModuleMapIsPrivate)"}}
},
},
["warn_mmap_mismatched_private_submodule"]={
["warn_mmap_mismatched_private_submodule"]={
Line 9,035: Line 9,035:
[c]=N,
[c]=N,
[b]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings"},
[b]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings"},
[k]={{Ac,1612,"/// Private modules are canonicalized as Foo_Private. Clang provides extra\n/// module map search logic to find the appropriate private module when PCH\n/// is used with implicit module maps. Warn when private modules are written\n/// in other ways (FooPrivate and Foo.Private), providing notes and fixits.\nvoid ModuleMapParser::diagnosePrivateModules(SourceLocation ExplicitLoc, SourceLocation FrameworkLoc) {\n  for (auto E = Map.module_begin(); E != Map.module_end(); ++E) {\n    // Foo.Private -> Foo_Private\n    if (ActiveModule->Parent && ActiveModule->Name == \"Private\" && !M->Parent && M->Name == ActiveModule->Parent->Name) {\n      Diags.Report(ActiveModule->DefinitionLoc, diag::warn_mmap_mismatched_private_submodule) << FullName;"},{Ac,1842,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  if (Map.HeaderInfo.getHeaderSearchOpts().ImplicitModuleMaps && !Diags.isIgnored(diag::warn_mmap_mismatched_private_submodule, StartLoc) && !Diags.isIgnored(diag::warn_mmap_mismatched_private_module_name, StartLoc) && ActiveModule->ModuleMapIsPrivate)"}}
[k]={{Ac,1856,"/// Private modules are canonicalized as Foo_Private. Clang provides extra\n/// module map search logic to find the appropriate private module when PCH\n/// is used with implicit module maps. Warn when private modules are written\n/// in other ways (FooPrivate and Foo.Private), providing notes and fixits.\nvoid ModuleMapParser::diagnosePrivateModules(SourceLocation ExplicitLoc, SourceLocation FrameworkLoc) {\n  for (auto E = Map.module_begin(); E != Map.module_end(); ++E) {\n    // Foo.Private -> Foo_Private\n    if (ActiveModule->Parent && ActiveModule->Name == \"Private\" && !M->Parent && M->Name == ActiveModule->Parent->Name) {\n      Diags.Report(ActiveModule->DefinitionLoc, diag::warn_mmap_mismatched_private_submodule) << FullName;"},{Ac,2112,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  if (Map.HeaderInfo.getHeaderSearchOpts().ImplicitModuleMaps && !Diags.isIgnored(diag::warn_mmap_mismatched_private_submodule, StartLoc) && !Diags.isIgnored(diag::warn_mmap_mismatched_private_module_name, StartLoc) && ActiveModule->ModuleMapIsPrivate)"}}
},
},
["warn_mmap_redundant_export_as"]={
["warn_mmap_redundant_export_as"]={
Line 9,049: Line 9,049:
[c]=N,
[c]=N,
[b]={"f0b11de279e7",1505432324,"[Module map] Introduce a private module re-export directive."},
[b]={"f0b11de279e7",1505432324,"[Module map] Introduce a private module re-export directive."},
[k]={{Ac,2326,"/// Parse a module export_as declaration.\n///\n///  export-as-declaration:\n///    \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  if (!ActiveModule->ExportAsModule.empty()) {\n    if (ActiveModule->ExportAsModule == Tok.getString()) {\n      Diags.Report(Tok.getLocation(), diag::warn_mmap_redundant_export_as) << ActiveModule->Name << Tok.getString();"}}
[k]={{Ac,2638,"/// Parse a module export_as declaration.\n///\n///  export-as-declaration:\n///    \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  if (!ActiveModule->ExportAsModule.empty()) {\n    if (ActiveModule->ExportAsModule == Tok.getString()) {\n      Diags.Report(Tok.getLocation(), diag::warn_mmap_redundant_export_as) << ActiveModule->Name << Tok.getString();"}}
},
},
["warn_mmap_umbrella_dir_not_found"]={
["warn_mmap_umbrella_dir_not_found"]={
Line 9,063: Line 9,063:
[c]=N,
[c]=N,
[b]={"a0320b97fa70",1492549049,"PR30508: Downgrade error to warning if the umbrella folder doesn\'t exist."},
[b]={"a0320b97fa70",1492549049,"PR30508: Downgrade error to warning if the umbrella folder doesn\'t exist."},
[k]={{Ac,2222,"/// Parse an umbrella directory declaration.\n///\n///  umbrella-dir-declaration:\n///    umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  if (!Dir) {\n    Diags.Report(DirNameLoc, diag::warn_mmap_umbrella_dir_not_found) << DirName;"}}
[k]={{Ac,2527,"/// Parse an umbrella directory declaration.\n///\n///  umbrella-dir-declaration:\n///    umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  if (!Dir) {\n    Diags.Report(DirNameLoc, diag::warn_mmap_umbrella_dir_not_found) << DirName;"}}
},
},
["warn_mmap_unknown_attribute"]={
["warn_mmap_unknown_attribute"]={
Line 9,077: Line 9,077:
[c]=N,
[c]=N,
[b]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a"},
[b]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a"},
[k]={{Ac,2665,"/// Parse optional attributes.\n///\n///  attributes:\n///    attribute attributes\n///    attribute\n///\n///  attribute:\n///    [ identifier ]\n///\n/// \\param Attrs Will be filled in with the parsed attributes.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool ModuleMapParser::parseOptionalAttributes(Attributes &Attrs) {\n  while (Tok.is(MMToken::LSquare)) {\n    case AT_unknown:\n      Diags.Report(Tok.getLocation(), diag::warn_mmap_unknown_attribute) << Tok.getString();"}}
[k]={{Ac,2997,"/// Parse optional attributes.\n///\n///  attributes:\n///    attribute attributes\n///    attribute\n///\n///  attribute:\n///    [ identifier ]\n///\n/// \\param Attrs Will be filled in with the parsed attributes.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool ModuleMapParser::parseOptionalAttributes(Attributes &Attrs) {\n  while (Tok.is(MMToken::LSquare)) {\n    case AT_unknown:\n      Diags.Report(Tok.getLocation(), diag::warn_mmap_unknown_attribute) << Tok.getString();"}}
},
},
["warn_modifying_shadowing_decl"]={
["warn_modifying_shadowing_decl"]={
Line 9,092: Line 9,092:
[c]=q,
[c]=q,
[b]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields"},
[b]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields"},
[k]={{G,7398,"/// 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(Loc, diag::warn_modifying_shadowing_decl) << D << OldDC;"}}
[k]={{G,8385,"/// 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(Loc, diag::warn_modifying_shadowing_decl) << D << OldDC;"}}
},
},
["warn_module_config_macro_undef"]={
["warn_module_config_macro_undef"]={
Line 9,106: Line 9,106:
[c]=u,
[c]=u,
[b]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps."},
[b]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps."},
[k]={{Lc,1266,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  if (CurrentDefinition == CmdLineDefinition) {\n  } else if (!CurrentDefinition) {\n    PP.Diag(ImportLoc, diag::warn_module_config_macro_undef) << true << ConfigMacro << Mod->getFullModuleName();"},{Lc,1274,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  if (CurrentDefinition == CmdLineDefinition) {\n  } else if (!CurrentDefinition) {\n  } else if (!CmdLineDefinition) {\n    PP.Diag(ImportLoc, diag::warn_module_config_macro_undef) << false << ConfigMacro << Mod->getFullModuleName();"},{Lc,1279,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  if (CurrentDefinition == CmdLineDefinition) {\n  } else if (!CurrentDefinition) {\n  } else if (!CmdLineDefinition) {\n  } else if (!CurrentDefinition->isIdenticalTo(*CmdLineDefinition, PP,\n    PP.Diag(ImportLoc, diag::warn_module_config_macro_undef) << false << ConfigMacro << Mod->getFullModuleName();"}}
[k]={{Lc,1552,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  if (CurrentDefinition == CmdLineDefinition) {\n  } else if (!CurrentDefinition) {\n    PP.Diag(ImportLoc, diag::warn_module_config_macro_undef) << true << ConfigMacro << Mod->getFullModuleName();"},{Lc,1563,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  if (CurrentDefinition == CmdLineDefinition) {\n  } else if (!CurrentDefinition) {\n  } else if (!CmdLineDefinition) {\n    PP.Diag(ImportLoc, diag::warn_module_config_macro_undef) << false << ConfigMacro << Mod->getFullModuleName();"},{Lc,1571,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  if (CurrentDefinition == CmdLineDefinition) {\n  } else if (!CurrentDefinition) {\n  } else if (!CmdLineDefinition) {\n  } else if (!CurrentDefinition->isIdenticalTo(*CmdLineDefinition, PP,\n    PP.Diag(ImportLoc, diag::warn_module_config_macro_undef) << false << ConfigMacro << Mod->getFullModuleName();"}}
}
}
};
};
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