Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557
edits
Timo.stripf (talk | contribs) (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...") |
Timo.stripf (talk | contribs) No edit summary |
||
Line 209: | Line 209: | ||
[c]=q, | [c]=q, | ||
[b]={Lb,1237025389,Nb}, | [b]={Lb,1237025389,Nb}, | ||
[k]={{F, | [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", | [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", | [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", | [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, | [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", | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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", | [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, | [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", | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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", | [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", | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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", | [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", | [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, | [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, | [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, | [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", | [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", | [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", | [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", | [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", | [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", | [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", | [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", | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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", | [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, | [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, | [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", | [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, | [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, | [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, | [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", | [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", | [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, | [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", | [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", | [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", | [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", | [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", | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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", | [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", | [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", | [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, | [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, | [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", | [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, | [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", | [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", | [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", | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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", | [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", | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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", | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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", | [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", | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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, | [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();"}} | ||
} | } | ||
}; | }; |
edits