Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557
edits
Timo.stripf (talk | contribs) (Created page with "local a="regex1"; local b="title"; local c="prefix"; local d="type"; local e="category"; local f="regex3"; local g="message"; local h="regex2"; local i="commit"; local j="source"; local k="warning: "; local l="Warning"; local m="(?:warning|error|fatal error)\\: "; local n="maingroup"; local o="groups"; local p="Semantic Issue"; local q="defaultactive"; local r="clang/lib/Parse/ParsePragma.cpp"; local s="CL4"; local t="all"; local u="most"; local v="ignored-pragmas"; loca...") |
Timo.stripf (talk | contribs) No edit summary |
||
Line 162: | Line 162: | ||
[e]=w, | [e]=w, | ||
[i]={"95dc57a611ad",1445037619,"[modules] Allow the error when explicitly loading an incompatible module file"}, | [i]={"95dc57a611ad",1445037619,"[modules] Allow the error when explicitly loading an incompatible module file"}, | ||
[j]={{Jc, | [j]={{Jc,1729,"bool CompilerInstance::loadModuleFile(StringRef FileName) {\n bool ConfigMismatchIsRecoverable = getDiagnostics().getDiagnosticLevel(diag::warn_module_config_mismatch, SourceLocation()) <= DiagnosticsEngine::Warning;"},{Jc,1750,"bool CompilerInstance::loadModuleFile(StringRef FileName) {\n case ASTReader::ConfigurationMismatch:\n getDiagnostics().Report(SourceLocation(), diag::warn_module_config_mismatch) << FileName;"},{Jc,1895,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n case ASTReader::ConfigurationMismatch:\n if (Source == MS_PrebuiltModulePath)\n getDiagnostics().Report(SourceLocation(), diag::warn_module_config_mismatch) << ModuleFilename;"}} | ||
}, | }, | ||
["warn_module_conflict"]={ | ["warn_module_conflict"]={ | ||
Line 176: | Line 176: | ||
[e]=C, | [e]=C, | ||
[i]={"fb9126578ec3",1363813835,"<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-im..."}, | [i]={"fb9126578ec3",1363813835,"<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-im..."}, | ||
[j]={{jc, | [j]={{jc,1348,"void Preprocessor::makeModuleVisible(Module *M, SourceLocation Loc) {\n CurSubmoduleState->VisibleModules.setVisible(\n [&](ArrayRef<Module *> Path, Module *Conflict, StringRef Message) {\n Diag(ModuleImportLoc, diag::warn_module_conflict) << Path[0]->getFullModuleName() << Conflict->getFullModuleName() << Message;"}} | ||
}, | }, | ||
["warn_module_system_bit_conflict"]={ | ["warn_module_system_bit_conflict"]={ | ||
Line 190: | Line 190: | ||
[e]="AST Deserialization Issue", | [e]="AST Deserialization Issue", | ||
[i]={"079c40e8860c",1489791313,"Modules: Cache PCMs in memory and avoid a use-after-free"}, | [i]={"079c40e8860c",1489791313,"Modules: Cache PCMs in memory and avoid a use-after-free"}, | ||
[j]={{"clang/lib/Serialization/ASTReader.cpp", | [j]={{"clang/lib/Serialization/ASTReader.cpp",4773,"ASTReader::ASTReadResult ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy, unsigned ClientLoadCapabilities) {\n if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {\n // If this module has already been finalized in the ModuleCache, we\'re stuck\n // with it; we can only load a single version of each module.\n //\n // This can happen when a module is imported in two contexts: in one, as a\n // user module; in another, as a system module (due to an import from\n // another module marked with the [system] flag). It usually indicates a\n // bug in the module map: this module should also be marked with [system].\n //\n // If -Wno-system-headers (the default), and the first import is as a\n // system module, then validation will fail during the as-user import,\n // since -Werror flags won\'t have been validated. However, it\'s reasonable\n // to treat this consistently as a system module.\n //\n // If -Wsystem-headers, the PCM on disk was built with\n // -Wno-system-headers, and the first import is as a user module, then\n // validation will fail during the as-system import since the PCM on disk\n // doesn\'t guarantee that -Werror was respected. However, the -Werror\n // flags were checked during the initial as-user import.\n if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {\n Diag(diag::warn_module_system_bit_conflict) << F.FileName;"}} | ||
}, | }, | ||
["warn_module_uses_date_time"]={ | ["warn_module_uses_date_time"]={ | ||
Line 204: | Line 204: | ||
[e]="AST Serialization Issue", | [e]="AST Serialization Issue", | ||
[i]={"b5aaf5a57a46",1441074958,"Don\'t use fprintf to emit this diagnostic!"}, | [i]={"b5aaf5a57a46",1441074958,"Don\'t use fprintf to emit this diagnostic!"}, | ||
[j]={{"clang/lib/Serialization/ASTWriter.cpp", | [j]={{"clang/lib/Serialization/ASTWriter.cpp",2336,"/// Writes the block containing the serialized form of the\n/// preprocessor.\nvoid ASTWriter::WritePreprocessor(const Preprocessor &PP, bool IsModule) {\n // If the AST file contains __DATE__ or __TIME__ emit a warning about this.\n // FIXME: Include a location for the use, and say which one was used.\n if (PP.SawDateOrTime())\n PP.Diag(SourceLocation(), diag::warn_module_uses_date_time) << IsModule;"}} | ||
}, | }, | ||
["warn_mt_message"]={ | ["warn_mt_message"]={ | ||
Line 216: | Line 216: | ||
[e]=w, | [e]=w, | ||
[i]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions"}, | [i]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions"}, | ||
[j]={{"clang/lib/ARCMigrate/TransformActions.cpp", | [j]={{"clang/lib/ARCMigrate/TransformActions.cpp",695,"void TransformActions::reportWarning(StringRef message, SourceLocation loc, SourceRange range) { report(loc, diag::warn_mt_message, range) << message; }"},{"clang/unittests/Basic/DiagnosticTest.cpp",49,"// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.\nTEST(DiagnosticTest, suppressAndTrap) {\n {\n Diags.Report(diag::warn_mt_message) << \"warning\";"},{"clang/unittests/Basic/DiagnosticTest.cpp",74,"// Check that FatalsAsError works as intended\nTEST(DiagnosticTest, fatalsAsError) {\n for (unsigned FatalsAsError = 0; FatalsAsError != 2; ++FatalsAsError) {\n Diags.Report(diag::warn_mt_message) << \"warning\";"}} | ||
}, | }, | ||
["warn_multichar_character_literal"]={ | ["warn_multichar_character_literal"]={ | ||
Line 230: | Line 230: | ||
[e]=C, | [e]=C, | ||
[i]={"8fa45e1fd527",1601988326,"Convert diagnostics about multi-character literals from extension to warning"}, | [i]={"8fa45e1fd527",1601988326,"Convert diagnostics about multi-character literals from extension to warning"}, | ||
[j]={{"clang/lib/Lex/LiteralSupport.cpp", | [j]={{"clang/lib/Lex/LiteralSupport.cpp",1798,"/// \\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 else if (isOrdinary())\n PP.Diag(Loc, diag::warn_multichar_character_literal);"}} | ||
}, | }, | ||
["warn_multiple_method_decl"]={ | ["warn_multiple_method_decl"]={ | ||
Line 244: | Line 244: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{N, | [j]={{N,3639,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n if (issueDiagnostic) {\n if (issueError)\n else if (strictSelectorMatch)\n else\n Diag(R.getBegin(), diag::warn_multiple_method_decl) << Sel << R;"}} | ||
}, | }, | ||
["warn_multiple_selectors"]={ | ["warn_multiple_selectors"]={ | ||
Line 259: | Line 259: | ||
[e]=p, | [e]=p, | ||
[i]={"01d96986d843",1480719628,"More diagnostic name fixups: w_ -> warn_, warning_ -> warn_, not_ -> note_."}, | [i]={"01d96986d843",1480719628,"More diagnostic name fixups: w_ -> warn_, warning_ -> warn_, not_ -> note_."}, | ||
[j]={{Z, | [j]={{Z,1192,"static bool HelperToDiagnoseMismatchedMethodsInGlobalPool(Sema &S, SourceLocation AtLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, ObjCMethodDecl *Method, ObjCMethodList &MethList) {\n for (M = M->getNext(); M; M = M->getNext()) {\n if (!S.MatchTwoMethodDeclarations(Method, MatchingMethodDecl, Sema::MMS_loose)) {\n if (!Warned) {\n S.Diag(AtLoc, diag::warn_multiple_selectors) << Method->getSelector() << FixItHint::CreateInsertion(LParenLoc, \"(\") << FixItHint::CreateInsertion(RParenLoc, \")\");"},{Z,1211,"static void DiagnoseMismatchedSelectors(Sema &S, SourceLocation AtLoc, ObjCMethodDecl *Method, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n if (!WarnMultipleSelectors || S.Diags.isIgnored(diag::warn_multiple_selectors, SourceLocation()))"}} | ||
}, | }, | ||
["warn_multiversion_duplicate_entries"]={ | ["warn_multiversion_duplicate_entries"]={ | ||
Line 273: | Line 273: | ||
[e]=w, | [e]=w, | ||
[i]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning"}, | [i]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning"}, | ||
[j]={{B, | [j]={{B,2119,"static void handleCPUSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n for (unsigned ArgNo = 0; ArgNo < getNumAttributeArgs(AL); ++ArgNo) {\n if (llvm::any_of(CPUs, [CPUName, &Target](const IdentifierInfo *Cur) { return Target.CPUSpecificManglingCharacter(CPUName) == Target.CPUSpecificManglingCharacter(Cur->getName()); })) {\n S.Diag(AL.getLoc(), diag::warn_multiversion_duplicate_entries);"}} | ||
}, | }, | ||
["warn_namespace_member_extra_qualification"]={ | ["warn_namespace_member_extra_qualification"]={ | ||
Line 287: | Line 287: | ||
[e]=p, | [e]=p, | ||
[i]={"a230224be492",1386229862,"Implement DR482: namespace members can be redeclared with a qualified name"}, | [i]={"a230224be492",1386229862,"Implement DR482: namespace members can be redeclared with a qualified name"}, | ||
[j]={{G, | [j]={{G,6181,"/// 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 } else {\n Diag(Loc, diag::warn_namespace_member_extra_qualification) << Name;"}} | ||
}, | }, | ||
["warn_neon_vector_initializer_non_portable"]={ | ["warn_neon_vector_initializer_non_portable"]={ | ||
Line 301: | Line 301: | ||
[e]=p, | [e]=p, | ||
[i]={"9eef2659bf60",1403274913,"The ability to use vector initializer lists is a GNU vector extension"}, | [i]={"9eef2659bf60",1403274913,"The ability to use vector initializer lists is a GNU vector extension"}, | ||
[j]={{vb, | [j]={{vb,1848,"void InitListChecker::CheckVectorType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n if (!SemaRef.getLangOpts().OpenCL && !SemaRef.getLangOpts().HLSL) {\n if (isBigEndian && (T->getVectorKind() == VectorType::NeonVector || T->getVectorKind() == VectorType::NeonPolyVector)) {\n SemaRef.Diag(IList->getBeginLoc(), diag::warn_neon_vector_initializer_non_portable);"}} | ||
}, | }, | ||
["warn_nested_block_comment"]={ | ["warn_nested_block_comment"]={ | ||
Line 315: | Line 315: | ||
[e]=C, | [e]=C, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{Jb, | [j]={{Jb,2877,"#endif\n FoundSlash:\n if (CurPtr[0] == \'*\' && CurPtr[1] != \'/\') {\n // If this is a /* inside of the comment, emit a warning. Don\'t do this\n // if this is a /*/, which will end the comment. This misses cases with\n // embedded escaped newlines, but oh well.\n if (!isLexingRawMode())\n Diag(CurPtr - 1, diag::warn_nested_block_comment);"}} | ||
}, | }, | ||
["warn_new_dangling_initializer_list"]={ | ["warn_new_dangling_initializer_list"]={ | ||
Line 329: | Line 329: | ||
[e]=p, | [e]=p, | ||
[i]={"0a9969b36b16",1531786301,"Restructure checking for, and warning on, lifetime extension."}, | [i]={"0a9969b36b16",1531786301,"Restructure checking for, and warning on, lifetime extension."}, | ||
[j]={{vb, | [j]={{vb,8243,"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 else\n Diag(DiagLoc, RK == RK_ReferenceBinding ? diag::warn_new_dangling_reference : diag::warn_new_dangling_initializer_list) << !Entity.getParent() << DiagRange;"}} | ||
}, | }, | ||
["warn_new_dangling_reference"]={ | ["warn_new_dangling_reference"]={ | ||
Line 343: | Line 343: | ||
[e]=p, | [e]=p, | ||
[i]={"0a9969b36b16",1531786301,"Restructure checking for, and warning on, lifetime extension."}, | [i]={"0a9969b36b16",1531786301,"Restructure checking for, and warning on, lifetime extension."}, | ||
[j]={{vb, | [j]={{vb,8242,"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 else\n Diag(DiagLoc, RK == RK_ReferenceBinding ? diag::warn_new_dangling_reference : diag::warn_new_dangling_initializer_list) << !Entity.getParent() << DiagRange;"}} | ||
}, | }, | ||
["warn_no_autosynthesis_property"]={ | ["warn_no_autosynthesis_property"]={ | ||
Line 357: | Line 357: | ||
[e]=p, | [e]=p, | ||
[i]={"9d25a48b4131",1363117577,"Objective-C: Issue warning in couple of obscure cases"}, | [i]={"9d25a48b4131",1363117577,"Objective-C: Issue warning in couple of obscure cases"}, | ||
[j]={{S, | [j]={{S,1953,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n for (const auto &PropEntry : PropMap) {\n // If property to be implemented in the super class, ignore.\n if (PropInSuperClass) {\n if ((Prop->getPropertyAttributes() & ObjCPropertyAttribute::kind_readwrite) && (PropInSuperClass->getPropertyAttributes() & ObjCPropertyAttribute::kind_readonly) && !IMPDecl->getInstanceMethod(Prop->getSetterName()) && !IDecl->HasUserDeclaredSetterMethod(Prop)) {\n Diag(Prop->getLocation(), diag::warn_no_autosynthesis_property) << Prop->getIdentifier();"}} | ||
}, | }, | ||
["warn_no_autosynthesis_shared_ivar_property"]={ | ["warn_no_autosynthesis_shared_ivar_property"]={ | ||
Line 371: | Line 371: | ||
[e]=p, | [e]=p, | ||
[i]={"9d25a48b4131",1363117577,"Objective-C: Issue warning in couple of obscure cases"}, | [i]={"9d25a48b4131",1363117577,"Objective-C: Issue warning in couple of obscure cases"}, | ||
[j]={{S, | [j]={{S,1918,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n for (const auto &PropEntry : PropMap) {\n if (ObjCPropertyImplDecl *PID = IMPDecl->FindPropertyImplIvarDecl(Prop->getIdentifier())) {\n Diag(Prop->getLocation(), diag::warn_no_autosynthesis_shared_ivar_property) << Prop->getIdentifier();"}} | ||
}, | }, | ||
["warn_no_constructor_for_refconst"]={ | ["warn_no_constructor_for_refconst"]={ | ||
Line 383: | Line 383: | ||
[e]=p, | [e]=p, | ||
[i]={"454a5b65d402",1271289653,"Warn about non-aggregate classes with no user-declared constructors"}, | [i]={"454a5b65d402",1271289653,"Warn about non-aggregate classes with no user-declared constructors"}, | ||
[j]={{Y, | [j]={{Y,6928,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n/// parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n // If this is not an aggregate type and has no user-declared constructor,\n // complain about any non-static data members of reference or const scalar\n // type, since they will never get initializers.\n if (!Record->isInvalidDecl() && !Record->isDependentType() && !Record->isAggregate() && !Record->hasUserDeclaredConstructor() && !Record->isLambda()) {\n for (const auto *F : Record->fields()) {\n if (F->getType()->isReferenceType() || (F->getType().isConstQualified() && F->getType()->isScalarType())) {\n if (!Complained) {\n Diag(Record->getLocation(), diag::warn_no_constructor_for_refconst) << Record->getTagKind() << Record;"}} | ||
}, | }, | ||
["warn_no_dynamic_cast_with_rtti_disabled"]={ | ["warn_no_dynamic_cast_with_rtti_disabled"]={ | ||
Line 397: | Line 397: | ||
[e]=p, | [e]=p, | ||
[i]={Kb,1582847864,Ub}, | [i]={Kb,1582847864,Ub}, | ||
[j]={{Db, | [j]={{Db,935,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n // Warns when dynamic_cast is used with RTTI data disabled.\n if (!Self.getLangOpts().RTTIData) {\n if (MicrosoftABI || !DestPointee->isVoidType())\n Self.Diag(OpRange.getBegin(), diag::warn_no_dynamic_cast_with_rtti_disabled) << isClangCL;"}} | ||
}, | }, | ||
["warn_no_newline_eof"]={ | ["warn_no_newline_eof"]={ | ||
Line 412: | Line 412: | ||
[e]=C, | [e]=C, | ||
[i]={"4c55d45b13e9",1377272521,"Respect -Wnewline-eof even in C++11 mode."}, | [i]={"4c55d45b13e9",1377272521,"Respect -Wnewline-eof even in C++11 mode."}, | ||
[j]={{Jb, | [j]={{Jb,3055,"/// 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 } else {\n DiagID = diag::warn_no_newline_eof;"}} | ||
}, | }, | ||
["warn_no_priv_submodule_use_toplevel"]={ | ["warn_no_priv_submodule_use_toplevel"]={ | ||
Line 426: | Line 426: | ||
[e]=w, | [e]=w, | ||
[i]={"84bc0a271dcd",1513919083,"[Modules] Map missing private submodules from Foo.Private to Foo_Private"}, | [i]={"84bc0a271dcd",1513919083,"[Modules] Map missing private submodules from Foo.Private to Foo_Private"}, | ||
[j]={{Jc, | [j]={{Jc,2046,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n // If the user is requesting Foo.Private and it doesn\'t exist, try to\n // match Foo_Private and emit a warning asking for the user to write\n // @import Foo_Private instead. FIXME: remove this when existing clients\n // migrate off of Foo.Private syntax.\n if (!Sub && Name == \"Private\" && Module == Module->getTopLevelModule()) {\n if (Sub) {\n if (!getDiagnostics().isIgnored(diag::warn_no_priv_submodule_use_toplevel, ImportLoc)) {"},{Jc,2048,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n // If the user is requesting Foo.Private and it doesn\'t exist, try to\n // match Foo_Private and emit a warning asking for the user to write\n // @import Foo_Private instead. FIXME: remove this when existing clients\n // migrate off of Foo.Private syntax.\n if (!Sub && Name == \"Private\" && Module == Module->getTopLevelModule()) {\n if (Sub) {\n if (!getDiagnostics().isIgnored(diag::warn_no_priv_submodule_use_toplevel, ImportLoc)) {\n getDiagnostics().Report(Path[I].second, diag::warn_no_priv_submodule_use_toplevel) << Path[I].first << Module->getFullModuleName() << PrivateModule << SourceRange(Path[0].second, Path[I].second) << FixItHint::CreateReplacement(SourceRange(Path[0].second), PrivateModule);"}} | ||
}, | }, | ||
["warn_no_support_for_eval_method_source_on_m32"]={ | ["warn_no_support_for_eval_method_source_on_m32"]={ | ||
Line 440: | Line 440: | ||
[e]=A, | [e]=A, | ||
[i]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."}, | [i]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."}, | ||
[j]={{"clang/lib/Parse/ParseStmt.cpp", | [j]={{"clang/lib/Parse/ParseStmt.cpp",1260,"/// ParseCompoundStatementBody - Parse a sequence of statements optionally\n/// followed by a label and invoke the ActOnCompoundStmt action. This expects\n/// the \'{\' to be the current token, and consume the \'}\' at the end of the\n/// block. It does not manipulate the scope stack.\nStmtResult Parser::ParseCompoundStatementBody(bool isStmtExpr) {\n // Warn the user that using option `-ffp-eval-method=source` on a\n // 32-bit target and feature `sse` disabled, or using\n // `pragma clang fp eval_method=source` and feature `sse` disabled, is not\n // supported.\n if (!PP.getTargetInfo().supportSourceEvalMethod() && (PP.getLastFPEvalPragmaLocation().isValid() || PP.getCurrentFPEvalMethod() == LangOptions::FPEvalMethodKind::FEM_Source))\n Diag(Tok.getLocation(), diag::warn_no_support_for_eval_method_source_on_m32);"}} | ||
}, | }, | ||
["warn_no_typeid_with_rtti_disabled"]={ | ["warn_no_typeid_with_rtti_disabled"]={ | ||
Line 454: | Line 454: | ||
[e]=p, | [e]=p, | ||
[i]={Kb,1582847864,Ub}, | [i]={Kb,1582847864,Ub}, | ||
[j]={{Lb, | [j]={{Lb,705,"/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);\nExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) {\n if (!getLangOpts().RTTIData && !Result.isInvalid())\n if (auto *CTE = dyn_cast<CXXTypeidExpr>(Result.get()))\n if (CTE->isPotentiallyEvaluated() && !CTE->isMostDerived(Context))\n Diag(OpLoc, diag::warn_no_typeid_with_rtti_disabled) << (getDiagnostics().getDiagnosticOptions().getFormat() == DiagnosticOptions::MSVC);"}} | ||
}, | }, | ||
["warn_no_underlying_type_specified_for_enum_bitfield"]={ | ["warn_no_underlying_type_specified_for_enum_bitfield"]={ | ||
Line 469: | Line 469: | ||
[e]=p, | [e]=p, | ||
[i]={"ad425626d237",1479339600,"Add warning when assigning enums to bitfields without an explicit unsigned underlying type"}, | [i]={"ad425626d237",1479339600,"Add warning when assigning enums to bitfields without an explicit unsigned underlying type"}, | ||
[j]={{x, | [j]={{x,14047,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n if (BitfieldType->isEnumeralType()) {\n // If the underlying enum type was not explicitly specified as an unsigned\n // type and the enum contain only positive values, MSVC++ will cause an\n // inconsistency by storing this as a signed type.\n if (S.getLangOpts().CPlusPlus11 && !BitfieldEnumDecl->getIntegerTypeSourceInfo() && BitfieldEnumDecl->getNumPositiveBits() > 0 && BitfieldEnumDecl->getNumNegativeBits() == 0) {\n S.Diag(InitLoc, diag::warn_no_underlying_type_specified_for_enum_bitfield) << BitfieldEnumDecl;"}} | ||
}, | }, | ||
["warn_no_unlock"]={ | ["warn_no_unlock"]={ | ||
Line 484: | Line 484: | ||
[e]=p, | [e]=p, | ||
[i]={"ee5db8b5c4ab",1315518770,"Thread Safety: In C++0x Mutexes are the objects that control access to shared variables, while Lock..."}, | [i]={"ee5db8b5c4ab",1315518770,"Thread Safety: In C++0x Mutexes are the objects that control access to shared variables, while Lock..."}, | ||
[j]={{D, | [j]={{D,1915,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n void handleMutexHeldEndOfScope(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) override {\n case LEK_LockedAtEndOfFunction:\n DiagID = diag::warn_no_unlock;"}} | ||
}, | }, | ||
["warn_nocf_check_attribute_ignored"]={ | ["warn_nocf_check_attribute_ignored"]={ | ||
Line 498: | Line 498: | ||
[e]=p, | [e]=p, | ||
[i]={"220671a08064",1521293495,"Adding nocf_check attribute for cf-protection fine tuning"}, | [i]={"220671a08064",1521293495,"Adding nocf_check attribute for cf-protection fine tuning"}, | ||
[j]={{B, | [j]={{B,2212,"static void handleNoCfCheckAttr(Sema &S, Decl *D, const ParsedAttr &Attrs) {\n if (!S.getLangOpts().CFProtectionBranch)\n S.Diag(Attrs.getLoc(), diag::warn_nocf_check_attribute_ignored);"},{Q,7860,"/// Process an individual function attribute. Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n if (attr.getKind() == ParsedAttr::AT_AnyX86NoCfCheck) {\n if (!S.getLangOpts().CFProtectionBranch) {\n S.Diag(attr.getLoc(), diag::warn_nocf_check_attribute_ignored);"}} | ||
}, | }, | ||
["warn_noderef_on_non_pointer_or_array"]={ | ["warn_noderef_on_non_pointer_or_array"]={ | ||
Line 512: | Line 512: | ||
[e]=w, | [e]=w, | ||
[i]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute"}, | [i]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute"}, | ||
[j]={{Q, | [j]={{Q,5732,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n if (DeclType.Kind != DeclaratorChunk::Paren) {\n if (ExpectNoDerefChunk && !IsNoDerefableChunk(DeclType))\n S.Diag(DeclType.Loc, diag::warn_noderef_on_non_pointer_or_array);"},{Q,5740,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n if (ExpectNoDerefChunk)\n S.Diag(state.getDeclarator().getBeginLoc(), diag::warn_noderef_on_non_pointer_or_array);"}} | ||
}, | }, | ||
["warn_noderef_to_dereferenceable_pointer"]={ | ["warn_noderef_to_dereferenceable_pointer"]={ | ||
Line 526: | Line 526: | ||
[e]=w, | [e]=w, | ||
[i]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute"}, | [i]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute"}, | ||
[j]={{Db, | [j]={{Db,187,"void CheckNoDeref(Sema &S, const QualType FromType, const QualType ToType, SourceLocation OpLoc) {\n if (const auto *PtrType = dyn_cast<PointerType>(FromType)) {\n if (PtrType->getPointeeType()->hasAttr(attr::NoDeref)) {\n if (const auto *DestType = dyn_cast<PointerType>(ToType)) {\n if (!DestType->getPointeeType()->hasAttr(attr::NoDeref)) {\n S.Diag(OpLoc, diag::warn_noderef_to_dereferenceable_pointer);"},{z,10624,"Sema::AssignConvertType Sema::CheckSingleAssignmentConstraints(QualType LHSType, ExprResult &CallerRHS, bool Diagnose, bool DiagnoseCFAudited, bool ConvertRHS) {\n if (const auto *LHSPtrType = LHSType->getAs<PointerType>()) {\n if (const auto *RHSPtrType = RHS.get()->getType()->getAs<PointerType>()) {\n if (RHSPtrType->getPointeeType()->hasAttr(attr::NoDeref) && !LHSPtrType->getPointeeType()->hasAttr(attr::NoDeref)) {\n Diag(RHS.get()->getExprLoc(), diag::warn_noderef_to_dereferenceable_pointer) << RHS.get()->getSourceRange();"},{vb,8976,"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_ConversionSequenceNoNarrowing: {\n if (const auto *FromPtrType = CurInit.get()->getType()->getAs<PointerType>()) {\n if (const auto *ToPtrType = Step->Type->getAs<PointerType>()) {\n if (FromPtrType->getPointeeType()->hasAttr(attr::NoDeref) && !ToPtrType->getPointeeType()->hasAttr(attr::NoDeref)) {\n // Do not check static casts here because they are checked earlier\n // in Sema::ActOnCXXNamedCast()\n if (!Kind.isStaticCast()) {\n S.Diag(CurInit.get()->getExprLoc(), diag::warn_noderef_to_dereferenceable_pointer) << CurInit.get()->getSourceRange();"}} | ||
}, | }, | ||
["warn_non_aligned_allocation_function"]={ | ["warn_non_aligned_allocation_function"]={ | ||
Line 540: | Line 540: | ||
[e]="Coroutines Issue", | [e]="Coroutines Issue", | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{"clang/lib/Sema/SemaCoroutine.cpp", | [j]={{"clang/lib/Sema/SemaCoroutine.cpp",1479,"bool CoroutineStmtBuilder::makeNewAndDeleteExpr() {\n // If we found a non-aligned allocation function in the promise_type,\n // it indicates the user forgot to update the allocation function. Let\'s emit\n // a warning here.\n if (FoundNonAlignedInPromise) {\n S.Diag(OperatorNew->getLocation(), diag::warn_non_aligned_allocation_function) << &FD;"}} | ||
}, | }, | ||
["warn_non_contravariant_overriding_param_types"]={ | ["warn_non_contravariant_overriding_param_types"]={ | ||
Line 555: | Line 555: | ||
[e]=p, | [e]=p, | ||
[i]={"3c12dd7675cd",1312996590,"objective-c: Using existing infrastructure for finding "}, | [i]={"3c12dd7675cd",1312996590,"objective-c: Using existing infrastructure for finding "}, | ||
[j]={{N, | [j]={{N,2492,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n // Mismatches between ObjC pointers go into a different warning\n // category, and sometimes they\'re even completely explicitly allowed..\n if (const ObjCObjectPointerType *ImplPtrTy = ImplTy->getAs<ObjCObjectPointerType>()) {\n if (const ObjCObjectPointerType *IfacePtrTy = IfaceTy->getAs<ObjCObjectPointerType>()) {\n DiagID = IsOverridingMode ? diag::warn_non_contravariant_overriding_param_types : diag::warn_non_contravariant_param_types;"}} | ||
}, | }, | ||
["warn_non_contravariant_param_types"]={ | ["warn_non_contravariant_param_types"]={ | ||
Line 570: | Line 570: | ||
[e]=p, | [e]=p, | ||
[i]={"071df46743b9",1288233278,"Implement the newest status quo for method override checking. The idea now"}, | [i]={"071df46743b9",1288233278,"Implement the newest status quo for method override checking. The idea now"}, | ||
[j]={{N, | [j]={{N,2493,"static bool CheckMethodOverrideParam(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, ParmVarDecl *ImplVar, ParmVarDecl *IfaceVar, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n // Mismatches between ObjC pointers go into a different warning\n // category, and sometimes they\'re even completely explicitly allowed..\n if (const ObjCObjectPointerType *ImplPtrTy = ImplTy->getAs<ObjCObjectPointerType>()) {\n if (const ObjCObjectPointerType *IfacePtrTy = IfaceTy->getAs<ObjCObjectPointerType>()) {\n DiagID = IsOverridingMode ? diag::warn_non_contravariant_overriding_param_types : diag::warn_non_contravariant_param_types;"}} | ||
}, | }, | ||
["warn_non_covariant_overriding_ret_types"]={ | ["warn_non_covariant_overriding_ret_types"]={ | ||
Line 585: | Line 585: | ||
[e]=p, | [e]=p, | ||
[i]={"3c12dd7675cd",1312996590,"objective-c: Using existing infrastructure for finding "}, | [i]={"3c12dd7675cd",1312996590,"objective-c: Using existing infrastructure for finding "}, | ||
[j]={{N, | [j]={{N,2410,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n // Mismatches between ObjC pointers go into a different warning\n // category, and sometimes they\'re even completely explicitly allowed.\n if (const ObjCObjectPointerType *ImplPtrTy = MethodImpl->getReturnType()->getAs<ObjCObjectPointerType>()) {\n if (const ObjCObjectPointerType *IfacePtrTy = MethodDecl->getReturnType()->getAs<ObjCObjectPointerType>()) {\n DiagID = IsOverridingMode ? diag::warn_non_covariant_overriding_ret_types : diag::warn_non_covariant_ret_types;"}} | ||
}, | }, | ||
["warn_non_covariant_ret_types"]={ | ["warn_non_covariant_ret_types"]={ | ||
Line 600: | Line 600: | ||
[e]=p, | [e]=p, | ||
[i]={"071df46743b9",1288233278,"Implement the newest status quo for method override checking. The idea now"}, | [i]={"071df46743b9",1288233278,"Implement the newest status quo for method override checking. The idea now"}, | ||
[j]={{N, | [j]={{N,2411,"static bool CheckMethodOverrideReturn(Sema &S, ObjCMethodDecl *MethodImpl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl, bool IsOverridingMode, bool Warn) {\n // Mismatches between ObjC pointers go into a different warning\n // category, and sometimes they\'re even completely explicitly allowed.\n if (const ObjCObjectPointerType *ImplPtrTy = MethodImpl->getReturnType()->getAs<ObjCObjectPointerType>()) {\n if (const ObjCObjectPointerType *IfacePtrTy = MethodDecl->getReturnType()->getAs<ObjCObjectPointerType>()) {\n DiagID = IsOverridingMode ? diag::warn_non_covariant_overriding_ret_types : diag::warn_non_covariant_ret_types;"}} | ||
}, | }, | ||
["warn_non_literal_null_pointer"]={ | ["warn_non_literal_null_pointer"]={ | ||
Line 614: | Line 614: | ||
[e]=Rb, | [e]=Rb, | ||
[i]={"1c7c8f763769",1344447211,"Implement warning for integral null pointer constants other than the literal 0."}, | [i]={"1c7c8f763769",1344447211,"Implement warning for integral null pointer constants other than the literal 0."}, | ||
[j]={{"clang/lib/Sema/SemaOverload.cpp", | [j]={{"clang/lib/Sema/SemaOverload.cpp",3131,"/// 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 else if (!isUnevaluatedContext())\n Diag(From->getExprLoc(), diag::warn_non_literal_null_pointer) << ToType << From->getSourceRange();"}} | ||
}, | }, | ||
["warn_non_modular_include_in_framework_module"]={ | ["warn_non_modular_include_in_framework_module"]={ | ||
Line 629: | Line 629: | ||
[e]=C, | [e]=C, | ||
[i]={"71e1a64f916e",1399326253,"Add -Wnon-modular-include* options"}, | [i]={"71e1a64f916e",1399326253,"Add -Wnon-modular-include* options"}, | ||
[j]={{"clang/lib/Lex/ModuleMap.cpp", | [j]={{"clang/lib/Lex/ModuleMap.cpp",546,"void ModuleMap::diagnoseHeaderInclusion(Module *RequestingModule, bool RequestingModuleIsModuleInterface, SourceLocation FilenameLoc, StringRef Filename, FileEntryRef File) {\n if (RequestingModule && LangOpts.ModulesStrictDeclUse) {\n } else if (RequestingModule && RequestingModuleIsModuleInterface && LangOpts.isCompilingModule()) {\n diag::kind DiagID = RequestingModule->getTopLevelModule()->IsFramework ? diag::warn_non_modular_include_in_framework_module : diag::warn_non_modular_include_in_module;"}} | ||
}, | }, | ||
["warn_non_modular_include_in_module"]={ | ["warn_non_modular_include_in_module"]={ | ||
Line 644: | Line 644: | ||
[e]=C, | [e]=C, | ||
[i]={"71e1a64f916e",1399326253,"Add -Wnon-modular-include* options"}, | [i]={"71e1a64f916e",1399326253,"Add -Wnon-modular-include* options"}, | ||
[j]={{"clang/lib/Lex/ModuleMap.cpp", | [j]={{"clang/lib/Lex/ModuleMap.cpp",547,"void ModuleMap::diagnoseHeaderInclusion(Module *RequestingModule, bool RequestingModuleIsModuleInterface, SourceLocation FilenameLoc, StringRef Filename, FileEntryRef File) {\n if (RequestingModule && LangOpts.ModulesStrictDeclUse) {\n } else if (RequestingModule && RequestingModuleIsModuleInterface && LangOpts.isCompilingModule()) {\n diag::kind DiagID = RequestingModule->getTopLevelModule()->IsFramework ? diag::warn_non_modular_include_in_framework_module : diag::warn_non_modular_include_in_module;"}} | ||
}, | }, | ||
["warn_non_pod_vararg_with_format_string"]={ | ["warn_non_pod_vararg_with_format_string"]={ | ||
Line 658: | Line 658: | ||
[e]=p, | [e]=p, | ||
[i]={"c7b0bdffe75c",1340240915,"If an object (such as a std::string) with an appropriate c_str() member function"}, | [i]={"c7b0bdffe75c",1340240915,"If an object (such as a std::string) with an appropriate c_str() member function"}, | ||
[j]={{x, | [j]={{x,11385,"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_MSVCUndefined:\n if (CallType == Sema::VariadicDoesNotApply) {\n } else {\n EmitFormatDiagnostic(S.PDiag(diag::warn_non_pod_vararg_with_format_string) << S.getLangOpts().CPlusPlus11 << ExprTy << CallType << AT.getRepresentativeTypeName(S.Context) << CSR << E->getSourceRange(), E->getBeginLoc(), /*IsStringLocation*/ false, CSR);"}} | ||
}, | }, | ||
["warn_non_prototype_changes_behavior"]={ | ["warn_non_prototype_changes_behavior"]={ | ||
Line 672: | Line 672: | ||
[e]=p, | [e]=p, | ||
[i]={Qc,1620530452,Pc}, | [i]={Qc,1620530452,Pc}, | ||
[j]={{G, | [j]={{G,4166,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n // C: Function types need to be compatible, not identical. This handles\n // duplicate function decls like \"void f(int); void f(enum X);\" properly.\n if (!getLangOpts().CPlusPlus) {\n // If we are merging two functions where only one of them has a prototype,\n // we may have enough information to decide to issue a diagnostic that the\n // function without a protoype will change behavior in C2x. This handles\n // cases like:\n // void i(); void i(int j);\n // void i(int j); void i();\n // void i(); void i(int j) {}\n // See ActOnFinishFunctionBody() for other cases of the behavior change\n // diagnostic. See GetFullTypeForDeclarator() for handling of a function\n // type without a prototype.\n if (New->hasWrittenPrototype() != Old->hasWrittenPrototype() && !New->isImplicit() && !Old->isImplicit()) {\n if (WithProto->getNumParams() != 0) {\n if (WithoutProto->getBuiltinID() == 0 && !WithoutProto->isImplicit()) {\n Diag(WithoutProto->getLocation(), diag::warn_non_prototype_changes_behavior) << IsWithoutProtoADef << (WithoutProto->getNumParams() ? 0 : 1) << (WithoutProto == Old) << IsWithProtoADef;"},{G,15766,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n {\n if (FD) {\n // If the function being defined does not have a prototype, then we may\n // need to diagnose it as changing behavior in C2x because we now know\n // whether the function accepts arguments or not. This only handles the\n // case where the definition has no prototype but does have parameters\n // and either there is no previous potential prototype, or the previous\n // potential prototype also has no actual prototype. This handles cases\n // like:\n // void f(); void f(a) int a; {}\n // void g(a) int a; {}\n // See MergeFunctionDecl() for other cases of the behavior change\n // diagnostic. See GetFullTypeForDeclarator() for handling of a function\n // type without a prototype.\n if (!FD->hasWrittenPrototype() && FD->getNumParams() != 0 && (!PossiblePrototype || (!PossiblePrototype->hasWrittenPrototype() && !PossiblePrototype->isImplicit()))) {\n Diag(FD->getLocation(), diag::warn_non_prototype_changes_behavior) << /*definition*/ 1 << /* not supported in C2x */ 0;"},{G,15776,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n {\n if (FD) {\n // If the function being defined does not have a prototype, then we may\n // need to diagnose it as changing behavior in C2x because we now know\n // whether the function accepts arguments or not. This only handles the\n // case where the definition has no prototype but does have parameters\n // and either there is no previous potential prototype, or the previous\n // potential prototype also has no actual prototype. This handles cases\n // like:\n // void f(); void f(a) int a; {}\n // void g(a) int a; {}\n // See MergeFunctionDecl() for other cases of the behavior change\n // diagnostic. See GetFullTypeForDeclarator() for handling of a function\n // type without a prototype.\n if (!FD->hasWrittenPrototype() && FD->getNumParams() != 0 && (!PossiblePrototype || (!PossiblePrototype->hasWrittenPrototype() && !PossiblePrototype->isImplicit()))) {\n // If we have a possible prototype for the function which is a user-\n // visible declaration, we already tested that it has no prototype.\n // This will change behavior in C2x. This gets a warning rather than a\n // note because it\'s the same behavior-changing problem as with the\n // definition.\n if (PossiblePrototype)\n Diag(PossiblePrototype->getLocation(), diag::warn_non_prototype_changes_behavior) << /*declaration*/ 0 << /* conflicting */ 1 << /*subsequent*/ 1 << /*definition*/ 1;"}} | ||
}, | }, | ||
["warn_non_virtual_dtor"]={ | ["warn_non_virtual_dtor"]={ | ||
Line 687: | Line 687: | ||
[e]=p, | [e]=p, | ||
[i]={"7f3986dc64fd",1296457500,"Warn if the class has virtual methods but non-virtual destructor. Addresses rdar://8756445."}, | [i]={"7f3986dc64fd",1296457500,"Warn if the class has virtual methods but non-virtual destructor. Addresses rdar://8756445."}, | ||
[j]={{Y, | [j]={{Y,6969,"/// 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 virtual methods but non-virtual public destructor.\n if (Record->isPolymorphic() && !Record->isDependentType()) {\n if ((!dtor || (!dtor->isVirtual() && dtor->getAccess() == AS_public)) && !Record->hasAttr<FinalAttr>())\n Diag(dtor ? dtor->getLocation() : Record->getLocation(), diag::warn_non_virtual_dtor) << Context.getRecordType(Record);"}} | ||
}, | }, | ||
["warn_nonnull_expr_compare"]={ | ["warn_nonnull_expr_compare"]={ | ||
Line 701: | Line 701: | ||
[e]=p, | [e]=p, | ||
[i]={"850269a47eed",1449612120,"[Sema] Add warning when comparing nonnull and null"}, | [i]={"850269a47eed",1449612120,"[Sema] Add warning when comparing nonnull and null"}, | ||
[j]={{x, | [j]={{x,15489,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n auto ComplainAboutNonnullParamOrCall = [&](const Attr *NonnullAttr) {\n unsigned DiagID = IsCompare ? diag::warn_nonnull_expr_compare : diag::warn_cast_nonnull_to_bool;"}} | ||
}, | }, | ||
["warn_noreturn_function_has_return_expr"]={ | ["warn_noreturn_function_has_return_expr"]={ | ||
Line 715: | Line 715: | ||
[e]=p, | [e]=p, | ||
[i]={"6e127a6d8642",1243798333,"Downgrade an error about \"return in a no-return function\" from being "}, | [i]={"6e127a6d8642",1243798333,"Downgrade an error about \"return in a no-return function\" from being "}, | ||
[j]={{D, | [j]={{D,631,"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));"},{R,3962,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n if (const FunctionDecl *FD = getCurFunctionDecl()) {\n if (FD->isNoReturn())\n Diag(ReturnLoc, diag::warn_noreturn_function_has_return_expr) << FD;"}} | ||
}, | }, | ||
["warn_not_a_doxygen_trailing_member_comment"]={ | ["warn_not_a_doxygen_trailing_member_comment"]={ | ||
Line 730: | Line 730: | ||
[e]="Documentation Issue", | [e]="Documentation Issue", | ||
[i]={"052f60d3846f",1340380975,"Add a warning about almost-Doxygen trailing comments: //< and /*< ... */"}, | [i]={"052f60d3846f",1340380975,"Add a warning about almost-Doxygen trailing comments: //< and /*< ... */"}, | ||
[j]={{V, | [j]={{V,2421,"void Sema::ActOnComment(SourceRange Comment) {\n if (RC.isAlmostTrailingComment() || RC.hasUnsupportedSplice(SourceMgr)) {\n Diag(Comment.getBegin(), diag::warn_not_a_doxygen_trailing_member_comment) << FixItHint::CreateReplacement(MagicMarkerRange, MagicMarkerText);"}} | ||
}, | }, | ||
["warn_not_compound_assign"]={ | ["warn_not_compound_assign"]={ | ||
Line 742: | Line 742: | ||
[e]=p, | [e]=p, | ||
[i]={oc,1237025389,vc}, | [i]={oc,1237025389,vc}, | ||
[j]={{z, | [j]={{z,14527,"// C99 6.5.16.1\nQualType Sema::CheckAssignmentOperands(Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType, BinaryOperatorKind Opc) {\n if (CompoundType.isNull()) {\n if (UnaryOperator *UO = dyn_cast<UnaryOperator>(RHSCheck)) {\n if ((UO->getOpcode() == UO_Plus || UO->getOpcode() == UO_Minus) && Loc.isFileID() && UO->getOperatorLoc().isFileID() &&\n Diag(Loc, diag::warn_not_compound_assign) << (UO->getOpcode() == UO_Plus ? \"+\" : \"-\") << SourceRange(UO->getOperatorLoc(), UO->getOperatorLoc());"}} | ||
}, | }, | ||
["warn_not_enough_argument"]={ | ["warn_not_enough_argument"]={ | ||
Line 756: | Line 756: | ||
[e]=p, | [e]=p, | ||
[i]={"9e87721d47fd",1242256850,"Look for and diagnose missing sentinel argument on message"}, | [i]={"9e87721d47fd",1242256850,"Look for and diagnose missing sentinel argument on message"}, | ||
[j]={{z, | [j]={{z,473,"/// DiagnoseSentinelCalls - This routine checks whether a call or\n/// message-send is to a declaration with the sentinel attribute, and\n/// if so, it checks that the requirements of the sentinel are\n/// satisfied.\nvoid Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, ArrayRef<Expr *> Args) {\n // If there aren\'t enough arguments for all the formal parameters,\n // the sentinel, and the args after the sentinel, complain.\n if (Args.size() < numFormalParams + numArgsAfterSentinel + 1) {\n Diag(Loc, diag::warn_not_enough_argument) << D->getDeclName();"}} | ||
}, | }, | ||
["warn_not_in_enum"]={ | ["warn_not_in_enum"]={ | ||
Line 770: | Line 770: | ||
[e]=p, | [e]=p, | ||
[i]={"d3dfbd6f4fd7",1274152761,"If a switch condition is constant, don\'t warn about missing enum cases."}, | [i]={"d3dfbd6f4fd7",1274152761,"If a switch condition is constant, don\'t warn about missing enum cases."}, | ||
[j]={{R, | [j]={{R,1526,"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 // See which case values aren\'t in enum.\n for (CaseValsTy::const_iterator CI = CaseVals.begin(); CI != CaseVals.end(); CI++) {\n if (ShouldDiagnoseSwitchCaseNotInEnum(*this, ED, CaseExpr, EI, EIEnd, CI->first))\n Diag(CaseExpr->getExprLoc(), diag::warn_not_in_enum) << CondTypeBeforePromotion;"},{R,1537,"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 for (CaseRangesTy::const_iterator RI = CaseRanges.begin(); RI != CaseRanges.end(); RI++) {\n if (ShouldDiagnoseSwitchCaseNotInEnum(*this, ED, CaseExpr, EI, EIEnd, RI->first))\n Diag(CaseExpr->getExprLoc(), diag::warn_not_in_enum) << CondTypeBeforePromotion;"},{R,1547,"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 for (CaseRangesTy::const_iterator RI = CaseRanges.begin(); RI != CaseRanges.end(); RI++) {\n if (ShouldDiagnoseSwitchCaseNotInEnum(*this, ED, CaseExpr, EI, EIEnd, Hi))\n Diag(CaseExpr->getExprLoc(), diag::warn_not_in_enum) << CondTypeBeforePromotion;"}} | ||
}, | }, | ||
["warn_not_in_enum_assignment"]={ | ["warn_not_in_enum_assignment"]={ | ||
Line 785: | Line 785: | ||
[e]=p, | [e]=p, | ||
[i]={"1ba2733e2cde",1370526480,"Fix a crash with -Wassign-enum, where we didn\'t adjust the APInt type of the"}, | [i]={"1ba2733e2cde",1370526480,"Fix a crash with -Wassign-enum, where we didn\'t adjust the APInt type of the"}, | ||
[j]={{R, | [j]={{R,1633,"void Sema::DiagnoseAssignmentEnum(QualType DstType, QualType SrcType, Expr *SrcExpr) {\n if (Diags.isIgnored(diag::warn_not_in_enum_assignment, SrcExpr->getExprLoc()))"},{R,1654,"void Sema::DiagnoseAssignmentEnum(QualType DstType, QualType SrcType, Expr *SrcExpr) {\n if (const EnumType *ET = DstType->getAs<EnumType>())\n if (!Context.hasSameUnqualifiedType(SrcType, DstType) && SrcType->isIntegerType()) {\n if (!SrcExpr->isTypeDependent() && !SrcExpr->isValueDependent() && SrcExpr->isIntegerConstantExpr(Context)) {\n if (ED->hasAttr<FlagEnumAttr>()) {\n if (!IsValueInFlagEnum(ED, RhsVal, true))\n Diag(SrcExpr->getExprLoc(), diag::warn_not_in_enum_assignment) << DstType.getUnqualifiedType();"},{R,1679,"void Sema::DiagnoseAssignmentEnum(QualType DstType, QualType SrcType, Expr *SrcExpr) {\n if (const EnumType *ET = DstType->getAs<EnumType>())\n if (!Context.hasSameUnqualifiedType(SrcType, DstType) && SrcType->isIntegerType()) {\n if (!SrcExpr->isTypeDependent() && !SrcExpr->isValueDependent() && SrcExpr->isIntegerConstantExpr(Context)) {\n if (ED->hasAttr<FlagEnumAttr>()) {\n } else {\n if (EI == EIend || EI->first != RhsVal) {\n Diag(SrcExpr->getExprLoc(), diag::warn_not_in_enum_assignment) << DstType.getUnqualifiedType();"}} | ||
}, | }, | ||
["warn_not_xl_compatible"]={ | ["warn_not_xl_compatible"]={ | ||
Line 799: | Line 799: | ||
[e]=p, | [e]=p, | ||
[i]={Tb,1615397021,Sb}, | [i]={Tb,1615397021,Sb}, | ||
[j]={{x, | [j]={{x,6602,"// 16 byte ByVal alignment not due to a vector member is not honoured by XL\n// on AIX. Emit a warning here that users are generating binary incompatible\n// code to be safe.\n// Here we try to get information about the alignment of the struct member\n// from the struct passed to the caller function. We only warn when the struct\n// is passed byval, hence the series of checks and early returns if we are a not\n// passing a struct byval.\nvoid Sema::checkAIXMemberAlignment(SourceLocation Loc, const Expr *Arg) {\n for (const FieldDecl *FD : ArgType->castAs<RecordType>()->getDecl()->fields()) {\n if (const auto *AA = FD->getAttr<AlignedAttr>()) {\n if (Alignment.getQuantity() == 16) {\n Diag(FD->getLocation(), diag::warn_not_xl_compatible) << FD;"}} | ||
}, | }, | ||
["warn_nothrow_attribute_ignored"]={ | ["warn_nothrow_attribute_ignored"]={ | ||
Line 813: | Line 813: | ||
[e]=p, | [e]=p, | ||
[i]={"d02f4a1043c0",1559237514,"Add Attribute NoThrow as an Exception Specifier Type"}, | [i]={"d02f4a1043c0",1559237514,"Add Attribute NoThrow as an Exception Specifier Type"}, | ||
[j]={{Q, | [j]={{Q,7941,"/// Process an individual function attribute. Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n if (attr.getKind() == ParsedAttr::AT_NoThrow) {\n // MSVC ignores nothrow if it is in conflict with an explicit exception\n // specification.\n if (Proto->hasExceptionSpec()) {\n case EST_NoexceptFalse:\n S.Diag(attr.getLoc(), diag::warn_nothrow_attribute_ignored);"}} | ||
}, | }, | ||
["warn_npot_ms_struct"]={ | ["warn_npot_ms_struct"]={ | ||
Line 827: | Line 827: | ||
[e]=w, | [e]=w, | ||
[i]={"87c2ad29ee4e",1519935777,"[RecordLayout] Only assert that fundamental type sizes are power of two on MSVC"}, | [i]={"87c2ad29ee4e",1519935777,"[RecordLayout] Only assert that fundamental type sizes are power of two on MSVC"}, | ||
[j]={{ac, | [j]={{ac,1958,"void ItaniumRecordLayoutBuilder::LayoutField(const FieldDecl *D, bool InsertExtraPadding) {\n if (D->getType()->isIncompleteArrayType()) {\n } else {\n if (IsMsStruct) {\n if (const BuiltinType *BTy = T->getAs<BuiltinType>()) {\n if (!llvm::isPowerOf2_64(TypeSize.getQuantity())) {\n // Since the combination of -mms-bitfields together with structs\n // like max_align_t (which contains a long double) for mingw is\n // quite common (and GCC handles it silently), just handle it\n // silently there. For other targets that have ms_struct enabled\n // (most probably via a pragma or attribute), trigger a diagnostic\n // that defaults to an error.\n if (!Context.getTargetInfo().getTriple().isWindowsGNUEnvironment())\n Diag(D->getLocation(), diag::warn_npot_ms_struct);"}} | ||
}, | }, | ||
["warn_ns_attribute_wrong_parameter_type"]={ | ["warn_ns_attribute_wrong_parameter_type"]={ | ||
Line 841: | Line 841: | ||
[e]=p, | [e]=p, | ||
[i]={"ed433937c2b8",1295926318,"Add the ns_consumes_self, ns_consumed, cf_consumed, and ns_returns_autoreleased"}, | [i]={"ed433937c2b8",1295926318,"Add the ns_consumes_self, ns_consumed, cf_consumed, and ns_returns_autoreleased"}, | ||
[j]={{B, | [j]={{B,5898,"void Sema::AddXConsumedAttr(Decl *D, const AttributeCommonInfo &CI, RetainOwnershipKind K, bool IsTemplateInstantiation) {\n case RetainOwnershipKind::OS:\n handleSimpleAttributeOrDiagnose<OSConsumedAttr>(*this, VD, CI, isValidSubjectOfOSAttribute(VD->getType()), diag::warn_ns_attribute_wrong_parameter_type,"},{B,5911,"void Sema::AddXConsumedAttr(Decl *D, const AttributeCommonInfo &CI, RetainOwnershipKind K, bool IsTemplateInstantiation) {\n case RetainOwnershipKind::NS:\n handleSimpleAttributeOrDiagnose<NSConsumedAttr>(*this, VD, CI, isValidSubjectOfNSAttribute(VD->getType()),\n ((IsTemplateInstantiation && getLangOpts().ObjCAutoRefCount) ? diag::err_ns_attribute_wrong_parameter_type : diag::warn_ns_attribute_wrong_parameter_type),"},{B,5917,"void Sema::AddXConsumedAttr(Decl *D, const AttributeCommonInfo &CI, RetainOwnershipKind K, bool IsTemplateInstantiation) {\n case RetainOwnershipKind::CF:\n handleSimpleAttributeOrDiagnose<CFConsumedAttr>(*this, VD, CI, isValidSubjectOfCFAttribute(VD->getType()), diag::warn_ns_attribute_wrong_parameter_type,"},{B,5989,"static void handleXReturnsXRetainedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (const auto *MD = dyn_cast<ObjCMethodDecl>(D)) {\n } else if (S.getLangOpts().ObjCAutoRefCount && hasDeclarator(D) && (AL.getKind() == ParsedAttr::AT_NSReturnsRetained)) {\n } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n } else if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n } else if (const auto *Param = dyn_cast<ParmVarDecl>(D)) {\n if (ReturnType.isNull()) {\n S.Diag(D->getBeginLoc(), diag::warn_ns_attribute_wrong_parameter_type) << AL << DiagID << AL.getRange();"},{B,6053,"static void handleXReturnsXRetainedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (!TypeOK) {\n if (isa<ParmVarDecl>(D)) {\n S.Diag(D->getBeginLoc(), diag::warn_ns_attribute_wrong_parameter_type) << AL << ParmDiagID << AL.getRange();"},{B,9091,"/// ProcessDeclAttribute - Apply the specific attribute to the specified decl if\n/// the attribute applies to decls. If the attribute is a type attribute, just\n/// silently ignore it if a GNU attribute.\nstatic void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, const Sema::ProcessDeclAttributeOptions &Options) {\n case ParsedAttr::AT_OSReturnsRetainedOnZero:\n handleSimpleAttributeOrDiagnose<OSReturnsRetainedOnZeroAttr>(S, D, AL, isValidOSObjectOutParameter(D), diag::warn_ns_attribute_wrong_parameter_type,"},{B,9097,"/// ProcessDeclAttribute - Apply the specific attribute to the specified decl if\n/// the attribute applies to decls. If the attribute is a type attribute, just\n/// silently ignore it if a GNU attribute.\nstatic void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, const Sema::ProcessDeclAttributeOptions &Options) {\n case ParsedAttr::AT_OSReturnsRetainedOnNonZero:\n handleSimpleAttributeOrDiagnose<OSReturnsRetainedOnNonZeroAttr>(S, D, AL, isValidOSObjectOutParameter(D), diag::warn_ns_attribute_wrong_parameter_type,"}} | ||
}, | }, | ||
["warn_ns_attribute_wrong_return_type"]={ | ["warn_ns_attribute_wrong_return_type"]={ | ||
Line 855: | Line 855: | ||
[e]=p, | [e]=p, | ||
[i]={"3b204e4c2e06",1242248852,"Add some basic type checking for attributes ns_returns_retained and"}, | [i]={"3b204e4c2e06",1242248852,"Add some basic type checking for attributes ns_returns_retained and"}, | ||
[j]={{B, | [j]={{B,5952,"bool Sema::checkNSReturnsRetainedReturnType(SourceLocation Loc, QualType QT) {\n Diag(Loc, diag::warn_ns_attribute_wrong_return_type) << \"\'ns_returns_retained\'\" << 0 << 0;"},{B,6066,"static void handleXReturnsXRetainedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (!TypeOK) {\n if (isa<ParmVarDecl>(D)) {\n } else {\n S.Diag(D->getBeginLoc(), diag::warn_ns_attribute_wrong_return_type) << AL << SubjectKind << Cf << AL.getRange();"},{B,6113,"static void handleObjCReturnsInnerPointerAttr(Sema &S, Decl *D, const ParsedAttr &Attrs) {\n if (!resultType->isReferenceType() && (!resultType->isPointerType() || resultType->isObjCRetainableType())) {\n S.Diag(D->getBeginLoc(), diag::warn_ns_attribute_wrong_return_type) << SourceRange(loc) << Attrs << (isa<ObjCMethodDecl>(D) ? EP_ObjCMethod : EP_ObjCProperty) << /*non-retainable pointer*/ 2;"}} | ||
}, | }, | ||
["warn_nsconsumed_attribute_mismatch"]={ | ["warn_nsconsumed_attribute_mismatch"]={ | ||
Line 869: | Line 869: | ||
[e]=p, | [e]=p, | ||
[i]={"7d85b8f6f651",1505885958,"[Sema][ObjC] Warn about mismatches in attributes between overriding and"}, | [i]={"7d85b8f6f651",1505885958,"[Sema][ObjC] Warn about mismatches in attributes between overriding and"}, | ||
[j]={{N, | [j]={{N,216,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n for (ObjCMethodDecl::param_iterator ni = NewMethod->param_begin(), ne = NewMethod->param_end(); ni != ne && oi != oe; ++ni, ++oi) {\n if (newDecl->hasAttr<NSConsumedAttr>() != oldDecl->hasAttr<NSConsumedAttr>()) {\n Diag(newDecl->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsconsumed_attribute_mismatch : diag::warn_nsconsumed_attribute_mismatch);"}} | ||
}, | }, | ||
["warn_nsdictionary_duplicate_key"]={ | ["warn_nsdictionary_duplicate_key"]={ | ||
Line 883: | Line 883: | ||
[e]=p, | [e]=p, | ||
[i]={cc,1576908663,bc}, | [i]={cc,1576908663,bc}, | ||
[j]={{Z, | [j]={{Z,922,"/// Check for duplicate keys in an ObjC dictionary literal. For instance:\n/// NSDictionary *nd = @{ @\"foo\" : @\"bar\", @\"foo\" : @\"baz\" };\nstatic void CheckObjCDictionaryLiteralDuplicateKeys(Sema &S, ObjCDictionaryLiteral *Literal) {\n auto checkOneKey = [&](auto &Map, const auto &Key, SourceLocation Loc) {\n if (!Pair.second) {\n S.Diag(Loc, diag::warn_nsdictionary_duplicate_key);"}} | ||
}, | }, | ||
["warn_nsobject_attribute"]={ | ["warn_nsobject_attribute"]={ | ||
Line 897: | Line 897: | ||
[e]=p, | [e]=p, | ||
[i]={"a45495a9f224",1322531320,"objc: warn if NSObject attribute appears other than in a typedef."}, | [i]={"a45495a9f224",1322531320,"objc: warn if NSObject attribute appears other than in a typedef."}, | ||
[j]={{B, | [j]={{B,3012,"static void handleObjCNSObject(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n } else {\n S.Diag(D->getLocation(), diag::warn_nsobject_attribute);"}} | ||
}, | }, | ||
["warn_nsreturns_retained_attribute_mismatch"]={ | ["warn_nsreturns_retained_attribute_mismatch"]={ | ||
Line 911: | Line 911: | ||
[e]=p, | [e]=p, | ||
[i]={"7d85b8f6f651",1505885958,"[Sema][ObjC] Warn about mismatches in attributes between overriding and"}, | [i]={"7d85b8f6f651",1505885958,"[Sema][ObjC] Warn about mismatches in attributes between overriding and"}, | ||
[j]={{N, | [j]={{N,190,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n if ((NewMethod->hasAttr<NSReturnsRetainedAttr>() != Overridden->hasAttr<NSReturnsRetainedAttr>())) {\n Diag(NewMethod->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsreturns_retained_attribute_mismatch : diag::warn_nsreturns_retained_attribute_mismatch) << 1;"},{N,199,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n if ((NewMethod->hasAttr<NSReturnsNotRetainedAttr>() != Overridden->hasAttr<NSReturnsNotRetainedAttr>())) {\n Diag(NewMethod->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsreturns_retained_attribute_mismatch : diag::warn_nsreturns_retained_attribute_mismatch) << 0;"}} | ||
}, | }, | ||
["warn_null_arg"]={ | ["warn_null_arg"]={ | ||
Line 925: | Line 925: | ||
[e]=db, | [e]=db, | ||
[i]={"cd1a88da02c2",1242931731,"Check on null arguments in the presense of nonnull attribute."}, | [i]={"cd1a88da02c2",1242931731,"Check on null arguments in the presense of nonnull attribute."}, | ||
[j]={{x, | [j]={{x,6415,"static void CheckNonNullArgument(Sema &S, const Expr *ArgExpr, SourceLocation CallSiteLoc) {\n if (CheckNonNullExpr(S, ArgExpr))\n S.DiagRuntimeBehavior(CallSiteLoc, ArgExpr, S.PDiag(diag::warn_null_arg) << ArgExpr->getSourceRange());"},{z,6700,"/// CheckStaticArrayArgument - If the given argument corresponds to a static\n/// array parameter, check that it is non-null, and that if it is formed by\n/// array-to-pointer decay, the underlying array is sufficiently large.\n///\n/// C99 6.7.5.3p7: If the keyword static also appears within the [ and ] of the\n/// array type derivation, then for each call to the function, the value of the\n/// corresponding actual argument shall provide access to the first element of\n/// an array with at least as many elements as specified by the size expression.\nvoid Sema::CheckStaticArrayArgument(SourceLocation CallLoc, ParmVarDecl *Param, const Expr *ArgExpr) {\n if (ArgExpr->isNullPointerConstant(Context, Expr::NPC_NeverValueDependent)) {\n Diag(CallLoc, diag::warn_null_arg) << ArgExpr->getSourceRange();"}} | ||
}, | }, | ||
["warn_null_in_arithmetic_operation"]={ | ["warn_null_in_arithmetic_operation"]={ | ||
Line 939: | Line 939: | ||
[e]=p, | [e]=p, | ||
[i]={"701fb36b9515",1308260216,"Add a new warning when a NULL constant is used in arithmetic operations. The warning will fire on c..."}, | [i]={"701fb36b9515",1308260216,"Add a new warning when a NULL constant is used in arithmetic operations. The warning will fire on c..."}, | ||
[j]={{z, | [j]={{z,11284,"// checkArithmeticNull - Detect when a NULL constant is used improperly in an\n// expression. These are mainly cases where the null pointer is used as an\n// integer instead of a pointer.\nstatic void checkArithmeticNull(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompare) {\n // Comparison operations would not make sense with a null pointer no matter\n // what the other expression is.\n if (!IsCompare) {\n S.Diag(Loc, diag::warn_null_in_arithmetic_operation) << (LHSNull ? LHS.get()->getSourceRange() : SourceRange()) << (RHSNull ? RHS.get()->getSourceRange() : SourceRange());"}} | ||
}, | }, | ||
["warn_null_in_comparison_operation"]={ | ["warn_null_in_comparison_operation"]={ | ||
Line 953: | Line 953: | ||
[e]=p, | [e]=p, | ||
[i]={"aee9e76722d0",1313102301,"The current warning in -Wnull-arithmetic for comparisons between NULL and non-pointers is not very h..."}, | [i]={"aee9e76722d0",1313102301,"The current warning in -Wnull-arithmetic for comparisons between NULL and non-pointers is not very h..."}, | ||
[j]={{z, | [j]={{z,11312,"// checkArithmeticNull - Detect when a NULL constant is used improperly in an\n// expression. These are mainly cases where the null pointer is used as an\n// integer instead of a pointer.\nstatic void checkArithmeticNull(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompare) {\n S.Diag(Loc, diag::warn_null_in_comparison_operation) << LHSNull /* LHS is NULL */ << NonNullType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}} | ||
}, | }, | ||
["warn_null_pointer_compare"]={ | ["warn_null_pointer_compare"]={ | ||
Line 967: | Line 967: | ||
[e]=p, | [e]=p, | ||
[i]={"3bb8b56a5d90",1393382166,"PR16074, implement warnings to catch pointer to boolean true and pointer to"}, | [i]={"3bb8b56a5d90",1393382166,"PR16074, implement warnings to catch pointer to boolean true and pointer to"}, | ||
[j]={{x, | [j]={{x,15570,"/// 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_null_resettable_setter"]={ | ["warn_null_resettable_setter"]={ | ||
Line 981: | Line 981: | ||
[e]=Ib, | [e]=Ib, | ||
[i]={"849ebc269fe1",1434737686,"Implement the \'null_resettable\' attribute for Objective-C properties."}, | [i]={"849ebc269fe1",1434737686,"Implement the \'null_resettable\' attribute for Objective-C properties."}, | ||
[j]={{S, | [j]={{S,2155,"void Sema::diagnoseNullResettableSynthesizedSetters(const ObjCImplDecl *impDecl) {\n for (const auto *propertyImpl : impDecl->property_impls()) {\n // Warn about null_resettable properties with synthesized setters,\n // because the setter won\'t properly handle nil.\n if (propertyImpl->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize && (property->getPropertyAttributes() & ObjCPropertyAttribute::kind_null_resettable) && property->getGetterMethodDecl() && property->getSetterMethodDecl()) {\n if ((!getterImpl || getterImpl->isSynthesizedAccessorStub()) && (!setterImpl || setterImpl->isSynthesizedAccessorStub())) {\n Diag(loc, diag::warn_null_resettable_setter) << setterImpl->getSelector() << property->getDeclName();"}} | ||
}, | }, | ||
["warn_null_ret"]={ | ["warn_null_ret"]={ | ||
Line 995: | Line 995: | ||
[e]=db, | [e]=db, | ||
[i]={"ef9e7f80598c",1390371028,"Add basic checking for returning null from functions/methods marked \'returns_nonnull\'."}, | [i]={"ef9e7f80598c",1390371028,"Add basic checking for returning null from functions/methods marked \'returns_nonnull\'."}, | ||
[j]={{x, | [j]={{x,12944,"void Sema::CheckReturnValExpr(Expr *RetValExp, QualType lhsType, SourceLocation ReturnLoc, bool isObjCMethod, const AttrVec *Attrs, const FunctionDecl *FD) {\n // Check if the return value is null but should not be.\n if (((Attrs && hasSpecificAttr<ReturnsNonNullAttr>(*Attrs)) || (!isObjCMethod && isNonNullType(lhsType))) && CheckNonNullExpr(*this, RetValExp))\n Diag(ReturnLoc, diag::warn_null_ret) << (isObjCMethod ? 1 : 0) << RetValExp->getSourceRange();"}} | ||
}, | }, | ||
["warn_null_statement"]={ | ["warn_null_statement"]={ | ||
Line 1,010: | Line 1,010: | ||
[e]=A, | [e]=A, | ||
[i]={"377748fd7bbf",1542740345,"[clang][Parse] Diagnose useless null statements / empty init-statements"}, | [i]={"377748fd7bbf",1542740345,"[clang][Parse] Diagnose useless null statements / empty init-statements"}, | ||
[j]={{"clang/lib/Parse/ParseStmt.cpp", | [j]={{"clang/lib/Parse/ParseStmt.cpp",1109,"/// Consume any extra semi-colons resulting in null statements,\n/// returning true if any tok::semi were consumed.\nbool Parser::ConsumeNullStmt(StmtVector &Stmts) {\n Diag(StartLoc, diag::warn_null_statement) << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));"}} | ||
}, | }, | ||
["warn_nullability_declspec"]={ | ["warn_nullability_declspec"]={ | ||
Line 1,024: | Line 1,024: | ||
[e]=Ib, | [e]=Ib, | ||
[i]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++."}, | [i]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++."}, | ||
[j]={{Q, | [j]={{Q,7662,"/// Distribute a nullability type attribute that cannot be applied to\n/// the type specifier to a pointer, block pointer, or member pointer\n/// declarator, complaining if necessary.\n///\n/// \\returns true if the nullability annotation was distributed, false\n/// otherwise.\nstatic bool distributeNullabilityTypeAttr(TypeProcessingState &state, QualType type, ParsedAttr &attr) {\n /// Attempt to move the attribute to the specified chunk.\n auto moveToChunk = [&](DeclaratorChunk &chunk, bool inFunction) -> bool {\n auto diag = state.getSema().Diag(attr.getLoc(), diag::warn_nullability_declspec) << DiagNullabilityKind(mapNullabilityAttrKind(attr.getKind()), attr.isContextSensitiveKeywordAttribute()) << type << static_cast<unsigned>(pointerKind);"}} | ||
}, | }, | ||
["warn_nullability_duplicate"]={ | ["warn_nullability_duplicate"]={ | ||
Line 1,038: | Line 1,038: | ||
[e]=Ib, | [e]=Ib, | ||
[i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."}, | [i]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."}, | ||
[j]={{"clang/lib/Parse/ParseObjc.cpp", | [j]={{"clang/lib/Parse/ParseObjc.cpp",848,"/// Diagnose redundant or conflicting nullability information.\nstatic void diagnoseRedundantPropertyNullability(Parser &P, ObjCDeclSpec &DS, NullabilityKind nullability, SourceLocation nullabilityLoc) {\n if (DS.getNullability() == nullability) {\n P.Diag(nullabilityLoc, diag::warn_nullability_duplicate) << DiagNullabilityKind(nullability, true) << SourceRange(DS.getNullabilityLoc());"},{Q,7493,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n while (auto attributed = dyn_cast<AttributedType>(desugared.getTypePtr())) {\n // Check whether there is already a null\n if (auto existingNullability = attributed->getImmediateNullability()) {\n // Duplicated nullability.\n if (nullability == *existingNullability) {\n S.Diag(nullabilityLoc, diag::warn_nullability_duplicate) << DiagNullabilityKind(nullability, isContextSensitive) << FixItHint::CreateRemoval(nullabilityLoc);"}} | ||
}, | }, | ||
["warn_nullability_inferred_on_nested_type"]={ | ["warn_nullability_inferred_on_nested_type"]={ | ||
Line 1,052: | Line 1,052: | ||
[e]=Ib, | [e]=Ib, | ||
[i]={"3b917fe019ff",1478820510,"Warn when \'assume_nonnull\' infers nullability within an array."}, | [i]={"3b917fe019ff",1478820510,"Warn when \'assume_nonnull\' infers nullability within an array."}, | ||
[j]={{Q, | [j]={{Q,4946,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n // Local function that checks the nullability for a given pointer declarator.\n // Returns true if _Nonnull was inferred.\n auto inferPointerNullability = [&](SimplePointerKind pointerKind, SourceLocation pointerLoc, SourceLocation pointerEndLoc, ParsedAttributesView &attrs, AttributePool &Pool) -> ParsedAttr * {\n // If we\'re supposed to infer nullability, do so now.\n if (inferNullability && !inferNullabilityInnerOnlyComplete) {\n if (pointerLoc.isValid() && complainAboutInferringWithinChunk != PointerWrappingDeclaratorKind::None) {\n auto Diag = S.Diag(pointerLoc, diag::warn_nullability_inferred_on_nested_type);"}} | ||
}, | }, | ||
["warn_nullability_lost"]={ | ["warn_nullability_lost"]={ | ||
Line 1,067: | Line 1,067: | ||
[e]=Ib, | [e]=Ib, | ||
[i]={"b4866e85e5ff",1434737599,"Diagnose unsafe uses of nil and __nonnull pointers."}, | [i]={"b4866e85e5ff",1434737599,"Diagnose unsafe uses of nil and __nonnull pointers."}, | ||
[j]={{V, | [j]={{V,585,"void Sema::diagnoseNullableToNonnullConversion(QualType DstType, QualType SrcType, SourceLocation Loc) {\n Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType;"}} | ||
}, | }, | ||
["warn_nullability_missing"]={ | ["warn_nullability_missing"]={ | ||
Line 1,081: | Line 1,081: | ||
[e]=Ib, | [e]=Ib, | ||
[i]={"bec595a64121",1434738465,"Check for consistent use of nullability type specifiers in a header."}, | [i]={"bec595a64121",1434738465,"Check for consistent use of nullability type specifiers in a header."}, | ||
[j]={{Q, | [j]={{Q,4467,"static void emitNullabilityConsistencyWarning(Sema &S, SimplePointerKind PointerKind, SourceLocation PointerLoc, SourceLocation PointerEndLoc) {\n if (PointerKind == SimplePointerKind::Array) {\n } else {\n S.Diag(PointerLoc, diag::warn_nullability_missing) << static_cast<unsigned>(PointerKind);"},{Q,4510,"/// Complains about missing nullability if the file containing \\p pointerLoc\n/// has other uses of nullability (either the keywords or the \\c assume_nonnull\n/// pragma).\n///\n/// If the file has \\e not seen other uses of nullability, this particular\n/// pointer is saved for possible later diagnosis. See recordNullabilitySeen().\nstatic void checkNullabilityConsistency(Sema &S, SimplePointerKind pointerKind, SourceLocation pointerLoc, SourceLocation pointerEndLoc = SourceLocation()) {\n if (!fileNullability.SawTypeNullability) {\n if (pointerKind == SimplePointerKind::Array)\n else\n diagKind = diag::warn_nullability_missing;"}} | ||
}, | }, | ||
["warn_nullability_missing_array"]={ | ["warn_nullability_missing_array"]={ | ||
Line 1,095: | Line 1,095: | ||
[e]=Ib, | [e]=Ib, | ||
[i]={"f85a9b06b826",1478820506,"Add -Wnullability-completeness-on-arrays."}, | [i]={"f85a9b06b826",1478820506,"Add -Wnullability-completeness-on-arrays."}, | ||
[j]={{Q, | [j]={{Q,4465,"static void emitNullabilityConsistencyWarning(Sema &S, SimplePointerKind PointerKind, SourceLocation PointerLoc, SourceLocation PointerEndLoc) {\n if (PointerKind == SimplePointerKind::Array) {\n S.Diag(PointerLoc, diag::warn_nullability_missing_array);"},{Q,4508,"/// Complains about missing nullability if the file containing \\p pointerLoc\n/// has other uses of nullability (either the keywords or the \\c assume_nonnull\n/// pragma).\n///\n/// If the file has \\e not seen other uses of nullability, this particular\n/// pointer is saved for possible later diagnosis. See recordNullabilitySeen().\nstatic void checkNullabilityConsistency(Sema &S, SimplePointerKind pointerKind, SourceLocation pointerLoc, SourceLocation pointerEndLoc = SourceLocation()) {\n if (!fileNullability.SawTypeNullability) {\n if (pointerKind == SimplePointerKind::Array)\n diagKind = diag::warn_nullability_missing_array;"}} | ||
}, | }, | ||
["warn_objc_boxing_invalid_utf8_string"]={ | ["warn_objc_boxing_invalid_utf8_string"]={ | ||
Line 1,109: | Line 1,109: | ||
[e]=p, | [e]=p, | ||
[i]={"1488ee4bd541",1552020337,"[ObjC] Emit a boxed expression as a compile-time constant if the"}, | [i]={"1488ee4bd541",1552020337,"[ObjC] Emit a boxed expression as a compile-time constant if the"}, | ||
[j]={{Z, | [j]={{Z,552,"ExprResult Sema::BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr) {\n if (const PointerType *PT = ValueType->getAs<PointerType>()) {\n if (Context.hasSameUnqualifiedType(PointeeType, Context.CharTy)) {\n // The boxed expression can be emitted as a compile time constant if it is\n // a string literal whose character encoding is compatible with UTF-8.\n if (auto *CE = dyn_cast<ImplicitCastExpr>(ValueExpr))\n if (CE->getCastKind() == CK_ArrayToPointerDecay)\n if (auto *SL = dyn_cast<StringLiteral>(CE->getSubExpr()->IgnoreParens())) {\n Diag(SL->getBeginLoc(), diag::warn_objc_boxing_invalid_utf8_string) << NSStringPointer << SL->getSourceRange();"}} | ||
}, | }, | ||
["warn_objc_cdirective_format_string"]={ | ["warn_objc_cdirective_format_string"]={ | ||
Line 1,124: | Line 1,124: | ||
[e]=p, | [e]=p, | ||
[i]={"6485fe4b07b0",1410304254,"Objective-C. Under a special flag, -Wcstring-format-directive,"}, | [i]={"6485fe4b07b0",1410304254,"Objective-C. Under a special flag, -Wcstring-format-directive,"}, | ||
[j]={{x, | [j]={{x,6464,"/// Diagnose use of %s directive in an NSString which is being passed\n/// as formatting string to formatting method.\nstatic void DiagnoseCStringFormatDirectiveInCFAPI(Sema &S, const NamedDecl *FDecl, Expr **Args, unsigned NumArgs) {\n if (S.FormatStringHasSArg(FormatString)) {\n S.Diag(FormatExpr->getExprLoc(), diag::warn_objc_cdirective_format_string) << \"%s\" << 1 << 1;"},{Z,2571,"/// Diagnose use of %s directive in an NSString which is being passed\n/// as formatting string to formatting method.\nstatic void DiagnoseCStringFormatDirectiveInObjCAPI(Sema &S, ObjCMethodDecl *Method, Selector Sel, Expr **Args, unsigned NumArgs) {\n if (ObjCStringLiteral *OSL = dyn_cast<ObjCStringLiteral>(FormatExpr->IgnoreParenImpCasts())) {\n if (S.FormatStringHasSArg(FormatString)) {\n S.Diag(FormatExpr->getExprLoc(), diag::warn_objc_cdirective_format_string) << \"%s\" << 0 << 0;"}} | ||
}, | }, | ||
["warn_objc_circular_container"]={ | ["warn_objc_circular_container"]={ | ||
Line 1,138: | Line 1,138: | ||
[e]=p, | [e]=p, | ||
[i]={"e1d882c726b5",1425491752,"New ObjC warning: circular containers."}, | [i]={"e1d882c726b5",1425491752,"New ObjC warning: circular containers."}, | ||
[j]={{x, | [j]={{x,17627,"void Sema::CheckObjCCircularContainer(ObjCMessageExpr *Message) {\n if (Message->getReceiverKind() == ObjCMessageExpr::SuperInstance) {\n if (DeclRefExpr *ArgRE = dyn_cast<DeclRefExpr>(Arg)) {\n if (ArgRE->isObjCSelfExpr()) {\n Diag(Message->getSourceRange().getBegin(), diag::warn_objc_circular_container) << ArgRE->getDecl() << StringRef(\"\'super\'\");"},{x,17643,"void Sema::CheckObjCCircularContainer(ObjCMessageExpr *Message) {\n if (Message->getReceiverKind() == ObjCMessageExpr::SuperInstance) {\n } else {\n if (DeclRefExpr *ReceiverRE = dyn_cast<DeclRefExpr>(Receiver)) {\n if (DeclRefExpr *ArgRE = dyn_cast<DeclRefExpr>(Arg)) {\n if (ReceiverRE->getDecl() == ArgRE->getDecl()) {\n Diag(Message->getSourceRange().getBegin(), diag::warn_objc_circular_container) << Decl << Decl;"},{x,17657,"void Sema::CheckObjCCircularContainer(ObjCMessageExpr *Message) {\n if (Message->getReceiverKind() == ObjCMessageExpr::SuperInstance) {\n } else {\n if (DeclRefExpr *ReceiverRE = dyn_cast<DeclRefExpr>(Receiver)) {\n } else if (ObjCIvarRefExpr *IvarRE = dyn_cast<ObjCIvarRefExpr>(Receiver)) {\n if (ObjCIvarRefExpr *IvarArgRE = dyn_cast<ObjCIvarRefExpr>(Arg)) {\n if (IvarRE->getDecl() == IvarArgRE->getDecl()) {\n Diag(Message->getSourceRange().getBegin(), diag::warn_objc_circular_container) << Decl << Decl;"}} | ||
}, | }, | ||
["warn_objc_collection_literal_element"]={ | ["warn_objc_collection_literal_element"]={ | ||
Line 1,152: | Line 1,152: | ||
[e]=Rb, | [e]=Rb, | ||
[i]={"5054cb04673f",1436241502,"Warn when an Objective-C collection literal element is converted to an incompatible type."}, | [i]={"5054cb04673f",1436241502,"Warn when an Objective-C collection literal element is converted to an incompatible type."}, | ||
[j]={{x, | [j]={{x,14509,"/// Check a single element within a collection literal against the\n/// target element type.\nstatic void checkObjCCollectionLiteralElement(Sema &S, QualType TargetElementType, Expr *Element, unsigned ElementKind) {\n if (ElementType->getAs<ObjCObjectPointerType>() && S.CheckSingleAssignmentConstraints(TargetElementType, ElementResult, false, false) != Sema::Compatible) {\n S.Diag(Element->getBeginLoc(), diag::warn_objc_collection_literal_element) << ElementType << ElementKind << TargetElementType << Element->getSourceRange();"}} | ||
}, | }, | ||
["warn_objc_designated_init_missing_super_call"]={ | ["warn_objc_designated_init_missing_super_call"]={ | ||
Line 1,166: | Line 1,166: | ||
[e]=p, | [e]=p, | ||
[i]={"22bfa2c28bdb",1386105096,"[objc] Emit a warning when the implementation of a designated initializer does not chain to"}, | [i]={"22bfa2c28bdb",1386105096,"[objc] Emit a warning when the implementation of a designated initializer does not chain to"}, | ||
[j]={{G, | [j]={{G,15851,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n {\n if (FD) {\n } else if (ObjCMethodDecl *MD = dyn_cast_or_null<ObjCMethodDecl>(dcl)) {\n if (FSI->ObjCWarnForNoDesignatedInitChain) {\n // Don\'t issue this warning for unavailable inits or direct subclasses\n // of NSObject.\n if (!MD->isUnavailable() && !superIsNSObject(MD)) {\n Diag(MD->getLocation(), diag::warn_objc_designated_init_missing_super_call);"}} | ||
}, | }, | ||
["warn_objc_designated_init_non_designated_init_call"]={ | ["warn_objc_designated_init_non_designated_init_call"]={ | ||
Line 1,180: | Line 1,180: | ||
[e]=p, | [e]=p, | ||
[i]={"fcded9b93a96",1386105103,"[objc] Emit warnings when the implementation of a designated initializer calls on"}, | [i]={"fcded9b93a96",1386105103,"[objc] Emit warnings when the implementation of a designated initializer calls on"}, | ||
[j]={{Z, | [j]={{Z,3208,"/// 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 (DIFunctionScopeInfo && DIFunctionScopeInfo->ObjCIsDesignatedInit && (SuperLoc.isValid() || isSelfExpr(Receiver))) {\n if (!isDesignatedInitChain) {\n Diag(SelLoc, SuperLoc.isValid() ? diag::warn_objc_designated_init_non_designated_init_call : diag::warn_objc_designated_init_non_super_designated_init_call);"}} | ||
}, | }, | ||
["warn_objc_designated_init_non_super_designated_init_call"]={ | ["warn_objc_designated_init_non_super_designated_init_call"]={ | ||
Line 1,194: | Line 1,194: | ||
[e]=p, | [e]=p, | ||
[i]={"fcded9b93a96",1386105103,"[objc] Emit warnings when the implementation of a designated initializer calls on"}, | [i]={"fcded9b93a96",1386105103,"[objc] Emit warnings when the implementation of a designated initializer calls on"}, | ||
[j]={{Z, | [j]={{Z,3209,"/// 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 (DIFunctionScopeInfo && DIFunctionScopeInfo->ObjCIsDesignatedInit && (SuperLoc.isValid() || isSelfExpr(Receiver))) {\n if (!isDesignatedInitChain) {\n Diag(SelLoc, SuperLoc.isValid() ? diag::warn_objc_designated_init_non_designated_init_call : diag::warn_objc_designated_init_non_super_designated_init_call);"}} | ||
}, | }, | ||
["warn_objc_direct_ignored"]={ | ["warn_objc_direct_ignored"]={ | ||
Line 1,208: | Line 1,208: | ||
[e]=p, | [e]=p, | ||
[i]={Bc,1573050950,Cc}, | [i]={Bc,1573050950,Cc}, | ||
[j]={{B, | [j]={{B,2951,"static void handleObjCDirectAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (S.getLangOpts().ObjCRuntime.allowsDirectDispatch()) {\n } else {\n S.Diag(AL.getLoc(), diag::warn_objc_direct_ignored) << AL;"},{B,2960,"static void handleObjCDirectMembersAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (S.getLangOpts().ObjCRuntime.allowsDirectDispatch()) {\n } else {\n S.Diag(AL.getLoc(), diag::warn_objc_direct_ignored) << AL;"}} | ||
}, | }, | ||
["warn_objc_direct_property_ignored"]={ | ["warn_objc_direct_property_ignored"]={ | ||
Line 1,222: | Line 1,222: | ||
[e]=p, | [e]=p, | ||
[i]={Bc,1573050950,Cc}, | [i]={Bc,1573050950,Cc}, | ||
[j]={{S, | [j]={{S,714,"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 if ((Attributes & ObjCPropertyAttribute::kind_direct) || CDecl->hasAttr<ObjCDirectMembersAttr>()) {\n if (isa<ObjCProtocolDecl>(CDecl)) {\n } else if (getLangOpts().ObjCRuntime.allowsDirectDispatch()) {\n } else {\n Diag(PDecl->getLocation(), diag::warn_objc_direct_property_ignored) << PDecl->getDeclName();"}} | ||
}, | }, | ||
["warn_objc_implementation_missing_designated_init_override"]={ | ["warn_objc_implementation_missing_designated_init_override"]={ | ||
Line 1,236: | Line 1,236: | ||
[e]=p, | [e]=p, | ||
[i]={"db5ce0f71ec9",1386105114,"[objc] Add a warning when a class that provides a designated initializer, does not"}, | [i]={"db5ce0f71ec9",1386105114,"[objc] Add a warning when a class that provides a designated initializer, does not"}, | ||
[j]={{S, | [j]={{S,2350,"void Sema::DiagnoseMissingDesignatedInitOverrides(const ObjCImplementationDecl *ImplD, const ObjCInterfaceDecl *IFD) {\n for (SmallVector<const ObjCMethodDecl *, 8>::iterator I = DesignatedInits.begin(), E = DesignatedInits.end(); I != E; ++I) {\n if (!InitSelSet.count(MD->getSelector())) {\n if (!Ignore) {\n Diag(ImplD->getLocation(), diag::warn_objc_implementation_missing_designated_init_override) << MD->getSelector();"}} | ||
}, | }, | ||
["warn_objc_invalid_bridge"]={ | ["warn_objc_invalid_bridge"]={ | ||
Line 1,250: | Line 1,250: | ||
[e]=p, | [e]=p, | ||
[i]={"f07183ce9402",1384566325,"ObjetiveC ARC. Start diagnosing invalid toll free bridging."}, | [i]={"f07183ce9402",1384566325,"ObjetiveC ARC. Start diagnosing invalid toll free bridging."}, | ||
[j]={{Z, | [j]={{Z,4031,"template <typename TB> static bool CheckObjCBridgeNSCast(Sema &S, QualType castType, Expr *castExpr, bool &HadTheAttribute, bool warn) {\n while (const auto *TD = T->getAs<TypedefType>()) {\n if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {\n if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {\n if (S.LookupName(R, S.TUScope)) {\n if (Target && isa<ObjCInterfaceDecl>(Target)) {\n if (const ObjCObjectPointerType *InterfacePointerType = castType->getAsObjCInterfacePointerType()) {\n if (warn)\n S.Diag(castExpr->getBeginLoc(), diag::warn_objc_invalid_bridge) << T << Target->getName() << castType->getPointeeType();"},{Z,4043,"template <typename TB> static bool CheckObjCBridgeNSCast(Sema &S, QualType castType, Expr *castExpr, bool &HadTheAttribute, bool warn) {\n while (const auto *TD = T->getAs<TypedefType>()) {\n if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {\n if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {\n if (S.LookupName(R, S.TUScope)) {\n if (Target && isa<ObjCInterfaceDecl>(Target)) {\n if (const ObjCObjectPointerType *InterfacePointerType = castType->getAsObjCInterfacePointerType()) {\n } else if (castType->isObjCIdType() || (S.Context.ObjCObjectAdoptsQTypeProtocols(castType, ExprClass)))\n else {\n if (warn) {\n S.Diag(castExpr->getBeginLoc(), diag::warn_objc_invalid_bridge) << T << Target->getName() << castType;"}} | ||
}, | }, | ||
["warn_objc_invalid_bridge_to_cf"]={ | ["warn_objc_invalid_bridge_to_cf"]={ | ||
Line 1,264: | Line 1,264: | ||
[e]=p, | [e]=p, | ||
[i]={"8a0210e535c5",1384629392,"ObjectiveC ARC. Validate toll free bridge casting"}, | [i]={"8a0210e535c5",1384629392,"ObjectiveC ARC. Validate toll free bridge casting"}, | ||
[j]={{Z, | [j]={{Z,4096,"template <typename TB> static bool CheckObjCBridgeCFCast(Sema &S, QualType castType, Expr *castExpr, bool &HadTheAttribute, bool warn) {\n while (const auto *TD = T->getAs<TypedefType>()) {\n if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {\n if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {\n if (S.LookupName(R, S.TUScope)) {\n if (Target && isa<ObjCInterfaceDecl>(Target)) {\n if (const ObjCObjectPointerType *InterfacePointerType = castExpr->getType()->getAsObjCInterfacePointerType()) {\n if (warn) {\n S.Diag(castExpr->getBeginLoc(), diag::warn_objc_invalid_bridge_to_cf) << castExpr->getType()->getPointeeType() << T;"},{Z,4111,"template <typename TB> static bool CheckObjCBridgeCFCast(Sema &S, QualType castType, Expr *castExpr, bool &HadTheAttribute, bool warn) {\n while (const auto *TD = T->getAs<TypedefType>()) {\n if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {\n if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {\n if (S.LookupName(R, S.TUScope)) {\n if (Target && isa<ObjCInterfaceDecl>(Target)) {\n if (const ObjCObjectPointerType *InterfacePointerType = castExpr->getType()->getAsObjCInterfacePointerType()) {\n } else if (castExpr->getType()->isObjCIdType() || (S.Context.QIdProtocolsAdoptObjCObjectProtocols(castExpr->getType(), CastClass)))\n else {\n if (warn) {\n S.Diag(castExpr->getBeginLoc(), diag::warn_objc_invalid_bridge_to_cf) << castExpr->getType() << castType;"}} | ||
}, | }, | ||
["warn_objc_isa_assign"]={ | ["warn_objc_isa_assign"]={ | ||
Line 1,278: | Line 1,278: | ||
[e]=p, | [e]=p, | ||
[i]={"84510744d965",1364419165,"Objective-C: Issue more precise warning when user"}, | [i]={"84510744d965",1364419165,"Objective-C: Issue more precise warning when user"}, | ||
[j]={{z, | [j]={{z,613,"static void DiagnoseDirectIsaAccess(Sema &S, const ObjCIvarRefExpr *OIRE, SourceLocation AssignLoc, const Expr *RHS) {\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>())\n if (ObjCInterfaceDecl *IDecl = OTy->getInterface()) {\n if (!ClassDeclared->getSuperClass() && (*ClassDeclared->ivar_begin()) == IV) {\n if (RHS) {\n if (ObjectSetClass) {\n S.Diag(OIRE->getExprLoc(), diag::warn_objc_isa_assign) << FixItHint::CreateInsertion(OIRE->getBeginLoc(), \"object_setClass(\") << FixItHint::CreateReplacement(SourceRange(OIRE->getOpLoc(), AssignLoc), \",\") << FixItHint::CreateInsertion(RHSLocEnd, \")\");"},{z,621,"static void DiagnoseDirectIsaAccess(Sema &S, const ObjCIvarRefExpr *OIRE, SourceLocation AssignLoc, const Expr *RHS) {\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>())\n if (ObjCInterfaceDecl *IDecl = OTy->getInterface()) {\n if (!ClassDeclared->getSuperClass() && (*ClassDeclared->ivar_begin()) == IV) {\n if (RHS) {\n if (ObjectSetClass) {\n } else\n S.Diag(OIRE->getLocation(), diag::warn_objc_isa_assign);"},{z,15691,"/// CreateBuiltinBinOp - Creates a new built-in binary operation with\n/// operator @p Opc at location @c TokLoc. This routine only supports\n/// built-in operations; ActOnBinOp handles overloaded operators.\nExprResult Sema::CreateBuiltinBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr) {\n if (const ObjCIsaExpr *OISA = dyn_cast<ObjCIsaExpr>(LHS.get()->IgnoreParenCasts())) {\n if (ObjectSetClass && isa<ObjCIsaExpr>(LHS.get())) {\n Diag(LHS.get()->getExprLoc(), diag::warn_objc_isa_assign) << FixItHint::CreateInsertion(LHS.get()->getBeginLoc(), \"object_setClass(\") << FixItHint::CreateReplacement(SourceRange(OISA->getOpLoc(), OpLoc), \",\") << FixItHint::CreateInsertion(RHSLocEnd, \")\");"},{z,15760,"/// CreateBuiltinBinOp - Creates a new built-in binary operation with\n/// operator @p Opc at location @c TokLoc. This routine only supports\n/// built-in operations; ActOnBinOp handles overloaded operators.\nExprResult Sema::CreateBuiltinBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr) {\n if (const ObjCIsaExpr *OISA = dyn_cast<ObjCIsaExpr>(LHS.get()->IgnoreParenCasts())) {\n if (ObjectSetClass && isa<ObjCIsaExpr>(LHS.get())) {\n } else\n Diag(LHS.get()->getExprLoc(), diag::warn_objc_isa_assign);"}} | ||
}, | }, | ||
["warn_objc_isa_use"]={ | ["warn_objc_isa_use"]={ | ||
Line 1,292: | Line 1,292: | ||
[e]=p, | [e]=p, | ||
[i]={"28324b00666b",1326913736,"objc: deprecate direct usage of \'isa\' of objc objects"}, | [i]={"28324b00666b",1326913736,"objc: deprecate direct usage of \'isa\' of objc objects"}, | ||
[j]={{z, | [j]={{z,628,"static void DiagnoseDirectIsaAccess(Sema &S, const ObjCIvarRefExpr *OIRE, SourceLocation AssignLoc, const Expr *RHS) {\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>())\n if (ObjCInterfaceDecl *IDecl = OTy->getInterface()) {\n if (!ClassDeclared->getSuperClass() && (*ClassDeclared->ivar_begin()) == IV) {\n if (RHS) {\n } else {\n if (ObjectGetClass)\n S.Diag(OIRE->getExprLoc(), diag::warn_objc_isa_use) << FixItHint::CreateInsertion(OIRE->getBeginLoc(), \"object_getClass(\") << FixItHint::CreateReplacement(SourceRange(OIRE->getOpLoc(), OIRE->getEndLoc()), \")\");"},{z,634,"static void DiagnoseDirectIsaAccess(Sema &S, const ObjCIvarRefExpr *OIRE, SourceLocation AssignLoc, const Expr *RHS) {\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>())\n if (ObjCInterfaceDecl *IDecl = OTy->getInterface()) {\n if (!ClassDeclared->getSuperClass() && (*ClassDeclared->ivar_begin()) == IV) {\n if (RHS) {\n } else {\n if (ObjectGetClass)\n else\n S.Diag(OIRE->getLocation(), diag::warn_objc_isa_use);"},{z,692,"ExprResult Sema::DefaultLvalueConversion(Expr *E) {\n if (const ObjCIsaExpr *OISA = dyn_cast<ObjCIsaExpr>(E->IgnoreParenCasts())) {\n if (ObjectGetClass)\n Diag(E->getExprLoc(), diag::warn_objc_isa_use) << FixItHint::CreateInsertion(OISA->getBeginLoc(), \"object_getClass(\") << FixItHint::CreateReplacement(SourceRange(OISA->getOpLoc(), OISA->getIsaMemberLoc()), \")\");"},{z,697,"ExprResult Sema::DefaultLvalueConversion(Expr *E) {\n if (const ObjCIsaExpr *OISA = dyn_cast<ObjCIsaExpr>(E->IgnoreParenCasts())) {\n if (ObjectGetClass)\n else\n Diag(E->getExprLoc(), diag::warn_objc_isa_use);"}} | ||
}, | }, | ||
["warn_objc_literal_comparison"]={ | ["warn_objc_literal_comparison"]={ | ||
Line 1,306: | Line 1,306: | ||
[e]=p, | [e]=p, | ||
[i]={"f9198030015f",1341852884,"Downgrade the \"direct comparison\" error for ObjC literals to a warning."}, | [i]={"f9198030015f",1341852884,"Downgrade the \"direct comparison\" error for ObjC literals to a warning."}, | ||
[j]={{z, | [j]={{z,12513,"static void diagnoseObjCLiteralComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, BinaryOperator::Opcode Opc) {\n if (LiteralKind == Sema::LK_String)\n else\n S.Diag(Loc, diag::warn_objc_literal_comparison) << LiteralKind << Literal->getSourceRange();"}} | ||
}, | }, | ||
["warn_objc_missing_super_call"]={ | ["warn_objc_missing_super_call"]={ | ||
Line 1,320: | Line 1,320: | ||
[e]=p, | [e]=p, | ||
[i]={"b05417e1e136",1347295869,"objective-C: Improving diagnostocs for missing call to"}, | [i]={"b05417e1e136",1347295869,"objective-C: Improving diagnostocs for missing call to"}, | ||
[j]={{G, | [j]={{G,15826,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n {\n if (FD) {\n } else if (ObjCMethodDecl *MD = dyn_cast_or_null<ObjCMethodDecl>(dcl)) {\n if (FSI->ObjCShouldCallSuper) {\n Diag(MD->getEndLoc(), diag::warn_objc_missing_super_call) << MD->getSelector().getAsString();"}} | ||
}, | }, | ||
["warn_objc_pointer_cxx_catch_fragile"]={ | ["warn_objc_pointer_cxx_catch_fragile"]={ | ||
Line 1,334: | Line 1,334: | ||
[e]=p, | [e]=p, | ||
[i]={"0a3cfcc87f07",1308774111,"Alloa catching Objective-C id\'s being thrown with C++ throw"}, | [i]={"0a3cfcc87f07",1308774111,"Alloa catching Objective-C id\'s being thrown with C++ throw"}, | ||
[j]={{Y, | [j]={{Y,16678,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n // Only the non-fragile NeXT runtime currently supports C++ catches\n // of ObjC types, and no runtime supports catching ObjC types by value.\n if (!Invalid && getLangOpts().ObjC) {\n if (T->isObjCObjectType()) {\n } else if (T->isObjCObjectPointerType()) {\n // FIXME: should this be a test for macosx-fragile specifically?\n if (getLangOpts().ObjCRuntime.isFragile())\n Diag(Loc, diag::warn_objc_pointer_cxx_catch_fragile);"}} | ||
}, | }, | ||
["warn_objc_pointer_masking"]={ | ["warn_objc_pointer_masking"]={ | ||
Line 1,348: | Line 1,348: | ||
[e]=p, | [e]=p, | ||
[i]={"ebeabab9a9b6",1366670812,"Add a warning for Objective-C pointer introspection, which is solely the job of the Objective-C runt..."}, | [i]={"ebeabab9a9b6",1366670812,"Add a warning for Objective-C pointer introspection, which is solely the job of the Objective-C runt..."}, | ||
[j]={{z, | [j]={{z,15341,"/// Check if a bitwise-& is performed on an Objective-C pointer. This\n/// is usually indicative of introspection within the Objective-C pointer.\nstatic void checkObjCPointerIntrospection(Sema &S, ExprResult &L, ExprResult &R, SourceLocation OpLoc) {\n // This warning is deliberately made very specific to reduce false\n // positives with logic that uses \'&\' for hashing. This logic mainly\n // looks for code trying to introspect into tagged pointers, which\n // code should generally never do.\n if (ObjCPointerExpr && isa<IntegerLiteral>(OtherExpr->IgnoreParenCasts())) {\n unsigned Diag = diag::warn_objc_pointer_masking;"}} | ||
}, | }, | ||
["warn_objc_pointer_masking_performSelector"]={ | ["warn_objc_pointer_masking_performSelector"]={ | ||
Line 1,362: | Line 1,362: | ||
[e]=p, | [e]=p, | ||
[i]={"009d61dd16b4",1372109739,"Tweak -Wdeprecated-objc-pointer-introspection to have a subgroup for results of using -performSelect..."}, | [i]={"009d61dd16b4",1372109739,"Tweak -Wdeprecated-objc-pointer-introspection to have a subgroup for results of using -performSelect..."}, | ||
[j]={{z, | [j]={{z,15489,"/// Check if a bitwise-& is performed on an Objective-C pointer. This\n/// is usually indicative of introspection within the Objective-C pointer.\nstatic void checkObjCPointerIntrospection(Sema &S, ExprResult &L, ExprResult &R, SourceLocation OpLoc) {\n // This warning is deliberately made very specific to reduce false\n // positives with logic that uses \'&\' for hashing. This logic mainly\n // looks for code trying to introspect into tagged pointers, which\n // code should generally never do.\n if (ObjCPointerExpr && isa<IntegerLiteral>(OtherExpr->IgnoreParenCasts())) {\n // Special case messages to -performSelector and friends, which\n // can return non-pointer values boxed in a pointer value.\n // Some clients may wish to silence warnings in this subcase.\n if (const ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(Ex)) {\n if (SelArg0.startswith(\"performSelector\"))\n Diag = diag::warn_objc_pointer_masking_performSelector;"}} | ||
}, | }, | ||
["warn_objc_precise_lifetime_meaningless"]={ | ["warn_objc_precise_lifetime_meaningless"]={ | ||
Line 1,374: | Line 1,374: | ||
[e]=p, | [e]=p, | ||
[i]={"31168b077c36",1308178962,"Automatic Reference Counting."}, | [i]={"31168b077c36",1308178962,"Automatic Reference Counting."}, | ||
[j]={{B, | [j]={{B,6325,"static void handleObjCPreciseLifetimeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n case Qualifiers::OCL_Autoreleasing:\n S.Diag(AL.getLoc(), diag::warn_objc_precise_lifetime_meaningless) << (Lifetime == Qualifiers::OCL_Autoreleasing);"}} | ||
}, | }, | ||
["warn_objc_property_assign_on_object"]={ | ["warn_objc_property_assign_on_object"]={ | ||
Line 1,389: | Line 1,389: | ||
[e]=p, | [e]=p, | ||
[i]={"52a503d4f333",1536174120,"Add -Wobjc-property-assign-on-object-type."}, | [i]={"52a503d4f333",1536174120,"Add -Wobjc-property-assign-on-object-type."}, | ||
[j]={{S, | [j]={{S,2675,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n // Check for assign on object types.\n if ((Attributes & ObjCPropertyAttribute::kind_assign) && !(Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) && PropertyTy->isObjCRetainableType() && !PropertyTy->isObjCARCImplicitlyUnretainedType()) {\n Diag(Loc, diag::warn_objc_property_assign_on_object);"}} | ||
}, | }, | ||
["warn_objc_property_copy_missing_on_block"]={ | ["warn_objc_property_copy_missing_on_block"]={ | ||
Line 1,401: | Line 1,401: | ||
[e]=p, | [e]=p, | ||
[i]={"5580bdcaa2d4",1241737610,"Add a warning for a missing copy attribute on a property that is a"}, | [i]={"5580bdcaa2d4",1241737610,"Add a warning for a missing copy attribute on a property that is a"}, | ||
[j]={{S, | [j]={{S,2808,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n if (!(Attributes & ObjCPropertyAttribute::kind_copy) && !(Attributes & ObjCPropertyAttribute::kind_readonly) && getLangOpts().getGC() == LangOptions::GCOnly && PropertyTy->isBlockPointerType())\n Diag(Loc, diag::warn_objc_property_copy_missing_on_block);"}} | ||
}, | }, | ||
["warn_objc_property_default_assign_on_object"]={ | ["warn_objc_property_default_assign_on_object"]={ | ||
Line 1,415: | Line 1,415: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{S, | [j]={{S,2794,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n // Warn if user supplied no assignment attribute, property is\n // readwrite, and this is an object type.\n if (!getOwnershipRule(Attributes) && PropertyTy->isObjCRetainableType()) {\n if (Attributes & ObjCPropertyAttribute::kind_readonly) {\n } else if (getLangOpts().ObjCAutoRefCount) {\n } else if (PropertyTy->isObjCObjectPointerType()) {\n // In non-gc, non-arc mode, \'Class\' is treated as a \'void *\' no need to\n // issue any warning.\n if (isAnyClassTy && getLangOpts().getGC() == LangOptions::NonGC)\n else if (propertyInPrimaryClass) {\n // If non-gc code warn that this is likely inappropriate.\n if (getLangOpts().getGC() == LangOptions::NonGC)\n Diag(Loc, diag::warn_objc_property_default_assign_on_object);"}} | ||
}, | }, | ||
["warn_objc_property_no_assignment_attribute"]={ | ["warn_objc_property_no_assignment_attribute"]={ | ||
Line 1,429: | Line 1,429: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{S, | [j]={{S,2790,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n // Warn if user supplied no assignment attribute, property is\n // readwrite, and this is an object type.\n if (!getOwnershipRule(Attributes) && PropertyTy->isObjCRetainableType()) {\n if (Attributes & ObjCPropertyAttribute::kind_readonly) {\n } else if (getLangOpts().ObjCAutoRefCount) {\n } else if (PropertyTy->isObjCObjectPointerType()) {\n // In non-gc, non-arc mode, \'Class\' is treated as a \'void *\' no need to\n // issue any warning.\n if (isAnyClassTy && getLangOpts().getGC() == LangOptions::NonGC)\n else if (propertyInPrimaryClass) {\n // Don\'t issue warning on property with no life time in class\n // extension as it is inherited from property in primary class.\n // Skip this warning in gc-only mode.\n if (getLangOpts().getGC() != LangOptions::GCOnly)\n Diag(Loc, diag::warn_objc_property_no_assignment_attribute);"}} | ||
}, | }, | ||
["warn_objc_property_retain_of_block"]={ | ["warn_objc_property_retain_of_block"]={ | ||
Line 1,443: | Line 1,443: | ||
[e]=p, | [e]=p, | ||
[i]={"1723e17b78f8",1316023426,"objc-arc: warn when a \'retain\' block property is"}, | [i]={"1723e17b78f8",1316023426,"objc-arc: warn when a \'retain\' block property is"}, | ||
[j]={{S, | [j]={{S,2813,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n if (!(Attributes & ObjCPropertyAttribute::kind_copy) && !(Attributes & ObjCPropertyAttribute::kind_readonly) && getLangOpts().getGC() == LangOptions::GCOnly && PropertyTy->isBlockPointerType())\n else if ((Attributes & ObjCPropertyAttribute::kind_retain) && !(Attributes & ObjCPropertyAttribute::kind_readonly) && !(Attributes & ObjCPropertyAttribute::kind_strong) && PropertyTy->isBlockPointerType())\n Diag(Loc, diag::warn_objc_property_retain_of_block);"}} | ||
}, | }, | ||
["warn_objc_protocol_qualifier_missing_id"]={ | ["warn_objc_protocol_qualifier_missing_id"]={ | ||
Line 1,455: | Line 1,455: | ||
[e]=A, | [e]=A, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{"clang/lib/Parse/ParseObjc.cpp", | [j]={{"clang/lib/Parse/ParseObjc.cpp",1625,"TypeResult Parser::parseObjCProtocolQualifierType(SourceLocation &rAngleLoc) {\n if (result.isUsable()) {\n Diag(lAngleLoc, diag::warn_objc_protocol_qualifier_missing_id) << FixItHint::CreateInsertion(lAngleLoc, \"id\") << SourceRange(lAngleLoc, rAngleLoc);"}} | ||
}, | }, | ||
["warn_objc_readonly_property_has_setter"]={ | ["warn_objc_readonly_property_has_setter"]={ | ||
Line 1,469: | Line 1,469: | ||
[e]=p, | [e]=p, | ||
[i]={"3018b950936a",1320188536,"objc: warn if a readonly property has a setter attribute too."}, | [i]={"3018b950936a",1320188536,"objc: warn if a readonly property has a setter attribute too."}, | ||
[j]={{S, | [j]={{S,2817,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n if ((Attributes & ObjCPropertyAttribute::kind_readonly) && (Attributes & ObjCPropertyAttribute::kind_setter))\n Diag(Loc, diag::warn_objc_readonly_property_has_setter);"}} | ||
}, | }, | ||
["warn_objc_redundant_literal_use"]={ | ["warn_objc_redundant_literal_use"]={ | ||
Line 1,483: | Line 1,483: | ||
[e]="Cocoa API Issue", | [e]="Cocoa API Issue", | ||
[i]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"}, | [i]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"}, | ||
[j]={{Z, | [j]={{Z,2491,"static void checkCocoaAPI(Sema &S, const ObjCMessageExpr *Msg) { applyCocoaAPICheck(S, Msg, diag::warn_objc_redundant_literal_use, edit::rewriteObjCRedundantCallWithLiteral); }"}} | ||
}, | }, | ||
["warn_objc_redundant_qualified_class_type"]={ | ["warn_objc_redundant_qualified_class_type"]={ | ||
Line 1,497: | Line 1,497: | ||
[e]=w, | [e]=w, | ||
[i]={"10dc9d80cbb4",1436241508,"Warn when an intended Objective-C specialization was actually a useless protocol qualification."}, | [i]={"10dc9d80cbb4",1436241508,"Warn when an intended Objective-C specialization was actually a useless protocol qualification."}, | ||
[j]={{N, | [j]={{N,1528,"void Sema::actOnObjCTypeArgsOrProtocolQualifiers(Scope *S, ParsedType baseType, SourceLocation lAngleLoc, ArrayRef<IdentifierInfo *> identifiers, ArrayRef<SourceLocation> identifierLocs, SourceLocation rAngleLoc, SourceLocation &typeArgsLAngleLoc, SmallVectorImpl<ParsedType> &typeArgs, SourceLocation &typeArgsRAngleLoc, SourceLocation &protocolLAngleLoc, SmallVectorImpl<Decl *> &protocols, SourceLocation &protocolRAngleLoc, bool warnOnIncompleteProtocols) {\n auto resolvedAsProtocols = [&] {\n // All of the protocols listed also have type names, and at least\n // one is an Objective-C class name. Check whether all of the\n // protocol conformances are declared by the base class itself, in\n // which case we warn.\n if (allAreTypeNames && firstClassNameLoc.isValid()) {\n if (allProtocolsDeclared) {\n Diag(firstClassNameLoc, diag::warn_objc_redundant_qualified_class_type) << baseClass->getDeclName() << SourceRange(lAngleLoc, rAngleLoc) << FixItHint::CreateInsertion(getLocForEndOfToken(firstClassNameLoc), \" *\");"}} | ||
}, | }, | ||
["warn_objc_requires_super_protocol"]={ | ["warn_objc_requires_super_protocol"]={ | ||
Line 1,511: | Line 1,511: | ||
[e]=p, | [e]=p, | ||
[i]={"566fff0dac54",1347061583,"objective-C: introduce __attribute((objc_requires_super)) on method"}, | [i]={"566fff0dac54",1347061583,"objective-C: introduce __attribute((objc_requires_super)) on method"}, | ||
[j]={{B, | [j]={{B,6131,"static void handleObjCRequiresSuperAttr(Sema &S, Decl *D, const ParsedAttr &Attrs) {\n if (const auto *PDecl = dyn_cast_or_null<ObjCProtocolDecl>(DC)) {\n S.Diag(D->getBeginLoc(), diag::warn_objc_requires_super_protocol) << Attrs << 0;"},{B,6137,"static void handleObjCRequiresSuperAttr(Sema &S, Decl *D, const ParsedAttr &Attrs) {\n if (Method->getMethodFamily() == OMF_dealloc) {\n S.Diag(D->getBeginLoc(), diag::warn_objc_requires_super_protocol) << Attrs << 1;"}} | ||
}, | }, | ||
["warn_objc_root_class_missing"]={ | ["warn_objc_root_class_missing"]={ | ||
Line 1,525: | Line 1,525: | ||
[e]=p, | [e]=p, | ||
[i]={"acfbe9e1f228",1333735942,"Added a new attribute, objc_root_class, which informs the compiler when a root class is intentionall..."}, | [i]={"acfbe9e1f228",1333735942,"Added a new attribute, objc_root_class, which informs the compiler when a root class is intentionall..."}, | ||
[j]={{N, | [j]={{N,4138,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n if (IDecl->getSuperClass() == nullptr) {\n // This class has no superclass, so check that it has been marked with\n // __attribute((objc_root_class)).\n if (!HasRootClassAttr) {\n Diag(DeclLoc, diag::warn_objc_root_class_missing) << IDecl->getIdentifier();"}} | ||
}, | }, | ||
["warn_objc_secondary_init_missing_init_call"]={ | ["warn_objc_secondary_init_missing_init_call"]={ | ||
Line 1,539: | Line 1,539: | ||
[e]=p, | [e]=p, | ||
[i]={"b66d3cf5cf84",1386105109,"[objc] Emit warning when the implementation of a secondary initializer calls on"}, | [i]={"b66d3cf5cf84",1386105109,"[objc] Emit warning when the implementation of a secondary initializer calls on"}, | ||
[j]={{G, | [j]={{G,15861,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n {\n if (FD) {\n } else if (ObjCMethodDecl *MD = dyn_cast_or_null<ObjCMethodDecl>(dcl)) {\n if (FSI->ObjCWarnForNoInitDelegation) {\n // Don\'t issue this warning for unavaialable inits.\n if (!MD->isUnavailable())\n Diag(MD->getLocation(), diag::warn_objc_secondary_init_missing_init_call);"}} | ||
}, | }, | ||
["warn_objc_secondary_init_super_init_call"]={ | ["warn_objc_secondary_init_super_init_call"]={ | ||
Line 1,553: | Line 1,553: | ||
[e]=p, | [e]=p, | ||
[i]={"b66d3cf5cf84",1386105109,"[objc] Emit warning when the implementation of a secondary initializer calls on"}, | [i]={"b66d3cf5cf84",1386105109,"[objc] Emit warning when the implementation of a secondary initializer calls on"}, | ||
[j]={{Z, | [j]={{Z,3219,"/// 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 (DIFunctionScopeInfo && DIFunctionScopeInfo->ObjCIsSecondaryInit && (SuperLoc.isValid() || isSelfExpr(Receiver))) {\n if (SuperLoc.isValid()) {\n Diag(SelLoc, diag::warn_objc_secondary_init_super_init_call);"}} | ||
}, | }, | ||
["warn_objc_string_literal_comparison"]={ | ["warn_objc_string_literal_comparison"]={ | ||
Line 1,567: | Line 1,567: | ||
[e]=p, | [e]=p, | ||
[i]={"ea70bf71547b",1342547204,"Add -Wobjc-string-compare under -Wobjc-literal-compare."}, | [i]={"ea70bf71547b",1342547204,"Add -Wobjc-string-compare under -Wobjc-literal-compare."}, | ||
[j]={{z, | [j]={{z,12503,"static void diagnoseObjCLiteralComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, BinaryOperator::Opcode Opc) {\n if (LiteralKind == Sema::LK_String)\n S.Diag(Loc, diag::warn_objc_string_literal_comparison) << Literal->getSourceRange();"}} | ||
}, | }, | ||
["warn_objc_unsafe_perform_selector"]={ | ["warn_objc_unsafe_perform_selector"]={ | ||
Line 1,581: | Line 1,581: | ||
[e]=p, | [e]=p, | ||
[i]={"0e23c61c8755",1488815914,"[Sema][ObjC] Warn about \'performSelector\' calls with selectors"}, | [i]={"0e23c61c8755",1488815914,"[Sema][ObjC] Warn about \'performSelector\' calls with selectors"}, | ||
[j]={{Z, | [j]={{Z,2530,"static void checkFoundationAPI(Sema &S, SourceLocation Loc, const ObjCMethodDecl *Method, ArrayRef<Expr *> Args, QualType ReceiverType, bool IsClassObjectCall) {\n if (Ret->isRecordType() || Ret->isVectorType() || Ret->isExtVectorType()) {\n S.Diag(Loc, diag::warn_objc_unsafe_perform_selector) << Method->getSelector() << (!Ret->isRecordType() ? /*Vector*/ 2 : Ret->isUnionType() ? /*Union*/ 1 : /*Struct*/ 0);"}} | ||
}, | }, | ||
["warn_odr_different_num_template_parameters"]={ | ["warn_odr_different_num_template_parameters"]={ | ||
Line 1,595: | Line 1,595: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{fb, | [j]={{fb,2240,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_different_num_template_parameters:\n return diag::warn_odr_different_num_template_parameters;"}} | ||
}, | }, | ||
["warn_odr_different_template_parameter_kind"]={ | ["warn_odr_different_template_parameter_kind"]={ | ||
Line 1,609: | Line 1,609: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{fb, | [j]={{fb,2242,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_different_template_parameter_kind:\n return diag::warn_odr_different_template_parameter_kind;"}} | ||
}, | }, | ||
["warn_odr_field_type_inconsistent"]={ | ["warn_odr_field_type_inconsistent"]={ | ||
Line 1,623: | Line 1,623: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{sb, | [j]={{sb,3915,"ExpectedDecl ASTNodeImporter::VisitFieldDecl(FieldDecl *D) {\n for (auto *FoundDecl : FoundDecls) {\n if (FieldDecl *FoundField = dyn_cast<FieldDecl>(FoundDecl)) {\n Importer.ToDiag(Loc, diag::warn_odr_field_type_inconsistent) << Name << D->getType() << FoundField->getType();"},{sb,3994,"ExpectedDecl ASTNodeImporter::VisitIndirectFieldDecl(IndirectFieldDecl *D) {\n for (unsigned I = 0, N = FoundDecls.size(); I != N; ++I) {\n if (auto *FoundField = dyn_cast<IndirectFieldDecl>(FoundDecls[I])) {\n Importer.ToDiag(Loc, diag::warn_odr_field_type_inconsistent) << Name << D->getType() << FoundField->getType();"},{fb,2220,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_field_type_inconsistent:\n return diag::warn_odr_field_type_inconsistent;"}} | ||
}, | }, | ||
["warn_odr_function_type_inconsistent"]={ | ["warn_odr_function_type_inconsistent"]={ | ||
Line 1,637: | Line 1,637: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{sb, | [j]={{sb,3543,"ExpectedDecl ASTNodeImporter::VisitFunctionDecl(FunctionDecl *D) {\n }\n // Try to find a function in our own (\"to\") context with the same name, same\n // type, and in the same context as the function we\'re importing.\n else if (!LexicalDC->isFunctionOrMethod()) {\n for (auto *FoundDecl : FoundDecls) {\n if (auto *FoundFunction = dyn_cast<FunctionDecl>(FoundDecl)) {\n Importer.ToDiag(Loc, diag::warn_odr_function_type_inconsistent) << Name << D->getType() << FoundFunction->getType();"},{fb,2216,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_function_type_inconsistent:\n return diag::warn_odr_function_type_inconsistent;"}} | ||
}, | }, | ||
["warn_odr_ivar_type_inconsistent"]={ | ["warn_odr_ivar_type_inconsistent"]={ | ||
Line 1,651: | Line 1,651: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{sb, | [j]={{sb,4185,"ExpectedDecl ASTNodeImporter::VisitObjCIvarDecl(ObjCIvarDecl *D) {\n for (auto *FoundDecl : FoundDecls) {\n if (ObjCIvarDecl *FoundIvar = dyn_cast<ObjCIvarDecl>(FoundDecl)) {\n Importer.ToDiag(Loc, diag::warn_odr_ivar_type_inconsistent) << Name << D->getType() << FoundIvar->getType();"},{fb,2222,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_ivar_type_inconsistent:\n return diag::warn_odr_ivar_type_inconsistent;"}} | ||
}, | }, | ||
["warn_odr_non_type_parameter_type_inconsistent"]={ | ["warn_odr_non_type_parameter_type_inconsistent"]={ | ||
Line 1,665: | Line 1,665: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{fb, | [j]={{fb,2246,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_non_type_parameter_type_inconsistent:\n return diag::warn_odr_non_type_parameter_type_inconsistent;"}} | ||
}, | }, | ||
["warn_odr_objc_method_num_params_inconsistent"]={ | ["warn_odr_objc_method_num_params_inconsistent"]={ | ||
Line 1,679: | Line 1,679: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{sb, | [j]={{sb,4503,"ExpectedDecl ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {\n for (auto *FoundDecl : FoundDecls) {\n if (auto *FoundMethod = dyn_cast<ObjCMethodDecl>(FoundDecl)) {\n // Check the number of parameters.\n if (D->param_size() != FoundMethod->param_size()) {\n Importer.ToDiag(Loc, diag::warn_odr_objc_method_num_params_inconsistent) << D->isInstanceMethod() << Name << D->param_size() << FoundMethod->param_size();"},{fb,2228,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_objc_method_num_params_inconsistent:\n return diag::warn_odr_objc_method_num_params_inconsistent;"}} | ||
}, | }, | ||
["warn_odr_objc_method_param_type_inconsistent"]={ | ["warn_odr_objc_method_param_type_inconsistent"]={ | ||
Line 1,693: | Line 1,693: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{sb, | [j]={{sb,4520,"ExpectedDecl ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {\n for (auto *FoundDecl : FoundDecls) {\n if (auto *FoundMethod = dyn_cast<ObjCMethodDecl>(FoundDecl)) {\n // Check parameter types.\n for (ObjCMethodDecl::param_iterator P = D->param_begin(), PEnd = D->param_end(), FoundP = FoundMethod->param_begin(); P != PEnd; ++P, ++FoundP) {\n if (!Importer.IsStructurallyEquivalent((*P)->getType(), (*FoundP)->getType())) {\n Importer.FromDiag((*P)->getLocation(), diag::warn_odr_objc_method_param_type_inconsistent) << D->isInstanceMethod() << Name << (*P)->getType() << (*FoundP)->getType();"},{fb,2230,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_objc_method_param_type_inconsistent:\n return diag::warn_odr_objc_method_param_type_inconsistent;"}} | ||
}, | }, | ||
["warn_odr_objc_method_result_type_inconsistent"]={ | ["warn_odr_objc_method_result_type_inconsistent"]={ | ||
Line 1,707: | Line 1,707: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{sb, | [j]={{sb,4491,"ExpectedDecl ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {\n for (auto *FoundDecl : FoundDecls) {\n if (auto *FoundMethod = dyn_cast<ObjCMethodDecl>(FoundDecl)) {\n // Check return types.\n if (!Importer.IsStructurallyEquivalent(D->getReturnType(), FoundMethod->getReturnType())) {\n Importer.ToDiag(Loc, diag::warn_odr_objc_method_result_type_inconsistent) << D->isInstanceMethod() << Name << D->getReturnType() << FoundMethod->getReturnType();"},{fb,2226,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_objc_method_result_type_inconsistent:\n return diag::warn_odr_objc_method_result_type_inconsistent;"}} | ||
}, | }, | ||
["warn_odr_objc_method_variadic_inconsistent"]={ | ["warn_odr_objc_method_variadic_inconsistent"]={ | ||
Line 1,721: | Line 1,721: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{sb, | [j]={{sb,4533,"ExpectedDecl ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {\n for (auto *FoundDecl : FoundDecls) {\n if (auto *FoundMethod = dyn_cast<ObjCMethodDecl>(FoundDecl)) {\n // Check variadic/non-variadic.\n // Check the number of parameters.\n if (D->isVariadic() != FoundMethod->isVariadic()) {\n Importer.ToDiag(Loc, diag::warn_odr_objc_method_variadic_inconsistent) << D->isInstanceMethod() << Name;"},{fb,2232,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_objc_method_variadic_inconsistent:\n return diag::warn_odr_objc_method_variadic_inconsistent;"}} | ||
}, | }, | ||
["warn_odr_objc_property_impl_kind_inconsistent"]={ | ["warn_odr_objc_property_impl_kind_inconsistent"]={ | ||
Line 1,735: | Line 1,735: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{sb, | [j]={{sb,5602,"ExpectedDecl ASTNodeImporter::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D) {\n if (!ToImpl) {\n } else {\n // Check that we have the same kind of property implementation (@synthesize\n // vs. @dynamic).\n if (D->getPropertyImplementation() != ToImpl->getPropertyImplementation()) {\n Importer.ToDiag(ToImpl->getLocation(), diag::warn_odr_objc_property_impl_kind_inconsistent) << Property->getDeclName() << (ToImpl->getPropertyImplementation() == ObjCPropertyImplDecl::Dynamic);"},{fb,2236,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_objc_property_impl_kind_inconsistent:\n return diag::warn_odr_objc_property_impl_kind_inconsistent;"}} | ||
}, | }, | ||
["warn_odr_objc_property_type_inconsistent"]={ | ["warn_odr_objc_property_type_inconsistent"]={ | ||
Line 1,749: | Line 1,749: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{sb, | [j]={{sb,5501,"ExpectedDecl ASTNodeImporter::VisitObjCPropertyDecl(ObjCPropertyDecl *D) {\n for (auto *FoundDecl : FoundDecls) {\n if (auto *FoundProp = dyn_cast<ObjCPropertyDecl>(FoundDecl)) {\n // Check property types.\n if (!Importer.IsStructurallyEquivalent(D->getType(), FoundProp->getType())) {\n Importer.ToDiag(Loc, diag::warn_odr_objc_property_type_inconsistent) << Name << D->getType() << FoundProp->getType();"},{fb,2234,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_objc_property_type_inconsistent:\n return diag::warn_odr_objc_property_type_inconsistent;"}} | ||
}, | }, | ||
["warn_odr_objc_superclass_inconsistent"]={ | ["warn_odr_objc_superclass_inconsistent"]={ | ||
Line 1,763: | Line 1,763: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{sb, | [j]={{sb,5182,"Error ASTNodeImporter::ImportDefinition(ObjCInterfaceDecl *From, ObjCInterfaceDecl *To, ImportDefinitionKind Kind) {\n if (To->getDefinition()) {\n if ((bool)FromSuper != (bool)ToSuper || (FromSuper && !declaresSameEntity(FromSuper, ToSuper))) {\n Importer.ToDiag(To->getLocation(), diag::warn_odr_objc_superclass_inconsistent) << To->getDeclName();"},{sb,5448,"ExpectedDecl ASTNodeImporter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {\n if (!Impl) {\n } else {\n // Verify that the existing @implementation has the same superclass.\n if ((Super && !Impl->getSuperClass()) || (!Super && Impl->getSuperClass()) || (Super && Impl->getSuperClass() && !declaresSameEntity(Super->getCanonicalDecl(), Impl->getSuperClass()))) {\n Importer.ToDiag(Impl->getLocation(), diag::warn_odr_objc_superclass_inconsistent) << Iface->getDeclName();"},{fb,2224,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_objc_superclass_inconsistent:\n return diag::warn_odr_objc_superclass_inconsistent;"}} | ||
}, | }, | ||
["warn_odr_objc_synthesize_ivar_inconsistent"]={ | ["warn_odr_objc_synthesize_ivar_inconsistent"]={ | ||
Line 1,777: | Line 1,777: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{sb, | [j]={{sb,5618,"ExpectedDecl ASTNodeImporter::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D) {\n if (!ToImpl) {\n } else {\n // For @synthesize, check that we have the same\n if (D->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize && Ivar != ToImpl->getPropertyIvarDecl()) {\n Importer.ToDiag(ToImpl->getPropertyIvarDeclLoc(), diag::warn_odr_objc_synthesize_ivar_inconsistent) << Property->getDeclName() << ToImpl->getPropertyIvarDecl()->getDeclName() << Ivar->getDeclName();"},{fb,2238,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_objc_synthesize_ivar_inconsistent:\n return diag::warn_odr_objc_synthesize_ivar_inconsistent;"}} | ||
}, | }, | ||
["warn_odr_parameter_pack_non_pack"]={ | ["warn_odr_parameter_pack_non_pack"]={ | ||
Line 1,791: | Line 1,791: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{fb, | [j]={{fb,2244,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_parameter_pack_non_pack:\n return diag::warn_odr_parameter_pack_non_pack;"}} | ||
}, | }, | ||
["warn_odr_tag_type_inconsistent"]={ | ["warn_odr_tag_type_inconsistent"]={ | ||
Line 1,805: | Line 1,805: | ||
[e]=w, | [e]=w, | ||
[i]={"98c101833744",1266013059,"Implement AST importing and merging for enumeration types and"}, | [i]={"98c101833744",1266013059,"Implement AST importing and merging for enumeration types and"}, | ||
[j]={{fb, | [j]={{fb,2218,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_tag_type_inconsistent:\n return diag::warn_odr_tag_type_inconsistent;"}} | ||
}, | }, | ||
["warn_odr_variable_multiple_def"]={ | ["warn_odr_variable_multiple_def"]={ | ||
Line 1,819: | Line 1,819: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{fb, | [j]={{fb,2214,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_variable_multiple_def:\n return diag::warn_odr_variable_multiple_def;"}} | ||
}, | }, | ||
["warn_odr_variable_type_inconsistent"]={ | ["warn_odr_variable_type_inconsistent"]={ | ||
Line 1,833: | Line 1,833: | ||
[e]=w, | [e]=w, | ||
[i]={hb,1554130013,kb}, | [i]={hb,1554130013,kb}, | ||
[j]={{sb, | [j]={{sb,4296,"ExpectedDecl ASTNodeImporter::VisitVarDecl(VarDecl *D) {\n if (D->isFileVarDecl()) {\n for (auto *FoundDecl : FoundDecls) {\n if (auto *FoundVar = dyn_cast<VarDecl>(FoundDecl)) {\n Importer.ToDiag(Loc, diag::warn_odr_variable_type_inconsistent) << Name << D->getType() << FoundVar->getType();"},{fb,2212,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_variable_type_inconsistent:\n return diag::warn_odr_variable_type_inconsistent;"}} | ||
}, | }, | ||
["warn_old_implicitly_unsigned_long"]={ | ["warn_old_implicitly_unsigned_long"]={ | ||
Line 1,847: | Line 1,847: | ||
[e]=w, | [e]=w, | ||
[i]={"13234ae40db3",1433800799,"Consider unsigned long for non-u/U decimal literals (C90/C++03)"}, | [i]={"13234ae40db3",1433800799,"Consider unsigned long for non-u/U decimal literals (C90/C++03)"}, | ||
[j]={{z, | [j]={{z,4225,"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 // Are long/unsigned long possibilities?\n if (Ty.isNull() && !Literal.isLongLong && !Literal.isSizeT) {\n // Does it fit in a unsigned long?\n if (ResultVal.isIntN(LongSize)) {\n // Does it fit in a signed long?\n if (!Literal.isUnsigned && ResultVal[LongSize - 1] == 0)\n else if (AllowUnsigned)\n // Check according to the rules of C90 6.1.3.2p5. C++03 [lex.icon]p2\n // is compatible.\n else if (!getLangOpts().C99 && !getLangOpts().CPlusPlus11) {\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus ? Literal.isLong ? diag::warn_old_implicitly_unsigned_long_cxx : /*C++98 UB*/ diag::ext_old_implicitly_unsigned_long_cxx : diag::warn_old_implicitly_unsigned_long) << (LongLongSize > LongSize ? /*will have type \'long long\'*/ 0 : /*will be ill-formed*/ 1);"}} | ||
}, | }, | ||
["warn_old_implicitly_unsigned_long_cxx"]={ | ["warn_old_implicitly_unsigned_long_cxx"]={ | ||
Line 1,861: | Line 1,861: | ||
[e]=w, | [e]=w, | ||
[i]={"13234ae40db3",1433800799,"Consider unsigned long for non-u/U decimal literals (C90/C++03)"}, | [i]={"13234ae40db3",1433800799,"Consider unsigned long for non-u/U decimal literals (C90/C++03)"}, | ||
[j]={{z, | [j]={{z,4193,"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 // Are long/unsigned long possibilities?\n if (Ty.isNull() && !Literal.isLongLong && !Literal.isSizeT) {\n // Does it fit in a unsigned long?\n if (ResultVal.isIntN(LongSize)) {\n // Does it fit in a signed long?\n if (!Literal.isUnsigned && ResultVal[LongSize - 1] == 0)\n else if (AllowUnsigned)\n // Check according to the rules of C90 6.1.3.2p5. C++03 [lex.icon]p2\n // is compatible.\n else if (!getLangOpts().C99 && !getLangOpts().CPlusPlus11) {\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus ? Literal.isLong ? diag::warn_old_implicitly_unsigned_long_cxx : /*C++98 UB*/ diag::ext_old_implicitly_unsigned_long_cxx : diag::warn_old_implicitly_unsigned_long) << (LongLongSize > LongSize ? /*will have type \'long long\'*/ 0 : /*will be ill-formed*/ 1);"}} | ||
}, | }, | ||
["warn_old_style_cast"]={ | ["warn_old_style_cast"]={ | ||
Line 1,876: | Line 1,876: | ||
[e]=p, | [e]=p, | ||
[i]={"c7c1ebe66049",1385522297,"Implement -Wold-style-cast"}, | [i]={"c7c1ebe66049",1385522297,"Implement -Wold-style-cast"}, | ||
[j]={{z, | [j]={{z,8508,"ExprResult Sema::ActOnCastExpr(Scope *S, SourceLocation LParenLoc, Declarator &D, ParsedType &Ty, SourceLocation RParenLoc, Expr *CastExpr) {\n if (getLangOpts().CPlusPlus && !castType->isVoidType())\n Diag(LParenLoc, diag::warn_old_style_cast) << CastExpr->getSourceRange();"}} | ||
}, | }, | ||
["warn_omp51_compat_attributes"]={ | ["warn_omp51_compat_attributes"]={ | ||
Line 1,891: | Line 1,891: | ||
[e]=A, | [e]=A, | ||
[i]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."}, | [i]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."}, | ||
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp", | [j]={{"clang/lib/Parse/ParseDeclCXX.cpp",4431,"/// ParseCXX11AttributeArgs -- Parse a C++11 attribute-argument-clause.\n///\n/// [C++11] attribute-argument-clause:\n/// \'(\' balanced-token-seq \')\'\n///\n/// [C++11] balanced-token-seq:\n/// balanced-token\n/// balanced-token-seq balanced-token\n///\n/// [C++11] balanced-token:\n/// \'(\' balanced-token-seq \')\'\n/// \'[\' balanced-token-seq \']\'\n/// \'{\' balanced-token-seq \'}\'\n/// any token but \'(\', \')\', \'[\', \']\', \'{\', or \'}\'\nbool Parser::ParseCXX11AttributeArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, CachedTokens &OpenMPTokens) {\n if (ScopeName && ScopeName->isStr(\"omp\")) {\n Diag(AttrNameLoc, getLangOpts().OpenMP >= 51 ? diag::warn_omp51_compat_attributes : diag::ext_omp_attributes);"}} | ||
}, | }, | ||
["warn_omp_alignment_not_power_of_two"]={ | ["warn_omp_alignment_not_power_of_two"]={ | ||
Line 1,905: | Line 1,905: | ||
[e]=qb, | [e]=qb, | ||
[i]={"09184fedc049",1412054968,"[OPENMP] Codegen of the ‘aligned’ clause for the ‘omp simd’ directive."}, | [i]={"09184fedc049",1412054968,"[OPENMP] Codegen of the ‘aligned’ clause for the ‘omp simd’ directive."}, | ||
[j]={{nb, | [j]={{nb,16532,"ExprResult Sema::VerifyPositiveIntegerConstantInClause(Expr *E, OpenMPClauseKind CKind, bool StrictlyPositive, bool SuppressExprDiags) {\n if ((CKind == OMPC_aligned || CKind == OMPC_align) && !Result.isPowerOf2()) {\n Diag(E->getExprLoc(), diag::warn_omp_alignment_not_power_of_two) << E->getSourceRange();"}} | ||
}, | }, | ||
["warn_omp_allocate_thread_on_task_target_directive"]={ | ["warn_omp_allocate_thread_on_task_target_directive"]={ | ||
Line 1,919: | Line 1,919: | ||
[e]=qb, | [e]=qb, | ||
[i]={"471171c4c94c",1553800536,"[OPENMP]Add check for undefined behavior with thread allocators on"}, | [i]={"471171c4c94c",1553800536,"[OPENMP]Add check for undefined behavior with thread allocators on"}, | ||
[j]={{nb, | [j]={{nb,5511,"static void checkAllocateClauses(Sema &S, DSAStackTy *Stack, ArrayRef<OMPClause *> Clauses) {\n for (OMPClause *C : AllocateRange) {\n // OpenMP, 2.11.4 allocate Clause, Restrictions.\n // For task, taskloop or target directives, allocation requests to memory\n // allocators with the trait access set to thread result in unspecified\n // behavior.\n if (AllocatorKind == OMPAllocateDeclAttr::OMPThreadMemAlloc && (isOpenMPTaskingDirective(Stack->getCurrentDirective()) || isOpenMPTargetExecutionDirective(Stack->getCurrentDirective()))) {\n S.Diag(AC->getAllocator()->getExprLoc(), diag::warn_omp_allocate_thread_on_task_target_directive) << getOpenMPDirectiveName(Stack->getCurrentDirective());"}} | ||
}, | }, | ||
["warn_omp_ctx_incompatible_property_for_selector"]={ | ["warn_omp_ctx_incompatible_property_for_selector"]={ | ||
Line 1,933: | Line 1,933: | ||
[e]=A, | [e]=A, | ||
[i]={Eb,1576809732,Bb}, | [i]={Eb,1576809732,Bb}, | ||
[j]={{M, | [j]={{M,1027,"void Parser::parseOMPContextProperty(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n Diag(PropertyLoc, diag::warn_omp_ctx_incompatible_property_for_selector) << getOpenMPContextTraitPropertyName(TIProperty.Kind, TIProperty.RawString) << getOpenMPContextTraitSelectorName(TISelector.Kind) << getOpenMPContextTraitSetName(Set);"}} | ||
}, | }, | ||
["warn_omp_ctx_incompatible_score_for_property"]={ | ["warn_omp_ctx_incompatible_score_for_property"]={ | ||
Line 1,947: | Line 1,947: | ||
[e]=A, | [e]=A, | ||
[i]={Eb,1576809732,Bb}, | [i]={Eb,1576809732,Bb}, | ||
[j]={{M, | [j]={{M,1207,"/// Parses an OpenMP context selector.\n///\n/// <trait-selector-name> [\'(\'[<trait-score>] <trait-property> [, <t-p>]* \')\']\nvoid Parser::parseOMPContextSelector(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &SeenSelectors) {\n if (!AllowsTraitScore && !Score.isUnset()) {\n if (Score.isUsable()) {\n Diag(ScoreLoc, diag::warn_omp_ctx_incompatible_score_for_property) << getOpenMPContextTraitSelectorName(TISelector.Kind) << getOpenMPContextTraitSetName(Set) << Score.get();"},{M,1211,"/// Parses an OpenMP context selector.\n///\n/// <trait-selector-name> [\'(\'[<trait-score>] <trait-property> [, <t-p>]* \')\']\nvoid Parser::parseOMPContextSelector(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &SeenSelectors) {\n if (!AllowsTraitScore && !Score.isUnset()) {\n if (Score.isUsable()) {\n } else {\n Diag(ScoreLoc, diag::warn_omp_ctx_incompatible_score_for_property) << getOpenMPContextTraitSelectorName(TISelector.Kind) << getOpenMPContextTraitSetName(Set) << \"<invalid>\";"}} | ||
}, | }, | ||
["warn_omp_ctx_incompatible_selector_for_set"]={ | ["warn_omp_ctx_incompatible_selector_for_set"]={ | ||
Line 1,961: | Line 1,961: | ||
[e]=A, | [e]=A, | ||
[i]={Eb,1576809732,Bb}, | [i]={Eb,1576809732,Bb}, | ||
[j]={{M, | [j]={{M,1161,"/// Parses an OpenMP context selector.\n///\n/// <trait-selector-name> [\'(\'[<trait-score>] <trait-property> [, <t-p>]* \')\']\nvoid Parser::parseOMPContextSelector(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &SeenSelectors) {\n if (!isValidTraitSelectorForTraitSet(TISelector.Kind, Set, AllowsTraitScore, RequiresProperty)) {\n Diag(SelectorLoc, diag::warn_omp_ctx_incompatible_selector_for_set) << getOpenMPContextTraitSelectorName(TISelector.Kind) << getOpenMPContextTraitSetName(Set);"}} | ||
}, | }, | ||
["warn_omp_ctx_selector_without_properties"]={ | ["warn_omp_ctx_selector_without_properties"]={ | ||
Line 1,975: | Line 1,975: | ||
[e]=A, | [e]=A, | ||
[i]={Eb,1576809732,Bb}, | [i]={Eb,1576809732,Bb}, | ||
[j]={{M, | [j]={{M,1180,"/// Parses an OpenMP context selector.\n///\n/// <trait-selector-name> [\'(\'[<trait-score>] <trait-property> [, <t-p>]* \')\']\nvoid Parser::parseOMPContextSelector(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &SeenSelectors) {\n if (!Tok.is(tok::l_paren)) {\n Diag(SelectorLoc, diag::warn_omp_ctx_selector_without_properties) << getOpenMPContextTraitSelectorName(TISelector.Kind) << getOpenMPContextTraitSetName(Set);"}} | ||
}, | }, | ||
["warn_omp_declare_target_after_first_use"]={ | ["warn_omp_declare_target_after_first_use"]={ | ||
Line 1,989: | Line 1,989: | ||
[e]=qb, | [e]=qb, | ||
[i]={"729e242a7972",1566576674,"[OPENMP5.0]Add support for device_type clause in declare target"}, | [i]={"729e242a7972",1566576674,"[OPENMP5.0]Add support for device_type clause in declare target"}, | ||
[j]={{nb, | [j]={{nb,23061,"void Sema::ActOnOpenMPDeclareTargetName(NamedDecl *ND, SourceLocation Loc, OMPDeclareTargetDeclAttr::MapTypeTy MT, DeclareTargetContextInfo &DTCI) {\n // Diagnose marking after use as it may lead to incorrect diagnosis and\n // codegen.\n if (LangOpts.OpenMP >= 50 && (ND->isUsed(/*CheckUsedAttr=*/false) || ND->isReferenced()))\n Diag(Loc, diag::warn_omp_declare_target_after_first_use);"}} | ||
}, | }, | ||
["warn_omp_declare_variant_after_emitted"]={ | ["warn_omp_declare_variant_after_emitted"]={ | ||
Line 2,003: | Line 2,003: | ||
[e]=qb, | [e]=qb, | ||
[i]={hc,1567434909,zc}, | [i]={hc,1567434909,zc}, | ||
[j]={{nb, | [j]={{nb,7396,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n if (!FD->isThisDeclarationADefinition() && FD->isDefined(Definition) && (LangOpts.EmitAllDecls || Context.DeclMustBeEmitted(Definition)))\n Diag(SR.getBegin(), diag::warn_omp_declare_variant_after_emitted) << FD->getLocation();"}} | ||
}, | }, | ||
["warn_omp_declare_variant_after_used"]={ | ["warn_omp_declare_variant_after_used"]={ | ||
Line 2,017: | Line 2,017: | ||
[e]=qb, | [e]=qb, | ||
[i]={hc,1567434909,zc}, | [i]={hc,1567434909,zc}, | ||
[j]={{nb, | [j]={{nb,7389,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n // Allow #pragma omp declare variant only if the function is not used.\n if (FD->isUsed(false))\n Diag(SR.getBegin(), diag::warn_omp_declare_variant_after_used) << FD->getLocation();"}} | ||
}, | }, | ||
["warn_omp_declare_variant_ctx_mutiple_use"]={ | ["warn_omp_declare_variant_ctx_mutiple_use"]={ | ||
Line 2,031: | Line 2,031: | ||
[e]=A, | [e]=A, | ||
[i]={Eb,1576809732,Bb}, | [i]={Eb,1576809732,Bb}, | ||
[j]={{M, | [j]={{M,867,"static bool checkForDuplicates(Parser &P, StringRef Name, SourceLocation NameLoc, llvm::StringMap<SourceLocation> &Seen, OMPContextLvl Lvl) {\n P.Diag(NameLoc, diag::warn_omp_declare_variant_ctx_mutiple_use) << Lvl << Name;"}} | ||
}, | }, | ||
["warn_omp_declare_variant_ctx_not_a_property"]={ | ["warn_omp_declare_variant_ctx_not_a_property"]={ | ||
Line 2,045: | Line 2,045: | ||
[e]=A, | [e]=A, | ||
[i]={Eb,1576809732,Bb}, | [i]={Eb,1576809732,Bb}, | ||
[j]={{M, | [j]={{M,899,"void Parser::parseOMPTraitPropertyKind(OMPTraitProperty &TIProperty, llvm::omp::TraitSet Set, llvm::omp::TraitSelector Selector, llvm::StringMap<SourceLocation> &Seen) {\n Diag(NameLoc, diag::warn_omp_declare_variant_ctx_not_a_property) << Name << getOpenMPContextTraitSelectorName(Selector) << getOpenMPContextTraitSetName(Set);"}} | ||
}, | }, | ||
["warn_omp_declare_variant_ctx_not_a_selector"]={ | ["warn_omp_declare_variant_ctx_not_a_selector"]={ | ||
Line 2,059: | Line 2,059: | ||
[e]=A, | [e]=A, | ||
[i]={Eb,1576809732,Bb}, | [i]={Eb,1576809732,Bb}, | ||
[j]={{M, | [j]={{M,1064,"void Parser::parseOMPTraitSelectorKind(OMPTraitSelector &TISelector, llvm::omp::TraitSet Set, llvm::StringMap<SourceLocation> &Seen) {\n Diag(NameLoc, diag::warn_omp_declare_variant_ctx_not_a_selector) << Name << getOpenMPContextTraitSetName(Set);"}} | ||
}, | }, | ||
["warn_omp_declare_variant_ctx_not_a_set"]={ | ["warn_omp_declare_variant_ctx_not_a_set"]={ | ||
Line 2,073: | Line 2,073: | ||
[e]=A, | [e]=A, | ||
[i]={Eb,1576809732,Bb}, | [i]={Eb,1576809732,Bb}, | ||
[j]={{M, | [j]={{M,1251,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n Diag(NameLoc, diag::warn_omp_declare_variant_ctx_not_a_set) << Name;"}} | ||
}, | }, | ||
["warn_omp_declare_variant_expected"]={ | ["warn_omp_declare_variant_expected"]={ | ||
Line 2,087: | Line 2,087: | ||
[e]=A, | [e]=A, | ||
[i]={Eb,1576809732,Bb}, | [i]={Eb,1576809732,Bb}, | ||
[j]={{M, | [j]={{M,1112,"/// Parse optional \'score\' \'(\' <expr> \')\' \':\'.\nstatic ExprResult parseContextScore(Parser &P) {\n // Parse \':\'\n if (P.getCurToken().is(tok::colon))\n else\n P.Diag(P.getCurToken(), diag::warn_omp_declare_variant_expected) << \"\':\'\""},{M,1328,"/// Parses an OpenMP context selector set.\n///\n/// <trait-set-selector-name> \'=\' \'{\' <trait-selector> [, <trait-selector>]* \'}\'\nvoid Parser::parseOMPContextSelectorSet(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &SeenSets) {\n // Parse \'=\'.\n if (!TryConsumeToken(tok::equal))\n Diag(Tok.getLocation(), diag::warn_omp_declare_variant_expected) << \"=\" << (\"context set name \\\"\" + getOpenMPContextTraitSetName(TISet.Kind) + \"\\\"\").str();"},{M,1338,"/// Parses an OpenMP context selector set.\n///\n/// <trait-set-selector-name> \'=\' \'{\' <trait-selector> [, <trait-selector>]* \'}\'\nvoid Parser::parseOMPContextSelectorSet(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &SeenSets) {\n // Parse \'{\'.\n if (Tok.is(tok::l_brace)) {\n } else {\n Diag(Tok.getLocation(), diag::warn_omp_declare_variant_expected) << \"{\" << (\"\'=\' that follows the context set name \\\"\" + getOpenMPContextTraitSetName(TISet.Kind) + \"\\\"\").str();"},{M,1358,"/// Parses an OpenMP context selector set.\n///\n/// <trait-set-selector-name> \'=\' \'{\' <trait-selector> [, <trait-selector>]* \'}\'\nvoid Parser::parseOMPContextSelectorSet(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &SeenSets) {\n // Parse \'}\'.\n if (Tok.is(tok::r_brace)) {\n } else {\n Diag(Tok.getLocation(), diag::warn_omp_declare_variant_expected) << \"}\" << (\"context selectors for the context set \\\"\" + getOpenMPContextTraitSetName(TISet.Kind) + \"\\\"\").str();"}} | ||
}, | }, | ||
["warn_omp_declare_variant_marked_as_declare_variant"]={ | ["warn_omp_declare_variant_marked_as_declare_variant"]={ | ||
Line 2,101: | Line 2,101: | ||
[e]=qb, | [e]=qb, | ||
[i]={hc,1567434909,zc}, | [i]={hc,1567434909,zc}, | ||
[j]={{nb, | [j]={{nb,7580,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n // Check if variant function is not marked with declare variant directive.\n if (NewFD->hasAttrs() && NewFD->hasAttr<OMPDeclareVariantAttr>()) {\n Diag(VariantRef->getExprLoc(), diag::warn_omp_declare_variant_marked_as_declare_variant) << VariantRef->getSourceRange();"}} | ||
}, | }, | ||
["warn_omp_declare_variant_score_not_constant"]={ | ["warn_omp_declare_variant_score_not_constant"]={ | ||
Line 2,115: | Line 2,115: | ||
[e]=qb, | [e]=qb, | ||
[i]={Eb,1576809732,Bb}, | [i]={Eb,1576809732,Bb}, | ||
[j]={{nb, | [j]={{nb,7423,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n // Deal with non-constant score and user condition expressions.\n auto HandleNonConstantScoresAndConditions = [this](Expr *&E, bool IsScore) -> bool {\n if (IsScore) {\n Diag(E->getExprLoc(), diag::warn_omp_declare_variant_score_not_constant) << E;"}} | ||
}, | }, | ||
["warn_omp_declare_variant_string_literal_or_identifier"]={ | ["warn_omp_declare_variant_string_literal_or_identifier"]={ | ||
Line 2,129: | Line 2,129: | ||
[e]=A, | [e]=A, | ||
[i]={Eb,1576809732,Bb}, | [i]={Eb,1576809732,Bb}, | ||
[j]={{M, | [j]={{M,852,"static StringRef getNameFromIdOrString(Parser &P, Token &Tok, OMPContextLvl Lvl) {\n P.Diag(Tok.getLocation(), diag::warn_omp_declare_variant_string_literal_or_identifier) << Lvl;"}} | ||
}, | }, | ||
["warn_omp_depend_in_ordered_deprecated"]={ | ["warn_omp_depend_in_ordered_deprecated"]={ | ||
Line 2,143: | Line 2,143: | ||
[e]=Qb, | [e]=Qb, | ||
[i]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives"}, | [i]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives"}, | ||
[j]={{M, | [j]={{M,3373,"/// Parsing of OpenMP clauses.\n///\n/// clause:\n/// if-clause | final-clause | num_threads-clause | safelen-clause |\n/// default-clause | private-clause | firstprivate-clause | shared-clause\n/// | linear-clause | aligned-clause | collapse-clause | bind-clause |\n/// lastprivate-clause | reduction-clause | proc_bind-clause |\n/// schedule-clause | copyin-clause | copyprivate-clause | untied-clause |\n/// mergeable-clause | flush-clause | read-clause | write-clause |\n/// update-clause | capture-clause | seq_cst-clause | device-clause |\n/// simdlen-clause | threads-clause | simd-clause | num_teams-clause |\n/// thread_limit-clause | priority-clause | grainsize-clause |\n/// nogroup-clause | num_tasks-clause | hint-clause | to-clause |\n/// from-clause | is_device_ptr-clause | task_reduction-clause |\n/// in_reduction-clause | allocator-clause | allocate-clause |\n/// acq_rel-clause | acquire-clause | release-clause | relaxed-clause |\n/// depobj-clause | destroy-clause | detach-clause | inclusive-clause |\n/// exclusive-clause | uses_allocators-clause | use_device_addr-clause |\n/// has_device_addr\n///\nOMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, OpenMPClauseKind CKind, bool FirstClause) {\n case OMPC_doacross:\n if (getLangOpts().OpenMP >= 52 && DKind == OMPD_ordered && CKind == OMPC_depend)\n Diag(Tok, diag::warn_omp_depend_in_ordered_deprecated);"}} | ||
}, | }, | ||
["warn_omp_extra_tokens_at_eol"]={ | ["warn_omp_extra_tokens_at_eol"]={ | ||
Line 2,157: | Line 2,157: | ||
[e]=A, | [e]=A, | ||
[i]={"a769e07232d2",1363934075,"OpenMP threadprivate directive parsing and semantic analysis"}, | [i]={"a769e07232d2",1363934075,"OpenMP threadprivate directive parsing and semantic analysis"}, | ||
[j]={{M, | [j]={{M,1968,"void Parser::skipUntilPragmaOpenMPEnd(OpenMPDirectiveKind DKind) {\n Diag(Tok, diag::warn_omp_extra_tokens_at_eol) << getOpenMPDirectiveName(DKind);"}} | ||
}, | }, | ||
["warn_omp_linear_step_zero"]={ | ["warn_omp_linear_step_zero"]={ | ||
Line 2,171: | Line 2,171: | ||
[e]=qb, | [e]=qb, | ||
[i]={"8dba66412b0a",1398172182,"[OPENMP] parsing \'linear\' clause (for directive \'omp simd\')"}, | [i]={"8dba66412b0a",1398172182,"[OPENMP] parsing \'linear\' clause (for directive \'omp simd\')"}, | ||
[j]={{nb, | [j]={{nb,20138,"OMPClause *Sema::ActOnOpenMPLinearClause(ArrayRef<Expr *> VarList, Expr *Step, SourceLocation StartLoc, SourceLocation LParenLoc, OpenMPLinearClauseKind LinKind, SourceLocation LinLoc, SourceLocation ColonLoc, SourceLocation EndLoc) {\n if (Step && !Step->isValueDependent() && !Step->isTypeDependent() && !Step->isInstantiationDependent() && !Step->containsUnexpandedParameterPack()) {\n // Warn about zero linear step (it would be probably better specified as\n // making corresponding variables \'const\').\n if (std::optional<llvm::APSInt> Result = StepExpr->getIntegerConstantExpr(Context)) {\n if (!Result->isNegative() && !Result->isStrictlyPositive())\n Diag(StepLoc, diag::warn_omp_linear_step_zero) << Vars[0] << (Vars.size() > 1);"}} | ||
}, | }, | ||
["warn_omp_loop_64_bit_var"]={ | ["warn_omp_loop_64_bit_var"]={ | ||
Line 2,185: | Line 2,185: | ||
[e]=qb, | [e]=qb, | ||
[i]={"174b3ca6820b",1412594189,"[OPENMP] Limit the loop counters to 64 bits for the worksharing loops"}, | [i]={"174b3ca6820b",1412594189,"[OPENMP] Limit the loop counters to 64 bits for the worksharing loops"}, | ||
[j]={{nb, | [j]={{nb,8834,"/// Build the expression to calculate the number of iterations.\nExpr *OpenMPIterationSpaceChecker::buildNumIterations(Scope *S, ArrayRef<LoopIterationSpace> ResultIterSpaces, bool LimitedType, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) const {\n if (LimitedType) {\n if (NewSize != C.getTypeSize(Type)) {\n if (NewSize < C.getTypeSize(Type)) {\n SemaRef.Diag(DefaultLoc, diag::warn_omp_loop_64_bit_var) << InitSrcRange << ConditionSrcRange;"}} | ||
}, | }, | ||
["warn_omp_minus_in_reduction_deprecated"]={ | ["warn_omp_minus_in_reduction_deprecated"]={ | ||
Line 2,199: | Line 2,199: | ||
[e]=Qb, | [e]=Qb, | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{nb, | [j]={{nb,19254,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n // OpenMP 5.2, 5.5.5 (see page 627, line 18) reduction Clause, Restrictions\n // A reduction clause with the minus (-) operator was deprecated\n if (OOK == OO_Minus && S.LangOpts.OpenMP == 52)\n S.Diag(ReductionId.getLoc(), diag::warn_omp_minus_in_reduction_deprecated);"}} | ||
}, | }, | ||
["warn_omp_more_one_device_type_clause"]={ | ["warn_omp_more_one_device_type_clause"]={ | ||
Line 2,213: | Line 2,213: | ||
[e]=A, | [e]=A, | ||
[i]={"729e242a7972",1566576674,"[OPENMP5.0]Add support for device_type clause in declare target"}, | [i]={"729e242a7972",1566576674,"[OPENMP5.0]Add support for device_type clause in declare target"}, | ||
[j]={{M, | [j]={{M,1888,"void Parser::ParseOMPDeclareTargetClauses(Sema::DeclareTargetContextInfo &DTCI) {\n while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n if (HasIdentifier) {\n // Parse \'device_type\' clause and go to next clause if any.\n if (IsDeviceTypeClause) {\n if (DevTypeData) {\n if (DeviceTypeLoc.isValid()) {\n Diag(DevTypeData->Loc, diag::warn_omp_more_one_device_type_clause);"}} | ||
}, | }, | ||
["warn_omp_more_one_interop_type"]={ | ["warn_omp_more_one_interop_type"]={ | ||
Line 2,227: | Line 2,227: | ||
[e]=A, | [e]=A, | ||
[i]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."}, | [i]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."}, | ||
[j]={{M, | [j]={{M,3562,"/// Parses a comma-separated list of interop-types and a prefer_type list.\n///\nbool Parser::ParseOMPInteropInfo(OMPInteropInfo &InteropInfo, OpenMPClauseKind Kind) {\n while (Tok.is(tok::identifier)) {\n if (Tok.getIdentifierInfo()->isStr(\"target\")) {\n // OpenMP 5.1 [2.15.1, interop Construct, Restrictions]\n // Each interop-type may be specified on an action-clause at most\n // once.\n if (IsTarget)\n Diag(Tok, diag::warn_omp_more_one_interop_type) << \"target\";"},{M,3567,"/// Parses a comma-separated list of interop-types and a prefer_type list.\n///\nbool Parser::ParseOMPInteropInfo(OMPInteropInfo &InteropInfo, OpenMPClauseKind Kind) {\n while (Tok.is(tok::identifier)) {\n if (Tok.getIdentifierInfo()->isStr(\"target\")) {\n } else if (Tok.getIdentifierInfo()->isStr(\"targetsync\")) {\n if (IsTargetSync)\n Diag(Tok, diag::warn_omp_more_one_interop_type) << \"targetsync\";"}} | ||
}, | }, | ||
["warn_omp_more_one_omp_all_memory"]={ | ["warn_omp_more_one_omp_all_memory"]={ | ||
Line 2,241: | Line 2,241: | ||
[e]=A, | [e]=A, | ||
[i]={"9ba937112fa6",1652807460,"[OpenMP] Add parsing/sema support for omp_all_memory reserved locator"}, | [i]={"9ba937112fa6",1652807460,"[OpenMP] Add parsing/sema support for omp_all_memory reserved locator"}, | ||
[j]={{M, | [j]={{M,4309,"bool Parser::ParseOpenMPReservedLocator(OpenMPClauseKind Kind, Sema::OpenMPVarListDataTy &Data, const LangOptions &LangOpts) {\n if (Tok.is(tok::identifier) && Tok.getIdentifierInfo()->isStr(\"omp_all_memory\")) {\n if (Data.ExtraModifier == OMPC_DEPEND_outallmemory || Data.ExtraModifier == OMPC_DEPEND_inoutallmemory)\n Diag(Tok, diag::warn_omp_more_one_omp_all_memory);"}} | ||
}, | }, | ||
["warn_omp_nesting_simd"]={ | ["warn_omp_nesting_simd"]={ | ||
Line 2,255: | Line 2,255: | ||
[e]=qb, | [e]=qb, | ||
[i]={"fd8b5748f113",1467383425,"[OpenMP] Issue warning if a simd construct nested inside another simd"}, | [i]={"fd8b5748f113",1467383425,"[OpenMP] Issue warning if a simd construct nested inside another simd"}, | ||
[j]={{nb, | [j]={{nb,5011,"static bool checkNestingOfRegions(Sema &SemaRef, const DSAStackTy *Stack, OpenMPDirectiveKind CurrentRegion, const DeclarationNameInfo &CurrentName, OpenMPDirectiveKind CancelRegion, OpenMPBindClauseKind BindKind, SourceLocation StartLoc) {\n if (Stack->getCurScope()) {\n if (isOpenMPSimdDirective(ParentRegion) && ((SemaRef.LangOpts.OpenMP <= 45 && CurrentRegion != OMPD_ordered) || (SemaRef.LangOpts.OpenMP >= 50 && CurrentRegion != OMPD_ordered && CurrentRegion != OMPD_simd && CurrentRegion != OMPD_atomic && CurrentRegion != OMPD_scan))) {\n SemaRef.Diag(StartLoc, (CurrentRegion != OMPD_simd) ? diag::err_omp_prohibited_region_simd : diag::warn_omp_nesting_simd) << (SemaRef.LangOpts.OpenMP >= 50 ? 1 : 0);"}} | ||
}, | }, | ||
["warn_omp_non_trivial_type_mapped"]={ | ["warn_omp_non_trivial_type_mapped"]={ | ||
Line 2,269: | Line 2,269: | ||
[e]=qb, | [e]=qb, | ||
[i]={"95c23e72da98",1519767071,"[OPENMP] Emit warning for non-trivial types in map clauses."}, | [i]={"95c23e72da98",1519767071,"[OPENMP] Emit warning for non-trivial types in map clauses."}, | ||
[j]={{nb, | [j]={{nb,20969,"static bool checkTypeMappable(SourceLocation SL, SourceRange SR, Sema &SemaRef, DSAStackTy *Stack, QualType QTy, bool FullCheck = true) {\n if (FullCheck && !SemaRef.CurContext->isDependentContext() && !QTy.isTriviallyCopyableType(SemaRef.Context))\n SemaRef.Diag(SL, diag::warn_omp_non_trivial_type_mapped) << QTy << SR;"}} | ||
}, | }, | ||
["warn_omp_not_in_target_context"]={ | ["warn_omp_not_in_target_context"]={ | ||
Line 2,283: | Line 2,283: | ||
[e]=qb, | [e]=qb, | ||
[i]={"0b0da296e6de",1459942739,"[OPENMP] Parsing and Sema support for \'omp declare target\' directive"}, | [i]={"0b0da296e6de",1459942739,"[OPENMP] Parsing and Sema support for \'omp declare target\' directive"}, | ||
[j]={{nb, | [j]={{nb,23133,"static void checkDeclInTargetContext(SourceLocation SL, SourceRange SR, Sema &SemaRef, Decl *D) {\n SemaRef.Diag(VD->getLocation(), diag::warn_omp_not_in_target_context);"}} | ||
}, | }, | ||
["warn_omp_section_is_char"]={ | ["warn_omp_section_is_char"]={ | ||
Line 2,298: | Line 2,298: | ||
[e]=qb, | [e]=qb, | ||
[i]={"1a3320e4639c",1440512644,"[OPENMP 4.0] Initial support for array sections."}, | [i]={"1a3320e4639c",1440512644,"[OPENMP 4.0] Initial support for array sections."}, | ||
[j]={{z, | [j]={{z,5326,"ExprResult Sema::ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc, Expr *LowerBound, SourceLocation ColonLocFirst, SourceLocation ColonLocSecond, Expr *Length, Expr *Stride, SourceLocation RBLoc) {\n // C99 6.5.2.1p1\n if (LowerBound) {\n if (LowerBound->getType()->isSpecificBuiltinType(BuiltinType::Char_S) || LowerBound->getType()->isSpecificBuiltinType(BuiltinType::Char_U))\n Diag(LowerBound->getExprLoc(), diag::warn_omp_section_is_char) << 0 << LowerBound->getSourceRange();"},{z,5340,"ExprResult Sema::ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc, Expr *LowerBound, SourceLocation ColonLocFirst, SourceLocation ColonLocSecond, Expr *Length, Expr *Stride, SourceLocation RBLoc) {\n if (Length) {\n if (Length->getType()->isSpecificBuiltinType(BuiltinType::Char_S) || Length->getType()->isSpecificBuiltinType(BuiltinType::Char_U))\n Diag(Length->getExprLoc(), diag::warn_omp_section_is_char) << 1 << Length->getSourceRange();"},{z,5355,"ExprResult Sema::ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc, Expr *LowerBound, SourceLocation ColonLocFirst, SourceLocation ColonLocSecond, Expr *Length, Expr *Stride, SourceLocation RBLoc) {\n if (Stride) {\n if (Stride->getType()->isSpecificBuiltinType(BuiltinType::Char_S) || Stride->getType()->isSpecificBuiltinType(BuiltinType::Char_U))\n Diag(Stride->getExprLoc(), diag::warn_omp_section_is_char) << 1 << Stride->getSourceRange();"}} | ||
}, | }, | ||
["warn_omp_unknown_assumption_clause_missing_id"]={ | ["warn_omp_unknown_assumption_clause_missing_id"]={ | ||
Line 2,312: | Line 2,312: | ||
[e]=A, | [e]=A, | ||
[i]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"}, | [i]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"}, | ||
[j]={{M, | [j]={{M,1721,"/// `omp assumes` or `omp begin/end assumes` <clause> [[,]<clause>]...\n/// where\n///\n/// clause:\n/// \'ext_IMPL_DEFINED\'\n/// \'absent\' \'(\' directive-name [, directive-name]* \')\'\n/// \'contains\' \'(\' directive-name [, directive-name]* \')\'\n/// \'holds\' \'(\' scalar-expression \')\'\n/// \'no_openmp\'\n/// \'no_openmp_routines\'\n/// \'no_parallelism\'\n///\nvoid Parser::ParseOpenMPAssumesDirective(OpenMPDirectiveKind DKind, SourceLocation Loc) {\n while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n // Handle unknown clauses by skipping them.\n if (Idx == -1) {\n Diag(StartLoc, diag::warn_omp_unknown_assumption_clause_missing_id) << llvm::omp::getOpenMPDirectiveName(DKind) << llvm::omp::getAllAssumeClauseOptions() << NextIsLPar;"}} | ||
}, | }, | ||
["warn_omp_unknown_assumption_clause_without_args"]={ | ["warn_omp_unknown_assumption_clause_without_args"]={ | ||
Line 2,326: | Line 2,326: | ||
[e]=A, | [e]=A, | ||
[i]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"}, | [i]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"}, | ||
[j]={{M, | [j]={{M,1740,"/// `omp assumes` or `omp begin/end assumes` <clause> [[,]<clause>]...\n/// where\n///\n/// clause:\n/// \'ext_IMPL_DEFINED\'\n/// \'absent\' \'(\' directive-name [, directive-name]* \')\'\n/// \'contains\' \'(\' directive-name [, directive-name]* \')\'\n/// \'holds\' \'(\' scalar-expression \')\'\n/// \'no_openmp\'\n/// \'no_openmp_routines\'\n/// \'no_parallelism\'\n///\nvoid Parser::ParseOpenMPAssumesDirective(OpenMPDirectiveKind DKind, SourceLocation Loc) {\n while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n if (NextIsLPar) {\n Diag(Tok.getLocation(), diag::warn_omp_unknown_assumption_clause_without_args) << II;"}} | ||
}, | }, | ||
["warn_omp_unterminated_declare_target"]={ | ["warn_omp_unterminated_declare_target"]={ | ||
Line 2,340: | Line 2,340: | ||
[e]=qb, | [e]=qb, | ||
[i]={Qc,1620530452,Pc}, | [i]={Qc,1620530452,Pc}, | ||
[j]={{nb, | [j]={{nb,23012,"void Sema::DiagnoseUnterminatedOpenMPDeclareTarget() {\n Diag(DTCI.Loc, diag::warn_omp_unterminated_declare_target) << getOpenMPDirectiveName(DTCI.Kind);"}} | ||
}, | }, | ||
["warn_omp_used_different_allocator"]={ | ["warn_omp_used_different_allocator"]={ | ||
Line 2,354: | Line 2,354: | ||
[e]=qb, | [e]=qb, | ||
[i]={"282555ad8268",1553027624,"[OPENMP]Warn if the different allocator is used for the variable."}, | [i]={"282555ad8268",1553027624,"[OPENMP]Warn if the different allocator is used for the variable."}, | ||
[j]={{nb, | [j]={{nb,3343,"static bool checkPreviousOMPAllocateAttribute(Sema &S, DSAStackTy *Stack, Expr *RefExpr, VarDecl *VD, OMPAllocateDeclAttr::AllocatorTypeTy AllocatorKind, Expr *Allocator) {\n if (!AllocatorsMatch) {\n S.Diag(AllocatorLoc, diag::warn_omp_used_different_allocator) << (Allocator ? 1 : 0) << AllocatorStream.str() << (PrevAllocator ? 1 : 0) << PrevAllocatorStream.str() << AllocatorRange;"}} | ||
}, | }, | ||
["warn_on_superclass_use"]={ | ["warn_on_superclass_use"]={ | ||
Line 2,366: | Line 2,366: | ||
[e]=p, | [e]=p, | ||
[i]={"34e3cef4836d",1266613134,"Start supporting declaration of ivars in @implementation"}, | [i]={"34e3cef4836d",1266613134,"Start supporting declaration of ivars in @implementation"}, | ||
[j]={{N, | [j]={{N,2168,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n if (LangOpts.ObjCRuntime.isNonFragile()) {\n if (ImpDecl->getSuperClass())\n Diag(ImpDecl->getLocation(), diag::warn_on_superclass_use);"}} | ||
}, | }, | ||
["warn_opencl_attr_deprecated_ignored"]={ | ["warn_opencl_attr_deprecated_ignored"]={ | ||
Line 2,380: | Line 2,380: | ||
[e]=p, | [e]=p, | ||
[i]={"c4bb5df4ab28",1459422442,"[OpenCL] Added nosvm attribute for OpenCL v2.0."}, | [i]={"c4bb5df4ab28",1459422442,"[OpenCL] Added nosvm attribute for OpenCL v2.0."}, | ||
[j]={{B, | [j]={{B,8284,"static void handleOpenCLNoSVMAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (S.LangOpts.getOpenCLCompatibleVersion() < 200)\n else\n S.Diag(AL.getLoc(), diag::warn_opencl_attr_deprecated_ignored) << AL << S.LangOpts.getOpenCLVersionString();"}} | ||
}, | }, | ||
["warn_opencl_generic_address_space_arg"]={ | ["warn_opencl_generic_address_space_arg"]={ | ||
Line 2,395: | Line 2,395: | ||
[e]=Rb, | [e]=Rb, | ||
[i]={"1076cc2ffae3",1537438047,"[OpenCL] Diagnose redundant address space conversion"}, | [i]={"1076cc2ffae3",1537438047,"[OpenCL] Diagnose redundant address space conversion"}, | ||
[j]={{x, | [j]={{x,1868,"// OpenCL v2.0 s6.13.9 - Address space qualifier functions.\n// Performs semantic analysis for the to_global/local/private call.\n// \\param S Reference to the semantic analyzer.\n// \\param BuiltinID ID of the builtin function.\n// \\param Call A pointer to the builtin call.\n// \\return True if a semantic error has been found, false otherwise.\nstatic bool SemaOpenCLBuiltinToAddr(Sema &S, unsigned BuiltinID, CallExpr *Call) {\n if (RT->getPointeeType().getAddressSpace() != LangAS::opencl_generic) {\n S.Diag(Call->getArg(0)->getBeginLoc(), diag::warn_opencl_generic_address_space_arg) << Call->getDirectCallee()->getNameInfo().getAsString() << Call->getArg(0)->getSourceRange();"}} | ||
}, | }, | ||
["warn_opencl_unsupported_core_feature"]={ | ["warn_opencl_unsupported_core_feature"]={ | ||
Line 2,410: | Line 2,410: | ||
[e]=w, | [e]=w, | ||
[i]={"f0efc0075131",1619110439,"[OpenCL] Introduce new method for validating OpenCL target"}, | [i]={"f0efc0075131",1619110439,"[OpenCL] Introduce new method for validating OpenCL target"}, | ||
[j]={{"clang/lib/Basic/Targets.cpp", | [j]={{"clang/lib/Basic/Targets.cpp",867,"/// validateOpenCLTarget - Check that OpenCL target has valid\n/// options setting based on OpenCL version.\nbool TargetInfo::validateOpenCLTarget(const LangOptions &Opts, DiagnosticsEngine &Diags) const {\n auto diagnoseNotSupportedCore = [&](llvm::StringRef Name, auto... OptArgs) {\n if (OpenCLOptions::isOpenCLOptionCoreIn(Opts, OptArgs...) && !hasFeatureEnabled(OpenCLFeaturesMap, Name))\n Diags.Report(diag::warn_opencl_unsupported_core_feature) << Name << Opts.OpenCLCPlusPlus << Opts.getOpenCLVersionTuple().getAsString();"}} | ||
}, | }, | ||
["warn_operator_new_returns_null"]={ | ["warn_operator_new_returns_null"]={ | ||
Line 2,424: | Line 2,424: | ||
[e]=p, | [e]=p, | ||
[i]={"2c6b449098dc",1389924573,"Issue a warning if a throwing operator new or operator new[] returns a null"}, | [i]={"2c6b449098dc",1389924573,"Issue a warning if a throwing operator new or operator new[] returns a null"}, | ||
[j]={{x, | [j]={{x,12959,"void Sema::CheckReturnValExpr(Expr *RetValExp, QualType lhsType, SourceLocation ReturnLoc, bool isObjCMethod, const AttrVec *Attrs, const FunctionDecl *FD) {\n // C++11 [basic.stc.dynamic.allocation]p4:\n // If an allocation function declared with a non-throwing\n // exception-specification fails to allocate storage, it shall return\n // a null pointer. Any other allocation function that fails to allocate\n // storage shall indicate failure only by throwing an exception [...]\n if (FD) {\n if (Op == OO_New || Op == OO_Array_New) {\n if (!Proto->isNothrow(/*ResultIfDependent*/ true) && CheckNonNullExpr(*this, RetValExp))\n Diag(ReturnLoc, diag::warn_operator_new_returns_null) << FD << getLangOpts().CPlusPlus11;"}} | ||
}, | }, | ||
["warn_option_invalid_ocl_version"]={ | ["warn_option_invalid_ocl_version"]={ | ||
Line 2,438: | Line 2,438: | ||
[e]=Qb, | [e]=Qb, | ||
[i]={"b5f176e9bdbd",1467229172,"[OpenCL] Allow -cl-std and other standard -cl- options in driver"}, | [i]={"b5f176e9bdbd",1467229172,"[OpenCL] Allow -cl-std and other standard -cl- options in driver"}, | ||
[j]={{"clang/lib/Frontend/CompilerInvocation.cpp", | [j]={{"clang/lib/Frontend/CompilerInvocation.cpp",550,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n // -cl-strict-aliasing needs to emit diagnostic in the case where CL > 1.0.\n // This option should be deprecated for CL > 1.0 because\n // this option was added for compatibility with OpenCL 1.0.\n if (Args.getLastArg(OPT_cl_strict_aliasing) && (LangOpts.getOpenCLCompatibleVersion() > 100))\n Diags.Report(diag::warn_option_invalid_ocl_version) << LangOpts.getOpenCLVersionString() << Args.getLastArg(OPT_cl_strict_aliasing)->getAsString(Args);"}} | ||
}, | }, | ||
["warn_os_log_format_narg"]={ | ["warn_os_log_format_narg"]={ | ||
Line 2,450: | Line 2,450: | ||
[e]=p, | [e]=p, | ||
[i]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]"}, | [i]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]"}, | ||
[j]={{x, | [j]={{x,10838,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n // %n is not allowed with os_log.\n if (FSType == Sema::FST_OSLog && CS.getKind() == ConversionSpecifier::nArg) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_os_log_format_narg), getLocationOfByte(CS.getStart()),"}} | ||
}, | }, | ||
["warn_out_of_range_compare"]={ | ["warn_out_of_range_compare"]={ | ||
Line 2,464: | Line 2,464: | ||
[e]=p, | [e]=p, | ||
[i]={"2f4e33aba231",1348169801,"Improvements to my patch in r164143 per"}, | [i]={"2f4e33aba231",1348169801,"Improvements to my patch in r164143 per"}, | ||
[j]={{x, | [j]={{x,13737,"static int classifyConstantValue(Expr *Constant) {\n // diag::warn_out_of_range_compare and diag::warn_tautological_bool_compare."},{x,13878,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n // FIXME: We use a somewhat different formatting for the in-range cases and\n // cases involving boolean values for historical reasons. We should pick a\n // consistent way of presenting these diagnostics.\n if (!InRange || Other->isKnownToHaveBooleanValue()) {\n S.DiagRuntimeBehavior(E->getOperatorLoc(), E, S.PDiag(!InRange ? diag::warn_out_of_range_compare : diag::warn_tautological_bool_compare) << OS.str() << classifyConstantValue(Constant) << OtherT << OtherIsBooleanDespiteType << *Result << E->getLHS()->getSourceRange() << E->getRHS()->getSourceRange());"}} | ||
}, | }, | ||
["warn_overaligned_type"]={ | ["warn_overaligned_type"]={ | ||
Line 2,479: | Line 2,479: | ||
[e]=p, | [e]=p, | ||
[i]={"411fc65b4566",1327439741,"Add a new warning, -Wover-aligned, which detects attempts to use the default"}, | [i]={"411fc65b4566",1327439741,"Add a new warning, -Wover-aligned, which detects attempts to use the default"}, | ||
[j]={{Lb, | [j]={{Lb,2364,"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 (OperatorNew) {\n // Warn if the type is over-aligned and is being allocated by (unaligned)\n // global operator new.\n if (PlacementArgs.empty() && !PassAlignment && (OperatorNew->isImplicit() || (OperatorNew->getBeginLoc().isValid() && getSourceManager().isInSystemHeader(OperatorNew->getBeginLoc())))) {\n if (Alignment > NewAlignment)\n Diag(StartLoc, diag::warn_overaligned_type) << AllocType << unsigned(Alignment / Context.getCharWidth()) << unsigned(NewAlignment / Context.getCharWidth());"}} | ||
}, | }, | ||
["warn_overloaded_shift_in_comparison"]={ | ["warn_overloaded_shift_in_comparison"]={ | ||
Line 2,493: | Line 2,493: | ||
[e]=p, | [e]=p, | ||
[i]={"fe042e6aab26",1366164765,"Add warning group -Woverloaded-shift-op-parentheses to -Wparentheses. This"}, | [i]={"fe042e6aab26",1366164765,"Add warning group -Woverloaded-shift-op-parentheses to -Wparentheses. This"}, | ||
[j]={{z, | [j]={{z,15870,"static void DiagnoseShiftCompare(Sema &S, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n S.Diag(OpLoc, diag::warn_overloaded_shift_in_comparison) << LHSExpr->getSourceRange() << RHSExpr->getSourceRange() << (Kind == OO_LessLess);"}} | ||
}, | }, | ||
["warn_overloaded_virtual"]={ | ["warn_overloaded_virtual"]={ | ||
Line 2,508: | Line 2,508: | ||
[e]=p, | [e]=p, | ||
[i]={"7272d9cf36cd",1296756075,"Implement -Woverloaded-virtual."}, | [i]={"7272d9cf36cd",1296756075,"Implement -Woverloaded-virtual."}, | ||
[j]={{Y, | [j]={{Y,10284,"/// Diagnose methods which overload virtual methods in a base class\n/// without overriding any.\nvoid Sema::DiagnoseHiddenVirtualMethods(CXXMethodDecl *MD) {\n if (Diags.isIgnored(diag::warn_overloaded_virtual, MD->getLocation()))"},{Y,10290,"/// Diagnose methods which overload virtual methods in a base class\n/// without overriding any.\nvoid Sema::DiagnoseHiddenVirtualMethods(CXXMethodDecl *MD) {\n if (!OverloadedMethods.empty()) {\n Diag(MD->getLocation(), diag::warn_overloaded_virtual) << MD << (OverloadedMethods.size() > 1);"}} | ||
}, | }, | ||
["warn_overriding_method_missing_noescape"]={ | ["warn_overriding_method_missing_noescape"]={ | ||
Line 2,522: | Line 2,522: | ||
[e]=p, | [e]=p, | ||
[i]={"fc587e6a5707",1505888571,"Add support for attribute \'noescape\'."}, | [i]={"fc587e6a5707",1505888571,"Add support for attribute \'noescape\'."}, | ||
[j]={{Y, | [j]={{Y,17983,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n if (OldFT->hasExtParameterInfos()) {\n for (unsigned I = 0, E = OldFT->getNumParams(); I != E; ++I)\n // A parameter of the overriding method should be annotated with noescape\n // if the corresponding parameter of the overridden method is annotated.\n if (OldFT->getExtParameterInfo(I).isNoEscape() && !NewFT->getExtParameterInfo(I).isNoEscape()) {\n Diag(New->getParamDecl(I)->getLocation(), diag::warn_overriding_method_missing_noescape);"},{N,118,"/// Issue a warning if the parameter of the overridden method is non-escaping\n/// but the parameter of the overriding method is not.\nstatic bool diagnoseNoescape(const ParmVarDecl *NewD, const ParmVarDecl *OldD, Sema &S) {\n if (OldD->hasAttr<NoEscapeAttr>() && !NewD->hasAttr<NoEscapeAttr>()) {\n S.Diag(NewD->getLocation(), diag::warn_overriding_method_missing_noescape);"}} | ||
}, | }, | ||
["warn_padded_struct_anon_field"]={ | ["warn_padded_struct_anon_field"]={ | ||
Line 2,537: | Line 2,537: | ||
[e]=w, | [e]=w, | ||
[i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | [i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | ||
[j]={{ac, | [j]={{ac,2309,"void ItaniumRecordLayoutBuilder::CheckFieldPadding(uint64_t Offset, uint64_t UnpaddedOffset, uint64_t UnpackedOffset, unsigned UnpackedAlign, bool isPacked, const FieldDecl *D) {\n // Warn if padding was introduced to the struct/class.\n if (!IsUnion && Offset > UnpaddedOffset) {\n if (D->getIdentifier())\n else\n Diag(D->getLocation(), diag::warn_padded_struct_anon_field) << getPaddingDiagFromTagKind(D->getParent()->getTagKind()) << Context.getTypeDeclType(D->getParent()) << PadSize << (InBits ? 1 : 0); // (byte|bit)"}} | ||
}, | }, | ||
["warn_padded_struct_field"]={ | ["warn_padded_struct_field"]={ | ||
Line 2,552: | Line 2,552: | ||
[e]=w, | [e]=w, | ||
[i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | [i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | ||
[j]={{ac, | [j]={{ac,2302,"void ItaniumRecordLayoutBuilder::CheckFieldPadding(uint64_t Offset, uint64_t UnpaddedOffset, uint64_t UnpackedOffset, unsigned UnpackedAlign, bool isPacked, const FieldDecl *D) {\n // Warn if padding was introduced to the struct/class.\n if (!IsUnion && Offset > UnpaddedOffset) {\n if (D->getIdentifier())\n Diag(D->getLocation(), diag::warn_padded_struct_field) << getPaddingDiagFromTagKind(D->getParent()->getTagKind()) << Context.getTypeDeclType(D->getParent()) << PadSize << (InBits ? 1 : 0) // (byte|bit)"}} | ||
}, | }, | ||
["warn_padded_struct_size"]={ | ["warn_padded_struct_size"]={ | ||
Line 2,567: | Line 2,567: | ||
[e]=w, | [e]=w, | ||
[i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | [i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | ||
[j]={{ac, | [j]={{ac,2196,"void ItaniumRecordLayoutBuilder::FinishLayout(const NamedDecl *D) {\n if (const RecordDecl *RD = dyn_cast<RecordDecl>(D)) {\n // Warn if padding was introduced to the struct/class/union.\n if (getSizeInBits() > UnpaddedSize) {\n Diag(RD->getLocation(), diag::warn_padded_struct_size) << Context.getTypeDeclType(RD) << PadSize << (InBits ? 1 : 0); // (byte|bit)"}} | ||
}, | }, | ||
["warn_param_mismatched_alignment"]={ | ["warn_param_mismatched_alignment"]={ | ||
Line 2,581: | Line 2,581: | ||
[e]=p, | [e]=p, | ||
[i]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"}, | [i]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"}, | ||
[j]={{x, | [j]={{x,6643,"/// Warn if a pointer or reference argument passed to a function points to an\n/// object that is less aligned than the parameter. This can happen when\n/// creating a typedef with a lower alignment than the original type and then\n/// calling functions defined in terms of the original type.\nvoid Sema::CheckArgAlignment(SourceLocation Loc, NamedDecl *FDecl, StringRef ParamName, QualType ArgTy, QualType ParamTy) {\n // If the argument is less aligned than the parameter, there is a\n // potential alignment issue.\n if (ArgAlign < ParamAlign)\n Diag(Loc, diag::warn_param_mismatched_alignment) << (int)ArgAlign.getQuantity() << (int)ParamAlign.getQuantity() << ParamName << (FDecl != nullptr) << FDecl;"}} | ||
}, | }, | ||
["warn_param_return_typestate_mismatch"]={ | ["warn_param_return_typestate_mismatch"]={ | ||
Line 2,596: | Line 2,596: | ||
[e]=p, | [e]=p, | ||
[i]={"36ea1dd4fc5e",1382050384,"Consumed Analysis: Allow parameters that are passed by non-const reference"}, | [i]={"36ea1dd4fc5e",1382050384,"Consumed Analysis: Allow parameters that are passed by non-const reference"}, | ||
[j]={{D, | [j]={{D,2104,"class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {\n void warnParamReturnTypestateMismatch(SourceLocation Loc, StringRef VariableName, StringRef ExpectedState, StringRef ObservedState) override {\n PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_param_return_typestate_mismatch) << VariableName << ExpectedState << ObservedState);"}} | ||
}, | }, | ||
["warn_param_typestate_mismatch"]={ | ["warn_param_typestate_mismatch"]={ | ||
Line 2,611: | Line 2,611: | ||
[e]=p, | [e]=p, | ||
[i]={"6939177ceab8",1382052233,"Consumed analysis: Add param_typestate attribute, which specifies that"}, | [i]={"6939177ceab8",1382052233,"Consumed analysis: Add param_typestate attribute, which specifies that"}, | ||
[j]={{D, | [j]={{D,2114,"class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {\n void warnParamTypestateMismatch(SourceLocation Loc, StringRef ExpectedState, StringRef ObservedState) override {\n PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_param_typestate_mismatch) << ExpectedState << ObservedState);"}} | ||
}, | }, | ||
["warn_parameter_size"]={ | ["warn_parameter_size"]={ | ||
Line 2,625: | Line 2,625: | ||
[e]=p, | [e]=p, | ||
[i]={"af84ec0a9612",1290035514,"Introduce option -Wargument-larger-than[=N] which warns about function definitions if they take by-v..."}, | [i]={"af84ec0a9612",1290035514,"Introduce option -Wargument-larger-than[=N] which warns about function definitions if they take by-v..."}, | ||
[j]={{G, | [j]={{G,14881,"void Sema::DiagnoseSizeOfParametersAndReturnValue(ArrayRef<ParmVarDecl *> Parameters, QualType ReturnTy, NamedDecl *D) {\n // Warn if any parameter is pass-by-value and larger than the specified\n // threshold.\n for (const ParmVarDecl *Parameter : Parameters) {\n if (Size > LangOpts.NumLargeByValueCopy)\n Diag(Parameter->getLocation(), diag::warn_parameter_size) << Parameter << Size;"}} | ||
}, | }, | ||
["warn_parens_disambiguated_as_function_declaration"]={ | ["warn_parens_disambiguated_as_function_declaration"]={ | ||
Line 2,639: | Line 2,639: | ||
[e]=p, | [e]=p, | ||
[i]={"943c44045551",1343683852,"Improvements to vexing-parse warnings. Make the no-parameters case more"}, | [i]={"943c44045551",1343683852,"Improvements to vexing-parse warnings. Make the no-parameters case more"}, | ||
[j]={{Q, | [j]={{Q,3860,"/// 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_parens_disambiguated_as_variable_declaration"]={ | ["warn_parens_disambiguated_as_variable_declaration"]={ | ||
Line 2,653: | Line 2,653: | ||
[e]=p, | [e]=p, | ||
[i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"}, | [i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"}, | ||
[j]={{Q, | [j]={{Q,4022,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n S.Diag(Paren.Loc, diag::warn_parens_disambiguated_as_variable_declaration) << ParenRange << D.getIdentifier();"}} | ||
}, | }, | ||
["warn_pass_class_arg_to_vararg"]={ | ["warn_pass_class_arg_to_vararg"]={ | ||
Line 2,668: | Line 2,668: | ||
[e]=p, | [e]=p, | ||
[i]={"2868a736f88e",1393551399,"Add a -Wclass-varargs to warn on objects of any class type being passed through an ellipsis. Since C..."}, | [i]={"2868a736f88e",1393551399,"Add a -Wclass-varargs to warn on objects of any class type being passed through an ellipsis. Since C..."}, | ||
[j]={{z, | [j]={{z,1005,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n case VAK_Valid:\n if (Ty->isRecordType()) {\n DiagRuntimeBehavior(E->getBeginLoc(), nullptr, PDiag(diag::warn_pass_class_arg_to_vararg) << Ty << CT << hasCStrMethod(E) << \".c_str()\");"}} | ||
}, | }, | ||
["warn_pessimizing_move_on_initialization"]={ | ["warn_pessimizing_move_on_initialization"]={ | ||
Line 2,683: | Line 2,683: | ||
[e]=p, | [e]=p, | ||
[i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."}, | [i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."}, | ||
[j]={{vb, | [j]={{vb,8407,"/// Provide warnings when std::move is used on construction.\nstatic void CheckMoveOnConstruction(Sema &S, const Expr *InitExpr, bool IsReturnStmt) {\n if (IsReturnStmt) {\n } else {\n DiagID = diag::warn_pessimizing_move_on_initialization;"}} | ||
}, | }, | ||
["warn_pessimizing_move_on_return"]={ | ["warn_pessimizing_move_on_return"]={ | ||
Line 2,698: | Line 2,698: | ||
[e]=p, | [e]=p, | ||
[i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."}, | [i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."}, | ||
[j]={{vb, | [j]={{vb,8405,"/// Provide warnings when std::move is used on construction.\nstatic void CheckMoveOnConstruction(Sema &S, const Expr *InitExpr, bool IsReturnStmt) {\n if (IsReturnStmt) {\n // If we\'re returning a function parameter, copy elision\n // is not possible.\n if (isa<ParmVarDecl>(VD))\n else\n DiagID = diag::warn_pessimizing_move_on_return;"}} | ||
}, | }, | ||
["warn_pointer_abs"]={ | ["warn_pointer_abs"]={ | ||
Line 2,712: | Line 2,712: | ||
[e]=p, | [e]=p, | ||
[i]={"7f77eb90a54c",1447556674,"[Sema] Don\'t crash trying to diagnose abs called on a pointer type"}, | [i]={"7f77eb90a54c",1447556674,"[Sema] Don\'t crash trying to diagnose abs called on a pointer type"}, | ||
[j]={{x, | [j]={{x,12041,"// Warn when using the wrong abs() function.\nvoid Sema::CheckAbsoluteValueFunction(const CallExpr *Call, const FunctionDecl *FDecl) {\n // Taking the absolute value of a pointer is very suspicious, they probably\n // wanted to index into an array, dereference a pointer, call a function, etc.\n if (ArgType->isPointerType() || ArgType->canDecayToPointerType()) {\n Diag(Call->getExprLoc(), diag::warn_pointer_abs) << DiagType << ArgType;"}} | ||
}, | }, | ||
["warn_pointer_arith_null_ptr"]={ | ["warn_pointer_arith_null_ptr"]={ | ||
Line 2,727: | Line 2,727: | ||
[e]=p, | [e]=p, | ||
[i]={"3d0a540857ed",1505852800,"Teach clang to tolerate the \'p = nullptr + n\' idiom used by glibc"}, | [i]={"3d0a540857ed",1505852800,"Teach clang to tolerate the \'p = nullptr + n\' idiom used by glibc"}, | ||
[j]={{z, | [j]={{z,11473,"/// 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 else\n S.Diag(Loc, diag::warn_pointer_arith_null_ptr) << S.getLangOpts().CPlusPlus << Pointer->getSourceRange();"}} | ||
}, | }, | ||
["warn_pointer_compare"]={ | ["warn_pointer_compare"]={ | ||
Line 2,741: | Line 2,741: | ||
[e]=p, | [e]=p, | ||
[i]={"f708f0a2430f",1565043340,"[Sema] Add -Wpointer-compare"}, | [i]={"f708f0a2430f",1565043340,"[Sema] Add -Wpointer-compare"}, | ||
[j]={{z, | [j]={{z,12916,"void Sema::CheckPtrComparisonWithNullChar(ExprResult &E, ExprResult &NullE) {\n if (!E.get()->getType()->isAnyPointerType() && E.get()->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) == Expr::NPCK_ZeroExpression) {\n if (const auto *CL = dyn_cast<CharacterLiteral>(E.get())) {\n if (CL->getValue() == 0)\n Diag(E.get()->getExprLoc(), diag::warn_pointer_compare) << NullValue << FixItHint::CreateReplacement(E.get()->getExprLoc(), NullValue ? \"NULL\" : \"(void *)0\");"},{z,13012,"void Sema::CheckPtrComparisonWithNullChar(ExprResult &E, ExprResult &NullE) {\n if (!E.get()->getType()->isAnyPointerType() && E.get()->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) == Expr::NPCK_ZeroExpression) {\n if (const auto *CL = dyn_cast<CharacterLiteral>(E.get())) {\n } else if (const auto *CE = dyn_cast<CStyleCastExpr>(E.get())) {\n if (T == Context.CharTy)\n Diag(E.get()->getExprLoc(), diag::warn_pointer_compare) << NullValue << FixItHint::CreateReplacement(E.get()->getExprLoc(), NullValue ? \"NULL\" : \"(void *)0\");"}} | ||
}, | }, | ||
["warn_pointer_indirection_from_incompatible_type"]={ | ["warn_pointer_indirection_from_incompatible_type"]={ | ||
Line 2,756: | Line 2,756: | ||
[e]=p, | [e]=p, | ||
[i]={"69a2c924b9e8",1304360479,"Add a warning for when reinterpret_cast leads to undefined behavior, patch by Richard Trieu!"}, | [i]={"69a2c924b9e8",1304360479,"Add a warning for when reinterpret_cast leads to undefined behavior, patch by Richard Trieu!"}, | ||
[j]={{Db, | [j]={{Db,2039,"// Checks for undefined behavior in reinterpret_cast.\n// The cases that is checked for is:\n// *reinterpret_cast<T*>(&a)\n// reinterpret_cast<T&>(a)\n// where accessing \'a\' as type \'T\' will result in undefined behavior.\nvoid Sema::CheckCompatibleReinterpretCast(QualType SrcType, QualType DestType, bool IsDereference, SourceRange Range) {\n unsigned DiagID = IsDereference ? diag::warn_pointer_indirection_from_incompatible_type : diag::warn_undefined_reinterpret_cast;"}} | ||
}, | }, | ||
["warn_pointer_sub_null_ptr"]={ | ["warn_pointer_sub_null_ptr"]={ | ||
Line 2,771: | Line 2,771: | ||
[e]=p, | [e]=p, | ||
[i]={Tb,1615397021,Sb}, | [i]={Tb,1615397021,Sb}, | ||
[j]={{z, | [j]={{z,11484,"/// Diagnose invalid subraction on a null pointer.\n///\nstatic void diagnoseSubtractionOnNullPointer(Sema &S, SourceLocation Loc, Expr *Pointer, bool BothNull) {\n S.DiagRuntimeBehavior(Loc, Pointer, S.PDiag(diag::warn_pointer_sub_null_ptr) << S.getLangOpts().CPlusPlus << Pointer->getSourceRange());"}} | ||
}, | }, | ||
["warn_pointer_to_enum_cast"]={ | ["warn_pointer_to_enum_cast"]={ | ||
Line 2,785: | Line 2,785: | ||
[e]=p, | [e]=p, | ||
[i]={cc,1576908663,bc}, | [i]={cc,1576908663,bc}, | ||
[j]={{Db, | [j]={{Db,3174,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // If either type is a pointer, the other type has to be either an\n // integer or a pointer.\n if (!DestType->isArithmeticType()) {\n } else if (!SrcType->isArithmeticType()) {\n if ((Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType)) && !DestType->isBooleanType()) {\n if (SrcType->isVoidPointerType())\n else if (DestType->isEnumeralType())\n Diag = diag::warn_pointer_to_enum_cast;"}} | ||
}, | }, | ||
["warn_pointer_to_int_cast"]={ | ["warn_pointer_to_int_cast"]={ | ||
Line 2,799: | Line 2,799: | ||
[e]=p, | [e]=p, | ||
[i]={cc,1576908663,bc}, | [i]={cc,1576908663,bc}, | ||
[j]={{Db, | [j]={{Db,2468,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n if (DestType->isIntegralType(Self.Context)) {\n // C++ 5.2.10p4: A pointer can be explicitly converted to any integral\n // type large enough to hold it; except in Microsoft mode, where the\n // integral type size doesn\'t matter (except we don\'t allow bool).\n if ((Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType))) {\n if (MicrosoftException) {\n unsigned Diag = SrcType->isVoidPointerType() ? diag::warn_void_pointer_to_int_cast : diag::warn_pointer_to_int_cast;"},{Db,3176,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // If either type is a pointer, the other type has to be either an\n // integer or a pointer.\n if (!DestType->isArithmeticType()) {\n } else if (!SrcType->isArithmeticType()) {\n if ((Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType)) && !DestType->isBooleanType()) {\n if (SrcType->isVoidPointerType())\n else if (DestType->isEnumeralType())\n else\n Diag = diag::warn_pointer_to_int_cast;"}} | ||
}, | }, | ||
["warn_poison_system_directories"]={ | ["warn_poison_system_directories"]={ | ||
Line 2,814: | Line 2,814: | ||
[e]=w, | [e]=w, | ||
[i]={"39f50da2a357",1568041174,"Support -fstack-clash-protection for x86"}, | [i]={"39f50da2a357",1568041174,"Support -fstack-clash-protection for x86"}, | ||
[j]={{"clang/lib/Lex/InitHeaderSearch.cpp", | [j]={{"clang/lib/Lex/InitHeaderSearch.cpp",153,"bool InitHeaderSearch::AddUnmappedPath(const Twine &Path, IncludeDirGroup Group, bool isFramework, std::optional<unsigned> UserEntryIdx) {\n // If use system headers while cross-compiling, emit the warning.\n if (HasSysroot && (MappedPathStr.startswith(\"/usr/include\") || MappedPathStr.startswith(\"/usr/local/include\"))) {\n Headers.getDiags().Report(diag::warn_poison_system_directories) << MappedPathStr;"}} | ||
}, | }, | ||
["warn_potentially_direct_selector_expression"]={ | ["warn_potentially_direct_selector_expression"]={ | ||
Line 2,828: | Line 2,828: | ||
[e]=p, | [e]=p, | ||
[i]={Kb,1582847864,Ub}, | [i]={Kb,1582847864,Ub}, | ||
[j]={{Z, | [j]={{Z,1334,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n if (!Method) {\n } else {\n if (onlyDirect) {\n } else if (anyDirect) {\n if (LikelyTargetMethod && LikelyTargetMethod->isDirectMethod()) {\n Diag(AtLoc, diag::warn_potentially_direct_selector_expression) << Sel;"}} | ||
}, | }, | ||
["warn_pp_ambiguous_macro"]={ | ["warn_pp_ambiguous_macro"]={ | ||
Line 2,842: | Line 2,842: | ||
[e]=C, | [e]=C, | ||
[i]={"5968b1b71f88",1349989659,"Diagnose the expansion of ambiguous macro definitions. This can happen"}, | [i]={"5968b1b71f88",1349989659,"Diagnose the expansion of ambiguous macro definitions. This can happen"}, | ||
[j]={{"clang/lib/Lex/PPMacroExpansion.cpp", | [j]={{"clang/lib/Lex/PPMacroExpansion.cpp",559,"/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be\n/// expanded as a macro, handle it and return the next token as \'Identifier\'.\nbool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier, const MacroDefinition &M) {\n // If the macro definition is ambiguous, complain.\n if (M.isAmbiguous()) {\n Diag(Identifier, diag::warn_pp_ambiguous_macro) << Identifier.getIdentifierInfo();"}} | ||
}, | }, | ||
["warn_pp_convert_to_positive"]={ | ["warn_pp_convert_to_positive"]={ | ||
Line 2,854: | Line 2,854: | ||
[e]=C, | [e]=C, | ||
[i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC"}, | [i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC"}, | ||
[j]={{dc, | [j]={{dc,688,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec. This returns the result in LHS.\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, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n while (true) {\n default:\n // If this just promoted something from signed to unsigned, and if the\n // value was negative, warn about it.\n if (ValueLive && Res.isUnsigned()) {\n if (!LHS.isUnsigned() && LHS.Val.isNegative())\n PP.Diag(OpLoc, diag::warn_pp_convert_to_positive) << 0 << toString(LHS.Val, 10, true) + \" to \" + toString(LHS.Val, 10, false) << LHS.getRange() << RHS.getRange();"},{dc,693,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec. This returns the result in LHS.\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, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n while (true) {\n default:\n // If this just promoted something from signed to unsigned, and if the\n // value was negative, warn about it.\n if (ValueLive && Res.isUnsigned()) {\n if (!RHS.isUnsigned() && RHS.Val.isNegative())\n PP.Diag(OpLoc, diag::warn_pp_convert_to_positive) << 1 << toString(RHS.Val, 10, true) + \" to \" + toString(RHS.Val, 10, false) << LHS.getRange() << RHS.getRange();"}} | ||
}, | }, | ||
["warn_pp_date_time"]={ | ["warn_pp_date_time"]={ | ||
Line 2,869: | Line 2,869: | ||
[e]=C, | [e]=C, | ||
[i]={"4f43e554081e",1402380531,"Implement -Wdate-time preprocessor warning"}, | [i]={"4f43e554081e",1402380531,"Implement -Wdate-time preprocessor warning"}, | ||
[j]={{"clang/lib/Lex/PPMacroExpansion.cpp", | [j]={{"clang/lib/Lex/PPMacroExpansion.cpp",1573,"/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded\n/// as a builtin macro, handle it and return the next token as \'Tok\'.\nvoid Preprocessor::ExpandBuiltinMacro(Token &Tok) {\n if (II == Ident__LINE__) {\n } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__ || II == Ident__FILE_NAME__) {\n } else if (II == Ident__DATE__) {\n Diag(Tok.getLocation(), diag::warn_pp_date_time);"},{"clang/lib/Lex/PPMacroExpansion.cpp",1583,"/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded\n/// as a builtin macro, handle it and return the next token as \'Tok\'.\nvoid Preprocessor::ExpandBuiltinMacro(Token &Tok) {\n if (II == Ident__LINE__) {\n } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__ || II == Ident__FILE_NAME__) {\n } else if (II == Ident__DATE__) {\n } else if (II == Ident__TIME__) {\n Diag(Tok.getLocation(), diag::warn_pp_date_time);"},{"clang/lib/Lex/PPMacroExpansion.cpp",1608,"/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded\n/// as a builtin macro, handle it and return the next token as \'Tok\'.\nvoid Preprocessor::ExpandBuiltinMacro(Token &Tok) {\n if (II == Ident__LINE__) {\n } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__ || II == Ident__FILE_NAME__) {\n } else if (II == Ident__DATE__) {\n } else if (II == Ident__TIME__) {\n } else if (II == Ident__INCLUDE_LEVEL__) {\n } else if (II == Ident__TIMESTAMP__) {\n Diag(Tok.getLocation(), diag::warn_pp_date_time);"}} | ||
}, | }, | ||
["warn_pp_expr_overflow"]={ | ["warn_pp_expr_overflow"]={ | ||
Line 2,881: | Line 2,881: | ||
[e]=C, | [e]=C, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{dc, | [j]={{dc,493,"/// 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::minus: {\n // If this operator is live and overflowed, report the issue.\n if (Overflow && ValueLive)\n PP.Diag(Loc, diag::warn_pp_expr_overflow) << Result.getRange();"},{dc,858,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec. This returns the result in LHS.\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, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n while (true) {\n // If this operator is live and overflowed, report the issue.\n if (Overflow && ValueLive)\n PP.Diag(OpLoc, diag::warn_pp_expr_overflow) << LHS.getRange() << RHS.getRange();"}} | ||
}, | }, | ||
["warn_pp_hdrstop_filename_ignored"]={ | ["warn_pp_hdrstop_filename_ignored"]={ | ||
Line 2,895: | Line 2,895: | ||
[e]=C, | [e]=C, | ||
[i]={"58df1affedc0",1536685844,"[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop"}, | [i]={"58df1affedc0",1536685844,"[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop"}, | ||
[j]={{H, | [j]={{H,885,"void Preprocessor::HandlePragmaHdrstop(Token &Tok) {\n if (Tok.is(tok::l_paren)) {\n Diag(Tok.getLocation(), diag::warn_pp_hdrstop_filename_ignored);"}} | ||
}, | }, | ||
["warn_pp_invalid_directive"]={ | ["warn_pp_invalid_directive"]={ | ||
Line 2,909: | Line 2,909: | ||
[e]=C, | [e]=C, | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{Fc, | [j]={{Fc,465,"void Preprocessor::SuggestTypoedDirective(const Token &Tok, StringRef Directive) const {\n if (std::optional<StringRef> Sugg = findSimilarStr(Directive, Candidates)) {\n Diag(Tok, diag::warn_pp_invalid_directive) << 1 << SuggValue << Hint;"}} | ||
}, | }, | ||
["warn_pp_line_decimal"]={ | ["warn_pp_line_decimal"]={ | ||
Line 2,921: | Line 2,921: | ||
[e]=C, | [e]=C, | ||
[i]={"ca556cb3e365",1240011469,"implement PR3940: #line numbers not fully checked"}, | [i]={"ca556cb3e365",1240011469,"implement PR3940: #line numbers not fully checked"}, | ||
[j]={{Fc, | [j]={{Fc,1390,"/// GetLineValue - Convert a numeric token into an unsigned value, emitting\n/// Diagnostic DiagID if it is invalid, and returning the value in Val.\nstatic bool GetLineValue(Token &DigitTok, unsigned &Val, unsigned DiagID, Preprocessor &PP, bool IsGNULineDirective = false) {\n if (DigitTokBegin[0] == \'0\' && Val)\n PP.Diag(DigitTok.getLocation(), diag::warn_pp_line_decimal) << IsGNULineDirective;"}} | ||
}, | }, | ||
["warn_pp_macro_def_mismatch_with_pch"]={ | ["warn_pp_macro_def_mismatch_with_pch"]={ | ||
Line 2,935: | Line 2,935: | ||
[e]=C, | [e]=C, | ||
[i]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers"}, | [i]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers"}, | ||
[j]={{Fc, | [j]={{Fc,3090,"/// HandleDefineDirective - Implements \\#define. This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n // When skipping just warn about macros that do not match.\n if (SkippingUntilPCHThroughHeader) {\n if (!OtherMI || !MI->isIdenticalTo(*OtherMI, *this,\n Diag(MI->getDefinitionLoc(), diag::warn_pp_macro_def_mismatch_with_pch) << MacroNameTok.getIdentifierInfo();"}} | ||
}, | }, | ||
["warn_pp_macro_hides_keyword"]={ | ["warn_pp_macro_hides_keyword"]={ | ||
Line 2,950: | Line 2,950: | ||
[e]=C, | [e]=C, | ||
[i]={"1ecb41c09b7d",1417518369,"Emit warning if define or undef reserved identifier or keyword."}, | [i]={"1ecb41c09b7d",1417518369,"Emit warning if define or undef reserved identifier or keyword."}, | ||
[j]={{Fc, | [j]={{Fc,3069,"/// HandleDefineDirective - Implements \\#define. This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n if (MacroShadowsKeyword && !isConfigurationPattern(MacroNameTok, MI, getLangOpts())) {\n Diag(MacroNameTok, diag::warn_pp_macro_hides_keyword);"}} | ||
}, | }, | ||
["warn_pp_macro_is_reserved_id"]={ | ["warn_pp_macro_is_reserved_id"]={ | ||
Line 2,965: | Line 2,965: | ||
[e]=C, | [e]=C, | ||
[i]={"1ecb41c09b7d",1417518369,"Emit warning if define or undef reserved identifier or keyword."}, | [i]={"1ecb41c09b7d",1417518369,"Emit warning if define or undef reserved identifier or keyword."}, | ||
[j]={{Fc, | [j]={{Fc,368,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n if (!SourceMgr.isInSystemHeader(MacroNameLoc) && (SourceMgr.getBufferName(MacroNameLoc) != \"<built-in>\")) {\n if (D == MD_ReservedMacro)\n Diag(MacroNameTok, diag::warn_pp_macro_is_reserved_id);"}} | ||
}, | }, | ||
["warn_pp_objc_macro_redef_ignored"]={ | ["warn_pp_objc_macro_redef_ignored"]={ | ||
Line 2,979: | Line 2,979: | ||
[e]=C, | [e]=C, | ||
[i]={"83760378617d",1449790261,"In Objective-C, ignore attempts to redefine the ARC/GC qualifier macros."}, | [i]={"83760378617d",1449790261,"In Objective-C, ignore attempts to redefine the ARC/GC qualifier macros."}, | ||
[j]={{Fc, | [j]={{Fc,3118,"/// HandleDefineDirective - Implements \\#define. This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n // Finally, if this identifier already had a macro defined for it, verify that\n // the macro bodies are identical, and issue diagnostics if they are not.\n if (const MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {\n // In Objective-C, ignore attempts to directly redefine the builtin\n // definitions of the ownership qualifiers. It\'s still possible to\n // #undef them.\n if (getLangOpts().ObjC && SourceMgr.getFileID(OtherMI->getDefinitionLoc()) == getPredefinesFileID() && isObjCProtectedMacro(MacroNameTok.getIdentifierInfo())) {\n // Warn if it changes the tokens.\n if ((!getDiagnostics().getSuppressSystemWarnings() || !SourceMgr.isInSystemHeader(DefineTok.getLocation())) && !MI->isIdenticalTo(*OtherMI, *this,\n Diag(MI->getDefinitionLoc(), diag::warn_pp_objc_macro_redef_ignored);"}} | ||
}, | }, | ||
["warn_pp_undef_identifier"]={ | ["warn_pp_undef_identifier"]={ | ||
Line 2,994: | Line 2,994: | ||
[e]=C, | [e]=C, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{dc, | [j]={{dc,260,"/// 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 default:\n // If this token\'s spelling is a pp-identifier, check to see if it is\n // \'defined\' or if it is a macro. Note that we check here because many\n // keywords are pp-identifiers, so we can\'t check the kind.\n if (IdentifierInfo *II = PeekTok.getIdentifierInfo()) {\n if (!II->isCPlusPlusOperatorKeyword()) {\n // If this identifier isn\'t \'defined\' or one of the special\n // preprocessor keywords and it wasn\'t macro expanded, it turns\n // into a simple 0\n if (ValueLive) {\n PP.Diag(PeekTok, diag::warn_pp_undef_identifier) << II;"},{dc,264,"/// 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 default:\n // If this token\'s spelling is a pp-identifier, check to see if it is\n // \'defined\' or if it is a macro. Note that we check here because many\n // keywords are pp-identifiers, so we can\'t check the kind.\n if (IdentifierInfo *II = PeekTok.getIdentifierInfo()) {\n if (!II->isCPlusPlusOperatorKeyword()) {\n // If this identifier isn\'t \'defined\' or one of the special\n // preprocessor keywords and it wasn\'t macro expanded, it turns\n // into a simple 0\n if (ValueLive) {\n if (DiagEngine.isIgnored(diag::warn_pp_undef_identifier, PeekTok.getLocation())) {"}} | ||
}, | }, | ||
["warn_pp_undef_prefix"]={ | ["warn_pp_undef_prefix"]={ | ||
Line 3,009: | Line 3,009: | ||
[e]=C, | [e]=C, | ||
[i]={"89a0c4066b0e",1593534486,"[clang][diagnostics] Add \'-Wundef-prefix\' warning option"}, | [i]={"89a0c4066b0e",1593534486,"[clang][diagnostics] Add \'-Wundef-prefix\' warning option"}, | ||
[j]={{dc, | [j]={{dc,273,"/// 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 default:\n // If this token\'s spelling is a pp-identifier, check to see if it is\n // \'defined\' or if it is a macro. Note that we check here because many\n // keywords are pp-identifiers, so we can\'t check the kind.\n if (IdentifierInfo *II = PeekTok.getIdentifierInfo()) {\n if (!II->isCPlusPlusOperatorKeyword()) {\n // If this identifier isn\'t \'defined\' or one of the special\n // preprocessor keywords and it wasn\'t macro expanded, it turns\n // into a simple 0\n if (ValueLive) {\n // If \'Wundef\' is enabled, do not emit \'undef-prefix\' diagnostics.\n if (DiagEngine.isIgnored(diag::warn_pp_undef_identifier, PeekTok.getLocation())) {\n if (llvm::any_of(UndefPrefixes, [&IdentifierName](const std::string &Prefix) { return IdentifierName.startswith(Prefix); }))\n PP.Diag(PeekTok, diag::warn_pp_undef_prefix) << AddFlagValue{llvm::join(UndefPrefixes, \",\")} << II;"}} | ||
}, | }, | ||
["warn_pragma_align_expected_equal"]={ | ["warn_pragma_align_expected_equal"]={ | ||
Line 3,023: | Line 3,023: | ||
[e]=A, | [e]=A, | ||
[i]={"cb82acb884fb",1280603827,"Parser: Add support for #pragma align, which is just another spelling of #pragma"}, | [i]={"cb82acb884fb",1280603827,"Parser: Add support for #pragma align, which is just another spelling of #pragma"}, | ||
[j]={{r, | [j]={{r,2269,"// #pragma \'align\' \'=\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'}\n// #pragma \'options \'align\' \'=\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'}\n// #pragma \'align\' \'(\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'} \')\'\nstatic void ParseAlignPragma(Preprocessor &PP, Token &FirstTok, bool IsOptions) {\n if (PP.getLangOpts().XLPragmaPack) {\n } else if (Tok.isNot(tok::equal)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_align_expected_equal) << IsOptions;"}} | ||
}, | }, | ||
["warn_pragma_align_invalid_option"]={ | ["warn_pragma_align_invalid_option"]={ | ||
Line 3,037: | Line 3,037: | ||
[e]=A, | [e]=A, | ||
[i]={"cb82acb884fb",1280603827,"Parser: Add support for #pragma align, which is just another spelling of #pragma"}, | [i]={"cb82acb884fb",1280603827,"Parser: Add support for #pragma align, which is just another spelling of #pragma"}, | ||
[j]={{r, | [j]={{r,2296,"// #pragma \'align\' \'=\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'}\n// #pragma \'options \'align\' \'=\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'}\n// #pragma \'align\' \'(\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'} \')\'\nstatic void ParseAlignPragma(Preprocessor &PP, Token &FirstTok, bool IsOptions) {\n if (II->isStr(\"native\"))\n else if (II->isStr(\"natural\"))\n else if (II->isStr(\"packed\"))\n else if (II->isStr(\"power\"))\n else if (II->isStr(\"mac68k\"))\n else if (II->isStr(\"reset\"))\n else {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_align_invalid_option) << IsOptions;"}} | ||
}, | }, | ||
["warn_pragma_align_not_xl_compatible"]={ | ["warn_pragma_align_not_xl_compatible"]={ | ||
Line 3,051: | Line 3,051: | ||
[e]=p, | [e]=p, | ||
[i]={Tb,1615397021,Sb}, | [i]={Tb,1615397021,Sb}, | ||
[j]={{G, | [j]={{G,17845,"void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD, SourceRange BraceRange) {\n // Clangs implementation of #pragma align(packed) differs in bitfield layout\n // from XLs and instead matches the XL #pragma pack(1) behavior.\n if (Context.getTargetInfo().getTriple().isOSAIX() && AlignPackStack.hasValue()) {\n // Only warn if there is at least 1 bitfield member.\n if (llvm::any_of(RD->fields(), [](const FieldDecl *FD) { return FD->isBitField(); }))\n Diag(BraceRange.getBegin(), diag::warn_pragma_align_not_xl_compatible);"}} | ||
}, | }, | ||
["warn_pragma_attribute_unused"]={ | ["warn_pragma_attribute_unused"]={ | ||
Line 3,065: | Line 3,065: | ||
[e]=p, | [e]=p, | ||
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"}, | [i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"}, | ||
[j]={{ib, | [j]={{ib,1083,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n // Dig back through the stack trying to find the most recently pushed group\n // that in Namespace. Note that this works fine if no namespace is present,\n // think of push/pops without namespaces as having an implicit \"nullptr\"\n // namespace.\n for (size_t Index = PragmaAttributeStack.size(); Index;) {\n if (PragmaAttributeStack[Index].Namespace == Namespace) {\n for (const PragmaAttributeEntry &Entry : PragmaAttributeStack[Index].Entries) {\n if (!Entry.IsUsed) {\n Diag(Entry.Attribute->getLoc(), diag::warn_pragma_attribute_unused) << *Entry.Attribute;"}} | ||
}, | }, | ||
["warn_pragma_comment_ignored"]={ | ["warn_pragma_comment_ignored"]={ | ||
Line 3,079: | Line 3,079: | ||
[e]=A, | [e]=A, | ||
[i]={"99efc0361b2d",1427143302,"Adds a warning for unrecognized argument to #pragma comment() on PS4."}, | [i]={"99efc0361b2d",1427143302,"Adds a warning for unrecognized argument to #pragma comment() on PS4."}, | ||
[j]={{r, | [j]={{r,3116,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (PP.getTargetInfo().getTriple().isOSBinFormatELF() && Kind != PCK_Lib) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_comment_ignored) << II->getName();"}} | ||
}, | }, | ||
["warn_pragma_debug_dependent_argument"]={ | ["warn_pragma_debug_dependent_argument"]={ | ||
Line 3,093: | Line 3,093: | ||
[e]=A, | [e]=A, | ||
[i]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives"}, | [i]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives"}, | ||
[j]={{r, | [j]={{r,732,"void Parser::HandlePragmaDump() {\n if (Tok.is(tok::eod)) {\n } else if (NextToken().is(tok::eod)) {\n } else {\n if (!E.isUsable() || E.get()->containsErrors()) {\n } else if (E.get()->getDependence() != ExprDependence::None) {\n PP.Diag(StartLoc, diag::warn_pragma_debug_dependent_argument) << E.get()->isTypeDependent() << SourceRange(StartLoc, Tok.getLocation());"}} | ||
}, | }, | ||
["warn_pragma_debug_missing_argument"]={ | ["warn_pragma_debug_missing_argument"]={ | ||
Line 3,107: | Line 3,107: | ||
[e]=C, | [e]=C, | ||
[i]={"ba3a4f917f2d",1452635966,"Improve AST dumping:"}, | [i]={"ba3a4f917f2d",1452635966,"Improve AST dumping:"}, | ||
[j]={{H, | [j]={{H,1098,"struct PragmaDebugHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DebugToken) override {\n if (II->isStr(\"assert\")) {\n } else if (II->isStr(\"crash\")) {\n } else if (II->isStr(\"parser_crash\")) {\n } else if (II->isStr(\"dump\")) {\n } else if (II->isStr(\"diag_mapping\")) {\n if (DiagName.is(tok::eod))\n else if (DiagName.is(tok::string_literal) && !DiagName.hasUDSuffix()) {\n } else {\n PP.Diag(DiagName, diag::warn_pragma_debug_missing_argument) << II->getName();"},{H,1114,"struct PragmaDebugHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DebugToken) override {\n if (II->isStr(\"assert\")) {\n } else if (II->isStr(\"crash\")) {\n } else if (II->isStr(\"parser_crash\")) {\n } else if (II->isStr(\"dump\")) {\n } else if (II->isStr(\"diag_mapping\")) {\n } else if (II->isStr(\"llvm_fatal_error\")) {\n } else if (II->isStr(\"llvm_unreachable\")) {\n } else if (II->isStr(\"macro\")) {\n if (MacroII)\n else\n PP.Diag(MacroName, diag::warn_pragma_debug_missing_argument) << II->getName();"},{H,1166,"struct PragmaDebugHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DebugToken) override {\n if (II->isStr(\"assert\")) {\n } else if (II->isStr(\"crash\")) {\n } else if (II->isStr(\"parser_crash\")) {\n } else if (II->isStr(\"dump\")) {\n } else if (II->isStr(\"diag_mapping\")) {\n } else if (II->isStr(\"llvm_fatal_error\")) {\n } else if (II->isStr(\"llvm_unreachable\")) {\n } else if (II->isStr(\"macro\")) {\n } else if (II->isStr(\"module_map\")) {\n } else if (II->isStr(\"overflow_stack\")) {\n } else if (II->isStr(\"captured\")) {\n } else if (II->isStr(\"modules\")) {\n if (!DumpII) {\n PP.Diag(Kind, diag::warn_pragma_debug_missing_argument) << II->getName();"},{r,713,"void Parser::HandlePragmaDump() {\n if (Tok.is(tok::eod)) {\n PP.Diag(Tok, diag::warn_pragma_debug_missing_argument) << \"dump\";"}} | ||
}, | }, | ||
["warn_pragma_debug_missing_command"]={ | ["warn_pragma_debug_missing_command"]={ | ||
Line 3,121: | Line 3,121: | ||
[e]=C, | [e]=C, | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{H, | [j]={{H,1059,"struct PragmaDebugHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DebugToken) override {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok, diag::warn_pragma_debug_missing_command);"}} | ||
}, | }, | ||
["warn_pragma_debug_unexpected_argument"]={ | ["warn_pragma_debug_unexpected_argument"]={ | ||
Line 3,135: | Line 3,135: | ||
[e]=C, | [e]=C, | ||
[i]={"31f4859c3e4d",1667168400,"[Clang] Allow additional mathematical symbols in identifiers."}, | [i]={"31f4859c3e4d",1667168400,"[Clang] Allow additional mathematical symbols in identifiers."}, | ||
[j]={{H, | [j]={{H,1199,"struct PragmaDebugHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DebugToken) override {\n if (II->isStr(\"assert\")) {\n } else if (II->isStr(\"crash\")) {\n } else if (II->isStr(\"parser_crash\")) {\n } else if (II->isStr(\"dump\")) {\n } else if (II->isStr(\"diag_mapping\")) {\n } else if (II->isStr(\"llvm_fatal_error\")) {\n } else if (II->isStr(\"llvm_unreachable\")) {\n } else if (II->isStr(\"macro\")) {\n } else if (II->isStr(\"module_map\")) {\n } else if (II->isStr(\"overflow_stack\")) {\n } else if (II->isStr(\"captured\")) {\n } else if (II->isStr(\"modules\")) {\n } else if (II->isStr(\"sloc_usage\")) {\n if (ArgToken.is(tok::numeric_constant) && PP.parseSimpleIntegerLiteral(ArgToken, Value)) {\n } else if (ArgToken.isNot(tok::eod)) {\n PP.Diag(ArgToken, diag::warn_pragma_debug_unexpected_argument);"},{r,716,"void Parser::HandlePragmaDump() {\n if (Tok.is(tok::eod)) {\n } else if (NextToken().is(tok::eod)) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok, diag::warn_pragma_debug_unexpected_argument);"}} | ||
}, | }, | ||
["warn_pragma_debug_unexpected_command"]={ | ["warn_pragma_debug_unexpected_command"]={ | ||
Line 3,149: | Line 3,149: | ||
[e]=C, | [e]=C, | ||
[i]={"f2cf329ccd1b",1282084368,"Lex: Add #pragma clang __debug {llvm_fatal_error, llvm_unreachable}, for testing"}, | [i]={"f2cf329ccd1b",1282084368,"Lex: Add #pragma clang __debug {llvm_fatal_error, llvm_unreachable}, for testing"}, | ||
[j]={{H, | [j]={{H,1185,"struct PragmaDebugHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DebugToken) override {\n if (II->isStr(\"assert\")) {\n } else if (II->isStr(\"crash\")) {\n } else if (II->isStr(\"parser_crash\")) {\n } else if (II->isStr(\"dump\")) {\n } else if (II->isStr(\"diag_mapping\")) {\n } else if (II->isStr(\"llvm_fatal_error\")) {\n } else if (II->isStr(\"llvm_unreachable\")) {\n } else if (II->isStr(\"macro\")) {\n } else if (II->isStr(\"module_map\")) {\n } else if (II->isStr(\"overflow_stack\")) {\n } else if (II->isStr(\"captured\")) {\n } else if (II->isStr(\"modules\")) {\n if (!DumpII) {\n } else if (DumpII->isStr(\"all\")) {\n } else if (DumpII->isStr(\"visible\")) {\n } else if (DumpII->isStr(\"building\")) {\n } else {\n PP.Diag(Tok, diag::warn_pragma_debug_unexpected_command) << DumpII->getName();"},{H,1206,"struct PragmaDebugHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DebugToken) override {\n if (II->isStr(\"assert\")) {\n } else if (II->isStr(\"crash\")) {\n } else if (II->isStr(\"parser_crash\")) {\n } else if (II->isStr(\"dump\")) {\n } else if (II->isStr(\"diag_mapping\")) {\n } else if (II->isStr(\"llvm_fatal_error\")) {\n } else if (II->isStr(\"llvm_unreachable\")) {\n } else if (II->isStr(\"macro\")) {\n } else if (II->isStr(\"module_map\")) {\n } else if (II->isStr(\"overflow_stack\")) {\n } else if (II->isStr(\"captured\")) {\n } else if (II->isStr(\"modules\")) {\n } else if (II->isStr(\"sloc_usage\")) {\n } else {\n PP.Diag(Tok, diag::warn_pragma_debug_unexpected_command) << II->getName();"}} | ||
}, | }, | ||
["warn_pragma_debug_unknown_module"]={ | ["warn_pragma_debug_unknown_module"]={ | ||
Line 3,163: | Line 3,163: | ||
[e]=C, | [e]=C, | ||
[i]={"77e53cbe8473",1555549021,"Add \'#pragma clang __debug module_map module.name\' to dump the module"}, | [i]={"77e53cbe8473",1555549021,"Add \'#pragma clang __debug module_map module.name\' to dump the module"}, | ||
[j]={{H, | [j]={{H,1126,"struct PragmaDebugHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DebugToken) override {\n if (II->isStr(\"assert\")) {\n } else if (II->isStr(\"crash\")) {\n } else if (II->isStr(\"parser_crash\")) {\n } else if (II->isStr(\"dump\")) {\n } else if (II->isStr(\"diag_mapping\")) {\n } else if (II->isStr(\"llvm_fatal_error\")) {\n } else if (II->isStr(\"llvm_unreachable\")) {\n } else if (II->isStr(\"macro\")) {\n } else if (II->isStr(\"module_map\")) {\n for (auto IIAndLoc : ModuleName) {\n if (!M) {\n PP.Diag(IIAndLoc.second, diag::warn_pragma_debug_unknown_module) << IIAndLoc.first;"}} | ||
}, | }, | ||
["warn_pragma_deprecated_macro_use"]={ | ["warn_pragma_deprecated_macro_use"]={ | ||
Line 3,177: | Line 3,177: | ||
[e]=Qb, | [e]=Qb, | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{jc, | [j]={{jc,1455,"void Preprocessor::emitMacroDeprecationWarning(const Token &Identifier) const {\n if (Info.Message.empty())\n Diag(Identifier, diag::warn_pragma_deprecated_macro_use) << Identifier.getIdentifierInfo() << 0;"},{jc,1458,"void Preprocessor::emitMacroDeprecationWarning(const Token &Identifier) const {\n if (Info.Message.empty())\n else\n Diag(Identifier, diag::warn_pragma_deprecated_macro_use) << Identifier.getIdentifierInfo() << 1 << Info.Message;"}} | ||
}, | }, | ||
["warn_pragma_diagnostic_cannot_pop"]={ | ["warn_pragma_diagnostic_cannot_pop"]={ | ||
Line 3,191: | Line 3,191: | ||
[e]=C, | [e]=C, | ||
[i]={"3cc2648b476e",1283181334,"Now that GCC will have #pragma push/pop (in GCC 4.6), allow the"}, | [i]={"3cc2648b476e",1283181334,"Now that GCC will have #pragma push/pop (in GCC 4.6), allow the"}, | ||
[j]={{H, | [j]={{H,1302,"/// PragmaDiagnosticHandler - e.g. \'\\#pragma GCC diagnostic ignored \"-Wformat\"\'\nstruct PragmaDiagnosticHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DiagToken) override {\n if (II->isStr(\"pop\")) {\n if (!PP.getDiagnostics().popMappings(DiagLoc))\n PP.Diag(Tok, diag::warn_pragma_diagnostic_cannot_pop);"},{H,1424,"/// \"\\#pragma warning(...)\". MSVC\'s diagnostics do not map cleanly to clang\'s\n/// diagnostics, so we don\'t really implement this pragma. We parse it and\n/// ignore it to avoid -Wunknown-pragma warnings.\nstruct PragmaWarningHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (II && II->isStr(\"push\")) {\n } else if (II && II->isStr(\"pop\")) {\n if (!PP.getDiagnostics().popMappings(DiagLoc))\n PP.Diag(Tok, diag::warn_pragma_diagnostic_cannot_pop);"}} | ||
}, | }, | ||
["warn_pragma_diagnostic_invalid"]={ | ["warn_pragma_diagnostic_invalid"]={ | ||
Line 3,205: | Line 3,205: | ||
[e]=C, | [e]=C, | ||
[i]={"504af1177d9c",1240183018,"implement \"#pragma GCC diagnostic\". Besides being a nice feature, this"}, | [i]={"504af1177d9c",1240183018,"implement \"#pragma GCC diagnostic\". Besides being a nice feature, this"}, | ||
[j]={{H, | [j]={{H,1290,"/// PragmaDiagnosticHandler - e.g. \'\\#pragma GCC diagnostic ignored \"-Wformat\"\'\nstruct PragmaDiagnosticHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DiagToken) override {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok, diag::warn_pragma_diagnostic_invalid);"},{H,1327,"/// PragmaDiagnosticHandler - e.g. \'\\#pragma GCC diagnostic ignored \"-Wformat\"\'\nstruct PragmaDiagnosticHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DiagToken) override {\n if (SV == diag::Severity()) {\n PP.Diag(Tok, diag::warn_pragma_diagnostic_invalid);"}} | ||
}, | }, | ||
["warn_pragma_diagnostic_invalid_option"]={ | ["warn_pragma_diagnostic_invalid_option"]={ | ||
Line 3,219: | Line 3,219: | ||
[e]=C, | [e]=C, | ||
[i]={"504af1177d9c",1240183018,"implement \"#pragma GCC diagnostic\". Besides being a nice feature, this"}, | [i]={"504af1177d9c",1240183018,"implement \"#pragma GCC diagnostic\". Besides being a nice feature, this"}, | ||
[j]={{H, | [j]={{H,1345,"/// PragmaDiagnosticHandler - e.g. \'\\#pragma GCC diagnostic ignored \"-Wformat\"\'\nstruct PragmaDiagnosticHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DiagToken) override {\n if (WarningName.size() < 3 || WarningName[0] != \'-\' || (WarningName[1] != \'W\' && WarningName[1] != \'R\')) {\n PP.Diag(StringLoc, diag::warn_pragma_diagnostic_invalid_option);"}} | ||
}, | }, | ||
["warn_pragma_diagnostic_invalid_token"]={ | ["warn_pragma_diagnostic_invalid_token"]={ | ||
Line 3,233: | Line 3,233: | ||
[e]=C, | [e]=C, | ||
[i]={"504af1177d9c",1240183018,"implement \"#pragma GCC diagnostic\". Besides being a nice feature, this"}, | [i]={"504af1177d9c",1240183018,"implement \"#pragma GCC diagnostic\". Besides being a nice feature, this"}, | ||
[j]={{H, | [j]={{H,1307,"/// PragmaDiagnosticHandler - e.g. \'\\#pragma GCC diagnostic ignored \"-Wformat\"\'\nstruct PragmaDiagnosticHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DiagToken) override {\n if (II->isStr(\"pop\")) {\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok.getLocation(), diag::warn_pragma_diagnostic_invalid_token);"},{H,1315,"/// PragmaDiagnosticHandler - e.g. \'\\#pragma GCC diagnostic ignored \"-Wformat\"\'\nstruct PragmaDiagnosticHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DiagToken) override {\n if (II->isStr(\"pop\")) {\n } else if (II->isStr(\"push\")) {\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok.getLocation(), diag::warn_pragma_diagnostic_invalid_token);"},{H,1339,"/// PragmaDiagnosticHandler - e.g. \'\\#pragma GCC diagnostic ignored \"-Wformat\"\'\nstruct PragmaDiagnosticHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DiagToken) override {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_diagnostic_invalid_token);"}} | ||
}, | }, | ||
["warn_pragma_diagnostic_unknown_warning"]={ | ["warn_pragma_diagnostic_unknown_warning"]={ | ||
Line 3,247: | Line 3,247: | ||
[e]=C, | [e]=C, | ||
[i]={"504af1177d9c",1240183018,"implement \"#pragma GCC diagnostic\". Besides being a nice feature, this"}, | [i]={"504af1177d9c",1240183018,"implement \"#pragma GCC diagnostic\". Besides being a nice feature, this"}, | ||
[j]={{H, | [j]={{H,1362,"/// PragmaDiagnosticHandler - e.g. \'\\#pragma GCC diagnostic ignored \"-Wformat\"\'\nstruct PragmaDiagnosticHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DiagToken) override {\n if (unknownDiag)\n PP.Diag(StringLoc, diag::warn_pragma_diagnostic_unknown_warning) << WarningName;"}} | ||
}, | }, | ||
["warn_pragma_exec_charset_expected"]={ | ["warn_pragma_exec_charset_expected"]={ | ||
Line 3,261: | Line 3,261: | ||
[e]=C, | [e]=C, | ||
[i]={"0f56b22614c8",1552587137,"Add PragmaHandler for MSVC pragma execution_character_set"}, | [i]={"0f56b22614c8",1552587137,"Add PragmaHandler for MSVC pragma execution_character_set"}, | ||
[j]={{H, | [j]={{H,1542,"/// \"\\#pragma execution_character_set(...)\". MSVC supports this pragma only\n/// for \"UTF-8\". We parse it and ignore it if UTF-8 is provided and warn\n/// otherwise to avoid -Wunknown-pragma warnings.\nstruct PragmaExecCharsetHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(Tok, diag::warn_pragma_exec_charset_expected) << \"(\";"},{H,1580,"/// \"\\#pragma execution_character_set(...)\". MSVC supports this pragma only\n/// for \"UTF-8\". We parse it and ignore it if UTF-8 is provided and warn\n/// otherwise to avoid -Wunknown-pragma warnings.\nstruct PragmaExecCharsetHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok, diag::warn_pragma_exec_charset_expected) << \")\";"}} | ||
}, | }, | ||
["warn_pragma_exec_charset_push_invalid"]={ | ["warn_pragma_exec_charset_push_invalid"]={ | ||
Line 3,275: | Line 3,275: | ||
[e]=C, | [e]=C, | ||
[i]={"0f56b22614c8",1552587137,"Add PragmaHandler for MSVC pragma execution_character_set"}, | [i]={"0f56b22614c8",1552587137,"Add PragmaHandler for MSVC pragma execution_character_set"}, | ||
[j]={{H, | [j]={{H,1563,"/// \"\\#pragma execution_character_set(...)\". MSVC supports this pragma only\n/// for \"UTF-8\". We parse it and ignore it if UTF-8 is provided and warn\n/// otherwise to avoid -Wunknown-pragma warnings.\nstruct PragmaExecCharsetHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (II && II->isStr(\"push\")) {\n if (Tok.is(tok::comma)) {\n // MSVC supports either of these, but nothing else.\n if (ExecCharset != \"UTF-8\" && ExecCharset != \"utf-8\") {\n PP.Diag(Tok, diag::warn_pragma_exec_charset_push_invalid) << ExecCharset;"}} | ||
}, | }, | ||
["warn_pragma_exec_charset_spec_invalid"]={ | ["warn_pragma_exec_charset_spec_invalid"]={ | ||
Line 3,289: | Line 3,289: | ||
[e]=C, | [e]=C, | ||
[i]={"0f56b22614c8",1552587137,"Add PragmaHandler for MSVC pragma execution_character_set"}, | [i]={"0f56b22614c8",1552587137,"Add PragmaHandler for MSVC pragma execution_character_set"}, | ||
[j]={{H, | [j]={{H,1575,"/// \"\\#pragma execution_character_set(...)\". MSVC supports this pragma only\n/// for \"UTF-8\". We parse it and ignore it if UTF-8 is provided and warn\n/// otherwise to avoid -Wunknown-pragma warnings.\nstruct PragmaExecCharsetHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (II && II->isStr(\"push\")) {\n } else if (II && II->isStr(\"pop\")) {\n } else {\n PP.Diag(Tok, diag::warn_pragma_exec_charset_spec_invalid);"}} | ||
}, | }, | ||
["warn_pragma_expected_action_or_r_paren"]={ | ["warn_pragma_expected_action_or_r_paren"]={ | ||
Line 3,303: | Line 3,303: | ||
[e]=A, | [e]=A, | ||
[i]={mc,1396996247,lc}, | [i]={mc,1396996247,lc}, | ||
[j]={{r, | [j]={{r,1014,"bool Parser::HandlePragmaMSSection(StringRef PragmaName, SourceLocation PragmaLocation) {\n while (Tok.is(tok::comma)) {\n if (!Tok.isAnyIdentifier()) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_action_or_r_paren) << PragmaName;"}} | ||
}, | }, | ||
["warn_pragma_expected_colon"]={ | ["warn_pragma_expected_colon"]={ | ||
Line 3,317: | Line 3,317: | ||
[e]=A, | [e]=A, | ||
[i]={"7ce13fc940de",1297647773,"OpenCL: add support for __kernel, kernel keywords and EXTENSION,"}, | [i]={"7ce13fc940de",1297647773,"OpenCL: add support for __kernel, kernel keywords and EXTENSION,"}, | ||
[j]={{M, | [j]={{M,3614,"/// Parses a comma-separated list of interop-types and a prefer_type list.\n///\nbool Parser::ParseOMPInteropInfo(OMPInteropInfo &InteropInfo, OpenMPClauseKind Kind) {\n if (Kind == OMPC_init) {\n if (Tok.isNot(tok::colon) && (IsTarget || IsTargetSync))\n Diag(Tok, diag::warn_pragma_expected_colon) << \"interop types\";"},{M,3830,"/// Parsing of OpenMP clauses with single expressions and some additional\n/// argument like \'schedule\' or \'dist_schedule\'.\n///\n/// schedule-clause:\n/// \'schedule\' \'(\' [ modifier [ \',\' modifier ] \':\' ] kind [\',\' expression ]\n/// \')\'\n///\n/// if-clause:\n/// \'if\' \'(\' [ directive-name-modifier \':\' ] expression \')\'\n///\n/// defaultmap:\n/// \'defaultmap\' \'(\' modifier [ \':\' kind ] \')\'\n///\n/// device-clause:\n/// \'device\' \'(\' [ device-modifier \':\' ] expression \')\'\n///\nOMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, bool ParseOnly) {\n if (Kind == OMPC_schedule) {\n if (KindModifier > OMPC_SCHEDULE_unknown) {\n // Parse \':\'\n if (Tok.is(tok::colon))\n else\n Diag(Tok, diag::warn_pragma_expected_colon) << \"schedule modifier\";"},{M,3871,"/// Parsing of OpenMP clauses with single expressions and some additional\n/// argument like \'schedule\' or \'dist_schedule\'.\n///\n/// schedule-clause:\n/// \'schedule\' \'(\' [ modifier [ \',\' modifier ] \':\' ] kind [\',\' expression ]\n/// \')\'\n///\n/// if-clause:\n/// \'if\' \'(\' [ directive-name-modifier \':\' ] expression \')\'\n///\n/// defaultmap:\n/// \'defaultmap\' \'(\' modifier [ \':\' kind ] \')\'\n///\n/// device-clause:\n/// \'device\' \'(\' [ device-modifier \':\' ] expression \')\'\n///\nOMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, bool ParseOnly) {\n if (Kind == OMPC_schedule) {\n } else if (Kind == OMPC_dist_schedule) {\n } else if (Kind == OMPC_defaultmap) {\n // Parse \':\'\n if (Tok.is(tok::colon) || getLangOpts().OpenMP < 50) {\n if (Tok.is(tok::colon))\n else if (Arg.back() != OMPC_DEFAULTMAP_MODIFIER_unknown)\n Diag(Tok, diag::warn_pragma_expected_colon) << \"defaultmap modifier\";"},{M,3902,"/// Parsing of OpenMP clauses with single expressions and some additional\n/// argument like \'schedule\' or \'dist_schedule\'.\n///\n/// schedule-clause:\n/// \'schedule\' \'(\' [ modifier [ \',\' modifier ] \':\' ] kind [\',\' expression ]\n/// \')\'\n///\n/// if-clause:\n/// \'if\' \'(\' [ directive-name-modifier \':\' ] expression \')\'\n///\n/// defaultmap:\n/// \'defaultmap\' \'(\' modifier [ \':\' kind ] \')\'\n///\n/// device-clause:\n/// \'device\' \'(\' [ device-modifier \':\' ] expression \')\'\n///\nOMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, bool ParseOnly) {\n if (Kind == OMPC_schedule) {\n } else if (Kind == OMPC_dist_schedule) {\n } else if (Kind == OMPC_defaultmap) {\n } else if (Kind == OMPC_order) {\n if (KindModifier > OMPC_ORDER_unknown) {\n // Parse \':\'\n if (Tok.is(tok::colon))\n else\n Diag(Tok, diag::warn_pragma_expected_colon) << \"order modifier\";"},{M,4373,"/// Parses clauses with list.\nbool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, SmallVectorImpl<Expr *> &Vars, Sema::OpenMPVarListDataTy &Data) {\n // Handle reduction-identifier for reduction clause.\n if (Kind == OMPC_reduction || Kind == OMPC_task_reduction || Kind == OMPC_in_reduction) {\n if (Tok.is(tok::colon))\n else\n Diag(Tok, diag::warn_pragma_expected_colon) << \"reduction identifier\";"},{M,4419,"/// Parses clauses with list.\nbool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, SmallVectorImpl<Expr *> &Vars, Sema::OpenMPVarListDataTy &Data) {\n // Handle reduction-identifier for reduction clause.\n if (Kind == OMPC_reduction || Kind == OMPC_task_reduction || Kind == OMPC_in_reduction) {\n } else if (Kind == OMPC_depend || Kind == OMPC_doacross) {\n if (Tok.is(tok::colon)) {\n } else if (Kind != OMPC_doacross || Tok.isNot(tok::r_paren)) {\n Diag(Tok, DKind == OMPD_ordered ? diag::warn_pragma_expected_colon_r_paren : diag::warn_pragma_expected_colon) << (Kind == OMPC_depend ? \"dependency type\" : \"dependence-type\");"},{M,4575,"/// Parses clauses with list.\nbool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, SmallVectorImpl<Expr *> &Vars, Sema::OpenMPVarListDataTy &Data) {\n // Handle reduction-identifier for reduction clause.\n if (Kind == OMPC_reduction || Kind == OMPC_task_reduction || Kind == OMPC_in_reduction) {\n } else if (Kind == OMPC_depend || Kind == OMPC_doacross) {\n } else if (Kind == OMPC_linear) {\n } else if (Kind == OMPC_lastprivate) {\n } else if (Kind == OMPC_map) {\n } else if (Kind == OMPC_to || Kind == OMPC_from) {\n if (!Data.MotionModifiers.empty() && Tok.isNot(tok::colon)) {\n if (!IsInvalidMapperModifier) {\n if (getLangOpts().OpenMP < 51)\n Diag(Tok, diag::warn_pragma_expected_colon) << \")\";"},{M,4577,"/// Parses clauses with list.\nbool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, SmallVectorImpl<Expr *> &Vars, Sema::OpenMPVarListDataTy &Data) {\n // Handle reduction-identifier for reduction clause.\n if (Kind == OMPC_reduction || Kind == OMPC_task_reduction || Kind == OMPC_in_reduction) {\n } else if (Kind == OMPC_depend || Kind == OMPC_doacross) {\n } else if (Kind == OMPC_linear) {\n } else if (Kind == OMPC_lastprivate) {\n } else if (Kind == OMPC_map) {\n } else if (Kind == OMPC_to || Kind == OMPC_from) {\n if (!Data.MotionModifiers.empty() && Tok.isNot(tok::colon)) {\n if (!IsInvalidMapperModifier) {\n if (getLangOpts().OpenMP < 51)\n else\n Diag(Tok, diag::warn_pragma_expected_colon) << \"motion modifier\";"},{M,4637,"/// Parses clauses with list.\nbool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, SmallVectorImpl<Expr *> &Vars, Sema::OpenMPVarListDataTy &Data) {\n // Handle reduction-identifier for reduction clause.\n if (Kind == OMPC_reduction || Kind == OMPC_task_reduction || Kind == OMPC_in_reduction) {\n } else if (Kind == OMPC_depend || Kind == OMPC_doacross) {\n } else if (Kind == OMPC_linear) {\n } else if (Kind == OMPC_lastprivate) {\n } else if (Kind == OMPC_map) {\n } else if (Kind == OMPC_to || Kind == OMPC_from) {\n } else if (Kind == OMPC_allocate || (Kind == OMPC_affinity && Tok.is(tok::identifier) && PP.getSpelling(Tok) == \"iterator\")) {\n } else if (Kind == OMPC_adjust_args) {\n if (Data.ExtraModifier == OMPC_ADJUST_ARGS_unknown) {\n } else {\n ExpectAndConsume(tok::colon, diag::warn_pragma_expected_colon, \"adjust-op\");"},{r,2562,"void PragmaOpenCLExtensionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::colon)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_colon) << Ext;"}} | ||
}, | }, | ||
["warn_pragma_expected_colon_r_paren"]={ | ["warn_pragma_expected_colon_r_paren"]={ | ||
Line 3,331: | Line 3,331: | ||
[e]=A, | [e]=A, | ||
[i]={"eb4823503331",1450415156,"[OPENMP 4.5] Parsing/sema analysis for \'depend(source)\' clause in \'ordered\' directive."}, | [i]={"eb4823503331",1450415156,"[OPENMP 4.5] Parsing/sema analysis for \'depend(source)\' clause in \'ordered\' directive."}, | ||
[j]={{M, | [j]={{M,4418,"/// Parses clauses with list.\nbool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, SmallVectorImpl<Expr *> &Vars, Sema::OpenMPVarListDataTy &Data) {\n // Handle reduction-identifier for reduction clause.\n if (Kind == OMPC_reduction || Kind == OMPC_task_reduction || Kind == OMPC_in_reduction) {\n } else if (Kind == OMPC_depend || Kind == OMPC_doacross) {\n if (Tok.is(tok::colon)) {\n } else if (Kind != OMPC_doacross || Tok.isNot(tok::r_paren)) {\n Diag(Tok, DKind == OMPD_ordered ? diag::warn_pragma_expected_colon_r_paren : diag::warn_pragma_expected_colon) << (Kind == OMPC_depend ? \"dependency type\" : \"dependence-type\");"}} | ||
}, | }, | ||
["warn_pragma_expected_comma"]={ | ["warn_pragma_expected_comma"]={ | ||
Line 3,345: | Line 3,345: | ||
[e]=A, | [e]=A, | ||
[i]={"1bbe00e0ca2d",1521535991,"[ms] Parse #pragma optimize and ignore it behind its own flag"}, | [i]={"1bbe00e0ca2d",1521535991,"[ms] Parse #pragma optimize and ignore it behind its own flag"}, | ||
[j]={{r, | [j]={{r,1286,"bool Parser::HandlePragmaMSAllocText(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::comma, diag::warn_pragma_expected_comma, PragmaName))"},{r,3760,"// #pragma optimize(\"gsty\", on|off)\nbool Parser::HandlePragmaMSOptimize(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::comma, diag::warn_pragma_expected_comma, PragmaName))"}} | ||
}, | }, | ||
["warn_pragma_expected_identifier"]={ | ["warn_pragma_expected_identifier"]={ | ||
Line 3,359: | Line 3,359: | ||
[e]=A, | [e]=A, | ||
[i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | [i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | ||
[j]={{r, | [j]={{r,1293,"bool Parser::HandlePragmaMSAllocText(StringRef PragmaName, SourceLocation PragmaLocation) {\n while (true) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_identifier) << PragmaName;"},{r,2001,"// #pragma GCC visibility comes in two variants:\n// \'push\' \'(\' [visibility] \')\'\n// \'pop\'\nvoid PragmaGCCVisibilityHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &VisTok) {\n if (PushPop && PushPop->isStr(\"pop\")) {\n } else if (PushPop && PushPop->isStr(\"push\")) {\n if (!VisType) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_identifier) << \"visibility\";"},{r,2012,"// #pragma GCC visibility comes in two variants:\n// \'push\' \'(\' [visibility] \')\'\n// \'pop\'\nvoid PragmaGCCVisibilityHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &VisTok) {\n if (PushPop && PushPop->isStr(\"pop\")) {\n } else if (PushPop && PushPop->isStr(\"push\")) {\n } else {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_identifier) << \"visibility\";"},{r,2276,"// #pragma \'align\' \'=\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'}\n// #pragma \'options \'align\' \'=\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'}\n// #pragma \'align\' \'(\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'} \')\'\nstatic void ParseAlignPragma(Preprocessor &PP, Token &FirstTok, bool IsOptions) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_identifier) << (IsOptions ? \"options\" : \"align\");"},{r,2432,"// #pragma weak identifier\n// #pragma weak identifier \'=\' identifier\nvoid PragmaWeakHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &WeakTok) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_identifier) << \"weak\";"},{r,2445,"// #pragma weak identifier\n// #pragma weak identifier \'=\' identifier\nvoid PragmaWeakHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &WeakTok) {\n if (Tok.is(tok::equal)) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_identifier) << \"weak\";"},{r,2493,"// #pragma redefine_extname identifier identifier\nvoid PragmaRedefineExtnameHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &RedefToken) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_identifier) << \"redefine_extname\";"},{r,2502,"// #pragma redefine_extname identifier identifier\nvoid PragmaRedefineExtnameHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &RedefToken) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_identifier) << \"redefine_extname\";"},{r,2553,"void PragmaOpenCLExtensionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_identifier) << \"OPENCL\";"},{r,2688,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (!Arg) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_identifier) << \"pointers_to_members\";"},{r,3351,"void PragmaSTDC_FENV_ROUNDHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_identifier) << PragmaName.getIdentifierInfo()->getName();"}} | ||
}, | }, | ||
["warn_pragma_expected_init_seg"]={ | ["warn_pragma_expected_init_seg"]={ | ||
Line 3,373: | Line 3,373: | ||
[e]=A, | [e]=A, | ||
[i]={"1a711b169619",1405990385,"-fms-extensions: Implement half of #pragma init_seg"}, | [i]={"1a711b169619",1405990385,"-fms-extensions: Implement half of #pragma init_seg"}, | ||
[j]={{r, | [j]={{r,1191,"// #pragma init_seg({ compiler | lib | user | \"section-name\" [, func-name]} )\nbool Parser::HandlePragmaMSInitSeg(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (!SegmentName) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_init_seg) << PragmaName;"}} | ||
}, | }, | ||
["warn_pragma_expected_integer"]={ | ["warn_pragma_expected_integer"]={ | ||
Line 3,387: | Line 3,387: | ||
[e]=A, | [e]=A, | ||
[i]={"c0dca6ded731",1392249026,"MS ABI: Implement #pragma vtordisp() and clang-cl /vdN"}, | [i]={"c0dca6ded731",1392249026,"MS ABI: Implement #pragma vtordisp() and clang-cl /vdN"}, | ||
[j]={{r, | [j]={{r,2822,"/// Handle \'#pragma vtordisp\'\n// The grammar for this pragma is as follows:\n//\n// <vtordisp-mode> ::= (\'off\' | \'on\' | \'0\' | \'1\' | \'2\' )\n//\n// #pragma vtordisp \'(\' [\'push\' \',\'] vtordisp-mode \')\'\n// #pragma vtordisp \'(\' \'pop\' \')\'\n// #pragma vtordisp \'(\' \')\'\nvoid PragmaMSVtorDisp::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Action & Sema::PSK_Push || Action & Sema::PSK_Set) {\n if (II && II->isStr(\"off\")) {\n } else if (II && II->isStr(\"on\")) {\n } else if (Tok.is(tok::numeric_constant) && PP.parseSimpleIntegerLiteral(Tok, Value)) {\n if (Value > 2) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_integer) << 0 << 2 << \"vtordisp\";"}} | ||
}, | }, | ||
["warn_pragma_expected_lparen"]={ | ["warn_pragma_expected_lparen"]={ | ||
Line 3,401: | Line 3,401: | ||
[e]=A, | [e]=A, | ||
[i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | [i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | ||
[j]={{r, | [j]={{r,276,"// \"\\#pragma fenv_access (on)\".\nstruct PragmaMSFenvAccessHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_lparen) << PragmaName;"},{r,982,"bool Parser::HandlePragmaMSSection(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_lparen) << PragmaName;"},{r,1063,"bool Parser::HandlePragmaMSSegment(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_lparen) << PragmaName;"},{r,1151,"// #pragma init_seg({ compiler | lib | user | \"section-name\" [, func-name]} )\nbool Parser::HandlePragmaMSInitSeg(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::l_paren, diag::warn_pragma_expected_lparen, PragmaName))"},{r,1210,"// #pragma strict_gs_check(pop)\n// #pragma strict_gs_check(push, \"on\" | \"off\")\n// #pragma strict_gs_check(\"on\" | \"off\")\nbool Parser::HandlePragmaMSStrictGuardStackCheck(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::l_paren, diag::warn_pragma_expected_lparen, PragmaName))"},{r,1261,"bool Parser::HandlePragmaMSAllocText(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::l_paren, diag::warn_pragma_expected_lparen, PragmaName))"},{r,1994,"// #pragma GCC visibility comes in two variants:\n// \'push\' \'(\' [visibility] \')\'\n// \'pop\'\nvoid PragmaGCCVisibilityHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &VisTok) {\n if (PushPop && PushPop->isStr(\"pop\")) {\n } else if (PushPop && PushPop->isStr(\"push\")) {\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_lparen) << \"visibility\";"},{r,2047,"// #pragma pack(...) comes in the following delicious flavors:\n// pack \'(\' [integer] \')\'\n// pack \'(\' \'show\' \')\'\n// pack \'(\' (\'push\' | \'pop\') [\',\' identifier] [, integer] \')\'\nvoid PragmaPackHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &PackTok) {\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_lparen) << \"pack\";"},{r,2265,"// #pragma \'align\' \'=\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'}\n// #pragma \'options \'align\' \'=\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'}\n// #pragma \'align\' \'(\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'} \')\'\nstatic void ParseAlignPragma(Preprocessor &PP, Token &FirstTok, bool IsOptions) {\n if (PP.getLangOpts().XLPragmaPack) {\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_lparen) << \"align\";"},{r,2352,"// #pragma unused(identifier)\nvoid PragmaUnusedHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &UnusedTok) {\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_lparen) << \"unused\";"},{r,2681,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(PointersToMembersLoc, diag::warn_pragma_expected_lparen) << \"pointers_to_members\";"},{r,2778,"/// Handle \'#pragma vtordisp\'\n// The grammar for this pragma is as follows:\n//\n// <vtordisp-mode> ::= (\'off\' | \'on\' | \'0\' | \'1\' | \'2\' )\n//\n// #pragma vtordisp \'(\' [\'push\' \',\'] vtordisp-mode \')\'\n// #pragma vtordisp \'(\' \'pop\' \')\'\n// #pragma vtordisp \'(\' \')\'\nvoid PragmaMSVtorDisp::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(VtorDispLoc, diag::warn_pragma_expected_lparen) << \"vtordisp\";"},{r,3671,"/// Handle the Microsoft \\#pragma intrinsic extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma intrinsic(memset)\n/// #pragma intrinsic(strlen, memcpy)\n/// \\endcode\n///\n/// Pragma intrisic tells the compiler to use a builtin version of the\n/// function. Clang does it anyway, so the pragma doesn\'t really do anything.\n/// Anyway, we emit a warning if the function specified in \\#pragma intrinsic\n/// isn\'t an intrinsic in clang and suggest to include intrin.h.\nvoid PragmaMSIntrinsicHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_lparen) << \"intrinsic\";"},{r,3707,"bool Parser::HandlePragmaMSFunction(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::l_paren, diag::warn_pragma_expected_lparen, PragmaName))"},{r,3742,"// #pragma optimize(\"gsty\", on|off)\nbool Parser::HandlePragmaMSOptimize(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::l_paren, diag::warn_pragma_expected_lparen, PragmaName))"}} | ||
}, | }, | ||
["warn_pragma_expected_non_wide_string"]={ | ["warn_pragma_expected_non_wide_string"]={ | ||
Line 3,415: | Line 3,415: | ||
[e]=A, | [e]=A, | ||
[i]={"722b1df86968",1405642396,"Fix parsing certain kinds of strings in the MS section pragmas"}, | [i]={"722b1df86968",1405642396,"Fix parsing certain kinds of strings in the MS section pragmas"}, | ||
[j]={{r, | [j]={{r,997,"bool Parser::HandlePragmaMSSection(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (SegmentName->getCharByteWidth() != 1) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_non_wide_string) << PragmaName;"},{r,1119,"bool Parser::HandlePragmaMSSegment(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isNot(tok::r_paren)) {\n if (SegmentName->getCharByteWidth() != 1) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_non_wide_string) << PragmaName;"},{r,1183,"// #pragma init_seg({ compiler | lib | user | \"section-name\" [, func-name]} )\nbool Parser::HandlePragmaMSInitSeg(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isAnyIdentifier()) {\n } else if (Tok.is(tok::string_literal)) {\n if (SegmentName->getCharByteWidth() != 1) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_non_wide_string) << PragmaName;"},{r,1272,"bool Parser::HandlePragmaMSAllocText(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.is(tok::string_literal)) {\n if (SegmentName->getCharByteWidth() != 1) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_non_wide_string) << PragmaName;"},{r,3755,"// #pragma optimize(\"gsty\", on|off)\nbool Parser::HandlePragmaMSOptimize(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (OptimizationList->getCharByteWidth() != 1) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_non_wide_string) << PragmaName;"}} | ||
}, | }, | ||
["warn_pragma_expected_predicate"]={ | ["warn_pragma_expected_predicate"]={ | ||
Line 3,429: | Line 3,429: | ||
[e]=A, | [e]=A, | ||
[i]={"2e8331cab616",1481916128,"[OpenCL] Allow disabling types and declarations associated with extensions"}, | [i]={"2e8331cab616",1481916128,"[OpenCL] Allow disabling types and declarations associated with extensions"}, | ||
[j]={{r, | [j]={{r,902,"void Parser::HandlePragmaOpenCLExtension() {\n // OpenCL 1.1 9.1: \"The all variant sets the behavior for all extensions,\n // overriding all previously issued extension directives, but only if the\n // behavior is set to disable.\"\n if (Name == \"all\") {\n if (State == Disable)\n else\n PP.Diag(NameLoc, diag::warn_pragma_expected_predicate) << 1;"},{r,2568,"void PragmaOpenCLExtensionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_predicate) << 0;"},{r,2583,"void PragmaOpenCLExtensionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Pred->isStr(\"enable\")) {\n } else if (Pred->isStr(\"disable\")) {\n } else if (Pred->isStr(\"begin\"))\n else if (Pred->isStr(\"end\"))\n else {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_predicate) << Ext->isStr(\"all\");"}} | ||
}, | }, | ||
["warn_pragma_expected_punc"]={ | ["warn_pragma_expected_punc"]={ | ||
Line 3,443: | Line 3,443: | ||
[e]=A, | [e]=A, | ||
[i]={"88969810565a",1392059197,"Basic: Clean up malformed pragma diagnostics"}, | [i]={"88969810565a",1392059197,"Basic: Clean up malformed pragma diagnostics"}, | ||
[j]={{r, | [j]={{r,1092,"bool Parser::HandlePragmaMSSegment(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isAnyIdentifier()) {\n if (Action != Sema::PSK_Reset) {\n if (Tok.is(tok::comma)) {\n // If we\'ve got a comma, we either need a label or a string.\n if (Tok.isAnyIdentifier()) {\n if (Tok.is(tok::comma))\n else if (Tok.isNot(tok::r_paren)) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_punc) << PragmaName;"},{r,1098,"bool Parser::HandlePragmaMSSegment(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isAnyIdentifier()) {\n if (Action != Sema::PSK_Reset) {\n if (Tok.is(tok::comma)) {\n } else if (Tok.isNot(tok::r_paren)) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_punc) << PragmaName;"},{r,1220,"// #pragma strict_gs_check(pop)\n// #pragma strict_gs_check(push, \"on\" | \"off\")\n// #pragma strict_gs_check(\"on\" | \"off\")\nbool Parser::HandlePragmaMSStrictGuardStackCheck(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.is(tok::identifier)) {\n if (PushPop == \"push\") {\n if (ExpectAndConsume(tok::comma, diag::warn_pragma_expected_punc, PragmaName))"},{r,2388,"// #pragma unused(identifier)\nvoid PragmaUnusedHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &UnusedTok) {\n while (true) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_punc) << \"unused\";"},{r,2790,"/// Handle \'#pragma vtordisp\'\n// The grammar for this pragma is as follows:\n//\n// <vtordisp-mode> ::= (\'off\' | \'on\' | \'0\' | \'1\' | \'2\' )\n//\n// #pragma vtordisp \'(\' [\'push\' \',\'] vtordisp-mode \')\'\n// #pragma vtordisp \'(\' \'pop\' \')\'\n// #pragma vtordisp \'(\' \')\'\nvoid PragmaMSVtorDisp::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (II) {\n if (II->isStr(\"push\")) {\n if (Tok.isNot(tok::comma)) {\n PP.Diag(VtorDispLoc, diag::warn_pragma_expected_punc) << \"vtordisp\";"}} | ||
}, | }, | ||
["warn_pragma_expected_rparen"]={ | ["warn_pragma_expected_rparen"]={ | ||
Line 3,457: | Line 3,457: | ||
[e]=A, | [e]=A, | ||
[i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | [i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | ||
[j]={{r, | [j]={{r,298,"// \"\\#pragma fenv_access (on)\".\nstruct PragmaMSFenvAccessHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_rparen) << PragmaName;"},{r,1046,"bool Parser::HandlePragmaMSSection(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_rparen) << PragmaName;"},{r,1128,"bool Parser::HandlePragmaMSSegment(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_rparen) << PragmaName;"},{r,1195,"// #pragma init_seg({ compiler | lib | user | \"section-name\" [, func-name]} )\nbool Parser::HandlePragmaMSInitSeg(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::r_paren, diag::warn_pragma_expected_rparen, PragmaName) || ExpectAndConsume(tok::eof, diag::warn_pragma_extra_tokens_at_eol, PragmaName))"},{r,1246,"// #pragma strict_gs_check(pop)\n// #pragma strict_gs_check(push, \"on\" | \"off\")\n// #pragma strict_gs_check(\"on\" | \"off\")\nbool Parser::HandlePragmaMSStrictGuardStackCheck(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::r_paren, diag::warn_pragma_expected_rparen, PragmaName))"},{r,1307,"bool Parser::HandlePragmaMSAllocText(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::r_paren, diag::warn_pragma_expected_rparen, PragmaName) || ExpectAndConsume(tok::eof, diag::warn_pragma_extra_tokens_at_eol, PragmaName))"},{r,2007,"// #pragma GCC visibility comes in two variants:\n// \'push\' \'(\' [visibility] \')\'\n// \'pop\'\nvoid PragmaGCCVisibilityHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &VisTok) {\n if (PushPop && PushPop->isStr(\"pop\")) {\n } else if (PushPop && PushPop->isStr(\"push\")) {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_rparen) << \"visibility\";"},{r,2124,"// #pragma pack(...) comes in the following delicious flavors:\n// pack \'(\' [integer] \')\'\n// pack \'(\' \'show\' \')\'\n// pack \'(\' (\'push\' | \'pop\') [\',\' identifier] [, integer] \')\'\nvoid PragmaPackHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &PackTok) {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_rparen) << \"pack\";"},{r,2304,"// #pragma \'align\' \'=\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'}\n// #pragma \'options \'align\' \'=\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'}\n// #pragma \'align\' \'(\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'} \')\'\nstatic void ParseAlignPragma(Preprocessor &PP, Token &FirstTok, bool IsOptions) {\n if (PP.getLangOpts().XLPragmaPack) {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_rparen) << \"align\";"},{r,2835,"/// Handle \'#pragma vtordisp\'\n// The grammar for this pragma is as follows:\n//\n// <vtordisp-mode> ::= (\'off\' | \'on\' | \'0\' | \'1\' | \'2\' )\n//\n// #pragma vtordisp \'(\' [\'push\' \',\'] vtordisp-mode \')\'\n// #pragma vtordisp \'(\' \'pop\' \')\'\n// #pragma vtordisp \'(\' \')\'\nvoid PragmaMSVtorDisp::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // Finish the pragma: \')\' $\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(VtorDispLoc, diag::warn_pragma_expected_rparen) << \"vtordisp\";"},{r,3692,"/// Handle the Microsoft \\#pragma intrinsic extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma intrinsic(memset)\n/// #pragma intrinsic(strlen, memcpy)\n/// \\endcode\n///\n/// Pragma intrisic tells the compiler to use a builtin version of the\n/// function. Clang does it anyway, so the pragma doesn\'t really do anything.\n/// Anyway, we emit a warning if the function specified in \\#pragma intrinsic\n/// isn\'t an intrinsic in clang and suggest to include intrin.h.\nvoid PragmaMSIntrinsicHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_rparen) << \"intrinsic\";"},{r,3728,"bool Parser::HandlePragmaMSFunction(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::r_paren, diag::warn_pragma_expected_rparen, PragmaName) || ExpectAndConsume(tok::eof, diag::warn_pragma_extra_tokens_at_eol, PragmaName))"},{r,3779,"// #pragma optimize(\"gsty\", on|off)\nbool Parser::HandlePragmaMSOptimize(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::r_paren, diag::warn_pragma_expected_rparen, PragmaName))"}} | ||
}, | }, | ||
["warn_pragma_expected_section_label_or_name"]={ | ["warn_pragma_expected_section_label_or_name"]={ | ||
Line 3,471: | Line 3,471: | ||
[e]=A, | [e]=A, | ||
[i]={mc,1396996247,lc}, | [i]={mc,1396996247,lc}, | ||
[j]={{r, | [j]={{r,1109,"bool Parser::HandlePragmaMSSegment(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isNot(tok::r_paren)) {\n if (Tok.isNot(tok::string_literal)) {\n unsigned DiagID = Action != Sema::PSK_Reset ? !SlotLabel.empty() ? diag::warn_pragma_expected_section_name : diag::warn_pragma_expected_section_label_or_name : diag::warn_pragma_expected_section_push_pop_or_name;"}} | ||
}, | }, | ||
["warn_pragma_expected_section_name"]={ | ["warn_pragma_expected_section_name"]={ | ||
Line 3,485: | Line 3,485: | ||
[e]=A, | [e]=A, | ||
[i]={mc,1396996247,lc}, | [i]={mc,1396996247,lc}, | ||
[j]={{r, | [j]={{r,988,"bool Parser::HandlePragmaMSSection(StringRef PragmaName, SourceLocation PragmaLocation) {\n // Parsing code for pragma section\n if (Tok.isNot(tok::string_literal)) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_section_name) << PragmaName;"},{r,1108,"bool Parser::HandlePragmaMSSegment(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isNot(tok::r_paren)) {\n if (Tok.isNot(tok::string_literal)) {\n unsigned DiagID = Action != Sema::PSK_Reset ? !SlotLabel.empty() ? diag::warn_pragma_expected_section_name : diag::warn_pragma_expected_section_label_or_name : diag::warn_pragma_expected_section_push_pop_or_name;"},{r,1281,"bool Parser::HandlePragmaMSAllocText(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.is(tok::string_literal)) {\n } else if (Tok.is(tok::identifier)) {\n } else {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_section_name) << PragmaName;"}} | ||
}, | }, | ||
["warn_pragma_expected_section_push_pop_or_name"]={ | ["warn_pragma_expected_section_push_pop_or_name"]={ | ||
Line 3,499: | Line 3,499: | ||
[e]=A, | [e]=A, | ||
[i]={mc,1396996247,lc}, | [i]={mc,1396996247,lc}, | ||
[j]={{r, | [j]={{r,1077,"bool Parser::HandlePragmaMSSegment(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isAnyIdentifier()) {\n if (PushPop == \"push\")\n else if (PushPop == \"pop\")\n else {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_section_push_pop_or_name) << PragmaName;"},{r,1110,"bool Parser::HandlePragmaMSSegment(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isNot(tok::r_paren)) {\n if (Tok.isNot(tok::string_literal)) {\n unsigned DiagID = Action != Sema::PSK_Reset ? !SlotLabel.empty() ? diag::warn_pragma_expected_section_name : diag::warn_pragma_expected_section_label_or_name : diag::warn_pragma_expected_section_push_pop_or_name;"}} | ||
}, | }, | ||
["warn_pragma_expected_string"]={ | ["warn_pragma_expected_string"]={ | ||
Line 3,513: | Line 3,513: | ||
[e]=A, | [e]=A, | ||
[i]={"1bbe00e0ca2d",1521535991,"[ms] Parse #pragma optimize and ignore it behind its own flag"}, | [i]={"1bbe00e0ca2d",1521535991,"[ms] Parse #pragma optimize and ignore it behind its own flag"}, | ||
[j]={{r, | [j]={{r,3747,"// #pragma optimize(\"gsty\", on|off)\nbool Parser::HandlePragmaMSOptimize(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isNot(tok::string_literal)) {\n PP.Diag(PragmaLocation, diag::warn_pragma_expected_string) << PragmaName;"}} | ||
}, | }, | ||
["warn_pragma_extension_is_core"]={ | ["warn_pragma_extension_is_core"]={ | ||
Line 3,528: | Line 3,528: | ||
[e]=A, | [e]=A, | ||
[i]={"64936ce91dba",1463154277,"[OpenCL] Add supported OpenCL extensions to target info."}, | [i]={"64936ce91dba",1463154277,"[OpenCL] Add supported OpenCL extensions to target info."}, | ||
[j]={{r, | [j]={{r,918,"void Parser::HandlePragmaOpenCLExtension() {\n // OpenCL 1.1 9.1: \"The all variant sets the behavior for all extensions,\n // overriding all previously issued extension directives, but only if the\n // behavior is set to disable.\"\n if (Name == \"all\") {\n } else if (State == Begin) {\n } else if (State == End) {\n } else if (!Opt.isKnown(Name) || !Opt.isWithPragma(Name))\n else if (Opt.isSupportedExtension(Name, getLangOpts()))\n else if (Opt.isSupportedCoreOrOptionalCore(Name, getLangOpts()))\n PP.Diag(NameLoc, diag::warn_pragma_extension_is_core) << Ident;"}} | ||
}, | }, | ||
["warn_pragma_extra_tokens_at_eol"]={ | ["warn_pragma_extra_tokens_at_eol"]={ | ||
Line 3,542: | Line 3,542: | ||
[e]=A, | [e]=A, | ||
[i]={"f5867dd51a83",1244162998,"Add parser support for #pragma weak."}, | [i]={"f5867dd51a83",1244162998,"Add parser support for #pragma weak."}, | ||
[j]={{r, | [j]={{r,305,"// \"\\#pragma fenv_access (on)\".\nstruct PragmaMSFenvAccessHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << PragmaName;"},{r,1051,"bool Parser::HandlePragmaMSSection(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isNot(tok::eof)) {\n PP.Diag(PragmaLocation, diag::warn_pragma_extra_tokens_at_eol) << PragmaName;"},{r,1133,"bool Parser::HandlePragmaMSSegment(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.isNot(tok::eof)) {\n PP.Diag(PragmaLocation, diag::warn_pragma_extra_tokens_at_eol) << PragmaName;"},{r,1197,"// #pragma init_seg({ compiler | lib | user | \"section-name\" [, func-name]} )\nbool Parser::HandlePragmaMSInitSeg(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::r_paren, diag::warn_pragma_expected_rparen, PragmaName) || ExpectAndConsume(tok::eof, diag::warn_pragma_extra_tokens_at_eol, PragmaName))"},{r,1250,"// #pragma strict_gs_check(pop)\n// #pragma strict_gs_check(push, \"on\" | \"off\")\n// #pragma strict_gs_check(\"on\" | \"off\")\nbool Parser::HandlePragmaMSStrictGuardStackCheck(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::eof, diag::warn_pragma_extra_tokens_at_eol, PragmaName))"},{r,1309,"bool Parser::HandlePragmaMSAllocText(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::r_paren, diag::warn_pragma_expected_rparen, PragmaName) || ExpectAndConsume(tok::eof, diag::warn_pragma_extra_tokens_at_eol, PragmaName))"},{r,1422,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // Validate the argument.\n if (StateOption) {\n if (Toks.size() > 2)\n Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << PragmaLoopHintString(Info->PragmaName, Info->Option);"},{r,1439,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // Validate the argument.\n if (StateOption) {\n } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n // Look for vectorize_width(fixed|scalable)\n if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n if (Toks.size() > 2) {\n Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << PragmaLoopHintString(Info->PragmaName, Info->Option);"},{r,1478,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // Validate the argument.\n if (StateOption) {\n } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n // Look for vectorize_width(fixed|scalable)\n if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n } else {\n // Tokens following an error in an ill-formed constant expression will\n // remain in the token stream and must be removed.\n if (Tok.isNot(tok::eof)) {\n Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << PragmaLoopHintString(Info->PragmaName, Info->Option);"},{r,1503,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // Validate the argument.\n if (StateOption) {\n } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n } else {\n // Tokens following an error in an ill-formed constant expression will\n // remain in the token stream and must be removed.\n if (Tok.isNot(tok::eof)) {\n Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << PragmaLoopHintString(Info->PragmaName, Info->Option);"},{r,2019,"// #pragma GCC visibility comes in two variants:\n// \'push\' \'(\' [visibility] \')\'\n// \'pop\'\nvoid PragmaGCCVisibilityHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &VisTok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"visibility\";"},{r,2131,"// #pragma pack(...) comes in the following delicious flavors:\n// pack \'(\' [integer] \')\'\n// pack \'(\' \'show\' \')\'\n// pack \'(\' (\'push\' | \'pop\') [\',\' identifier] [, integer] \')\'\nvoid PragmaPackHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &PackTok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"pack\";"},{r,2179,"// #pragma ms_struct on\n// #pragma ms_struct off\nvoid PragmaMSStructHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &MSStructTok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"ms_struct\";"},{r,2312,"// #pragma \'align\' \'=\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'}\n// #pragma \'options \'align\' \'=\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'}\n// #pragma \'align\' \'(\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'} \')\'\nstatic void ParseAlignPragma(Preprocessor &PP, Token &FirstTok, bool IsOptions) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << (IsOptions ? \"options\" : \"align\");"},{r,2394,"// #pragma unused(identifier)\nvoid PragmaUnusedHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &UnusedTok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"unused\";"},{r,2454,"// #pragma weak identifier\n// #pragma weak identifier \'=\' identifier\nvoid PragmaWeakHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &WeakTok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"weak\";"},{r,2511,"// #pragma redefine_extname identifier identifier\nvoid PragmaRedefineExtnameHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &RedefToken) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"redefine_extname\";"},{r,2591,"void PragmaOpenCLExtensionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"OPENCL EXTENSION\";"},{r,2750,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"pointers_to_members\";"},{r,2841,"/// Handle \'#pragma vtordisp\'\n// The grammar for this pragma is as follows:\n//\n// <vtordisp-mode> ::= (\'off\' | \'on\' | \'0\' | \'1\' | \'2\' )\n//\n// #pragma vtordisp \'(\' [\'push\' \',\'] vtordisp-mode \')\'\n// #pragma vtordisp \'(\' \'pop\' \')\'\n// #pragma vtordisp \'(\' \')\'\nvoid PragmaMSVtorDisp::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"vtordisp\";"},{r,2996,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"float_control\";"},{r,3318,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"clang fp\";"},{r,3373,"void PragmaSTDC_FENV_ROUNDHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"STDC FENV_ROUND\";"},{r,3566,"/// Handle the \\#pragma clang loop directive.\n/// #pragma clang \'loop\' loop-hints\n///\n/// loop-hints:\n/// loop-hint loop-hints[opt]\n///\n/// loop-hint:\n/// \'vectorize\' \'(\' loop-hint-keyword \')\'\n/// \'interleave\' \'(\' loop-hint-keyword \')\'\n/// \'unroll\' \'(\' unroll-hint-keyword \')\'\n/// \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n/// \'vectorize_width\' \'(\' loop-hint-value \')\'\n/// \'interleave_count\' \'(\' loop-hint-value \')\'\n/// \'unroll_count\' \'(\' loop-hint-value \')\'\n/// \'pipeline\' \'(\' disable \')\'\n/// \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n/// loop-hint-keyword:\n/// \'enable\'\n/// \'disable\'\n/// \'assume_safety\'\n///\n/// unroll-hint-keyword:\n/// \'enable\'\n/// \'disable\'\n/// \'full\'\n///\n/// loop-hint-value:\n/// constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known. Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time. Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"clang loop\";"},{r,3613,"/// Handle the loop unroll optimization pragmas.\n/// #pragma unroll\n/// #pragma unroll unroll-hint-value\n/// #pragma unroll \'(\' unroll-hint-value \')\'\n/// #pragma nounroll\n/// #pragma unroll_and_jam\n/// #pragma unroll_and_jam unroll-hint-value\n/// #pragma unroll_and_jam \'(\' unroll-hint-value \')\'\n/// #pragma nounroll_and_jam\n///\n/// unroll-hint-value:\n/// constant-expression\n///\n/// Loop unrolling hints can be specified with \'#pragma unroll\' or\n/// \'#pragma nounroll\'. \'#pragma unroll\' can take a numeric argument optionally\n/// contained in parentheses. With no argument the directive instructs llvm to\n/// try to unroll the loop completely. A positive integer argument can be\n/// specified to indicate the number of times the loop should be unrolled. To\n/// maximize compatibility with other compilers the unroll count argument can be\n/// specified with or without parentheses. Specifying, \'#pragma nounroll\'\n/// disables unrolling of the loop.\nvoid PragmaUnrollHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.is(tok::eod)) {\n } else if (PragmaName.getIdentifierInfo()->getName() == \"nounroll\" || PragmaName.getIdentifierInfo()->getName() == \"nounroll_and_jam\") {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << PragmaName.getIdentifierInfo()->getName();"},{r,3636,"/// Handle the loop unroll optimization pragmas.\n/// #pragma unroll\n/// #pragma unroll unroll-hint-value\n/// #pragma unroll \'(\' unroll-hint-value \')\'\n/// #pragma nounroll\n/// #pragma unroll_and_jam\n/// #pragma unroll_and_jam unroll-hint-value\n/// #pragma unroll_and_jam \'(\' unroll-hint-value \')\'\n/// #pragma nounroll_and_jam\n///\n/// unroll-hint-value:\n/// constant-expression\n///\n/// Loop unrolling hints can be specified with \'#pragma unroll\' or\n/// \'#pragma nounroll\'. \'#pragma unroll\' can take a numeric argument optionally\n/// contained in parentheses. With no argument the directive instructs llvm to\n/// try to unroll the loop completely. A positive integer argument can be\n/// specified to indicate the number of times the loop should be unrolled. To\n/// maximize compatibility with other compilers the unroll count argument can be\n/// specified with or without parentheses. Specifying, \'#pragma nounroll\'\n/// disables unrolling of the loop.\nvoid PragmaUnrollHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.is(tok::eod)) {\n } else if (PragmaName.getIdentifierInfo()->getName() == \"nounroll\" || PragmaName.getIdentifierInfo()->getName() == \"nounroll_and_jam\") {\n } else {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"unroll\";"},{r,3699,"/// Handle the Microsoft \\#pragma intrinsic extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma intrinsic(memset)\n/// #pragma intrinsic(strlen, memcpy)\n/// \\endcode\n///\n/// Pragma intrisic tells the compiler to use a builtin version of the\n/// function. Clang does it anyway, so the pragma doesn\'t really do anything.\n/// Anyway, we emit a warning if the function specified in \\#pragma intrinsic\n/// isn\'t an intrinsic in clang and suggest to include intrin.h.\nvoid PragmaMSIntrinsicHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"intrinsic\";"},{r,3730,"bool Parser::HandlePragmaMSFunction(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::r_paren, diag::warn_pragma_expected_rparen, PragmaName) || ExpectAndConsume(tok::eof, diag::warn_pragma_extra_tokens_at_eol, PragmaName))"},{r,3791,"// #pragma optimize(\"gsty\", on|off)\nbool Parser::HandlePragmaMSOptimize(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::eof, diag::warn_pragma_extra_tokens_at_eol, PragmaName))"},{r,3954,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"clang attribute\";"},{r,3989,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"clang max_tokens_here\";"},{r,4021,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"clang max_tokens_total\";"},{r,4055,"// Handle \'#pragma clang riscv intrinsic vector\'.\n// \'#pragma clang riscv intrinsic sifive_vector\'.\nvoid PragmaRISCVHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_extra_tokens_at_eol) << \"clang riscv intrinsic\";"}} | ||
}, | }, | ||
["warn_pragma_final_macro"]={ | ["warn_pragma_final_macro"]={ | ||
Line 3,556: | Line 3,556: | ||
[e]=C, | [e]=C, | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{jc, | [j]={{jc,1485,"void Preprocessor::emitFinalMacroWarning(const Token &Identifier, bool IsUndef) const {\n Diag(Identifier, diag::warn_pragma_final_macro) << Identifier.getIdentifierInfo() << (IsUndef ? 0 : 1);"}} | ||
}, | }, | ||
["warn_pragma_force_cuda_host_device_bad_arg"]={ | ["warn_pragma_force_cuda_host_device_bad_arg"]={ | ||
Line 3,570: | Line 3,570: | ||
[e]=A, | [e]=A, | ||
[i]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas."}, | [i]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas."}, | ||
[j]={{r, | [j]={{r,3807,"void PragmaForceCUDAHostDeviceHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (!Info || (!Info->isStr(\"begin\") && !Info->isStr(\"end\"))) {\n PP.Diag(FirstTok.getLocation(), diag::warn_pragma_force_cuda_host_device_bad_arg);"},{r,3820,"void PragmaForceCUDAHostDeviceHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (!Tok.is(tok::eod))\n PP.Diag(FirstTok.getLocation(), diag::warn_pragma_force_cuda_host_device_bad_arg);"}} | ||
}, | }, | ||
["warn_pragma_fp_ignored"]={ | ["warn_pragma_fp_ignored"]={ | ||
Line 3,584: | Line 3,584: | ||
[e]=A, | [e]=A, | ||
[i]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"}, | [i]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"}, | ||
[j]={{r, | [j]={{r,113,"/// PragmaSTDC_FENV_ACCESSHandler - \"\\#pragma STDC FENV_ACCESS ...\".\nstruct PragmaSTDC_FENV_ACCESSHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (!PP.getTargetInfo().hasStrictFP() && !PP.getLangOpts().ExpStrictFP) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_fp_ignored) << PragmaName.getIdentifierInfo()->getName();"},{r,268,"// \"\\#pragma fenv_access (on)\".\nstruct PragmaMSFenvAccessHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n if (!PP.getTargetInfo().hasStrictFP() && !PP.getLangOpts().ExpStrictFP) {\n PP.Diag(FirstToken.getLocation(), diag::warn_pragma_fp_ignored) << PragmaName;"},{r,2906,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (!PP.getTargetInfo().hasStrictFP() && !PP.getLangOpts().ExpStrictFP) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_fp_ignored) << PragmaName.getIdentifierInfo()->getName();"},{r,3344,"void PragmaSTDC_FENV_ROUNDHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (!PP.getTargetInfo().hasStrictFP() && !PP.getLangOpts().ExpStrictFP) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_fp_ignored) << PragmaName.getIdentifierInfo()->getName();"}} | ||
}, | }, | ||
["warn_pragma_ignored"]={ | ["warn_pragma_ignored"]={ | ||
Line 3,599: | Line 3,599: | ||
[e]=C, | [e]=C, | ||
[i]={"21656f22dbb9",1240175426,"basic support for -Wunknown-pragmas, more coming."}, | [i]={"21656f22dbb9",1240175426,"basic support for -Wunknown-pragmas, more coming."}, | ||
[j]={{H, | [j]={{H,120,"void PragmaNamespace::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (!Handler) {\n PP.Diag(Tok, diag::warn_pragma_ignored);"}} | ||
}, | }, | ||
["warn_pragma_include_alias_expected"]={ | ["warn_pragma_include_alias_expected"]={ | ||
Line 3,613: | Line 3,613: | ||
[e]=C, | [e]=C, | ||
[i]={"cd5092dfba30",1330575529,"Implements support for #pragma include_alias in ms compatibility mode. Fixes PR10705."}, | [i]={"cd5092dfba30",1330575529,"Implements support for #pragma include_alias in ms compatibility mode. Fixes PR10705."}, | ||
[j]={{H, | [j]={{H,695,"void Preprocessor::HandlePragmaIncludeAlias(Token &Tok) {\n if (Tok.isNot(tok::l_paren)) {\n Diag(Tok, diag::warn_pragma_include_alias_expected) << \"(\";"},{H,717,"void Preprocessor::HandlePragmaIncludeAlias(Token &Tok) {\n if (Tok.isNot(tok::comma)) {\n Diag(Tok, diag::warn_pragma_include_alias_expected) << \",\";"},{H,736,"void Preprocessor::HandlePragmaIncludeAlias(Token &Tok) {\n if (Tok.isNot(tok::r_paren)) {\n Diag(Tok, diag::warn_pragma_include_alias_expected) << \")\";"}} | ||
}, | }, | ||
["warn_pragma_include_alias_expected_filename"]={ | ["warn_pragma_include_alias_expected_filename"]={ | ||
Line 3,627: | Line 3,627: | ||
[e]=C, | [e]=C, | ||
[i]={"611306eae6c9",1330728714,"Adding support for #pragma include_alias in MS compatibility mode. This implements PR 10705."}, | [i]={"611306eae6c9",1330728714,"Adding support for #pragma include_alias in MS compatibility mode. This implements PR 10705."}, | ||
[j]={{H, | [j]={{H,709,"void Preprocessor::HandlePragmaIncludeAlias(Token &Tok) {\n if (SourceFilenameTok.is(tok::header_name)) {\n } else {\n Diag(Tok, diag::warn_pragma_include_alias_expected_filename);"},{H,729,"void Preprocessor::HandlePragmaIncludeAlias(Token &Tok) {\n if (ReplaceFilenameTok.is(tok::header_name)) {\n } else {\n Diag(Tok, diag::warn_pragma_include_alias_expected_filename);"}} | ||
}, | }, | ||
["warn_pragma_include_alias_mismatch_angle"]={ | ["warn_pragma_include_alias_mismatch_angle"]={ | ||
Line 3,641: | Line 3,641: | ||
[e]=C, | [e]=C, | ||
[i]={"611306eae6c9",1330728714,"Adding support for #pragma include_alias in MS compatibility mode. This implements PR 10705."}, | [i]={"611306eae6c9",1330728714,"Adding support for #pragma include_alias in MS compatibility mode. This implements PR 10705."}, | ||
[j]={{H, | [j]={{H,754,"void Preprocessor::HandlePragmaIncludeAlias(Token &Tok) {\n if (!SourceFileName.empty() && !ReplaceFileName.empty() && (SourceIsAngled != ReplaceIsAngled)) {\n if (SourceIsAngled)\n DiagID = diag::warn_pragma_include_alias_mismatch_angle;"}} | ||
}, | }, | ||
["warn_pragma_include_alias_mismatch_quote"]={ | ["warn_pragma_include_alias_mismatch_quote"]={ | ||
Line 3,655: | Line 3,655: | ||
[e]=C, | [e]=C, | ||
[i]={"611306eae6c9",1330728714,"Adding support for #pragma include_alias in MS compatibility mode. This implements PR 10705."}, | [i]={"611306eae6c9",1330728714,"Adding support for #pragma include_alias in MS compatibility mode. This implements PR 10705."}, | ||
[j]={{H, | [j]={{H,756,"void Preprocessor::HandlePragmaIncludeAlias(Token &Tok) {\n if (!SourceFileName.empty() && !ReplaceFileName.empty() && (SourceIsAngled != ReplaceIsAngled)) {\n if (SourceIsAngled)\n else\n DiagID = diag::warn_pragma_include_alias_mismatch_quote;"}} | ||
}, | }, | ||
["warn_pragma_init_seg_unsupported_target"]={ | ["warn_pragma_init_seg_unsupported_target"]={ | ||
Line 3,669: | Line 3,669: | ||
[e]=A, | [e]=A, | ||
[i]={"ad2986efcefe",1407998108,"Parse: Don\'t attempt to act on #pragma init_seg when not targeting MSVC"}, | [i]={"ad2986efcefe",1407998108,"Parse: Don\'t attempt to act on #pragma init_seg when not targeting MSVC"}, | ||
[j]={{r, | [j]={{r,1147,"// #pragma init_seg({ compiler | lib | user | \"section-name\" [, func-name]} )\nbool Parser::HandlePragmaMSInitSeg(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (getTargetInfo().getTriple().getEnvironment() != llvm::Triple::MSVC) {\n PP.Diag(PragmaLocation, diag::warn_pragma_init_seg_unsupported_target);"}} | ||
}, | }, | ||
["warn_pragma_intrinsic_builtin"]={ | ["warn_pragma_intrinsic_builtin"]={ | ||
Line 3,683: | Line 3,683: | ||
[e]=A, | [e]=A, | ||
[i]={"3f1ec62a8397",1473266312,"Parsing MS pragma intrinsic"}, | [i]={"3f1ec62a8397",1473266312,"Parsing MS pragma intrinsic"}, | ||
[j]={{r, | [j]={{r,3682,"/// Handle the Microsoft \\#pragma intrinsic extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma intrinsic(memset)\n/// #pragma intrinsic(strlen, memcpy)\n/// \\endcode\n///\n/// Pragma intrisic tells the compiler to use a builtin version of the\n/// function. Clang does it anyway, so the pragma doesn\'t really do anything.\n/// Anyway, we emit a warning if the function specified in \\#pragma intrinsic\n/// isn\'t an intrinsic in clang and suggest to include intrin.h.\nvoid PragmaMSIntrinsicHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n while (Tok.is(tok::identifier)) {\n if (!II->getBuiltinID())\n PP.Diag(Tok.getLocation(), diag::warn_pragma_intrinsic_builtin) << II << SuggestIntrinH;"},{r,3717,"bool Parser::HandlePragmaMSFunction(StringRef PragmaName, SourceLocation PragmaLocation) {\n while (Tok.is(tok::identifier)) {\n if (!II->getBuiltinID())\n PP.Diag(Tok.getLocation(), diag::warn_pragma_intrinsic_builtin) << II << SuggestIntrinH;"}} | ||
}, | }, | ||
["warn_pragma_invalid_action"]={ | ["warn_pragma_invalid_action"]={ | ||
Line 3,697: | Line 3,697: | ||
[e]=A, | [e]=A, | ||
[i]={"c0dca6ded731",1392249026,"MS ABI: Implement #pragma vtordisp() and clang-cl /vdN"}, | [i]={"c0dca6ded731",1392249026,"MS ABI: Implement #pragma vtordisp() and clang-cl /vdN"}, | ||
[j]={{r, | [j]={{r,1239,"// #pragma strict_gs_check(pop)\n// #pragma strict_gs_check(push, \"on\" | \"off\")\n// #pragma strict_gs_check(\"on\" | \"off\")\nbool Parser::HandlePragmaMSStrictGuardStackCheck(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Action & Sema::PSK_Push || Action & Sema::PSK_Set) {\n if (II && II->isStr(\"off\")) {\n } else if (II && II->isStr(\"on\")) {\n } else {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_invalid_action) << PragmaName;"},{r,2078,"// #pragma pack(...) comes in the following delicious flavors:\n// pack \'(\' [integer] \')\'\n// pack \'(\' \'show\' \')\'\n// pack \'(\' (\'push\' | \'pop\') [\',\' identifier] [, integer] \')\'\nvoid PragmaPackHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &PackTok) {\n if (Tok.is(tok::numeric_constant)) {\n } else if (Tok.is(tok::identifier)) {\n if (II->isStr(\"show\")) {\n } else {\n if (II->isStr(\"push\")) {\n } else if (II->isStr(\"pop\")) {\n } else {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_invalid_action) << \"pack\";"},{r,2827,"/// Handle \'#pragma vtordisp\'\n// The grammar for this pragma is as follows:\n//\n// <vtordisp-mode> ::= (\'off\' | \'on\' | \'0\' | \'1\' | \'2\' )\n//\n// #pragma vtordisp \'(\' [\'push\' \',\'] vtordisp-mode \')\'\n// #pragma vtordisp \'(\' \'pop\' \')\'\n// #pragma vtordisp \'(\' \')\'\nvoid PragmaMSVtorDisp::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Action & Sema::PSK_Push || Action & Sema::PSK_Set) {\n if (II && II->isStr(\"off\")) {\n } else if (II && II->isStr(\"on\")) {\n } else if (Tok.is(tok::numeric_constant) && PP.parseSimpleIntegerLiteral(Tok, Value)) {\n } else {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_invalid_action) << \"vtordisp\";"}} | ||
}, | }, | ||
["warn_pragma_invalid_argument"]={ | ["warn_pragma_invalid_argument"]={ | ||
Line 3,711: | Line 3,711: | ||
[e]=A, | [e]=A, | ||
[i]={"1bbe00e0ca2d",1521535991,"[ms] Parse #pragma optimize and ignore it behind its own flag"}, | [i]={"1bbe00e0ca2d",1521535991,"[ms] Parse #pragma optimize and ignore it behind its own flag"}, | ||
[j]={{r, | [j]={{r,3771,"// #pragma optimize(\"gsty\", on|off)\nbool Parser::HandlePragmaMSOptimize(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (!II || (!II->isStr(\"on\") && !II->isStr(\"off\"))) {\n PP.Diag(PragmaLocation, diag::warn_pragma_invalid_argument) << PP.getSpelling(Tok) << PragmaName << /*Expected=*/true << \"\'on\' or \'off\'\";"},{r,3785,"// #pragma optimize(\"gsty\", on|off)\nbool Parser::HandlePragmaMSOptimize(StringRef PragmaName, SourceLocation PragmaLocation) {\n // TODO: Add support for \"sgty\"\n if (!OptimizationList->getString().empty()) {\n PP.Diag(PragmaLocation, diag::warn_pragma_invalid_argument) << OptimizationList->getString() << PragmaName << /*Expected=*/true << \"\\\"\\\"\";"},{r,4039,"// Handle \'#pragma clang riscv intrinsic vector\'.\n// \'#pragma clang riscv intrinsic sifive_vector\'.\nvoid PragmaRISCVHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n if (!II || !II->isStr(\"intrinsic\")) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_invalid_argument) << PP.getSpelling(Tok) << \"riscv\" << /*Expected=*/true << \"\'intrinsic\'\";"},{r,4047,"// Handle \'#pragma clang riscv intrinsic vector\'.\n// \'#pragma clang riscv intrinsic sifive_vector\'.\nvoid PragmaRISCVHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n if (!II || !(II->isStr(\"vector\") || II->isStr(\"sifive_vector\"))) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_invalid_argument) << PP.getSpelling(Tok) << \"riscv\" << /*Expected=*/true << \"\'vector\' or \'sifive_vector\'\";"}} | ||
}, | }, | ||
["warn_pragma_invalid_specific_action"]={ | ["warn_pragma_invalid_specific_action"]={ | ||
Line 3,725: | Line 3,725: | ||
[e]=A, | [e]=A, | ||
[i]={mc,1396996247,lc}, | [i]={mc,1396996247,lc}, | ||
[j]={{r, | [j]={{r,1032,"bool Parser::HandlePragmaMSSection(StringRef PragmaName, SourceLocation PragmaLocation) {\n while (Tok.is(tok::comma)) {\n if (Flag == ASTContext::PSF_None || Flag == ASTContext::PSF_Invalid) {\n PP.Diag(PragmaLocation, Flag == ASTContext::PSF_None ? diag::warn_pragma_invalid_specific_action : diag::warn_pragma_unsupported_action) << PragmaName << Tok.getIdentifierInfo()->getName();"}} | ||
}, | }, | ||
["warn_pragma_message"]={ | ["warn_pragma_message"]={ | ||
Line 3,739: | Line 3,739: | ||
[e]="#pragma message Directive", | [e]="#pragma message Directive", | ||
[i]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!"}, | [i]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!"}, | ||
[j]={{H, | [j]={{H,1678,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension. The syntax is:\n/// \\code\n/// #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n/// #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n PP.Diag(MessageLoc, (Kind == PPCallbacks::PMK_Error) ? diag::err_pragma_message : diag::warn_pragma_message) << MessageString;"},{"clang/utils/TableGen/ClangDiagnosticsEmitter.cpp",1407,"/// /* DiagArray1 */ diag::warn_pragma_message,"}} | ||
}, | }, | ||
["warn_pragma_missing_argument"]={ | ["warn_pragma_missing_argument"]={ | ||
Line 3,753: | Line 3,753: | ||
[e]=A, | [e]=A, | ||
[i]={"1bbe00e0ca2d",1521535991,"[ms] Parse #pragma optimize and ignore it behind its own flag"}, | [i]={"1bbe00e0ca2d",1521535991,"[ms] Parse #pragma optimize and ignore it behind its own flag"}, | ||
[j]={{r, | [j]={{r,3765,"// #pragma optimize(\"gsty\", on|off)\nbool Parser::HandlePragmaMSOptimize(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (Tok.is(tok::eof) || Tok.is(tok::r_paren)) {\n PP.Diag(PragmaLocation, diag::warn_pragma_missing_argument) << PragmaName << /*Expected=*/true << \"\'on\' or \'off\'\";"}} | ||
}, | }, | ||
["warn_pragma_ms_fenv_access"]={ | ["warn_pragma_ms_fenv_access"]={ | ||
Line 3,767: | Line 3,767: | ||
[e]=A, | [e]=A, | ||
[i]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."}, | [i]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions."}, | ||
[j]={{r, | [j]={{r,282,"// \"\\#pragma fenv_access (on)\".\nstruct PragmaMSFenvAccessHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_ms_fenv_access);"},{r,294,"// \"\\#pragma fenv_access (on)\".\nstruct PragmaMSFenvAccessHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n if (II->isStr(\"on\")) {\n } else if (II->isStr(\"off\")) {\n } else {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_ms_fenv_access);"}} | ||
}, | }, | ||
["warn_pragma_ms_struct"]={ | ["warn_pragma_ms_struct"]={ | ||
Line 3,781: | Line 3,781: | ||
[e]=A, | [e]=A, | ||
[i]={"743dda49d972",1303757355,"Recognize gcc\'s ms_struct pragma (and ignore for now)."}, | [i]={"743dda49d972",1303757355,"Recognize gcc\'s ms_struct pragma (and ignore for now)."}, | ||
[j]={{r, | [j]={{r,2162,"// #pragma ms_struct on\n// #pragma ms_struct off\nvoid PragmaMSStructHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &MSStructTok) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_ms_struct);"},{r,2174,"// #pragma ms_struct on\n// #pragma ms_struct off\nvoid PragmaMSStructHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &MSStructTok) {\n if (II->isStr(\"on\")) {\n } else if (II->isStr(\"off\") || II->isStr(\"reset\"))\n else {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_ms_struct);"}} | ||
}, | }, | ||
["warn_pragma_omp_ignored"]={ | ["warn_pragma_omp_ignored"]={ | ||
Line 3,796: | Line 3,796: | ||
[e]=A, | [e]=A, | ||
[i]={"5d61097dd909",1351328745,"Feature:"}, | [i]={"5d61097dd909",1351328745,"Feature:"}, | ||
[j]={{r, | [j]={{r,2619,"/// Handle \'#pragma omp ...\' when OpenMP is disabled.\n///\nvoid PragmaNoOpenMPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstTok) {\n if (!PP.getDiagnostics().isIgnored(diag::warn_pragma_omp_ignored, FirstTok.getLocation())) {"},{r,2621,"/// Handle \'#pragma omp ...\' when OpenMP is disabled.\n///\nvoid PragmaNoOpenMPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstTok) {\n if (!PP.getDiagnostics().isIgnored(diag::warn_pragma_omp_ignored, FirstTok.getLocation())) {\n PP.Diag(FirstTok, diag::warn_pragma_omp_ignored);"},{r,2622,"/// Handle \'#pragma omp ...\' when OpenMP is disabled.\n///\nvoid PragmaNoOpenMPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstTok) {\n if (!PP.getDiagnostics().isIgnored(diag::warn_pragma_omp_ignored, FirstTok.getLocation())) {\n PP.getDiagnostics().setSeverity(diag::warn_pragma_omp_ignored, diag::Severity::Ignored, SourceLocation());"}} | ||
}, | }, | ||
["warn_pragma_options_align_reset_failed"]={ | ["warn_pragma_options_align_reset_failed"]={ | ||
Line 3,810: | Line 3,810: | ||
[e]=p, | [e]=p, | ||
[i]={"69dac58e7d42",1274918680,"Sema: Support for #pragma options align={reset,natural}. \'#pragma options align\'"}, | [i]={"69dac58e7d42",1274918680,"Sema: Support for #pragma options align={reset,natural}. \'#pragma options align\'"}, | ||
[j]={{ib, | [j]={{ib,261,"void Sema::ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind, SourceLocation PragmaLoc) {\n case POAK_Reset:\n if (AlignPackStack.Stack.empty()) {\n if (AlignPackStack.CurrentValue.getAlignMode() != AlignPackInfo::Native || AlignPackStack.CurrentValue.IsPackAttr()) {\n } else {\n Diag(PragmaLoc, diag::warn_pragma_options_align_reset_failed) << \"stack empty\";"}} | ||
}, | }, | ||
["warn_pragma_options_expected_align"]={ | ["warn_pragma_options_expected_align"]={ | ||
Line 3,824: | Line 3,824: | ||
[e]=A, | [e]=A, | ||
[i]={"75c9be7e8048",1274916546,"Parse: Add support for \'#pragma options align\'."}, | [i]={"75c9be7e8048",1274916546,"Parse: Add support for \'#pragma options align\'."}, | ||
[j]={{r, | [j]={{r,2257,"// #pragma \'align\' \'=\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'}\n// #pragma \'options \'align\' \'=\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'}\n// #pragma \'align\' \'(\' {\'native\',\'natural\',\'mac68k\',\'power\',\'reset\'} \')\'\nstatic void ParseAlignPragma(Preprocessor &PP, Token &FirstTok, bool IsOptions) {\n if (IsOptions) {\n if (Tok.isNot(tok::identifier) || !Tok.getIdentifierInfo()->isStr(\"align\")) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_options_expected_align);"}} | ||
}, | }, | ||
["warn_pragma_pack_invalid_alignment"]={ | ["warn_pragma_pack_invalid_alignment"]={ | ||
Line 3,838: | Line 3,838: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{ib, | [j]={{ib,347,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n if (Alignment) {\n // pack(0) is like pack(), which just works out since that is what\n // we use 0 for in PackAttr.\n if (Alignment->isTypeDependent() || !Val || !(*Val == 0 || Val->isPowerOf2()) || Val->getZExtValue() > 16) {\n Diag(PragmaLoc, diag::warn_pragma_pack_invalid_alignment);"}} | ||
}, | }, | ||
["warn_pragma_pack_malformed"]={ | ["warn_pragma_pack_malformed"]={ | ||
Line 3,852: | Line 3,852: | ||
[e]=A, | [e]=A, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{r, | [j]={{r,2099,"// #pragma pack(...) comes in the following delicious flavors:\n// pack \'(\' [integer] \')\'\n// pack \'(\' \'show\' \')\'\n// pack \'(\' (\'push\' | \'pop\') [\',\' identifier] [, integer] \')\'\nvoid PragmaPackHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &PackTok) {\n if (Tok.is(tok::numeric_constant)) {\n } else if (Tok.is(tok::identifier)) {\n if (II->isStr(\"show\")) {\n } else {\n if (Tok.is(tok::comma)) {\n if (Tok.is(tok::numeric_constant)) {\n } else if (Tok.is(tok::identifier)) {\n if (Tok.is(tok::comma)) {\n if (Tok.isNot(tok::numeric_constant)) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_pack_malformed);"},{r,2109,"// #pragma pack(...) comes in the following delicious flavors:\n// pack \'(\' [integer] \')\'\n// pack \'(\' \'show\' \')\'\n// pack \'(\' (\'push\' | \'pop\') [\',\' identifier] [, integer] \')\'\nvoid PragmaPackHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &PackTok) {\n if (Tok.is(tok::numeric_constant)) {\n } else if (Tok.is(tok::identifier)) {\n if (II->isStr(\"show\")) {\n } else {\n if (Tok.is(tok::comma)) {\n if (Tok.is(tok::numeric_constant)) {\n } else if (Tok.is(tok::identifier)) {\n } else {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_pack_malformed);"}} | ||
}, | }, | ||
["warn_pragma_pack_modified_after_include"]={ | ["warn_pragma_pack_modified_after_include"]={ | ||
Line 3,866: | Line 3,866: | ||
[e]=p, | [e]=p, | ||
[i]={"ad273341a452",1500398631,"Add a warning for missing \'#pragma pack (pop)\' and suspicious uses"}, | [i]={"ad273341a452",1500398631,"Add a warning for missing \'#pragma pack (pop)\' and suspicious uses"}, | ||
[j]={{ib, | [j]={{ib,471,"void Sema::DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind, SourceLocation IncludeLoc) {\n // Warn about modified alignment after #includes.\n if (PrevAlignPackState.CurrentValue != AlignPackStack.CurrentValue) {\n Diag(IncludeLoc, diag::warn_pragma_pack_modified_after_include);"}} | ||
}, | }, | ||
["warn_pragma_pack_no_pop_eof"]={ | ["warn_pragma_pack_no_pop_eof"]={ | ||
Line 3,880: | Line 3,880: | ||
[e]=p, | [e]=p, | ||
[i]={"ad273341a452",1500398631,"Add a warning for missing \'#pragma pack (pop)\' and suspicious uses"}, | [i]={"ad273341a452",1500398631,"Add a warning for missing \'#pragma pack (pop)\' and suspicious uses"}, | ||
[j]={{ib, | [j]={{ib,485,"void Sema::DiagnoseUnterminatedPragmaAlignPack() {\n // FIXME: AlignPackStack may contain both #pragma align and #pragma pack\n // information, diagnostics below might not be accurate if we have mixed\n // pragmas.\n for (const auto &StackSlot : llvm::reverse(AlignPackStack.Stack)) {\n Diag(StackSlot.PragmaPushLocation, diag::warn_pragma_pack_no_pop_eof);"}} | ||
}, | }, | ||
["warn_pragma_pack_non_default_at_include"]={ | ["warn_pragma_pack_non_default_at_include"]={ | ||
Line 3,895: | Line 3,895: | ||
[e]=p, | [e]=p, | ||
[i]={"ad273341a452",1500398631,"Add a warning for missing \'#pragma pack (pop)\' and suspicious uses"}, | [i]={"ad273341a452",1500398631,"Add a warning for missing \'#pragma pack (pop)\' and suspicious uses"}, | ||
[j]={{ib, | [j]={{ib,466,"void Sema::DiagnoseNonDefaultPragmaAlignPack(PragmaAlignPackDiagnoseKind Kind, SourceLocation IncludeLoc) {\n // FIXME: AlignPackStack may contain both #pragma align and #pragma pack\n // information, diagnostics below might not be accurate if we have mixed\n // pragmas.\n if (PrevAlignPackState.ShouldWarnOnInclude) {\n Diag(IncludeLoc, diag::warn_pragma_pack_non_default_at_include);"}} | ||
}, | }, | ||
["warn_pragma_pack_pop_identifier_and_alignment"]={ | ["warn_pragma_pack_pop_identifier_and_alignment"]={ | ||
Line 3,907: | Line 3,907: | ||
[e]=p, | [e]=p, | ||
[i]={"2a8c18d99118",1523027672,"Fix typos in clang"}, | [i]={"2a8c18d99118",1523027672,"Fix typos in clang"}, | ||
[j]={{ib, | [j]={{ib,376,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n // MSDN, C/C++ Preprocessor Reference > Pragma Directives > pack:\n // \"#pragma pack(pop, identifier, n) is undefined\"\n if (Action & Sema::PSK_Pop) {\n if (Alignment && !SlotLabel.empty())\n Diag(PragmaLoc, diag::warn_pragma_pack_pop_identifier_and_alignment);"}} | ||
}, | }, | ||
["warn_pragma_pack_show"]={ | ["warn_pragma_pack_show"]={ | ||
Line 3,919: | Line 3,919: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{ib, | [j]={{ib,367,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n if (Action == Sema::PSK_Show) {\n if (ModeVal == AlignPackInfo::Mac68k && (IsXLPragma || CurVal.IsAlignAttr()))\n Diag(PragmaLoc, diag::warn_pragma_pack_show) << \"mac68k\";"},{ib,369,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n if (Action == Sema::PSK_Show) {\n if (ModeVal == AlignPackInfo::Mac68k && (IsXLPragma || CurVal.IsAlignAttr()))\n else\n Diag(PragmaLoc, diag::warn_pragma_pack_show) << AlignmentVal;"}} | ||
}, | }, | ||
["warn_pragma_pop_failed"]={ | ["warn_pragma_pop_failed"]={ | ||
Line 3,933: | Line 3,933: | ||
[e]=p, | [e]=p, | ||
[i]={"c0dca6ded731",1392249026,"MS ABI: Implement #pragma vtordisp() and clang-cl /vdN"}, | [i]={"c0dca6ded731",1392249026,"MS ABI: Implement #pragma vtordisp() and clang-cl /vdN"}, | ||
[j]={{ib, | [j]={{ib,380,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n // MSDN, C/C++ Preprocessor Reference > Pragma Directives > pack:\n // \"#pragma pack(pop, identifier, n) is undefined\"\n if (Action & Sema::PSK_Pop) {\n if (AlignPackStack.Stack.empty()) {\n Diag(PragmaLoc, diag::warn_pragma_pop_failed) << \"pack\""},{ib,593,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n case PFC_Pop:\n if (FpPragmaStack.Stack.empty()) {\n Diag(Loc, diag::warn_pragma_pop_failed) << \"float_control\""},{ib,615,"void Sema::ActOnPragmaMSVtorDisp(PragmaMsStackAction Action, SourceLocation PragmaLoc, MSVtorDispMode Mode) {\n if (Action & PSK_Pop && VtorDispStack.Stack.empty())\n Diag(PragmaLoc, diag::warn_pragma_pop_failed) << \"vtordisp\""},{ib,748,"/// Called on well formed \\#pragma bss_seg().\nvoid Sema::ActOnPragmaMSSeg(SourceLocation PragmaLocation, PragmaMsStackAction Action, llvm::StringRef StackSlotLabel, StringLiteral *SegmentName, llvm::StringRef PragmaName) {\n if (Action & PSK_Pop && Stack->Stack.empty())\n Diag(PragmaLocation, diag::warn_pragma_pop_failed) << PragmaName << \"stack empty\";"},{ib,767,"/// Called on well formed \\#pragma strict_gs_check().\nvoid Sema::ActOnPragmaMSStrictGuardStackCheck(SourceLocation PragmaLocation, PragmaMsStackAction Action, bool Value) {\n if (Action & PSK_Pop && StrictGuardStackCheckStack.Stack.empty())\n Diag(PragmaLocation, diag::warn_pragma_pop_failed) << \"strict_gs_check\""}} | ||
}, | }, | ||
["warn_pragma_pop_macro_no_push"]={ | ["warn_pragma_pop_macro_no_push"]={ | ||
Line 3,947: | Line 3,947: | ||
[e]=C, | [e]=C, | ||
[i]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!"}, | [i]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!"}, | ||
[j]={{H, | [j]={{H,681,"/// Handle \\#pragma pop_macro.\n///\n/// The syntax is:\n/// \\code\n/// #pragma pop_macro(\"macro\")\n/// \\endcode\nvoid Preprocessor::HandlePragmaPopMacro(Token &PopMacroTok) {\n if (iter != PragmaPushMacroInfo.end()) {\n } else {\n Diag(MessageLoc, diag::warn_pragma_pop_macro_no_push) << IdentInfo->getName();"}} | ||
}, | }, | ||
["warn_pragma_restrict_expansion_macro_use"]={ | ["warn_pragma_restrict_expansion_macro_use"]={ | ||
Line 3,961: | Line 3,961: | ||
[e]=C, | [e]=C, | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{jc, | [j]={{jc,1470,"void Preprocessor::emitRestrictExpansionWarning(const Token &Identifier) const {\n if (Info.Message.empty())\n Diag(Identifier, diag::warn_pragma_restrict_expansion_macro_use) << Identifier.getIdentifierInfo() << 0;"},{jc,1473,"void Preprocessor::emitRestrictExpansionWarning(const Token &Identifier) const {\n if (Info.Message.empty())\n else\n Diag(Identifier, diag::warn_pragma_restrict_expansion_macro_use) << Identifier.getIdentifierInfo() << 1 << Info.Message;"}} | ||
}, | }, | ||
["warn_pragma_unknown_extension"]={ | ["warn_pragma_unknown_extension"]={ | ||
Line 3,975: | Line 3,975: | ||
[e]=A, | [e]=A, | ||
[i]={"7ce13fc940de",1297647773,"OpenCL: add support for __kernel, kernel keywords and EXTENSION,"}, | [i]={"7ce13fc940de",1297647773,"OpenCL: add support for __kernel, kernel keywords and EXTENSION,"}, | ||
[j]={{r, | [j]={{r,914,"void Parser::HandlePragmaOpenCLExtension() {\n // OpenCL 1.1 9.1: \"The all variant sets the behavior for all extensions,\n // overriding all previously issued extension directives, but only if the\n // behavior is set to disable.\"\n if (Name == \"all\") {\n } else if (State == Begin) {\n } else if (State == End) {\n } else if (!Opt.isKnown(Name) || !Opt.isWithPragma(Name))\n PP.Diag(NameLoc, diag::warn_pragma_unknown_extension) << Ident;"}} | ||
}, | }, | ||
["warn_pragma_unroll_cuda_value_in_parens"]={ | ["warn_pragma_unroll_cuda_value_in_parens"]={ | ||
Line 3,989: | Line 3,989: | ||
[e]=A, | [e]=A, | ||
[i]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'."}, | [i]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'."}, | ||
[j]={{r, | [j]={{r,3633,"/// Handle the loop unroll optimization pragmas.\n/// #pragma unroll\n/// #pragma unroll unroll-hint-value\n/// #pragma unroll \'(\' unroll-hint-value \')\'\n/// #pragma nounroll\n/// #pragma unroll_and_jam\n/// #pragma unroll_and_jam unroll-hint-value\n/// #pragma unroll_and_jam \'(\' unroll-hint-value \')\'\n/// #pragma nounroll_and_jam\n///\n/// unroll-hint-value:\n/// constant-expression\n///\n/// Loop unrolling hints can be specified with \'#pragma unroll\' or\n/// \'#pragma nounroll\'. \'#pragma unroll\' can take a numeric argument optionally\n/// contained in parentheses. With no argument the directive instructs llvm to\n/// try to unroll the loop completely. A positive integer argument can be\n/// specified to indicate the number of times the loop should be unrolled. To\n/// maximize compatibility with other compilers the unroll count argument can be\n/// specified with or without parentheses. Specifying, \'#pragma nounroll\'\n/// disables unrolling of the loop.\nvoid PragmaUnrollHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (Tok.is(tok::eod)) {\n } else if (PragmaName.getIdentifierInfo()->getName() == \"nounroll\" || PragmaName.getIdentifierInfo()->getName() == \"nounroll_and_jam\") {\n } else {\n // In CUDA, the argument to \'#pragma unroll\' should not be contained in\n // parentheses.\n if (PP.getLangOpts().CUDA && ValueInParens)\n PP.Diag(Info->Toks[0].getLocation(), diag::warn_pragma_unroll_cuda_value_in_parens);"}} | ||
}, | }, | ||
["warn_pragma_unsupported_action"]={ | ["warn_pragma_unsupported_action"]={ | ||
Line 4,003: | Line 4,003: | ||
[e]=A, | [e]=A, | ||
[i]={mc,1396996247,lc}, | [i]={mc,1396996247,lc}, | ||
[j]={{r, | [j]={{r,1033,"bool Parser::HandlePragmaMSSection(StringRef PragmaName, SourceLocation PragmaLocation) {\n while (Tok.is(tok::comma)) {\n if (Flag == ASTContext::PSF_None || Flag == ASTContext::PSF_Invalid) {\n PP.Diag(PragmaLocation, Flag == ASTContext::PSF_None ? diag::warn_pragma_invalid_specific_action : diag::warn_pragma_unsupported_action) << PragmaName << Tok.getIdentifierInfo()->getName();"}} | ||
}, | }, | ||
["warn_pragma_unsupported_extension"]={ | ["warn_pragma_unsupported_extension"]={ | ||
Line 4,017: | Line 4,017: | ||
[e]=A, | [e]=A, | ||
[i]={"64936ce91dba",1463154277,"[OpenCL] Add supported OpenCL extensions to target info."}, | [i]={"64936ce91dba",1463154277,"[OpenCL] Add supported OpenCL extensions to target info."}, | ||
[j]={{r, | [j]={{r,920,"void Parser::HandlePragmaOpenCLExtension() {\n // OpenCL 1.1 9.1: \"The all variant sets the behavior for all extensions,\n // overriding all previously issued extension directives, but only if the\n // behavior is set to disable.\"\n if (Name == \"all\") {\n } else if (State == Begin) {\n } else if (State == End) {\n } else if (!Opt.isKnown(Name) || !Opt.isWithPragma(Name))\n else if (Opt.isSupportedExtension(Name, getLangOpts()))\n else if (Opt.isSupportedCoreOrOptionalCore(Name, getLangOpts()))\n else\n PP.Diag(NameLoc, diag::warn_pragma_unsupported_extension) << Ident;"}} | ||
}, | }, | ||
["warn_pragma_unused_expected_var"]={ | ["warn_pragma_unused_expected_var"]={ | ||
Line 4,031: | Line 4,031: | ||
[e]=A, | [e]=A, | ||
[i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | [i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | ||
[j]={{r, | [j]={{r,2372,"// #pragma unused(identifier)\nvoid PragmaUnusedHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &UnusedTok) {\n while (true) {\n if (LexID) {\n PP.Diag(Tok.getLocation(), diag::warn_pragma_unused_expected_var);"}} | ||
}, | }, | ||
["warn_pragma_unused_expected_var_arg"]={ | ["warn_pragma_unused_expected_var_arg"]={ | ||
Line 4,045: | Line 4,045: | ||
[e]=p, | [e]=p, | ||
[i]={"ff115a2f351d",1296152208,"Allow #pragma unused to be used on global variables like gcc. Fixes rdar://8793832."}, | [i]={"ff115a2f351d",1296152208,"Allow #pragma unused to be used on global variables like gcc. Fixes rdar://8793832."}, | ||
[j]={{ib, | [j]={{ib,839,"void Sema::ActOnPragmaUnused(const Token &IdTok, Scope *curScope, SourceLocation PragmaLoc) {\n if (!VD) {\n Diag(PragmaLoc, diag::warn_pragma_unused_expected_var_arg) << Name << SourceRange(IdTok.getLocation());"}} | ||
}, | }, | ||
["warn_pragma_unused_undeclared_var"]={ | ["warn_pragma_unused_undeclared_var"]={ | ||
Line 4,059: | Line 4,059: | ||
[e]=p, | [e]=p, | ||
[i]={"fb50bf5a6f16",1249341897,"Per advice that Doug Gregor gave me several months ago, clean up the"}, | [i]={"fb50bf5a6f16",1249341897,"Per advice that Doug Gregor gave me several months ago, clean up the"}, | ||
[j]={{ib, | [j]={{ib,832,"void Sema::ActOnPragmaUnused(const Token &IdTok, Scope *curScope, SourceLocation PragmaLoc) {\n if (Lookup.empty()) {\n Diag(PragmaLoc, diag::warn_pragma_unused_undeclared_var) << Name << SourceRange(IdTok.getLocation());"}} | ||
}, | }, | ||
["warn_pragma_warning_expected"]={ | ["warn_pragma_warning_expected"]={ | ||
Line 4,073: | Line 4,073: | ||
[e]=C, | [e]=C, | ||
[i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | [i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | ||
[j]={{H, | [j]={{H,1395,"/// \"\\#pragma warning(...)\". MSVC\'s diagnostics do not map cleanly to clang\'s\n/// diagnostics, so we don\'t really implement this pragma. We parse it and\n/// ignore it to avoid -Wunknown-pragma warnings.\nstruct PragmaWarningHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(Tok, diag::warn_pragma_warning_expected) << \"(\";"},{H,1473,"/// \"\\#pragma warning(...)\". MSVC\'s diagnostics do not map cleanly to clang\'s\n/// diagnostics, so we don\'t really implement this pragma. We parse it and\n/// ignore it to avoid -Wunknown-pragma warnings.\nstruct PragmaWarningHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (II && II->isStr(\"push\")) {\n } else if (II && II->isStr(\"pop\")) {\n } else {\n // #pragma warning( warning-specifier : warning-number-list\n // [; warning-specifier : warning-number-list...] )\n while (true) {\n if (Tok.isNot(tok::colon)) {\n PP.Diag(Tok, diag::warn_pragma_warning_expected) << \":\";"},{H,1516,"/// \"\\#pragma warning(...)\". MSVC\'s diagnostics do not map cleanly to clang\'s\n/// diagnostics, so we don\'t really implement this pragma. We parse it and\n/// ignore it to avoid -Wunknown-pragma warnings.\nstruct PragmaWarningHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok, diag::warn_pragma_warning_expected) << \")\";"}} | ||
}, | }, | ||
["warn_pragma_warning_expected_number"]={ | ["warn_pragma_warning_expected_number"]={ | ||
Line 4,087: | Line 4,087: | ||
[e]=C, | [e]=C, | ||
[i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | [i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | ||
[j]={{H, | [j]={{H,1484,"/// \"\\#pragma warning(...)\". MSVC\'s diagnostics do not map cleanly to clang\'s\n/// diagnostics, so we don\'t really implement this pragma. We parse it and\n/// ignore it to avoid -Wunknown-pragma warnings.\nstruct PragmaWarningHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (II && II->isStr(\"push\")) {\n } else if (II && II->isStr(\"pop\")) {\n } else {\n // #pragma warning( warning-specifier : warning-number-list\n // [; warning-specifier : warning-number-list...] )\n while (true) {\n while (Tok.is(tok::numeric_constant)) {\n if (!PP.parseSimpleIntegerLiteral(Tok, Value) || Value == 0 || Value > INT_MAX) {\n PP.Diag(Tok, diag::warn_pragma_warning_expected_number);"}} | ||
}, | }, | ||
["warn_pragma_warning_push_level"]={ | ["warn_pragma_warning_push_level"]={ | ||
Line 4,101: | Line 4,101: | ||
[e]=C, | [e]=C, | ||
[i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | [i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | ||
[j]={{H, | [j]={{H,1413,"/// \"\\#pragma warning(...)\". MSVC\'s diagnostics do not map cleanly to clang\'s\n/// diagnostics, so we don\'t really implement this pragma. We parse it and\n/// ignore it to avoid -Wunknown-pragma warnings.\nstruct PragmaWarningHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (II && II->isStr(\"push\")) {\n if (Tok.is(tok::comma)) {\n if (Level < 0 || Level > 4) {\n PP.Diag(Tok, diag::warn_pragma_warning_push_level);"}} | ||
}, | }, | ||
["warn_pragma_warning_spec_invalid"]={ | ["warn_pragma_warning_spec_invalid"]={ | ||
Line 4,115: | Line 4,115: | ||
[e]=C, | [e]=C, | ||
[i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | [i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | ||
[j]={{H, | [j]={{H,1433,"/// \"\\#pragma warning(...)\". MSVC\'s diagnostics do not map cleanly to clang\'s\n/// diagnostics, so we don\'t really implement this pragma. We parse it and\n/// ignore it to avoid -Wunknown-pragma warnings.\nstruct PragmaWarningHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (II && II->isStr(\"push\")) {\n } else if (II && II->isStr(\"pop\")) {\n } else {\n // #pragma warning( warning-specifier : warning-number-list\n // [; warning-specifier : warning-number-list...] )\n while (true) {\n if (!II && !Tok.is(tok::numeric_constant)) {\n PP.Diag(Tok, diag::warn_pragma_warning_spec_invalid);"},{H,1469,"/// \"\\#pragma warning(...)\". MSVC\'s diagnostics do not map cleanly to clang\'s\n/// diagnostics, so we don\'t really implement this pragma. We parse it and\n/// ignore it to avoid -Wunknown-pragma warnings.\nstruct PragmaWarningHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (II && II->isStr(\"push\")) {\n } else if (II && II->isStr(\"pop\")) {\n } else {\n // #pragma warning( warning-specifier : warning-number-list\n // [; warning-specifier : warning-number-list...] )\n while (true) {\n if (!SpecifierValid) {\n PP.Diag(Tok, diag::warn_pragma_warning_spec_invalid);"}} | ||
}, | }, | ||
["warn_pre_c2x_compat_attributes"]={ | ["warn_pre_c2x_compat_attributes"]={ | ||
Line 4,130: | Line 4,130: | ||
[e]=A, | [e]=A, | ||
[i]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives"}, | [i]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives"}, | ||
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp", | [j]={{"clang/lib/Parse/ParseDeclCXX.cpp",4527,"/// 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_precedence_bitwise_conditional"]={ | ["warn_precedence_bitwise_conditional"]={ | ||
Line 4,144: | Line 4,144: | ||
[e]=p, | [e]=p, | ||
[i]={hc,1567434909,zc}, | [i]={hc,1567434909,zc}, | ||
[j]={{z, | [j]={{z,9508,"/// DiagnoseConditionalPrecedence - Emit a warning when a conditional operator\n/// and binary operator are mixed in a way that suggests the programmer assumed\n/// the conditional operator has higher precedence, for example:\n/// \"int x = a + someBinaryCondition ? 1 : 2\".\nstatic void DiagnoseConditionalPrecedence(Sema &Self, SourceLocation OpLoc, Expr *Condition, Expr *LHSExpr, Expr *RHSExpr) {\n unsigned DiagID = BinaryOperator::isBitwiseOp(CondOpcode) ? diag::warn_precedence_bitwise_conditional : diag::warn_precedence_conditional;"}} | ||
}, | }, | ||
["warn_precedence_bitwise_rel"]={ | ["warn_precedence_bitwise_rel"]={ | ||
Line 4,158: | Line 4,158: | ||
[e]=p, | [e]=p, | ||
[i]={"4302824fe260",1256570655,"Implement a warning for mixing bitwise logical with comparison ops. Fixes PR5297."}, | [i]={"4302824fe260",1256570655,"Implement a warning for mixing bitwise logical with comparison ops. Fixes PR5297."}, | ||
[j]={{z, | [j]={{z,15763,"/// DiagnoseBitwisePrecedence - Emit a warning when bitwise and comparison\n/// operators are mixed in a way that suggests that the programmer forgot that\n/// comparison operators have higher precedence. The most typical example of\n/// such code is \"flags & 0x0020 != 0\", which is equivalent to \"flags & 1\".\nstatic void DiagnoseBitwisePrecedence(Sema &Self, BinaryOperatorKind Opc, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n Self.Diag(OpLoc, diag::warn_precedence_bitwise_rel) << DiagRange << BinaryOperator::getOpcodeStr(Opc) << OpStr;"}} | ||
}, | }, | ||
["warn_precedence_conditional"]={ | ["warn_precedence_conditional"]={ | ||
Line 4,172: | Line 4,172: | ||
[e]=p, | [e]=p, | ||
[i]={"cf9bac4bc9dd",1307124036,"Warn about missing parentheses for conditional operator."}, | [i]={"cf9bac4bc9dd",1307124036,"Warn about missing parentheses for conditional operator."}, | ||
[j]={{z, | [j]={{z,9516,"/// DiagnoseConditionalPrecedence - Emit a warning when a conditional operator\n/// and binary operator are mixed in a way that suggests the programmer assumed\n/// the conditional operator has higher precedence, for example:\n/// \"int x = a + someBinaryCondition ? 1 : 2\".\nstatic void DiagnoseConditionalPrecedence(Sema &Self, SourceLocation OpLoc, Expr *Condition, Expr *LHSExpr, Expr *RHSExpr) {\n unsigned DiagID = BinaryOperator::isBitwiseOp(CondOpcode) ? diag::warn_precedence_bitwise_conditional : diag::warn_precedence_conditional;"}} | ||
}, | }, | ||
["warn_printf_ObjCflags_without_ObjCConversion"]={ | ["warn_printf_ObjCflags_without_ObjCConversion"]={ | ||
Line 4,186: | Line 4,186: | ||
[e]=db, | [e]=db, | ||
[i]={"2b4177190923",1435815556,"Parse \'technical term\' format specifier."}, | [i]={"2b4177190923",1435815556,"Parse \'technical term\' format specifier."}, | ||
[j]={{x, | [j]={{x,10660,"void CheckPrintfHandler::HandleObjCFlagsWithNonObjCConversion(const char *flagsStart, const char *flagsEnd, const char *conversionPosition) {\n auto diag = diag::warn_printf_ObjCflags_without_ObjCConversion;"}} | ||
}, | }, | ||
["warn_printf_asterisk_missing_arg"]={ | ["warn_printf_asterisk_missing_arg"]={ | ||
Line 4,200: | Line 4,200: | ||
[e]=db, | [e]=db, | ||
[i]={"d166819c26a8",1267234863,"For printf format string checking, add support for positional format strings."}, | [i]={"d166819c26a8",1267234863,"For printf format string checking, add support for positional format strings."}, | ||
[j]={{x, | [j]={{x,10541,"bool CheckPrintfHandler::HandleAmount(const analyze_format_string::OptionalAmount &Amt, unsigned k, const char *startSpecifier, unsigned specifierLen) {\n if (Amt.hasDataArgument()) {\n if (ArgPassingKind != Sema::FAPK_VAList) {\n if (argIndex >= NumDataArgs) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_printf_asterisk_missing_arg) << k, getLocationOfByte(Amt.getStart()),"}} | ||
}, | }, | ||
["warn_printf_asterisk_wrong_type"]={ | ["warn_printf_asterisk_wrong_type"]={ | ||
Line 4,214: | Line 4,214: | ||
[e]=db, | [e]=db, | ||
[i]={"d166819c26a8",1267234863,"For printf format string checking, add support for positional format strings."}, | [i]={"d166819c26a8",1267234863,"For printf format string checking, add support for positional format strings."}, | ||
[j]={{x, | [j]={{x,10566,"bool CheckPrintfHandler::HandleAmount(const analyze_format_string::OptionalAmount &Amt, unsigned k, const char *startSpecifier, unsigned specifierLen) {\n if (Amt.hasDataArgument()) {\n if (ArgPassingKind != Sema::FAPK_VAList) {\n if (!AT.matchesType(S.Context, T)) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_printf_asterisk_wrong_type) << k << AT.getRepresentativeTypeName(S.Context) << T << Arg->getSourceRange(), getLocationOfByte(Amt.getStart()),"}} | ||
}, | }, | ||
["warn_printf_data_arg_not_used"]={ | ["warn_printf_data_arg_not_used"]={ | ||
Line 4,228: | Line 4,228: | ||
[e]=db, | [e]=db, | ||
[i]={"4a49d9818b4e",1267211921,"For printf format string checking, move the tracking of the data argument index out of"}, | [i]={"4a49d9818b4e",1267211921,"For printf format string checking, move the tracking of the data argument index out of"}, | ||
[j]={{x, | [j]={{x,10284,"void UncoveredArgHandler::Diagnose(Sema &S, bool IsFunctionCall, const Expr *ArgExpr) {\n PartialDiagnostic PDiag = S.PDiag(diag::warn_printf_data_arg_not_used);"}} | ||
}, | }, | ||
["warn_printf_empty_objc_flag"]={ | ["warn_printf_empty_objc_flag"]={ | ||
Line 4,242: | Line 4,242: | ||
[e]=db, | [e]=db, | ||
[i]={"2b4177190923",1435815556,"Parse \'technical term\' format specifier."}, | [i]={"2b4177190923",1435815556,"Parse \'technical term\' format specifier."}, | ||
[j]={{x, | [j]={{x,10639,"void CheckPrintfHandler::HandleEmptyObjCModifierFlag(const char *startFlag, unsigned flagLen) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_printf_empty_objc_flag), getLocationOfByte(startFlag),"}} | ||
}, | }, | ||
["warn_printf_format_string_contains_null_char"]={ | ["warn_printf_format_string_contains_null_char"]={ | ||
Line 4,256: | Line 4,256: | ||
[e]=db, | [e]=db, | ||
[i]={oc,1237025389,vc}, | [i]={oc,1237025389,vc}, | ||
[j]={{x, | [j]={{x,10243,"void CheckFormatHandler::HandleNullChar(const char *nullCharacter) {\n if (!isa<ObjCStringLiteral>(OrigFormatExpr)) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_printf_format_string_contains_null_char), getLocationOfByte(nullCharacter), /*IsStringLocation*/ true, getFormatStringRange());"}} | ||
}, | }, | ||
["warn_printf_format_string_not_null_terminated"]={ | ["warn_printf_format_string_not_null_terminated"]={ | ||
Line 4,270: | Line 4,270: | ||
[e]=db, | [e]=db, | ||
[i]={"6c6a4f4081a8",1392915938,"Sema: Emit a warning for non-null terminated format strings and other pathological cases."}, | [i]={"6c6a4f4081a8",1392915938,"Sema: Emit a warning for non-null terminated format strings and other pathological cases."}, | ||
[j]={{x, | [j]={{x,11647,"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 // Emit a warning if the string literal is truncated and does not contain an\n // embedded null character.\n if (TypeSize <= StrRef.size() && !StrRef.substr(0, TypeSize).contains(\'\\0\')) {\n CheckFormatHandler::EmitFormatDiagnostic(S, inFunctionCall, Args[format_idx], S.PDiag(diag::warn_printf_format_string_not_null_terminated), FExpr->getBeginLoc(),"}} | ||
}, | }, | ||
["warn_printf_ignored_flag"]={ | ["warn_printf_ignored_flag"]={ | ||
Line 4,284: | Line 4,284: | ||
[e]=db, | [e]=db, | ||
[i]={"b49ec6907b32",1276801227,"Bug 7377: Fixed several bad printf format string bugs."}, | [i]={"b49ec6907b32",1276801227,"Bug 7377: Fixed several bad printf format string bugs."}, | ||
[j]={{x, | [j]={{x,10627,"void CheckPrintfHandler::HandleIgnoredFlag(const analyze_printf::PrintfSpecifier &FS, const analyze_printf::OptionalFlag &ignoredFlag, const analyze_printf::OptionalFlag &flag, const char *startSpecifier, unsigned specifierLen) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_printf_ignored_flag) << ignoredFlag.toString() << flag.toString(), getLocationOfByte(ignoredFlag.getPosition()),"}} | ||
}, | }, | ||
["warn_printf_incomplete_specifier"]={ | ["warn_printf_incomplete_specifier"]={ | ||
Line 4,298: | Line 4,298: | ||
[e]=db, | [e]=db, | ||
[i]={"c22f78ddfdde",1264734981,"Alternate format string checking: issue warnings for incomplete format specifiers."}, | [i]={"c22f78ddfdde",1264734981,"Alternate format string checking: issue warnings for incomplete format specifiers."}, | ||
[j]={{x, | [j]={{x,10117,"void CheckFormatHandler::HandleIncompleteSpecifier(const char *startSpecifier, unsigned specifierLen) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_printf_incomplete_specifier), getLocationOfByte(startSpecifier),"}} | ||
}, | }, | ||
["warn_printf_insufficient_data_args"]={ | ["warn_printf_insufficient_data_args"]={ | ||
Line 4,312: | Line 4,312: | ||
[e]=db, | [e]=db, | ||
[i]={oc,1237025389,vc}, | [i]={oc,1237025389,vc}, | ||
[j]={{x, | [j]={{x,10372,"bool CheckFormatHandler::CheckNumArgs(const analyze_format_string::FormatSpecifier &FS, const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen, unsigned argIndex) {\n if (argIndex >= NumDataArgs) {\n PartialDiagnostic PDiag = FS.usesPositionalArg() ? (S.PDiag(diag::warn_printf_positional_arg_exceeds_data_args) << (argIndex + 1) << NumDataArgs) : S.PDiag(diag::warn_printf_insufficient_data_args);"}} | ||
}, | }, | ||
["warn_printf_invalid_objc_flag"]={ | ["warn_printf_invalid_objc_flag"]={ | ||
Line 4,326: | Line 4,326: | ||
[e]=db, | [e]=db, | ||
[i]={"2b4177190923",1435815556,"Parse \'technical term\' format specifier."}, | [i]={"2b4177190923",1435815556,"Parse \'technical term\' format specifier."}, | ||
[j]={{x, | [j]={{x,10650,"void CheckPrintfHandler::HandleInvalidObjCModifierFlag(const char *startFlag, unsigned flagLen) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_printf_invalid_objc_flag) << flag, getLocationOfByte(startFlag),"}} | ||
}, | }, | ||
["warn_printf_narg_not_supported"]={ | ["warn_printf_narg_not_supported"]={ | ||
Line 4,340: | Line 4,340: | ||
[e]=db, | [e]=db, | ||
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | [i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | ||
[j]={{x, | [j]={{x,10876,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n if (CS.getKind() == ConversionSpecifier::nArg && (Triple.isAndroid() || Triple.isOSFuchsia())) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_printf_narg_not_supported), getLocationOfByte(CS.getStart()),"}} | ||
}, | }, | ||
["warn_printf_nonsensical_flag"]={ | ["warn_printf_nonsensical_flag"]={ | ||
Line 4,354: | Line 4,354: | ||
[e]=db, | [e]=db, | ||
[i]={"d31b2637abd2",1265880461,"Patch by Cristian Draghici:"}, | [i]={"d31b2637abd2",1265880461,"Patch by Cristian Draghici:"}, | ||
[j]={{x, | [j]={{x,10611,"void CheckPrintfHandler::HandleFlag(const analyze_printf::PrintfSpecifier &FS, const analyze_printf::OptionalFlag &flag, const char *startSpecifier, unsigned specifierLen) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_printf_nonsensical_flag) << flag.toString() << CS.toString(), getLocationOfByte(flag.getPosition()),"}} | ||
}, | }, | ||
["warn_printf_nonsensical_optional_amount"]={ | ["warn_printf_nonsensical_optional_amount"]={ | ||
Line 4,368: | Line 4,368: | ||
[e]=db, | [e]=db, | ||
[i]={"b49ec6907b32",1276801227,"Bug 7377: Fixed several bad printf format string bugs."}, | [i]={"b49ec6907b32",1276801227,"Bug 7377: Fixed several bad printf format string bugs."}, | ||
[j]={{x, | [j]={{x,10596,"void CheckPrintfHandler::HandleInvalidAmount(const analyze_printf::PrintfSpecifier &FS, const analyze_printf::OptionalAmount &Amt, unsigned type, const char *startSpecifier, unsigned specifierLen) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_printf_nonsensical_optional_amount) << type << CS.toString(), getLocationOfByte(Amt.getStart()),"}} | ||
}, | }, | ||
["warn_printf_positional_arg_exceeds_data_args"]={ | ["warn_printf_positional_arg_exceeds_data_args"]={ | ||
Line 4,382: | Line 4,382: | ||
[e]=db, | [e]=db, | ||
[i]={"4d745dd5cb3c",1269489552,"Fix two bugs in format-string checking:"}, | [i]={"4d745dd5cb3c",1269489552,"Fix two bugs in format-string checking:"}, | ||
[j]={{x, | [j]={{x,10370,"bool CheckFormatHandler::CheckNumArgs(const analyze_format_string::FormatSpecifier &FS, const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen, unsigned argIndex) {\n if (argIndex >= NumDataArgs) {\n PartialDiagnostic PDiag = FS.usesPositionalArg() ? (S.PDiag(diag::warn_printf_positional_arg_exceeds_data_args) << (argIndex + 1) << NumDataArgs) : S.PDiag(diag::warn_printf_insufficient_data_args);"}} | ||
}, | }, | ||
["warn_private_extern"]={ | ["warn_private_extern"]={ | ||
Line 4,396: | Line 4,396: | ||
[e]=p, | [e]=p, | ||
[i]={"05f4e7181a1e",1345056146,"Patch to warn about __private_extern__ on tentative definitions"}, | [i]={"05f4e7181a1e",1345056146,"Patch to warn about __private_extern__ on tentative definitions"}, | ||
[j]={{G, | [j]={{G,13781,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n case VarDecl::DeclarationOnly:\n if (!Type->isDependentType() && !Var->isInvalidDecl() && Var->getStorageClass() == SC_PrivateExtern) {\n Diag(Var->getLocation(), diag::warn_private_extern);"}} | ||
}, | }, | ||
["warn_profile_data_misexpect"]={ | ["warn_profile_data_misexpect"]={ | ||
Line 4,410: | Line 4,410: | ||
[e]="Instrumentation Issue", | [e]="Instrumentation Issue", | ||
[i]={"a10802fd73f9",1568085099,"clang-misexpect: Profile Guided Validation of Performance Annotations in LLVM"}, | [i]={"a10802fd73f9",1568085099,"clang-misexpect: Profile Guided Validation of Performance Annotations in LLVM"}, | ||
[j]={{"clang/lib/CodeGen/CodeGenAction.cpp", | [j]={{"clang/lib/CodeGen/CodeGenAction.cpp",870,"void BackendConsumer::MisExpectDiagHandler(const llvm::DiagnosticInfoMisExpect &D) {\n Diags.Report(Loc, diag::warn_profile_data_misexpect) << D.getMsg().str();"},{"clang/lib/Frontend/CompilerInvocation.cpp",4427,"bool CompilerInvocation::CreateFromArgsImpl(CompilerInvocation &Res, ArrayRef<const char *> CommandLineArgs, DiagnosticsEngine &Diags, const char *Argv0) {\n for (auto Warning : Res.getDiagnosticOpts().Warnings) {\n if (Warning == \"misexpect\" && !Diags.isIgnored(diag::warn_profile_data_misexpect, SourceLocation())) {"}} | ||
}, | }, | ||
["warn_profile_data_missing"]={ | ["warn_profile_data_missing"]={ | ||
Line 4,425: | Line 4,425: | ||
[e]="Instrumentation Issue", | [e]="Instrumentation Issue", | ||
[i]={"96d6ca7e8c4f",1493314258,"[Profile] Add off-by-default -Wprofile-instr-missing warning"}, | [i]={"96d6ca7e8c4f",1493314258,"[Profile] Add off-by-default -Wprofile-instr-missing warning"}, | ||
[j]={{"clang/lib/CodeGen/CodeGenModule.cpp", | [j]={{"clang/lib/CodeGen/CodeGenModule.cpp",710,"void InstrProfStats::reportDiagnostics(DiagnosticsEngine &Diags, StringRef MainFile) {\n if (VisitedInMainFile > 0 && VisitedInMainFile == MissingInMainFile) {\n } else {\n if (Missing > 0)\n Diags.Report(diag::warn_profile_data_missing) << Visited << Missing;"}} | ||
}, | }, | ||
["warn_profile_data_out_of_date"]={ | ["warn_profile_data_out_of_date"]={ | ||
Line 4,439: | Line 4,439: | ||
[e]="Instrumentation Issue", | [e]="Instrumentation Issue", | ||
[i]={"e2ef2a09ef26",1397596955,"CodeGen: Emit warnings for out of date profile data during PGO"}, | [i]={"e2ef2a09ef26",1397596955,"CodeGen: Emit warnings for out of date profile data during PGO"}, | ||
[j]={{"clang/lib/CodeGen/CodeGenModule.cpp", | [j]={{"clang/lib/CodeGen/CodeGenModule.cpp",707,"void InstrProfStats::reportDiagnostics(DiagnosticsEngine &Diags, StringRef MainFile) {\n if (VisitedInMainFile > 0 && VisitedInMainFile == MissingInMainFile) {\n } else {\n if (Mismatched > 0)\n Diags.Report(diag::warn_profile_data_out_of_date) << Visited << Mismatched;"}} | ||
}, | }, | ||
["warn_profile_data_unprofiled"]={ | ["warn_profile_data_unprofiled"]={ | ||
Line 4,453: | Line 4,453: | ||
[e]="Instrumentation Issue", | [e]="Instrumentation Issue", | ||
[i]={"40b8ba1496e5",1403747107,"CodeGen: Improve warnings about uninstrumented files when profiling"}, | [i]={"40b8ba1496e5",1403747107,"CodeGen: Improve warnings about uninstrumented files when profiling"}, | ||
[j]={{"clang/lib/CodeGen/CodeGenModule.cpp", | [j]={{"clang/lib/CodeGen/CodeGenModule.cpp",704,"void InstrProfStats::reportDiagnostics(DiagnosticsEngine &Diags, StringRef MainFile) {\n if (VisitedInMainFile > 0 && VisitedInMainFile == MissingInMainFile) {\n Diags.Report(diag::warn_profile_data_unprofiled) << MainFile;"}} | ||
}, | }, | ||
["warn_property_access_suggest"]={ | ["warn_property_access_suggest"]={ | ||
Line 4,467: | Line 4,467: | ||
[e]=p, | [e]=p, | ||
[i]={"0b1d28866c36",1407537204,"Objective-C [qoi]. Issue warning and fixit if property-dot syntax"}, | [i]={"0b1d28866c36",1407537204,"Objective-C [qoi]. Issue warning and fixit if property-dot syntax"}, | ||
[j]={{Z, | [j]={{Z,2084,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface. This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n // Special warning if member name used in a property-dot for a setter accessor\n // does not use a property with same name; e.g. obj.X = ... for a property with\n // name \'x\'.\n if (Setter && Setter->isImplicit() && Setter->isPropertyAccessor() && !IFace->FindPropertyDeclaration(Member, ObjCPropertyQueryKind::OBJC_PR_query_instance)) {\n if (const ObjCPropertyDecl *PDecl = Setter->findPropertyDecl()) {\n // Do not warn if user is using property-dot syntax to make call to\n // user named setter.\n if (!(PDecl->getPropertyAttributes() & ObjCPropertyAttribute::kind_setter))\n Diag(MemberLoc, diag::warn_property_access_suggest) << MemberName << QualType(OPT, 0) << PDecl->getName() << FixItHint::CreateReplacement(MemberLoc, PDecl->getName());"}} | ||
}, | }, | ||
["warn_property_attr_mismatch"]={ | ["warn_property_attr_mismatch"]={ | ||
Line 4,481: | Line 4,481: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{S, | [j]={{S,492,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n // Check for consistency with the previous declaration, if there is one.\n if (PIDecl) {\n if (ExistingOwnership && NewOwnership != ExistingOwnership) {\n // If the ownership was written explicitly, complain.\n if (getOwnershipRule(AttributesAsWritten)) {\n Diag(AtLoc, diag::warn_property_attr_mismatch);"}} | ||
}, | }, | ||
["warn_property_attribute"]={ | ["warn_property_attribute"]={ | ||
Line 4,495: | Line 4,495: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{S, | [j]={{S,399,"/// Check for a mismatch in the atomicity of the given properties.\nstatic void checkAtomicPropertyMismatch(Sema &S, ObjCPropertyDecl *OldProperty, ObjCPropertyDecl *NewProperty, bool PropagateAtomicity) {\n S.Diag(NewProperty->getLocation(), diag::warn_property_attribute) << NewProperty->getDeclName() << \"atomic\" << OldContextName;"},{S,1655,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n // We allow readonly properties without an explicit ownership\n // (assign/unsafe_unretained/weak/retain/strong/copy) in super class\n // to be overridden by a property with any explicit ownership in the subclass.\n if (!OverridingProtocolProperty && !getOwnershipRule(SAttr) && getOwnershipRule(CAttr))\n else {\n if ((CAttr & ObjCPropertyAttribute::kind_copy) != (SAttr & ObjCPropertyAttribute::kind_copy))\n Diag(Property->getLocation(), diag::warn_property_attribute) << Property->getDeclName() << \"copy\" << inheritedName;"},{S,1665,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n // We allow readonly properties without an explicit ownership\n // (assign/unsafe_unretained/weak/retain/strong/copy) in super class\n // to be overridden by a property with any explicit ownership in the subclass.\n if (!OverridingProtocolProperty && !getOwnershipRule(SAttr) && getOwnershipRule(CAttr))\n else {\n if ((CAttr & ObjCPropertyAttribute::kind_copy) != (SAttr & ObjCPropertyAttribute::kind_copy))\n else if (!(SAttr & ObjCPropertyAttribute::kind_readonly)) {\n if (CStrong != SStrong)\n Diag(Property->getLocation(), diag::warn_property_attribute) << Property->getDeclName() << \"retain (or strong)\" << inheritedName;"},{S,1679,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n // Readonly properties from protocols can be implemented as \"readwrite\"\n // with a custom setter name.\n if (Property->getSetterName() != SuperProperty->getSetterName() && !(SuperProperty->isReadOnly() && isa<ObjCProtocolDecl>(SuperProperty->getDeclContext()))) {\n Diag(Property->getLocation(), diag::warn_property_attribute) << Property->getDeclName() << \"setter\" << inheritedName;"},{S,1684,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n if (Property->getGetterName() != SuperProperty->getGetterName()) {\n Diag(Property->getLocation(), diag::warn_property_attribute) << Property->getDeclName() << \"getter\" << inheritedName;"}} | ||
}, | }, | ||
["warn_property_getter_owning_mismatch"]={ | ["warn_property_getter_owning_mismatch"]={ | ||
Line 4,507: | Line 4,507: | ||
[e]=p, | [e]=p, | ||
[i]={"f4105f5cfeb3",1308961066,"objc-arc/mrc: Allow ns_returns_not_retained attribute on properties"}, | [i]={"f4105f5cfeb3",1308961066,"objc-arc/mrc: Allow ns_returns_not_retained attribute on properties"}, | ||
[j]={{S, | [j]={{S,1482,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n if (ObjCMethodDecl *getterMethod = property->getGetterMethodDecl()) {\n if (property->hasAttr<NSReturnsNotRetainedAttr>() && !getterMethod->hasAttr<NSReturnsNotRetainedAttr>()) {\n Diag(getterMethod->getLocation(), diag::warn_property_getter_owning_mismatch);"}} | ||
}, | }, | ||
["warn_property_implicitly_mismatched"]={ | ["warn_property_implicitly_mismatched"]={ | ||
Line 4,521: | Line 4,521: | ||
[e]=p, | [e]=p, | ||
[i]={"7196487de91a",1382747739,"ObjectiveC arc. Warn when an implicitly \'strong\' property "}, | [i]={"7196487de91a",1382747739,"ObjectiveC arc. Warn when an implicitly \'strong\' property "}, | ||
[j]={{S, | [j]={{S,506,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n // Check for consistency with the previous declaration, if there is one.\n if (PIDecl) {\n // If the redeclaration is \'weak\' but the original property is not,\n if ((Attributes & ObjCPropertyAttribute::kind_weak) && !(PIDecl->getPropertyAttributesAsWritten() & ObjCPropertyAttribute::kind_weak) && PIDecl->getType()->getAs<ObjCObjectPointerType>() && PIDecl->getType().getObjCLifetime() == Qualifiers::OCL_None) {\n Diag(AtLoc, diag::warn_property_implicitly_mismatched);"}} | ||
}, | }, | ||
["warn_property_method_deprecated"]={ | ["warn_property_method_deprecated"]={ | ||
Line 4,535: | Line 4,535: | ||
[e]=Qb, | [e]=Qb, | ||
[i]={"89ea9610b306",1402939541,"Objective-C. Diagnose when property access is using declared"}, | [i]={"89ea9610b306",1402939541,"Objective-C. Diagnose when property access is using declared"}, | ||
[j]={{wc, | [j]={{wc,437,"/// 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_property_redecl_getter_mismatch"]={ | ["warn_property_redecl_getter_mismatch"]={ | ||
Line 4,549: | Line 4,549: | ||
[e]=p, | [e]=p, | ||
[i]={"9dd25b769642",1449788529,"Objective-C properties: merge attributes when redeclaring \'readonly\' as \'readwrite\' in an extension."}, | [i]={"9dd25b769642",1449788529,"Objective-C properties: merge attributes when redeclaring \'readonly\' as \'readwrite\' in an extension."}, | ||
[j]={{S, | [j]={{S,475,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n // Check for consistency with the previous declaration, if there is one.\n if (PIDecl) {\n // Check for consistency of getters.\n if (PIDecl->getGetterName() != GetterSel) {\n // If the getter was written explicitly, complain.\n if (AttributesAsWritten & ObjCPropertyAttribute::kind_getter) {\n Diag(AtLoc, diag::warn_property_redecl_getter_mismatch) << PIDecl->getGetterName() << GetterSel;"}} | ||
}, | }, | ||
["warn_property_types_are_incompatible"]={ | ["warn_property_types_are_incompatible"]={ | ||
Line 4,563: | Line 4,563: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{S, | [j]={{S,1702,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n if (!Context.propertyTypesAreCompatible(LHSType, RHSType)) {\n if (!isObjCPointerConversion(RHSType, LHSType, ConvertedType, IncompatibleObjC) || IncompatibleObjC) {\n Diag(Property->getLocation(), diag::warn_property_types_are_incompatible) << Property->getType() << SuperProperty->getType() << inheritedName;"}} | ||
}, | }, | ||
["warn_protocol_property_mismatch"]={ | ["warn_protocol_property_mismatch"]={ | ||
Line 4,577: | Line 4,577: | ||
[e]=p, | [e]=p, | ||
[i]={"0ebf87959fff",1369084824,"Objective-C [qoi]: When an class conforms to multiple"}, | [i]={"0ebf87959fff",1369084824,"Objective-C [qoi]: When an class conforms to multiple"}, | ||
[j]={{S, | [j]={{S,970,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n // Diagnose incompability.\n {\n auto Diag = S.Diag(Property->getLocation(), Property != OriginalProperty || HasIncompatibleAttributes ? diag::err_protocol_property_mismatch : diag::warn_protocol_property_mismatch);"}} | ||
}, | }, | ||
["warn_pt_guarded_pass_by_reference"]={ | ["warn_pt_guarded_pass_by_reference"]={ | ||
Line 4,592: | Line 4,592: | ||
[e]=p, | [e]=p, | ||
[i]={"c60dc2cfb9ad",1411081346,"Thread Safety Analysis: add new warning flag, -Wthread-safety-reference, which"}, | [i]={"c60dc2cfb9ad",1411081346,"Thread Safety Analysis: add new warning flag, -Wthread-safety-reference, which"}, | ||
[j]={{D, | [j]={{D,1973,"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_PtPassByRef:\n DiagID = diag::warn_pt_guarded_pass_by_reference;"},{D,2003,"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_PtPassByRef:\n DiagID = diag::warn_pt_guarded_pass_by_reference;"}} | ||
}, | }, | ||
["warn_ptr_arith_exceeds_bounds"]={ | ["warn_ptr_arith_exceeds_bounds"]={ | ||
Line 4,607: | Line 4,607: | ||
[e]=p, | [e]=p, | ||
[i]={"980bdb9dfb55",1311645148,"Expand array bounds checking to work in the presence of unary & and *,"}, | [i]={"980bdb9dfb55",1311645148,"Expand array bounds checking to work in the presence of unary & and *,"}, | ||
[j]={{x, | [j]={{x,17169,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n if (index.isUnsigned() || !index.isNegative()) {\n unsigned DiagID = ASE ? diag::warn_array_index_exceeds_bounds : diag::warn_ptr_arith_exceeds_bounds;"}} | ||
}, | }, | ||
["warn_ptr_arith_exceeds_max_addressable_bounds"]={ | ["warn_ptr_arith_exceeds_max_addressable_bounds"]={ | ||
Line 4,621: | Line 4,621: | ||
[e]=p, | [e]=p, | ||
[i]={"da55e9ba1273",1600125132,"[Sema] Address-space sensitive index check for unbounded arrays"}, | [i]={"da55e9ba1273",1600125132,"[Sema] Address-space sensitive index check for unbounded arrays"}, | ||
[j]={{x, | [j]={{x,17079,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n if (IsUnboundedArray) {\n if (index.isUnsigned() || !index.isNegative()) {\n unsigned DiagID = ASE ? diag::warn_array_index_exceeds_max_addressable_bounds : diag::warn_ptr_arith_exceeds_max_addressable_bounds;"}} | ||
}, | }, | ||
["warn_ptr_arith_precedes_bounds"]={ | ["warn_ptr_arith_precedes_bounds"]={ | ||
Line 4,636: | Line 4,636: | ||
[e]=p, | [e]=p, | ||
[i]={"980bdb9dfb55",1311645148,"Expand array bounds checking to work in the presence of unary & and *,"}, | [i]={"980bdb9dfb55",1311645148,"Expand array bounds checking to work in the presence of unary & and *,"}, | ||
[j]={{x, | [j]={{x,17180,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n if (index.isUnsigned() || !index.isNegative()) {\n } else {\n if (!ASE) {\n DiagID = diag::warn_ptr_arith_precedes_bounds;"}} | ||
}, | }, | ||
["warn_ptr_independentclass_attribute"]={ | ["warn_ptr_independentclass_attribute"]={ | ||
Line 4,650: | Line 4,650: | ||
[e]=p, | [e]=p, | ||
[i]={"7a60b6db76f5",1429209524,"[Objective-C Sema] patch to introduce IndependentClass"}, | [i]={"7a60b6db76f5",1429209524,"[Objective-C Sema] patch to introduce IndependentClass"}, | ||
[j]={{B, | [j]={{B,3021,"static void handleObjCIndependentClass(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n if (!T->isObjCObjectPointerType()) {\n S.Diag(TD->getLocation(), diag::warn_ptr_independentclass_attribute);"}} | ||
}, | }, | ||
["warn_qual_return_type"]={ | ["warn_qual_return_type"]={ | ||
Line 4,665: | Line 4,665: | ||
[e]=p, | [e]=p, | ||
[i]={"603d81bf8d05",1279009102,"When forming a function call or message send expression, be sure to"}, | [i]={"603d81bf8d05",1279009102,"When forming a function call or message send expression, be sure to"}, | ||
[j]={{Q, | [j]={{Q,3328,"// Diagnose pointless type qualifiers on the return type of a function.\nstatic void diagnoseRedundantReturnTypeQualifiers(Sema &S, QualType RetTy, Declarator &D, unsigned FunctionChunkIndex) {\n if (FTI.hasTrailingReturnType()) {\n S.diagnoseIgnoredQualifiers(diag::warn_qual_return_type, RetTy.getLocalCVRQualifiers(), FTI.getTrailingReturnTypeLoc());"},{Q,3345,"// Diagnose pointless type qualifiers on the return type of a function.\nstatic void diagnoseRedundantReturnTypeQualifiers(Sema &S, QualType RetTy, Declarator &D, unsigned FunctionChunkIndex) {\n for (unsigned OuterChunkIndex = FunctionChunkIndex + 1, End = D.getNumTypeObjects(); OuterChunkIndex != End; ++OuterChunkIndex) {\n case DeclaratorChunk::Pointer: {\n S.diagnoseIgnoredQualifiers(diag::warn_qual_return_type, PTI.TypeQuals, SourceLocation(), PTI.ConstQualLoc, PTI.VolatileQualLoc, PTI.RestrictQualLoc, PTI.AtomicQualLoc, PTI.UnalignedQualLoc);"},{Q,3365,"// Diagnose pointless type qualifiers on the return type of a function.\nstatic void diagnoseRedundantReturnTypeQualifiers(Sema &S, QualType RetTy, Declarator &D, unsigned FunctionChunkIndex) {\n for (unsigned OuterChunkIndex = FunctionChunkIndex + 1, End = D.getNumTypeObjects(); OuterChunkIndex != End; ++OuterChunkIndex) {\n case DeclaratorChunk::Pipe:\n S.diagnoseIgnoredQualifiers(diag::warn_qual_return_type, RetTy.getCVRQualifiers() | AtomicQual, D.getIdentifierLoc());"},{Q,3382,"// Diagnose pointless type qualifiers on the return type of a function.\nstatic void diagnoseRedundantReturnTypeQualifiers(Sema &S, QualType RetTy, Declarator &D, unsigned FunctionChunkIndex) {\n S.diagnoseIgnoredQualifiers(diag::warn_qual_return_type, D.getDeclSpec().getTypeQualifiers(), D.getIdentifierLoc(), D.getDeclSpec().getConstSpecLoc(), D.getDeclSpec().getVolatileSpecLoc(), D.getDeclSpec().getRestrictSpecLoc(), D.getDeclSpec().getAtomicSpecLoc(), D.getDeclSpec().getUnalignedSpecLoc());"}} | ||
}, | }, | ||
["warn_quoted_include_in_framework_header"]={ | ["warn_quoted_include_in_framework_header"]={ | ||
Line 4,680: | Line 4,680: | ||
[e]=C, | [e]=C, | ||
[i]={"d1d83df80764",1529532719,"Warning for framework headers using double quote includes"}, | [i]={"d1d83df80764",1529532719,"Warning for framework headers using double quote includes"}, | ||
[j]={{"clang/lib/Lex/HeaderSearch.cpp", | [j]={{"clang/lib/Lex/HeaderSearch.cpp",843,"static void diagnoseFrameworkInclude(DiagnosticsEngine &Diags, SourceLocation IncludeLoc, StringRef Includer, StringRef IncludeFilename, const FileEntry *IncludeFE, bool isAngled = false, bool FoundByHeaderMap = false) {\n if (!isAngled && !FoundByHeaderMap) {\n Diags.Report(IncludeLoc, diag::warn_quoted_include_in_framework_header) << IncludeFilename << FixItHint::CreateReplacement(IncludeLoc, NewInclude);"}} | ||
}, | }, | ||
["warn_reading_std_cxx_module_by_implicit_paths"]={ | ["warn_reading_std_cxx_module_by_implicit_paths"]={ | ||
Line 4,694: | Line 4,694: | ||
[e]="AST Deserialization Issue", | [e]="AST Deserialization Issue", | ||
[i]={"e22fa1d4c615",1684317067,"[C++20] [Modules] Emit a warning if the we load the modules by implicit generated path"}, | [i]={"e22fa1d4c615",1684317067,"[C++20] [Modules] Emit a warning if the we load the modules by implicit generated path"}, | ||
[j]={{"clang/lib/Serialization/ASTReader.cpp", | [j]={{"clang/lib/Serialization/ASTReader.cpp",2918,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n while (true) {\n case IMPORTS: {\n while (Idx < N) {\n if (ImportedFile.empty()) {\n // It is deprecated for C++20 Named modules to use the implicitly\n // paths.\n if (IsImportingStdCXXModule)\n Diag(clang::diag::warn_reading_std_cxx_module_by_implicit_paths) << ImportedName;"}} | ||
}, | }, | ||
["warn_readonly_property"]={ | ["warn_readonly_property"]={ | ||
Line 4,708: | Line 4,708: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{S, | [j]={{S,1651,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n // We allow readonly properties without an explicit ownership\n // (assign/unsafe_unretained/weak/retain/strong/copy) in super class\n // to be overridden by a property with any explicit ownership in the subclass.\n if (!OverridingProtocolProperty && !getOwnershipRule(SAttr) && getOwnershipRule(CAttr))\n else {\n if ((CAttr & ObjCPropertyAttribute::kind_readonly) && (SAttr & ObjCPropertyAttribute::kind_readwrite))\n Diag(Property->getLocation(), diag::warn_readonly_property) << Property->getDeclName() << inheritedName;"}} | ||
}, | }, | ||
["warn_receiver_forward_class"]={ | ["warn_receiver_forward_class"]={ | ||
Line 4,722: | Line 4,722: | ||
[e]=p, | [e]=p, | ||
[i]={"1bd844da8057",1241823756,"Warn if forward class is used as a receiver."}, | [i]={"1bd844da8057",1241823756,"Warn if forward class is used as a receiver."}, | ||
[j]={{Z, | [j]={{Z,2664,"/// \\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 // Find the method we are messaging.\n if (!Method) {\n if (RequireCompleteType(Loc, Context.getObjCInterfaceType(Class), (getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_class : diag::warn_receiver_forward_class), TypeRange)) {"}} | ||
}, | }, | ||
["warn_receiver_forward_instance"]={ | ["warn_receiver_forward_instance"]={ | ||
Line 4,737: | Line 4,737: | ||
[e]="ARC Semantic Issue", | [e]="ARC Semantic Issue", | ||
[i]={"c934de67e0c6",1328230964,"objc: Issue diagnostic when receiver type is a forward class declaration and"}, | [i]={"c934de67e0c6",1328230964,"objc: Issue diagnostic when receiver type is a forward class declaration and"}, | ||
[j]={{Z, | [j]={{Z,3067,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n if (!Method) {\n if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n } else {\n // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n // long as one of the protocols implements the selector (if not, warn).\n // And as long as message is not deprecated/unavailable (warn if it is).\n if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n if (RequireCompleteType(Loc, OCIType->getPointeeType(), getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_instance : diag::warn_receiver_forward_instance, RecRange)) {"}} | ||
}, | }, | ||
["warn_redecl_library_builtin"]={ | ["warn_redecl_library_builtin"]={ | ||
Line 4,751: | Line 4,751: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{G, | [j]={{G,4296,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n if (Old->isImplicit() && (BuiltinID = Old->getBuiltinID())) {\n // If it\'s actually a library-defined builtin function like \'malloc\'\n // or \'printf\', just warn about the incompatible redeclaration.\n if (Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) {\n Diag(New->getLocation(), diag::warn_redecl_library_builtin) << New;"}} | ||
}, | }, | ||
["warn_redeclaration_without_attribute_prev_attribute_ignored"]={ | ["warn_redeclaration_without_attribute_prev_attribute_ignored"]={ | ||
Line 4,765: | Line 4,765: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{G, | [j]={{G,7147,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n if (IsMicrosoftABI && IsDefinition) {\n } else if (IsMicrosoftABI && IsSpecialization) {\n } else {\n S.Diag(NewDecl->getLocation(), diag::warn_redeclaration_without_attribute_prev_attribute_ignored) << NewDecl << OldImportAttr;"}} | ||
}, | }, | ||
["warn_redeclaration_without_import_attribute"]={ | ["warn_redeclaration_without_import_attribute"]={ | ||
Line 4,779: | Line 4,779: | ||
[e]=p, | [e]=p, | ||
[i]={"eebc4af0ed2f",1464175962,"[ms][dll] #26935 Defining a dllimport function should cause it to be exported"}, | [i]={"eebc4af0ed2f",1464175962,"[ms][dll] #26935 Defining a dllimport function should cause it to be exported"}, | ||
[j]={{G, | [j]={{G,7135,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n if (IsMicrosoftABI && IsDefinition) {\n if (IsSpecialization) {\n } else {\n S.Diag(NewDecl->getLocation(), diag::warn_redeclaration_without_import_attribute) << NewDecl;"}} | ||
}, | }, | ||
["warn_redefine_extname_not_applied"]={ | ["warn_redefine_extname_not_applied"]={ | ||
Line 4,793: | Line 4,793: | ||
[e]=p, | [e]=p, | ||
[i]={"7572e58b66bc",1437066413,"Disable #pragma redefine_extname for C++ code as it does not make sense in such a context."}, | [i]={"7572e58b66bc",1437066413,"Disable #pragma redefine_extname for C++ code as it does not make sense in such a context."}, | ||
[j]={{G, | [j]={{G,7985,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // Handle GNU asm-label extension (encoded as an attribute).\n if (Expr *E = (Expr *)D.getAsmLabel()) {\n } else if (!ExtnameUndeclaredIdentifiers.empty()) {\n if (I != ExtnameUndeclaredIdentifiers.end()) {\n if (isDeclExternC(NewVD)) {\n } else\n Diag(NewVD->getLocation(), diag::warn_redefine_extname_not_applied) << /*Variable*/ 1 << NewVD;"},{G,10102,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // Handle GNU asm-label extension (encoded as an attribute).\n if (Expr *E = (Expr *)D.getAsmLabel()) {\n } else if (!ExtnameUndeclaredIdentifiers.empty()) {\n if (I != ExtnameUndeclaredIdentifiers.end()) {\n if (isDeclExternC(NewFD)) {\n } else\n Diag(NewFD->getLocation(), diag::warn_redefine_extname_not_applied) << /*Variable*/ 0 << NewFD;"},{G,19979,"void Sema::ActOnPragmaRedefineExtname(IdentifierInfo *Name, IdentifierInfo *AliasName, SourceLocation PragmaLoc, SourceLocation NameLoc, SourceLocation AliasNameLoc) {\n // If a declaration that:\n // 1) declares a function or a variable\n // 2) has external linkage\n // already exists, add a label attribute to it.\n if (PrevDecl && (isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl))) {\n if (isDeclExternC(PrevDecl))\n else\n Diag(PrevDecl->getLocation(), diag::warn_redefine_extname_not_applied) << /*Variable*/ (isa<FunctionDecl>(PrevDecl) ? 0 : 1) << PrevDecl;"}} | ||
}, | }, | ||
["warn_redefinition_in_param_list"]={ | ["warn_redefinition_in_param_list"]={ | ||
Line 4,807: | Line 4,807: | ||
[e]=p, | [e]=p, | ||
[i]={"051390fffab6",1330452731,"Correctly track tags and enum members defined in the prototype of a function, and ensure they are pr..."}, | [i]={"051390fffab6",1330452731,"Correctly track tags and enum members defined in the prototype of a function, and ensure they are pr..."}, | ||
[j]={{G, | [j]={{G,17367,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n if (!Previous.empty()) {\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n // If this is a use of a previous tag, or if the tag is already declared\n // in the same scope (so that the definition/declaration completes or\n // rementions the tag), reuse the decl.\n if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n if (!Invalid) {\n // Diagnose attempts to redefine a tag.\n if (TUK == TUK_Definition) {\n if (NamedDecl *Def = PrevTagDecl->getDefinition()) {\n if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n } else if (!IsExplicitSpecializationAfterInstantiation) {\n // A redeclaration in function prototype scope in C isn\'t\n // visible elsewhere, so merely issue a warning.\n if (!getLangOpts().CPlusPlus && S->containedInPrototypeScope())\n Diag(NameLoc, diag::warn_redefinition_in_param_list) << Name;"}} | ||
}, | }, | ||
["warn_redundant_loop_iteration"]={ | ["warn_redundant_loop_iteration"]={ | ||
Line 4,822: | Line 4,822: | ||
[e]=p, | [e]=p, | ||
[i]={"4e7c9628917a",1375824714,"Add a new warning to -Wloop-analysis to detect suspicious increments or"}, | [i]={"4e7c9628917a",1375824714,"Add a new warning to -Wloop-analysis to detect suspicious increments or"}, | ||
[j]={{R, | [j]={{R,2082,"// Emit a warning when a loop increment/decrement appears twice per loop\n// iteration. The conditions which trigger this warning are:\n// 1) The last statement in the loop body and the third expression in the\n// for loop are both increment or both decrement of the same variable\n// 2) No continue statements in the loop body.\nvoid CheckForRedundantIteration(Sema &S, Expr *Third, Stmt *Body) {\n if (S.Diags.isIgnored(diag::warn_redundant_loop_iteration, Third->getBeginLoc()))"},{R,2105,"// Emit a warning when a loop increment/decrement appears twice per loop\n// iteration. The conditions which trigger this warning are:\n// 1) The last statement in the loop body and the third expression in the\n// for loop are both increment or both decrement of the same variable\n// 2) No continue statements in the loop body.\nvoid CheckForRedundantIteration(Sema &S, Expr *Third, Stmt *Body) {\n S.Diag(LastDRE->getLocation(), diag::warn_redundant_loop_iteration) << LastDRE->getDecl() << LastIncrement;"}} | ||
}, | }, | ||
["warn_redundant_move_on_return"]={ | ["warn_redundant_move_on_return"]={ | ||
Line 4,837: | Line 4,837: | ||
[e]=p, | [e]=p, | ||
[i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."}, | [i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."}, | ||
[j]={{vb, | [j]={{vb,8403,"/// Provide warnings when std::move is used on construction.\nstatic void CheckMoveOnConstruction(Sema &S, const Expr *InitExpr, bool IsReturnStmt) {\n if (IsReturnStmt) {\n // If we\'re returning a function parameter, copy elision\n // is not possible.\n if (isa<ParmVarDecl>(VD))\n DiagID = diag::warn_redundant_move_on_return;"}} | ||
}, | }, | ||
["warn_redundant_parens_around_declarator"]={ | ["warn_redundant_parens_around_declarator"]={ | ||
Line 4,852: | Line 4,852: | ||
[e]=p, | [e]=p, | ||
[i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"}, | [i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"}, | ||
[j]={{Q, | [j]={{Q,4016,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n if (!CouldBeTemporaryObject) {\n S.Diag(Paren.Loc, diag::warn_redundant_parens_around_declarator) << ParenRange << FixItHint::CreateRemoval(Paren.Loc) << FixItHint::CreateRemoval(Paren.EndLoc);"}} | ||
}, | }, | ||
["warn_reference_field_is_uninit"]={ | ["warn_reference_field_is_uninit"]={ | ||
Line 4,866: | Line 4,866: | ||
[e]=p, | [e]=p, | ||
[i]={"d799a2b3b91f",1345452742,"Better wording for reference self-initialization warning."}, | [i]={"d799a2b3b91f",1345452742,"Better wording for reference self-initialization warning."}, | ||
[j]={{Y, | [j]={{Y,3859,"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;"}} | ||
}, | }, | ||
["warn_register_objc_catch_parm"]={ | ["warn_register_objc_catch_parm"]={ | ||
Line 4,878: | Line 4,878: | ||
[e]=p, | [e]=p, | ||
[i]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from"}, | [i]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from"}, | ||
[j]={{N, | [j]={{N,5193,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n // We allow the \"register\" storage class on exception variables because\n // GCC did, but we drop it completely. Any other storage class is an error.\n if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n Diag(DS.getStorageClassSpecLoc(), diag::warn_register_objc_catch_parm) << FixItHint::CreateRemoval(SourceRange(DS.getStorageClassSpecLoc()));"}} | ||
}, | }, | ||
["warn_reinterpret_different_from_static"]={ | ["warn_reinterpret_different_from_static"]={ | ||
Line 4,892: | Line 4,892: | ||
[e]=p, | [e]=p, | ||
[i]={"cda80833090b",1363921094,"Warn about attempts to reinterpret_cast between two types that are"}, | [i]={"cda80833090b",1363921094,"Warn about attempts to reinterpret_cast between two types that are"}, | ||
[j]={{Db, | [j]={{Db,1073,"/// Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is not used as upcast\n/// or downcast between respective pointers or references.\nstatic void DiagnoseReinterpretUpDownCast(Sema &Self, const Expr *SrcExpr, QualType DestType, SourceRange OpRange) {\n Self.Diag(BeginLoc, diag::warn_reinterpret_different_from_static) << DerivedType << BaseType << !VirtualBase << int(ReinterpretKind) << OpRange;"}} | ||
}, | }, | ||
["warn_related_result_type_compatibility_class"]={ | ["warn_related_result_type_compatibility_class"]={ | ||
Line 4,904: | Line 4,904: | ||
[e]="Related Result Type Issue", | [e]="Related Result Type Issue", | ||
[i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics."}, | [i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics."}, | ||
[j]={{N, | [j]={{N,164,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n if (Overridden->hasRelatedResultType() && !NewMethod->hasRelatedResultType()) {\n if (CurrentClass) {\n Diag(NewMethod->getLocation(), diag::warn_related_result_type_compatibility_class) << Context.getObjCInterfaceType(CurrentClass) << ResultType << ResultTypeRange;"}} | ||
}, | }, | ||
["warn_related_result_type_compatibility_protocol"]={ | ["warn_related_result_type_compatibility_protocol"]={ | ||
Line 4,916: | Line 4,916: | ||
[e]="Related Result Type Issue", | [e]="Related Result Type Issue", | ||
[i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics."}, | [i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics."}, | ||
[j]={{N, | [j]={{N,170,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n if (Overridden->hasRelatedResultType() && !NewMethod->hasRelatedResultType()) {\n if (CurrentClass) {\n } else {\n Diag(NewMethod->getLocation(), diag::warn_related_result_type_compatibility_protocol) << ResultType << ResultTypeRange;"}} | ||
}, | }, | ||
["warn_remainder_division_by_zero"]={ | ["warn_remainder_division_by_zero"]={ | ||
Line 4,930: | Line 4,930: | ||
[e]=p, | [e]=p, | ||
[i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC"}, | [i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC"}, | ||
[j]={{z, | [j]={{z,11430,"static void DiagnoseBadDivideOrRemainderValues(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsDiv) {\n if (!RHS.get()->isValueDependent() && RHS.get()->EvaluateAsInt(RHSValue, S.Context) && RHSValue.Val.getInt() == 0)\n S.DiagRuntimeBehavior(Loc, RHS.get(), S.PDiag(diag::warn_remainder_division_by_zero) << IsDiv << RHS.get()->getSourceRange());"}} | ||
}, | }, | ||
["warn_require_const_init_added_too_late"]={ | ["warn_require_const_init_added_too_late"]={ | ||
Line 4,944: | Line 4,944: | ||
[e]=p, | [e]=p, | ||
[i]={hc,1567434909,zc}, | [i]={hc,1567434909,zc}, | ||
[j]={{G, | [j]={{G,3173,"static void diagnoseMissingConstinit(Sema &S, const VarDecl *InitDecl, const ConstInitAttr *CIAttr, bool AttrBeforeInit) {\n if (AttrBeforeInit) {\n } else {\n S.Diag(CIAttr->getLocation(), CIAttr->isConstinit() ? diag::err_constinit_added_too_late : diag::warn_require_const_init_added_too_late) << FixItHint::CreateRemoval(SourceRange(CIAttr->getLocation()));"}} | ||
}, | }, | ||
["warn_reserved_extern_symbol"]={ | ["warn_reserved_extern_symbol"]={ | ||
Line 4,959: | Line 4,959: | ||
[e]=p, | [e]=p, | ||
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"}, | [i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"}, | ||
[j]={{G, | [j]={{G,6091,"void Sema::warnOnReservedIdentifier(const NamedDecl *D) {\n if (Status != ReservedIdentifierStatus::NotReserved && !isFromSystemHeader(Context.getSourceManager(), D)) {\n Diag(D->getLocation(), diag::warn_reserved_extern_symbol) << D << static_cast<int>(Status);"},{Lb,512,"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 Diag(Loc, diag::warn_reserved_extern_symbol) << II << static_cast<int>(Status) << Hint;"},{R,567,"StmtResult Sema::ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl, SourceLocation ColonLoc, Stmt *SubStmt) {\n if (isReservedInAllContexts(Status) && !Context.getSourceManager().isInSystemHeader(IdentLoc))\n Diag(IdentLoc, diag::warn_reserved_extern_symbol) << TheDecl << static_cast<int>(Status);"}} | ||
}, | }, | ||
["warn_reserved_module_name"]={ | ["warn_reserved_module_name"]={ | ||
Line 4,973: | Line 4,973: | ||
[e]=p, | [e]=p, | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{"clang/lib/Sema/SemaModule.cpp", | [j]={{"clang/lib/Sema/SemaModule.cpp",167,"/// Tests whether the given identifier is reserved as a module name and\n/// diagnoses if it is. Returns true if a diagnostic is emitted and false\n/// otherwise.\nstatic bool DiagReservedModuleName(Sema &S, const IdentifierInfo *II, SourceLocation Loc) {\n case Reserved:\n S.Diag(Loc, diag::warn_reserved_module_name) << II;"},{"clang/lib/Sema/SemaModule.cpp",274,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n if (!getSourceManager().isInSystemHeader(Path[0].second) && (FirstComponentName == \"std\" || (FirstComponentName.startswith(\"std\") && llvm::all_of(FirstComponentName.drop_front(3), &llvm::isDigit))))\n Diag(Path[0].second, diag::warn_reserved_module_name) << Path[0].first;"}} | ||
}, | }, | ||
["warn_ret_addr_label"]={ | ["warn_ret_addr_label"]={ | ||
Line 4,987: | Line 4,987: | ||
[e]=p, | [e]=p, | ||
[i]={"252d36e74caa",1256875318,"warn about returning the address of a label."}, | [i]={"252d36e74caa",1256875318,"warn about returning the address of a label."}, | ||
[j]={{vb, | [j]={{vb,8268,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n case LK_StmtExprResult:\n if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n } else if (isa<BlockExpr>(L)) {\n } else if (isa<AddrLabelExpr>(L)) {\n Diag(DiagLoc, diag::warn_ret_addr_label) << DiagRange;"}} | ||
}, | }, | ||
["warn_ret_local_temp_addr_ref"]={ | ["warn_ret_local_temp_addr_ref"]={ | ||
Line 5,001: | Line 5,001: | ||
[e]=p, | [e]=p, | ||
[i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC"}, | [i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC"}, | ||
[j]={{vb, | [j]={{vb,8270,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n case LK_StmtExprResult:\n if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n } else if (isa<BlockExpr>(L)) {\n } else if (isa<AddrLabelExpr>(L)) {\n } else {\n Diag(DiagLoc, diag::warn_ret_local_temp_addr_ref) << Entity.getType()->isReferenceType() << DiagRange;"}} | ||
}, | }, | ||
["warn_ret_stack_addr_ref"]={ | ["warn_ret_stack_addr_ref"]={ | ||
Line 5,015: | Line 5,015: | ||
[e]=p, | [e]=p, | ||
[i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC"}, | [i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC"}, | ||
[j]={{vb, | [j]={{vb,8258,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n case LK_StmtExprResult:\n if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n Diag(DiagLoc, diag::warn_ret_stack_addr_ref) << Entity.getType()->isReferenceType() << DRE->getDecl() << isa<ParmVarDecl>(DRE->getDecl()) << DiagRange;"}} | ||
}, | }, | ||
["warn_return_missing_expr"]={ | ["warn_return_missing_expr"]={ | ||
Line 5,029: | Line 5,029: | ||
[e]=p, | [e]=p, | ||
[i]={oc,1237025389,vc}, | [i]={oc,1237025389,vc}, | ||
[j]={{R, | [j]={{R,4141,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n if (FnRetType->isVoidType()) {\n } else if (!RetValExp && !HasDependentReturnType) {\n if ((FD && FD->isInvalidDecl()) || FnRetType->containsErrors()) {\n } else if (getLangOpts().CPlusPlus11 && FD && FD->isConstexpr()) {\n } else {\n unsigned DiagID = getLangOpts().C99 ? diag::ext_return_missing_expr : diag::warn_return_missing_expr;"}} | ||
}, | }, | ||
["warn_return_typestate_for_unconsumable_type"]={ | ["warn_return_typestate_for_unconsumable_type"]={ | ||
Line 5,044: | Line 5,044: | ||
[e]=p, | [e]=p, | ||
[i]={"fc368259af1a",1378239098,"Consumed analysis: add return_typestate attribute."}, | [i]={"fc368259af1a",1378239098,"Consumed analysis: add return_typestate attribute."}, | ||
[j]={{D, | [j]={{D,2122,"class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {\n void warnReturnTypestateForUnconsumableType(SourceLocation Loc, StringRef TypeName) override {\n PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_return_typestate_for_unconsumable_type) << TypeName);"}} | ||
}, | }, | ||
["warn_return_typestate_mismatch"]={ | ["warn_return_typestate_mismatch"]={ | ||
Line 5,059: | Line 5,059: | ||
[e]=p, | [e]=p, | ||
[i]={"fc368259af1a",1378239098,"Consumed analysis: add return_typestate attribute."}, | [i]={"fc368259af1a",1378239098,"Consumed analysis: add return_typestate attribute."}, | ||
[j]={{D, | [j]={{D,2131,"class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {\n void warnReturnTypestateMismatch(SourceLocation Loc, StringRef ExpectedState, StringRef ObservedState) override {\n PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_return_typestate_mismatch) << ExpectedState << ObservedState);"}} | ||
}, | }, | ||
["warn_return_value_size"]={ | ["warn_return_value_size"]={ | ||
Line 5,073: | Line 5,073: | ||
[e]=p, | [e]=p, | ||
[i]={"af84ec0a9612",1290035514,"Introduce option -Wargument-larger-than[=N] which warns about function definitions if they take by-v..."}, | [i]={"af84ec0a9612",1290035514,"Introduce option -Wargument-larger-than[=N] which warns about function definitions if they take by-v..."}, | ||
[j]={{G, | [j]={{G,14870,"void Sema::DiagnoseSizeOfParametersAndReturnValue(ArrayRef<ParmVarDecl *> Parameters, QualType ReturnTy, NamedDecl *D) {\n // Warn if the return value is pass-by-value and larger than the specified\n // threshold.\n if (!ReturnTy->isDependentType() && ReturnTy.isPODType(Context)) {\n if (Size > LangOpts.NumLargeByValueCopy)\n Diag(D->getLocation(), diag::warn_return_value_size) << D << Size;"}} | ||
}, | }, | ||
["warn_return_value_udt"]={ | ["warn_return_value_udt"]={ | ||
Line 5,087: | Line 5,087: | ||
[e]=p, | [e]=p, | ||
[i]={"c2a9493a26f4",1328750494,"Adding support for warning when a non-C compatible user-defined type is returned from an extern \"C\" ..."}, | [i]={"c2a9493a26f4",1328750494,"Adding support for warning when a non-C compatible user-defined type is returned from an extern \"C\" ..."}, | ||
[j]={{G, | [j]={{G,12022,"/// 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 // If this function is declared as being extern \"C\", then check to see if\n // the function returns a UDT (class, struct, or union type) that is not C\n // compatible, and if it does, warn the user.\n // But, issue any diagnostic on the first declaration only.\n if (Previous.empty() && NewFD->isExternC()) {\n if (R->isIncompleteType() && !R->isVoidType())\n else if (!R.isPODType(Context) && !R->isVoidType() && !R->isObjCObjectPointerType())\n Diag(NewFD->getLocation(), diag::warn_return_value_udt) << NewFD << R;"}} | ||
}, | }, | ||
["warn_return_value_udt_incomplete"]={ | ["warn_return_value_udt_incomplete"]={ | ||
Line 5,101: | Line 5,101: | ||
[e]=p, | [e]=p, | ||
[i]={"84ce606b9108",1343152781,"Tweak warning text for returning incomplete type from extern \"C\" functions."}, | [i]={"84ce606b9108",1343152781,"Tweak warning text for returning incomplete type from extern \"C\" functions."}, | ||
[j]={{G, | [j]={{G,12018,"/// 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 // If this function is declared as being extern \"C\", then check to see if\n // the function returns a UDT (class, struct, or union type) that is not C\n // compatible, and if it does, warn the user.\n // But, issue any diagnostic on the first declaration only.\n if (Previous.empty() && NewFD->isExternC()) {\n if (R->isIncompleteType() && !R->isVoidType())\n Diag(NewFD->getLocation(), diag::warn_return_value_udt_incomplete) << NewFD << R;"}} | ||
}, | }, | ||
["warn_riscv_repeated_interrupt_attribute"]={ | ["warn_riscv_repeated_interrupt_attribute"]={ | ||
Line 5,115: | Line 5,115: | ||
[e]=p, | [e]=p, | ||
[i]={"1eee1b771f43",1532626665," [RISCV] Add support for interrupt attribute"}, | [i]={"1eee1b771f43",1532626665," [RISCV] Add support for interrupt attribute"}, | ||
[j]={{B, | [j]={{B,7753,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // Warn about repeated attributes.\n if (const auto *A = D->getAttr<RISCVInterruptAttr>()) {\n S.Diag(AL.getRange().getBegin(), diag::warn_riscv_repeated_interrupt_attribute);"}} | ||
}, | }, | ||
["warn_root_inst_method_not_found"]={ | ["warn_root_inst_method_not_found"]={ | ||
Line 5,129: | Line 5,129: | ||
[e]=p, | [e]=p, | ||
[i]={"3baaffba6bc3",1241548477,"Issue a warning in odd case of instance method used"}, | [i]={"3baaffba6bc3",1241548477,"Issue a warning in odd case of instance method used"}, | ||
[j]={{Z, | [j]={{Z,3027,"/// 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 } else {\n if (!Method) {\n // If not messaging \'self\', look for any factory method named \'Sel\'.\n if (!Receiver || !isSelfExpr(Receiver)) {\n if (!Methods.empty()) {\n // If we find an instance method, emit warning.\n if (Method->isInstanceMethod()) {\n if (const ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(Method->getDeclContext())) {\n if (ID->getSuperClass())\n Diag(SelLoc, diag::warn_root_inst_method_not_found) << Sel << SourceRange(LBracLoc, RBracLoc);"}} | ||
}, | }, | ||
["warn_sampler_initializer_invalid_bits"]={ | ["warn_sampler_initializer_invalid_bits"]={ | ||
Line 5,144: | Line 5,144: | ||
[e]=p, | [e]=p, | ||
[i]={"0bc4b2d33731",1469733990,"[OpenCL] Generate opaque type for sampler_t and function call for the initializer"}, | [i]={"0bc4b2d33731",1469733990,"[OpenCL] Generate opaque type for sampler_t and function call for the initializer"}, | ||
[j]={{vb, | [j]={{vb,9366,"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_OCLSamplerInit: {\n // Case 1\n if (Entity.isParameterKind()) {\n } else {\n if (FilterMode != 1 && FilterMode != 2 && !S.getOpenCLOptions().isAvailableOption(\"cl_intel_device_side_avc_motion_estimation\", S.getLangOpts()))\n S.Diag(Kind.getLocation(), diag::warn_sampler_initializer_invalid_bits) << \"Filter Mode\";"},{vb,9370,"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_OCLSamplerInit: {\n // Case 1\n if (Entity.isParameterKind()) {\n } else {\n if (AddressingMode > 4)\n S.Diag(Kind.getLocation(), diag::warn_sampler_initializer_invalid_bits) << \"Addressing Mode\";"}} | ||
}, | }, | ||
["warn_scanf_nonzero_width"]={ | ["warn_scanf_nonzero_width"]={ | ||
Line 5,158: | Line 5,158: | ||
[e]=db, | [e]=db, | ||
[i]={"0208793e4101",1279246282,"Add most of the boilerplate support for scanf format string checking. This includes"}, | [i]={"0208793e4101",1279246282,"Add most of the boilerplate support for scanf format string checking. This includes"}, | ||
[j]={{x, | [j]={{x,11516,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n if (Amt.getHowSpecified() == OptionalAmount::Constant) {\n if (Amt.getConstantAmount() == 0) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_scanf_nonzero_width), getLocationOfByte(Amt.getStart()),"}} | ||
}, | }, | ||
["warn_scanf_scanlist_incomplete"]={ | ["warn_scanf_scanlist_incomplete"]={ | ||
Line 5,172: | Line 5,172: | ||
[e]=db, | [e]=db, | ||
[i]={"c618728e8dbc",1279304876,"Tweak zero-field width in scanf format string diagnostic."}, | [i]={"c618728e8dbc",1279304876,"Tweak zero-field width in scanf format string diagnostic."}, | ||
[j]={{x, | [j]={{x,11469,"void CheckScanfHandler::HandleIncompleteScanList(const char *start, const char *end) { EmitFormatDiagnostic(S.PDiag(diag::warn_scanf_scanlist_incomplete), getLocationOfByte(end), /*IsStringLocation*/ true, getSpecifierRange(start, end - start)); }"}} | ||
}, | }, | ||
["warn_second_arg_of_va_start_not_last_named_param"]={ | ["warn_second_arg_of_va_start_not_last_named_param"]={ | ||
Line 5,186: | Line 5,186: | ||
[e]=p, | [e]=p, | ||
[i]={"05164816f0ea",1461003053,"Clarifying the wording of this diagnostic; it confused parameter and argument."}, | [i]={"05164816f0ea",1461003053,"Clarifying the wording of this diagnostic; it confused parameter and argument."}, | ||
[j]={{x, | [j]={{x,8155,"/// Check the arguments to \'__builtin_va_start\' or \'__builtin_ms_va_start\'\n/// for validity. Emit an error and return true on failure; return false\n/// on success.\nbool Sema::SemaBuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall) {\n if (!SecondArgIsLastNamedArgument)\n Diag(TheCall->getArg(1)->getBeginLoc(), diag::warn_second_arg_of_va_start_not_last_named_param);"}} | ||
}, | }, | ||
["warn_second_parameter_to_va_arg_never_compatible"]={ | ["warn_second_parameter_to_va_arg_never_compatible"]={ | ||
Line 5,200: | Line 5,200: | ||
[e]=p, | [e]=p, | ||
[i]={"6290ae476ee6",1310420759,"Add diagnostic for constructs like \"va_arg(l, float)\" which have undefined behavior. PR10201."}, | [i]={"6290ae476ee6",1310420759,"Add diagnostic for constructs like \"va_arg(l, float)\" which have undefined behavior. PR10201."}, | ||
[j]={{z, | [j]={{z,17337,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n if (!TInfo->getType()->isDependentType()) {\n if (!PromoteType.isNull())\n DiagRuntimeBehavior(TInfo->getTypeLoc().getBeginLoc(), E, PDiag(diag::warn_second_parameter_to_va_arg_never_compatible) << TInfo->getType() << PromoteType << TInfo->getTypeLoc().getSourceRange());"}} | ||
}, | }, | ||
["warn_second_parameter_to_va_arg_not_pod"]={ | ["warn_second_parameter_to_va_arg_not_pod"]={ | ||
Line 5,214: | Line 5,214: | ||
[e]=p, | [e]=p, | ||
[i]={"254a5c07e7c9",1307947023,"Give a diagnostic when using non-POD types in a va_arg"}, | [i]={"254a5c07e7c9",1307947023,"Give a diagnostic when using non-POD types in a va_arg"}, | ||
[j]={{z, | [j]={{z,17289,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n if (!TInfo->getType()->isDependentType()) {\n if (!TInfo->getType().isPODType(Context)) {\n Diag(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType()->isObjCLifetimeType() ? diag::warn_second_parameter_to_va_arg_ownership_qualified : diag::warn_second_parameter_to_va_arg_not_pod) << TInfo->getType() << TInfo->getTypeLoc().getSourceRange();"}} | ||
}, | }, | ||
["warn_second_parameter_to_va_arg_ownership_qualified"]={ | ["warn_second_parameter_to_va_arg_ownership_qualified"]={ | ||
Line 5,228: | Line 5,228: | ||
[e]=p, | [e]=p, | ||
[i]={"7e1eb935dbc3",1312008327,"When complaining about a non-POD second argument to va_arg, use a"}, | [i]={"7e1eb935dbc3",1312008327,"When complaining about a non-POD second argument to va_arg, use a"}, | ||
[j]={{z, | [j]={{z,17234,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n if (!TInfo->getType()->isDependentType()) {\n if (!TInfo->getType().isPODType(Context)) {\n Diag(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType()->isObjCLifetimeType() ? diag::warn_second_parameter_to_va_arg_ownership_qualified : diag::warn_second_parameter_to_va_arg_not_pod) << TInfo->getType() << TInfo->getTypeLoc().getSourceRange();"}} | ||
}, | }, | ||
["warn_self_assignment_builtin"]={ | ["warn_self_assignment_builtin"]={ | ||
Line 5,243: | Line 5,243: | ||
[e]=p, | [e]=p, | ||
[i]={"6ed0fad9996d",1524519321,"[Sema] Add -Wno-self-assign-overloaded"}, | [i]={"6ed0fad9996d",1524519321,"[Sema] Add -Wno-self-assign-overloaded"}, | ||
[j]={{z, | [j]={{z,15295,"/// DiagnoseSelfAssignment - Emits a warning if a value is assigned to itself.\n/// This warning suppressed in the event of macro expansions.\nstatic void DiagnoseSelfAssignment(Sema &S, Expr *LHSExpr, Expr *RHSExpr, SourceLocation OpLoc, bool IsBuiltin) {\n auto Diag = S.Diag(OpLoc, IsBuiltin ? diag::warn_self_assignment_builtin : diag::warn_self_assignment_overloaded) << LHSDeclRef->getType() << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"}} | ||
}, | }, | ||
["warn_self_assignment_overloaded"]={ | ["warn_self_assignment_overloaded"]={ | ||
Line 5,258: | Line 5,258: | ||
[e]=p, | [e]=p, | ||
[i]={"6ed0fad9996d",1524519321,"[Sema] Add -Wno-self-assign-overloaded"}, | [i]={"6ed0fad9996d",1524519321,"[Sema] Add -Wno-self-assign-overloaded"}, | ||
[j]={{z, | [j]={{z,15331,"/// DiagnoseSelfAssignment - Emits a warning if a value is assigned to itself.\n/// This warning suppressed in the event of macro expansions.\nstatic void DiagnoseSelfAssignment(Sema &S, Expr *LHSExpr, Expr *RHSExpr, SourceLocation OpLoc, bool IsBuiltin) {\n auto Diag = S.Diag(OpLoc, IsBuiltin ? diag::warn_self_assignment_builtin : diag::warn_self_assignment_overloaded) << LHSDeclRef->getType() << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"}} | ||
}, | }, | ||
["warn_self_move"]={ | ["warn_self_move"]={ | ||
Line 5,273: | Line 5,273: | ||
[e]=p, | [e]=p, | ||
[i]={"17ddb829aaed",1420869858,"Add a new warning, -Wself-move, to Clang."}, | [i]={"17ddb829aaed",1420869858,"Add a new warning, -Wself-move, to Clang."}, | ||
[j]={{x, | [j]={{x,17998,"/// DiagnoseSelfMove - Emits a warning if a value is moved to itself.\nvoid Sema::DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr, SourceLocation OpLoc) {\n // Two DeclRefExpr\'s, check that the decls are the same.\n if (LHSDeclRef && RHSDeclRef) {\n auto D = Diag(OpLoc, diag::warn_self_move) << LHSExpr->getType() << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"},{x,18041,"/// DiagnoseSelfMove - Emits a warning if a value is moved to itself.\nvoid Sema::DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr, SourceLocation OpLoc) {\n if (LHSDeclRef && RHSDeclRef) {\n Diag(OpLoc, diag::warn_self_move) << LHSExpr->getType() << 0 << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"},{x,18048,"/// DiagnoseSelfMove - Emits a warning if a value is moved to itself.\nvoid Sema::DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr, SourceLocation OpLoc) {\n if (isa<CXXThisExpr>(LHSBase) && isa<CXXThisExpr>(RHSBase))\n Diag(OpLoc, diag::warn_self_move) << LHSExpr->getType() << 0 << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"}} | ||
}, | }, | ||
["warn_semicolon_before_method_body"]={ | ["warn_semicolon_before_method_body"]={ | ||
Line 5,288: | Line 5,288: | ||
[e]=A, | [e]=A, | ||
[i]={"f9a28abe8d1e",1257891389,"Make -Wsemicolon-before-method-body opt-in (and part of -Wextra). Addresses <rdar://problem/7381735..."}, | [i]={"f9a28abe8d1e",1257891389,"Make -Wsemicolon-before-method-body opt-in (and part of -Wextra). Addresses <rdar://problem/7381735..."}, | ||
[j]={{"clang/lib/Parse/ParseObjc.cpp", | [j]={{"clang/lib/Parse/ParseObjc.cpp",2759,"/// objc-method-def: objc-method-proto \';\'[opt] \'{\' body \'}\'\n///\nDecl *Parser::ParseObjCMethodDefinition() {\n // parse optional \';\'\n if (Tok.is(tok::semi)) {\n if (CurParsedObjCImpl) {\n Diag(Tok, diag::warn_semicolon_before_method_body) << FixItHint::CreateRemoval(Tok.getLocation());"}} | ||
}, | }, | ||
["warn_setter_getter_impl_required"]={ | ["warn_setter_getter_impl_required"]={ | ||
Line 5,302: | Line 5,302: | ||
[e]=p, | [e]=p, | ||
[i]={"6c6aea914ab0",1239750921,"Diagnose properties which have no implementations;"}, | [i]={"6c6aea914ab0",1239750921,"Diagnose properties which have no implementations;"}, | ||
[j]={{S, | [j]={{S,2019,"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_setter_getter_impl_required_in_category"]={ | ["warn_setter_getter_impl_required_in_category"]={ | ||
Line 5,316: | Line 5,316: | ||
[e]=p, | [e]=p, | ||
[i]={"4f8a57112f13",1264016181,"Settled rule on warning on unimplemented property in"}, | [i]={"4f8a57112f13",1264016181,"Settled rule on warning on unimplemented property in"}, | ||
[j]={{S, | [j]={{S,2016,"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_shadow_field"]={ | ["warn_shadow_field"]={ | ||
Line 5,331: | Line 5,331: | ||
[e]=w, | [e]=w, | ||
[i]={"a6ae060db4fd",1486524613,"Sema: add warning for c++ member variable shadowing"}, | [i]={"a6ae060db4fd",1486524613,"Sema: add warning for c++ member variable shadowing"}, | ||
[j]={{Y, | [j]={{Y,3353,"// Check if there is a field shadowing.\nvoid Sema::CheckShadowInheritedFields(const SourceLocation &Loc, DeclarationName FieldName, const CXXRecordDecl *RD, bool DeclIsField) {\n if (Diags.isIgnored(diag::warn_shadow_field, Loc))"},{Y,3391,"// Check if there is a field shadowing.\nvoid Sema::CheckShadowInheritedFields(const SourceLocation &Loc, DeclarationName FieldName, const CXXRecordDecl *RD, bool DeclIsField) {\n for (const auto &P : Paths) {\n if (AS_none != CXXRecordDecl::MergeAccess(P.Access, BaseField->getAccess())) {\n Diag(Loc, diag::warn_shadow_field) << FieldName << RD << Base << DeclIsField;"}} | ||
}, | }, | ||
["warn_shift_gt_typewidth"]={ | ["warn_shift_gt_typewidth"]={ | ||
Line 5,345: | Line 5,345: | ||
[e]=p, | [e]=p, | ||
[i]={"f53fab87d80b",1249662020,"PR3333: warn when shifting by invalid amount"}, | [i]={"f53fab87d80b",1249662020,"PR3333: warn when shifting by invalid amount"}, | ||
[j]={{z, | [j]={{z,12034,"static void DiagnoseBadShiftValues(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc, QualType LHSType) {\n if (Right.uge(LeftBits)) {\n S.DiagRuntimeBehavior(Loc, RHS.get(), S.PDiag(diag::warn_shift_gt_typewidth) << RHS.get()->getSourceRange());"}} | ||
}, | }, | ||
["warn_shift_lhs_negative"]={ | ["warn_shift_lhs_negative"]={ | ||
Line 5,359: | Line 5,359: | ||
[e]=p, | [e]=p, | ||
[i]={"bf0f7757e242",1436205729,"[Sema] Warn when shifting a negative value."}, | [i]={"bf0f7757e242",1436205729,"[Sema] Warn when shifting a negative value."}, | ||
[j]={{z, | [j]={{z,12056,"static void DiagnoseBadShiftValues(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc, QualType LHSType) {\n // If LHS does not have a non-negative value then, the\n // behavior is undefined before C++2a. Warn about it.\n if (Left.isNegative()) {\n S.DiagRuntimeBehavior(Loc, LHS.get(), S.PDiag(diag::warn_shift_lhs_negative) << LHS.get()->getSourceRange());"}} | ||
}, | }, | ||
["warn_shift_negative"]={ | ["warn_shift_negative"]={ | ||
Line 5,373: | Line 5,373: | ||
[e]=p, | [e]=p, | ||
[i]={"f53fab87d80b",1249662020,"PR3333: warn when shifting by invalid amount"}, | [i]={"f53fab87d80b",1249662020,"PR3333: warn when shifting by invalid amount"}, | ||
[j]={{z, | [j]={{z,12001,"static void DiagnoseBadShiftValues(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc, QualType LHSType) {\n if (Right.isNegative()) {\n S.DiagRuntimeBehavior(Loc, RHS.get(), S.PDiag(diag::warn_shift_negative) << RHS.get()->getSourceRange());"}} | ||
}, | }, | ||
["warn_shift_result_gt_typewidth"]={ | ["warn_shift_result_gt_typewidth"]={ | ||
Line 5,387: | Line 5,387: | ||
[e]=p, | [e]=p, | ||
[i]={"4c6fdca03573",1298504051,"Implement a warning for known shift overflows on constant shift"}, | [i]={"4c6fdca03573",1298504051,"Implement a warning for known shift overflows on constant shift"}, | ||
[j]={{z, | [j]={{z,12075,"static void DiagnoseBadShiftValues(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc, QualType LHSType) {\n S.Diag(Loc, diag::warn_shift_result_gt_typewidth) << HexResult.str() << Result.getSignificantBits() << LHSType << Left.getBitWidth() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}} | ||
}, | }, | ||
["warn_shift_result_sets_sign_bit"]={ | ["warn_shift_result_sets_sign_bit"]={ | ||
Line 5,402: | Line 5,402: | ||
[e]=p, | [e]=p, | ||
[i]={"70f05fdfeebd",1308099292,"Sema: show shift result in hexadecimal"}, | [i]={"70f05fdfeebd",1308099292,"Sema: show shift result in hexadecimal"}, | ||
[j]={{z, | [j]={{z,12062,"static void DiagnoseBadShiftValues(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc, QualType LHSType) {\n // If we are only missing a sign bit, this is less likely to result in actual\n // bugs -- if the result is cast back to an unsigned type, it will have the\n // expected value. Thus we place this behind a different warning that can be\n // turned off separately if needed.\n if (LeftBits == ResultBits - 1) {\n S.Diag(Loc, diag::warn_shift_result_sets_sign_bit) << HexResult << LHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}} | ||
}, | }, | ||
["warn_side_effects_typeid"]={ | ["warn_side_effects_typeid"]={ | ||
Line 5,416: | Line 5,416: | ||
[e]=X, | [e]=X, | ||
[i]={"6c93b3e29c56",1418853437,"Adding a -Wunused-value warning for expressions with side effects used in an unevaluated expression ..."}, | [i]={"6c93b3e29c56",1418853437,"Adding a -Wunused-value warning for expressions with side effects used in an unevaluated expression ..."}, | ||
[j]={{Lb, | [j]={{Lb,641,"/// Build a C++ typeid expression with an expression operand.\nExprResult Sema::BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc, Expr *E, SourceLocation RParenLoc) {\n if (E->getType()->isVariablyModifiedType())\n else if (!inTemplateInstantiation() && E->HasSideEffects(Context, WasEvaluated)) {\n Diag(E->getExprLoc(), WasEvaluated ? diag::warn_side_effects_typeid : diag::warn_side_effects_unevaluated_context);"}} | ||
}, | }, | ||
["warn_side_effects_unevaluated_context"]={ | ["warn_side_effects_unevaluated_context"]={ | ||
Line 5,430: | Line 5,430: | ||
[e]=X, | [e]=X, | ||
[i]={"6c93b3e29c56",1418853437,"Adding a -Wunused-value warning for expressions with side effects used in an unevaluated expression ..."}, | [i]={"6c93b3e29c56",1418853437,"Adding a -Wunused-value warning for expressions with side effects used in an unevaluated expression ..."}, | ||
[j]={{z, | [j]={{z,1701,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n // The controlling expression is an unevaluated operand, so side effects are\n // likely unintended.\n if (!inTemplateInstantiation() && !IsResultDependent && ControllingExpr && ControllingExpr->HasSideEffects(Context, false))\n Diag(ControllingExpr->getExprLoc(), diag::warn_side_effects_unevaluated_context);"},{z,4399,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // The operand for sizeof and alignof is in an unevaluated expression context,\n // so side effects could result in unintended consequences.\n // Exclude instantiation-dependent expressions, because \'sizeof\' is sometimes\n // used to build SFINAE gadgets.\n // FIXME: Should we consider instantiation-dependent operands to \'alignof\'?\n if (IsUnevaluatedOperand && !inTemplateInstantiation() && !E->isInstantiationDependent() && !E->getType()->isVariableArrayType() && E->HasSideEffects(Context, false))\n Diag(E->getExprLoc(), diag::warn_side_effects_unevaluated_context);"},{Lb,642,"/// Build a C++ typeid expression with an expression operand.\nExprResult Sema::BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc, Expr *E, SourceLocation RParenLoc) {\n if (E->getType()->isVariablyModifiedType())\n else if (!inTemplateInstantiation() && E->HasSideEffects(Context, WasEvaluated)) {\n Diag(E->getExprLoc(), WasEvaluated ? diag::warn_side_effects_typeid : diag::warn_side_effects_unevaluated_context);"},{Lb,8124,"ExprResult Sema::BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand, SourceLocation RParen) {\n if (!inTemplateInstantiation() && !Operand->isInstantiationDependent() && Operand->HasSideEffects(Context, false)) {\n Diag(Operand->getExprLoc(), diag::warn_side_effects_unevaluated_context);"},{Q,9500,"QualType Sema::BuildDecltypeType(Expr *E, bool AsUnevaluated) {\n if (AsUnevaluated && CodeSynthesisContexts.empty() && !E->isInstantiationDependent() && E->HasSideEffects(Context, false)) {\n Diag(E->getExprLoc(), diag::warn_side_effects_unevaluated_context);"}} | ||
}, | }, | ||
["warn_signed_bitfield_enum_conversion"]={ | ["warn_signed_bitfield_enum_conversion"]={ | ||
Line 5,445: | Line 5,445: | ||
[e]=Rb, | [e]=Rb, | ||
[i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values"}, | [i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values"}, | ||
[j]={{x, | [j]={{x,14087,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n if (!OriginalInit->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n // The RHS is not constant. If the RHS has an enum type, make sure the\n // bitfield is wide enough to hold all the values of the enum without\n // truncation.\n if (const auto *EnumTy = OriginalInit->getType()->getAs<EnumType>()) {\n if (SignedEnum && !SignedBitfield) {\n } else if (SignedBitfield && !SignedEnum && ED->getNumPositiveBits() == FieldWidth) {\n DiagID = diag::warn_signed_bitfield_enum_conversion;"}} | ||
}, | }, | ||
["warn_sizeof_array_decay"]={ | ["warn_sizeof_array_decay"]={ | ||
Line 5,459: | Line 5,459: | ||
[e]=p, | [e]=p, | ||
[i]={"054faa5a4883",1364593401,"Sema: Warn on sizeof on binary ops on decayed arrays."}, | [i]={"054faa5a4883",1364593401,"Sema: Warn on sizeof on binary ops on decayed arrays."}, | ||
[j]={{z, | [j]={{z,4384,"/// Check whether E is a pointer from a decayed array type (the decayed\n/// pointer type is equal to T) and emit a warning if it is.\nstatic void warnOnSizeofOnArrayDecay(Sema &S, SourceLocation Loc, QualType T, const Expr *E) {\n S.Diag(Loc, diag::warn_sizeof_array_decay) << ICE->getSourceRange() << ICE->getType() << ICE->getSubExpr()->getType();"}} | ||
}, | }, | ||
["warn_sizeof_array_param"]={ | ["warn_sizeof_array_param"]={ | ||
Line 5,473: | Line 5,473: | ||
[e]=p, | [e]=p, | ||
[i]={"0870debb8b31",1308106023,"Warn on \"void f(int a[10]) { sizeof(a); }\""}, | [i]={"0870debb8b31",1308106023,"Warn on \"void f(int a[10]) { sizeof(a); }\""}, | ||
[j]={{z, | [j]={{z,4443,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n if (ExprKind == UETT_SizeOf) {\n if (const auto *DeclRef = dyn_cast<DeclRefExpr>(E->IgnoreParens())) {\n if (const auto *PVD = dyn_cast<ParmVarDecl>(DeclRef->getFoundDecl())) {\n if (Type->isPointerType() && OType->isArrayType()) {\n Diag(E->getExprLoc(), diag::warn_sizeof_array_param) << Type << OType;"}} | ||
}, | }, | ||
["warn_sizeof_pointer_expr_memaccess"]={ | ["warn_sizeof_pointer_expr_memaccess"]={ | ||
Line 5,487: | Line 5,487: | ||
[e]=p, | [e]=p, | ||
[i]={"8b9e5a72cb12",1308215380,"Rework the warning for \'memset(p, 0, sizeof(p))\' where \'p\' is a pointer"}, | [i]={"8b9e5a72cb12",1308215380,"Rework the warning for \'memset(p, 0, sizeof(p))\' where \'p\' is a pointer"}, | ||
[j]={{x, | [j]={{x,12478,"/// 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 PointerType *DestPtrTy = DestTy->getAs<PointerType>()) {\n if (SizeOfArg && !Diags.isIgnored(diag::warn_sizeof_pointer_expr_memaccess, SizeOfArg->getExprLoc())) {"},{x,12517,"/// 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 PointerType *DestPtrTy = DestTy->getAs<PointerType>()) {\n // Catch \"memset(p, 0, sizeof(p))\" -- needs to be sizeof(*p). Do this by\n // actually comparing the expressions for equality. Because computing the\n // expression IDs can be expensive, we only do this if the diagnostic is\n // enabled.\n if (SizeOfArg && !Diags.isIgnored(diag::warn_sizeof_pointer_expr_memaccess, SizeOfArg->getExprLoc())) {\n if (DestID == SizeOfArgID) {\n DiagRuntimeBehavior(SL, SizeOfArg, PDiag(diag::warn_sizeof_pointer_expr_memaccess) << ReadableName << PointeeTy << DestTy << DSR << SSR);"},{x,17965,"/// DiagnoseSelfMove - Emits a warning if a value is moved to itself.\nvoid Sema::DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr, SourceLocation OpLoc) {\n if (Diags.isIgnored(diag::warn_sizeof_pointer_expr_memaccess, OpLoc))"}} | ||
}, | }, | ||
["warn_sizeof_pointer_expr_memaccess_note"]={ | ["warn_sizeof_pointer_expr_memaccess_note"]={ | ||
Line 5,499: | Line 5,499: | ||
[e]=p, | [e]=p, | ||
[i]={"d08d9159c289",1338419692,"Change wording of \'memcpy\' type mismatch warning and remove fixit."}, | [i]={"d08d9159c289",1338419692,"Change wording of \'memcpy\' type mismatch warning and remove fixit."}, | ||
[j]={{x, | [j]={{x,12524,"/// 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 PointerType *DestPtrTy = DestTy->getAs<PointerType>()) {\n // Catch \"memset(p, 0, sizeof(p))\" -- needs to be sizeof(*p). Do this by\n // actually comparing the expressions for equality. Because computing the\n // expression IDs can be expensive, we only do this if the diagnostic is\n // enabled.\n if (SizeOfArg && !Diags.isIgnored(diag::warn_sizeof_pointer_expr_memaccess, SizeOfArg->getExprLoc())) {\n if (DestID == SizeOfArgID) {\n DiagRuntimeBehavior(SL, SizeOfArg, PDiag(diag::warn_sizeof_pointer_expr_memaccess_note) << ActionIdx << SSR);"}} | ||
}, | }, | ||
["warn_sizeof_pointer_type_memaccess"]={ | ["warn_sizeof_pointer_type_memaccess"]={ | ||
Line 5,513: | Line 5,513: | ||
[e]=p, | [e]=p, | ||
[i]={"8b9e5a72cb12",1308215380,"Rework the warning for \'memset(p, 0, sizeof(p))\' where \'p\' is a pointer"}, | [i]={"8b9e5a72cb12",1308215380,"Rework the warning for \'memset(p, 0, sizeof(p))\' where \'p\' is a pointer"}, | ||
[j]={{x, | [j]={{x,12539,"/// 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 PointerType *DestPtrTy = DestTy->getAs<PointerType>()) {\n // Also check for cases where the sizeof argument is the exact same\n // type as the memory argument, and where it points to a user-defined\n // record type.\n if (SizeOfArgTy != QualType()) {\n if (PointeeTy->isRecordType() && Context.typesAreCompatible(SizeOfArgTy, DestTy)) {\n DiagRuntimeBehavior(LenExpr->getExprLoc(), Dest, PDiag(diag::warn_sizeof_pointer_type_memaccess) << FnName << SizeOfArgTy << ArgIdx << PointeeTy << Dest->getSourceRange() << LenExpr->getSourceRange());"}} | ||
}, | }, | ||
["warn_slash_u_filename"]={ | ["warn_slash_u_filename"]={ | ||
Line 5,527: | Line 5,527: | ||
[e]=w, | [e]=w, | ||
[i]={"091f1b6ef314",1485536981,"clang-cl: Warn about /U flags that look like filenames (PR31662)"}, | [i]={"091f1b6ef314",1485536981,"clang-cl: Warn about /U flags that look like filenames (PR31662)"}, | ||
[j]={{"clang/lib/Driver/Driver.cpp", | [j]={{"clang/lib/Driver/Driver.cpp",2793,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n for (Arg *A : Args) {\n if (A->getOption().getKind() == Option::InputClass) {\n } else if (A->getOption().matches(options::OPT__SLASH_Tc)) {\n } else if (A->getOption().matches(options::OPT__SLASH_Tp)) {\n } else if (A->getOption().hasFlag(options::LinkerInput)) {\n } else if (A->getOption().matches(options::OPT_x)) {\n } else if (A->getOption().getID() == options::OPT_U) {\n if (Val.find_first_of(\"/\\\\\") != StringRef::npos) {\n Diag(diag::warn_slash_u_filename) << Val;"}} | ||
}, | }, | ||
["warn_slh_does_not_support_asm_goto"]={ | ["warn_slh_does_not_support_asm_goto"]={ | ||
Line 5,541: | Line 5,541: | ||
[e]="Inline Assembly Issue", | [e]="Inline Assembly Issue", | ||
[i]={"60ee88599098",1589228634,"[clang][asm goto][slh] Warn if asm goto + SLH"}, | [i]={"60ee88599098",1589228634,"[clang][asm goto][slh] Warn if asm goto + SLH"}, | ||
[j]={{"clang/lib/Parse/ParseStmtAsm.cpp", | [j]={{"clang/lib/Parse/ParseStmtAsm.cpp",737,"/// ParseAsmStatement - Parse a GNU extended asm statement.\n/// asm-statement:\n/// gnu-asm-statement\n/// ms-asm-statement\n///\n/// [GNU] gnu-asm-statement:\n/// \'asm\' asm-qualifier-list[opt] \'(\' asm-argument \')\' \';\'\n///\n/// [GNU] asm-argument:\n/// asm-string-literal\n/// asm-string-literal \':\' asm-operands[opt]\n/// asm-string-literal \':\' asm-operands[opt] \':\' asm-operands[opt]\n/// asm-string-literal \':\' asm-operands[opt] \':\' asm-operands[opt]\n/// \':\' asm-clobbers\n///\n/// [GNU] asm-clobbers:\n/// asm-string-literal\n/// asm-clobbers \',\' asm-string-literal\n///\nStmtResult Parser::ParseAsmStatement(bool &msAsm) {\n if (GAQ.isGoto() && getLangOpts().SpeculativeLoadHardening)\n Diag(Loc, diag::warn_slh_does_not_support_asm_goto);"}} | ||
}, | }, | ||
["warn_some_initializers_out_of_order"]={ | ["warn_some_initializers_out_of_order"]={ | ||
Line 5,556: | Line 5,556: | ||
[e]=p, | [e]=p, | ||
[i]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"}, | [i]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"}, | ||
[j]={{Y, | [j]={{Y,5587,"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_sometimes_uninit_var"]={ | ["warn_sometimes_uninit_var"]={ | ||
Line 5,571: | Line 5,571: | ||
[e]=p, | [e]=p, | ||
[i]={"4323bf8e2e51",1337912229,"Split a chunk of -Wconditional-uninitialized warnings out into a separate flag,"}, | [i]={"4323bf8e2e51",1337912229,"Split a chunk of -Wconditional-uninitialized warnings out into a separate flag,"}, | ||
[j]={{D, | [j]={{D,841,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n case UninitUse::AfterCall:\n S.Diag(VD->getLocation(), diag::warn_sometimes_uninit_var) << VD->getDeclName() << IsCapturedByBlock << (Use.getKind() == UninitUse::AfterDecl ? 4 : 5) << const_cast<DeclContext *>(VD->getLexicalDeclContext()) << VD->getSourceRange();"},{D,977,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n // Diagnose each branch which leads to a sometimes-uninitialized use.\n for (UninitUse::branch_iterator I = Use.branch_begin(), E = Use.branch_end(); I != E; ++I) {\n S.Diag(Range.getBegin(), diag::warn_sometimes_uninit_var) << VD->getDeclName() << IsCapturedByBlock << DiagKind << Str << I->Output << Range;"},{D,2630,"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_splice_in_doxygen_comment"]={ | ["warn_splice_in_doxygen_comment"]={ | ||
Line 5,586: | Line 5,586: | ||
[e]="Documentation Issue", | [e]="Documentation Issue", | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{V, | [j]={{V,2415,"void Sema::ActOnComment(SourceRange Comment) {\n if (RC.isAlmostTrailingComment() || RC.hasUnsupportedSplice(SourceMgr)) {\n case RawComment::RCK_Invalid:\n Diag(Comment.getBegin(), diag::warn_splice_in_doxygen_comment);"}} | ||
}, | }, | ||
["warn_stack_clash_protection_inline_asm"]={ | ["warn_stack_clash_protection_inline_asm"]={ | ||
Line 5,600: | Line 5,600: | ||
[e]="Inline Assembly Issue", | [e]="Inline Assembly Issue", | ||
[i]={"39f50da2a357",1568041174,"Support -fstack-clash-protection for x86"}, | [i]={"39f50da2a357",1568041174,"Support -fstack-clash-protection for x86"}, | ||
[j]={{"clang/lib/CodeGen/CGStmt.cpp", | [j]={{"clang/lib/CodeGen/CGStmt.cpp",2751,"void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {\n // Clobbers\n for (unsigned i = 0, e = S.getNumClobbers(); i != e; i++) {\n if (Clobber == \"memory\")\n else if (Clobber == \"unwind\") {\n } else if (Clobber != \"cc\") {\n if (CGM.getCodeGenOpts().StackClashProtector && getTarget().isSPRegName(Clobber)) {\n CGM.getDiags().Report(S.getAsmLoc(), diag::warn_stack_clash_protection_inline_asm);"}} | ||
}, | }, | ||
["warn_stack_exhausted"]={ | ["warn_stack_exhausted"]={ | ||
Line 5,614: | Line 5,614: | ||
[e]=w, | [e]=w, | ||
[i]={"26a92d5852b2",1566843487,"Improve behavior in the case of stack exhaustion."}, | [i]={"26a92d5852b2",1566843487,"Improve behavior in the case of stack exhaustion."}, | ||
[j]={{V, | [j]={{V,506,"void Sema::warnStackExhausted(SourceLocation Loc) {\n // Only warn about this once.\n if (!WarnedStackExhausted) {\n Diag(Loc, diag::warn_stack_exhausted);"}} | ||
}, | }, | ||
["warn_standalone_specifier"]={ | ["warn_standalone_specifier"]={ | ||
Line 5,628: | Line 5,628: | ||
[e]=p, | [e]=p, | ||
[i]={"aa017377827f",1300834804,"Warn about unused declaration-specifiers on tag declarations."}, | [i]={"aa017377827f",1300834804,"Warn about unused declaration-specifiers on tag declarations."}, | ||
[j]={{G, | [j]={{G,5279,"/// 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 unsigned DiagID = diag::warn_standalone_specifier;"}} | ||
}, | }, | ||
["warn_static_array_too_small"]={ | ["warn_static_array_too_small"]={ | ||
Line 5,642: | Line 5,642: | ||
[e]=p, | [e]=p, | ||
[i]={"5aa6ecb619bc",1318799852,"Add sema checks for calls to functions taking static array parameters"}, | [i]={"5aa6ecb619bc",1318799852,"Add sema checks for calls to functions taking static array parameters"}, | ||
[j]={{z, | [j]={{z,6714,"/// CheckStaticArrayArgument - If the given argument corresponds to a static\n/// array parameter, check that it is non-null, and that if it is formed by\n/// array-to-pointer decay, the underlying array is sufficiently large.\n///\n/// C99 6.7.5.3p7: If the keyword static also appears within the [ and ] of the\n/// array type derivation, then for each call to the function, the value of the\n/// corresponding actual argument shall provide access to the first element of\n/// an array with at least as many elements as specified by the size expression.\nvoid Sema::CheckStaticArrayArgument(SourceLocation CallLoc, ParmVarDecl *Param, const Expr *ArgExpr) {\n if (getASTContext().hasSameUnqualifiedType(CAT->getElementType(), ArgCAT->getElementType())) {\n if (ArgCAT->getSize().ult(CAT->getSize())) {\n Diag(CallLoc, diag::warn_static_array_too_small) << ArgExpr->getSourceRange() << (unsigned)ArgCAT->getSize().getZExtValue() << (unsigned)CAT->getSize().getZExtValue() << 0;"},{z,6906,"/// CheckStaticArrayArgument - If the given argument corresponds to a static\n/// array parameter, check that it is non-null, and that if it is formed by\n/// array-to-pointer decay, the underlying array is sufficiently large.\n///\n/// C99 6.7.5.3p7: If the keyword static also appears within the [ and ] of the\n/// array type derivation, then for each call to the function, the value of the\n/// corresponding actual argument shall provide access to the first element of\n/// an array with at least as many elements as specified by the size expression.\nvoid Sema::CheckStaticArrayArgument(SourceLocation CallLoc, ParmVarDecl *Param, const Expr *ArgExpr) {\n if (ArgSize && ParmSize && *ArgSize < *ParmSize) {\n Diag(CallLoc, diag::warn_static_array_too_small) << ArgExpr->getSourceRange() << (unsigned)ArgSize->getQuantity() << (unsigned)ParmSize->getQuantity() << 1;"}} | ||
}, | }, | ||
["warn_static_assert_message_constexpr"]={ | ["warn_static_assert_message_constexpr"]={ | ||
Line 5,656: | Line 5,656: | ||
[e]=p, | [e]=p, | ||
[i]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"}, | [i]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"}, | ||
[j]={{Y, | [j]={{Y,17049,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n if (!ErrorOnInvalidMessage && Diags.isIgnored(diag::warn_static_assert_message_constexpr, Loc))"},{Y,17060,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n if (!Message->EvaluateCharRangeAsString(Result, EvaluatedSize.get(), EvaluatedData.get(), Ctx, Status) || !Notes.empty()) {\n Diag(Message->getBeginLoc(), ErrorOnInvalidMessage ? diag::err_static_assert_message_constexpr : diag::warn_static_assert_message_constexpr);"}} | ||
}, | }, | ||
["warn_static_inline_explicit_inst_ignored"]={ | ["warn_static_inline_explicit_inst_ignored"]={ | ||
Line 5,670: | Line 5,670: | ||
[e]=A, | [e]=A, | ||
[i]={"aa49ecc4586a",1291235540,"Not content to implement just \"extern\" explicit template"}, | [i]={"aa49ecc4586a",1291235540,"Not content to implement just \"extern\" explicit template"}, | ||
[j]={{"clang/lib/Parse/Parser.cpp", | [j]={{"clang/lib/Parse/Parser.cpp",974,"/// 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_static:\n // Parse (then ignore) \'static\' prior to a template instantiation. This is\n // a GCC extension that we intentionally do not support.\n if (getLangOpts().CPlusPlus && NextToken().is(tok::kw_template)) {\n Diag(ConsumeToken(), diag::warn_static_inline_explicit_inst_ignored) << 0;"},{"clang/lib/Parse/Parser.cpp",996,"/// 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_inline:\n if (getLangOpts().CPlusPlus) {\n // Parse (then ignore) \'inline\' prior to a template instantiation. This is\n // a GCC extension that we intentionally do not support.\n if (NextKind == tok::kw_template) {\n Diag(ConsumeToken(), diag::warn_static_inline_explicit_inst_ignored) << 1;"}} | ||
}, | }, | ||
["warn_static_local_in_extern_inline"]={ | ["warn_static_local_in_extern_inline"]={ | ||
Line 5,684: | Line 5,684: | ||
[e]=p, | [e]=p, | ||
[i]={"c87d97231d12",1364870938,"Add -Wstatic-local-in-inline, which warns about using a static local"}, | [i]={"c87d97231d12",1364870938,"Add -Wstatic-local-in-inline, which warns about using a static local"}, | ||
[j]={{G, | [j]={{G,7830,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // C99 6.7.4p3\n // An inline definition of a function with external linkage shall\n // not contain a definition of a modifiable object with static or\n // thread storage duration...\n // We only apply this when the function is required to be defined\n // elsewhere, i.e. when the function is not \'extern inline\'. Note\n // that a local variable with thread storage duration still has to\n // be marked \'static\'. Also note that it\'s possible to get these\n // semantics in C++ using __attribute__((gnu_inline)).\n if (SC == SC_Static && S->getFnParent() != nullptr && !NewVD->getType().isConstQualified()) {\n if (CurFD && isFunctionDefinitionDiscarded(*this, CurFD)) {\n Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::warn_static_local_in_extern_inline);"}} | ||
}, | }, | ||
["warn_static_main"]={ | ["warn_static_main"]={ | ||
Line 5,698: | Line 5,698: | ||
[e]=p, | [e]=p, | ||
[i]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics."}, | [i]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics."}, | ||
[j]={{G, | [j]={{G,12077,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n // C++11 [basic.start.main]p3:\n // A program that [...] declares main to be inline, static or\n // constexpr is ill-formed.\n // C11 6.7.4p4: In a hosted environment, no function specifier(s) shall\n // appear in a declaration of main.\n // static main is not an error under C99, but we should warn about it.\n // We accept _Noreturn main as an extension.\n if (FD->getStorageClass() == SC_Static)\n Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus ? diag::err_static_main : diag::warn_static_main) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}} | ||
}, | }, | ||
["warn_static_self_reference_in_init"]={ | ["warn_static_self_reference_in_init"]={ | ||
Line 5,712: | Line 5,712: | ||
[e]=p, | [e]=p, | ||
[i]={"e07d167a5016",1358556540,"Reword warning about using a *static* variable within its own initialization."}, | [i]={"e07d167a5016",1358556540,"Reword warning about using a *static* variable within its own initialization."}, | ||
[j]={{G, | [j]={{G,12619,"// Visits an initialization expression to see if OrigDecl is evaluated in\n// its own initialization and throws a warning if it does.\nclass SelfReferenceChecker : public EvaluatedExprVisitor<SelfReferenceChecker> {\n void HandleDeclRefExpr(DeclRefExpr *DRE) {\n if (isReferenceType) {\n } else if (cast<VarDecl>(OrigDecl)->isStaticLocal()) {\n diag = diag::warn_static_self_reference_in_init;"}} | ||
}, | }, | ||
["warn_stdc_fenv_round_not_supported"]={ | ["warn_stdc_fenv_round_not_supported"]={ | ||
Line 5,726: | Line 5,726: | ||
[e]=A, | [e]=A, | ||
[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"}, | [i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"}, | ||
[j]={{r, | [j]={{r,3379,"void PragmaSTDC_FENV_ROUNDHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n PP.Diag(Tok.getLocation(), diag::warn_stdc_fenv_round_not_supported);"}} | ||
}, | }, | ||
["warn_stdc_unknown_rounding_mode"]={ | ["warn_stdc_unknown_rounding_mode"]={ | ||
Line 5,740: | Line 5,740: | ||
[e]=A, | [e]=A, | ||
[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"}, | [i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"}, | ||
[j]={{r, | [j]={{r,3367,"void PragmaSTDC_FENV_ROUNDHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (RM == llvm::RoundingMode::Invalid) {\n PP.Diag(Tok.getLocation(), diag::warn_stdc_unknown_rounding_mode);"}} | ||
}, | }, | ||
["warn_strict_multiple_method_decl"]={ | ["warn_strict_multiple_method_decl"]={ | ||
Line 5,755: | Line 5,755: | ||
[e]=p, | [e]=p, | ||
[i]={"3337b2e8dd0e",1281396478,"Implements gcc\'s -Wstrict-selector-match."}, | [i]={"3337b2e8dd0e",1281396478,"Implements gcc\'s -Wstrict-selector-match."}, | ||
[j]={{N, | [j]={{N,3607,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n bool strictSelectorMatch = receiverIdOrClass && !Diags.isIgnored(diag::warn_strict_multiple_method_decl, R.getBegin());"},{N,3637,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n if (issueDiagnostic) {\n if (issueError)\n else if (strictSelectorMatch)\n Diag(R.getBegin(), diag::warn_strict_multiple_method_decl) << Sel << R;"}} | ||
}, | }, | ||
["warn_strict_potentially_direct_selector_expression"]={ | ["warn_strict_potentially_direct_selector_expression"]={ | ||
Line 5,770: | Line 5,770: | ||
[e]=p, | [e]=p, | ||
[i]={Kb,1582847864,Ub}, | [i]={Kb,1582847864,Ub}, | ||
[j]={{Z, | [j]={{Z,1341,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n if (!Method) {\n } else {\n if (onlyDirect) {\n } else if (anyDirect) {\n if (LikelyTargetMethod && LikelyTargetMethod->isDirectMethod()) {\n } else if (!LikelyTargetMethod) {\n Diag(AtLoc, diag::warn_strict_potentially_direct_selector_expression) << Sel;"}} | ||
}, | }, | ||
["warn_strict_prototypes"]={ | ["warn_strict_prototypes"]={ | ||
Line 5,785: | Line 5,785: | ||
[e]=p, | [e]=p, | ||
[i]={"840f8df67759",1481107938,"Implement the -Wstrict-prototypes warning"}, | [i]={"840f8df67759",1481107938,"Implement the -Wstrict-prototypes warning"}, | ||
[j]={{Q, | [j]={{Q,5767,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n // GNU warning -Wstrict-prototypes\n // Warn if a function declaration or definition is without a prototype.\n // This warning is issued for all kinds of unprototyped function\n // declarations (i.e. function type typedef, function pointer etc.)\n // C99 6.7.5.3p14:\n // The empty list in a function declarator that is not part of a definition\n // of that function specifies that no information about the number or types\n // of the parameters is supplied.\n // See ActOnFinishFunctionBody() and MergeFunctionDecl() for handling of\n // function declarations whose behavior changes in C2x.\n if (!LangOpts.requiresStrictPrototypes()) {\n for (const DeclaratorChunk &DeclType : D.type_objects()) {\n case DeclaratorChunk::Function: {\n // We suppress the warning when there\'s no LParen location, as this\n // indicates the declaration was an implicit declaration, which gets\n // warned about separately via -Wimplicit-function-declaration. We also\n // suppress the warning when we know the function has a prototype.\n if (!FTI.hasPrototype && FTI.NumParams == 0 && !FTI.isVariadic && FTI.getLParenLoc().isValid())\n S.Diag(DeclType.Loc, diag::warn_strict_prototypes) << IsBlock << FixItHint::CreateInsertion(FTI.getRParenLoc(), \"void\");"}} | ||
}, | }, | ||
["warn_strict_uses_without_prototype"]={ | ["warn_strict_uses_without_prototype"]={ | ||
Line 5,799: | Line 5,799: | ||
[e]=p, | [e]=p, | ||
[i]={Qc,1620530452,Pc}, | [i]={Qc,1620530452,Pc}, | ||
[j]={{z, | [j]={{z,7557,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy. The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n if (Proto) {\n } else {\n if (!Proto && !Args.empty() && (!FDecl || (!FDecl->isImplicit() && !Diags.isIgnored(diag::warn_strict_uses_without_prototype, FDecl->getLocation()))))"},{z,7584,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy. The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n if (Proto) {\n } else {\n // If we still haven\'t found a prototype to use but there are arguments to\n // the call, diagnose this as calling a function without a prototype.\n // However, if we found a function declaration, check to see if\n // -Wdeprecated-non-prototype was disabled where the function was declared.\n // If so, we will silence the diagnostic here on the assumption that this\n // interface is intentional and the user knows what they\'re doing. We will\n // also silence the diagnostic if there is a function declaration but it\n // was implicitly defined (the user already gets diagnostics about the\n // creation of the implicit function declaration, so the additional warning\n // is not helpful).\n if (!Proto && !Args.empty() && (!FDecl || (!FDecl->isImplicit() && !Diags.isIgnored(diag::warn_strict_uses_without_prototype, FDecl->getLocation()))))\n Diag(LParenLoc, diag::warn_strict_uses_without_prototype) << (FDecl != nullptr) << FDecl;"}} | ||
}, | }, | ||
["warn_string_plus_char"]={ | ["warn_string_plus_char"]={ | ||
Line 5,813: | Line 5,813: | ||
[e]=p, | [e]=p, | ||
[i]={"5565941effbe",1382719920,"Add -Wstring-plus-char, which warns when adding char literals to C strings."}, | [i]={"5565941effbe",1382719920,"Add -Wstring-plus-char, which warns when adding char literals to C strings."}, | ||
[j]={{z, | [j]={{z,11680,"/// Emit a warning when adding a char literal to a string.\nstatic void diagnoseStringPlusChar(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n if (!CharType->isAnyCharacterType() && CharType->isIntegerType() && llvm::isUIntN(Ctx.getCharWidth(), CharExpr->getValue())) {\n Self.Diag(OpLoc, diag::warn_string_plus_char) << DiagRange << Ctx.CharTy;"},{z,11687,"/// Emit a warning when adding a char literal to a string.\nstatic void diagnoseStringPlusChar(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n if (!CharType->isAnyCharacterType() && CharType->isIntegerType() && llvm::isUIntN(Ctx.getCharWidth(), CharExpr->getValue())) {\n } else {\n Self.Diag(OpLoc, diag::warn_string_plus_char) << DiagRange << CharExpr->getType();"}} | ||
}, | }, | ||
["warn_string_plus_int"]={ | ["warn_string_plus_int"]={ | ||
Line 5,827: | Line 5,827: | ||
[e]=p, | [e]=p, | ||
[i]={"ccec40d9b756",1330725682,"Add -Wstring-plus-int, which warns on \"str\" + int and int + \"str\"."}, | [i]={"ccec40d9b756",1330725682,"Add -Wstring-plus-int, which warns on \"str\" + int and int + \"str\"."}, | ||
[j]={{z, | [j]={{z,11637,"/// diagnoseStringPlusInt - Emit a warning when adding an integer to a string\n/// literal.\nstatic void diagnoseStringPlusInt(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n Self.Diag(OpLoc, diag::warn_string_plus_int) << DiagRange << IndexExpr->IgnoreImpCasts()->getType();"}} | ||
}, | }, | ||
["warn_stringcompare"]={ | ["warn_stringcompare"]={ | ||
Line 5,841: | Line 5,841: | ||
[e]=p, | [e]=p, | ||
[i]={oc,1237025389,vc}, | [i]={oc,1237025389,vc}, | ||
[j]={{z, | [j]={{z,12771,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n if (LiteralString) {\n S.DiagRuntimeBehavior(Loc, nullptr, S.PDiag(diag::warn_stringcompare) << isa<ObjCEncodeExpr>(LiteralStringStripped) << LiteralString->getSourceRange());"}} | ||
}, | }, | ||
["warn_strlcpycat_wrong_size"]={ | ["warn_strlcpycat_wrong_size"]={ | ||
Line 5,855: | Line 5,855: | ||
[e]=p, | [e]=p, | ||
[i]={"d5fe9e4d9741",1313624436,"Add experimental -Wstrlcpy-size warning that looks to see if the size argument for strlcpy/strlcat i..."}, | [i]={"d5fe9e4d9741",1313624436,"Add experimental -Wstrlcpy-size warning that looks to see if the size argument for strlcpy/strlcat i..."}, | ||
[j]={{x, | [j]={{x,12695,"// Warn if the user has made the \'size\' argument to strlcpy or strlcat\n// be the size of the source, instead of the destination.\nvoid Sema::CheckStrlcpycatArguments(const CallExpr *Call, IdentifierInfo *FnName) {\n Diag(CompareWithSrcDRE->getBeginLoc(), diag::warn_strlcpycat_wrong_size) << OriginalSizeArg->getSourceRange() << FnName;"}} | ||
}, | }, | ||
["warn_strncat_large_size"]={ | ["warn_strncat_large_size"]={ | ||
Line 5,869: | Line 5,869: | ||
[e]=p, | [e]=p, | ||
[i]={"314cd09b5c79",1328123337,"Add a new compiler warning, which flags anti-patterns used as the size"}, | [i]={"314cd09b5c79",1328123337,"Add a new compiler warning, which flags anti-patterns used as the size"}, | ||
[j]={{x, | [j]={{x,12803,"// Warn on anti-patterns as the \'size\' argument to strncat.\n// The correct size argument should look like following:\n// strncat(dst, src, sizeof(dst) - strlen(dest) - 1);\nvoid Sema::CheckStrncatArguments(const CallExpr *CE, IdentifierInfo *FnName) {\n if (PatternType == 1)\n Diag(SL, diag::warn_strncat_large_size) << SR;"}} | ||
}, | }, | ||
["warn_strncat_src_size"]={ | ["warn_strncat_src_size"]={ | ||
Line 5,883: | Line 5,883: | ||
[e]=p, | [e]=p, | ||
[i]={"314cd09b5c79",1328123337,"Add a new compiler warning, which flags anti-patterns used as the size"}, | [i]={"314cd09b5c79",1328123337,"Add a new compiler warning, which flags anti-patterns used as the size"}, | ||
[j]={{x, | [j]={{x,12798,"// Warn on anti-patterns as the \'size\' argument to strncat.\n// The correct size argument should look like following:\n// strncat(dst, src, sizeof(dst) - strlen(dest) - 1);\nvoid Sema::CheckStrncatArguments(const CallExpr *CE, IdentifierInfo *FnName) {\n if (!isKnownSizeArray) {\n if (PatternType == 1)\n else\n Diag(SL, diag::warn_strncat_src_size) << SR;"},{x,12805,"// Warn on anti-patterns as the \'size\' argument to strncat.\n// The correct size argument should look like following:\n// strncat(dst, src, sizeof(dst) - strlen(dest) - 1);\nvoid Sema::CheckStrncatArguments(const CallExpr *CE, IdentifierInfo *FnName) {\n if (PatternType == 1)\n else\n Diag(SL, diag::warn_strncat_src_size) << SR;"}} | ||
}, | }, | ||
["warn_strncat_wrong_size"]={ | ["warn_strncat_wrong_size"]={ | ||
Line 5,897: | Line 5,897: | ||
[e]=p, | [e]=p, | ||
[i]={"13b0857ad084",1344462143,"Address code review comments for Wstrncat-size warning (r161440)."}, | [i]={"13b0857ad084",1344462143,"Address code review comments for Wstrncat-size warning (r161440)."}, | ||
[j]={{x, | [j]={{x,12796,"// Warn on anti-patterns as the \'size\' argument to strncat.\n// The correct size argument should look like following:\n// strncat(dst, src, sizeof(dst) - strlen(dest) - 1);\nvoid Sema::CheckStrncatArguments(const CallExpr *CE, IdentifierInfo *FnName) {\n if (!isKnownSizeArray) {\n if (PatternType == 1)\n Diag(SL, diag::warn_strncat_wrong_size) << SR;"}} | ||
}, | }, | ||
["warn_struct_class_previous_tag_mismatch"]={ | ["warn_struct_class_previous_tag_mismatch"]={ | ||
Line 5,912: | Line 5,912: | ||
[e]=p, | [e]=p, | ||
[i]={"caa33d36fb3f",1307675486,"Made changes to how \'struct\'/\'class\' mismatches are handled in -Wmismatched-tags."}, | [i]={"caa33d36fb3f",1307675486,"Made changes to how \'struct\'/\'class\' mismatches are handled in -Wmismatched-tags."}, | ||
[j]={{G, | [j]={{G,16652,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n if (isDefinition) {\n for (const TagDecl *I : Previous->redecls()) {\n if (I->getTagKind() != NewTag) {\n if (!previousMismatch) {\n Diag(NewTagLoc, diag::warn_struct_class_previous_tag_mismatch) << getRedeclDiagFromTagKind(NewTag) << isTemplate << Name << getRedeclDiagFromTagKind(I->getTagKind());"}} | ||
}, | }, | ||
["warn_struct_class_tag_mismatch"]={ | ["warn_struct_class_tag_mismatch"]={ | ||
Line 5,927: | Line 5,927: | ||
[e]=p, | [e]=p, | ||
[i]={"d9034f0b8970",1242319291,"In C++, warn when something previously declared as a \"struct\" is later"}, | [i]={"d9034f0b8970",1242319291,"In C++, warn when something previously declared as a \"struct\" is later"}, | ||
[j]={{G, | [j]={{G,16603,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n auto IsIgnoredLoc = [&](SourceLocation Loc) { return getDiagnostics().isIgnored(diag::warn_struct_class_tag_mismatch, Loc); };"},{G,16627,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n if (inTemplateInstantiation()) {\n if (OldTag != NewTag) {\n Diag(NewTagLoc, diag::warn_struct_class_tag_mismatch) << getRedeclDiagFromTagKind(NewTag) << isTemplate << Name << getRedeclDiagFromTagKind(OldTag);"},{G,16673,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n if (Redecl->getTagKind() != NewTag) {\n Diag(NewTagLoc, diag::warn_struct_class_tag_mismatch) << getRedeclDiagFromTagKind(NewTag) << isTemplate << Name << getRedeclDiagFromTagKind(OldTag);"}} | ||
}, | }, | ||
["warn_sub_ptr_zero_size_types"]={ | ["warn_sub_ptr_zero_size_types"]={ | ||
Line 5,941: | Line 5,941: | ||
[e]=p, | [e]=p, | ||
[i]={"84c6b3d293d9",1378848854,"PR5683: Issue a warning when subtracting pointers to types of zero size, and"}, | [i]={"84c6b3d293d9",1378848854,"PR5683: Issue a warning when subtracting pointers to types of zero size, and"}, | ||
[j]={{z, | [j]={{z,11985,"// C99 6.5.6\nQualType Sema::CheckSubtractionOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, QualType *CompLHSTy) {\n // Either ptr - int or ptr - ptr.\n if (LHS.get()->getType()->isAnyPointerType()) {\n // Handle pointer-pointer subtractions.\n if (const PointerType *RHSPTy = RHS.get()->getType()->getAs<PointerType>()) {\n // The pointee type may have zero size. As an extension, a structure or\n // union may have zero size or an array may have zero length. In this\n // case subtraction does not make sense.\n if (!rpointee->isVoidType() && !rpointee->isFunctionType()) {\n if (ElementSize.isZero()) {\n Diag(Loc, diag::warn_sub_ptr_zero_size_types) << rpointee.getUnqualifiedType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}} | ||
}, | }, | ||
["warn_subscript_is_char"]={ | ["warn_subscript_is_char"]={ | ||
Line 5,956: | Line 5,956: | ||
[e]=p, | [e]=p, | ||
[i]={"914244e7b0c6",1252893538,"Add support for -Wchar-subscripts. Fixes PR4801."}, | [i]={"914244e7b0c6",1252893538,"Add support for -Wchar-subscripts. Fixes PR4801."}, | ||
[j]={{z, | [j]={{z,5963,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n if ((IndexExpr->getType()->isSpecificBuiltinType(BuiltinType::Char_S) || IndexExpr->getType()->isSpecificBuiltinType(BuiltinType::Char_U)) && !IndexExpr->isTypeDependent())\n Diag(LLoc, diag::warn_subscript_is_char) << IndexExpr->getSourceRange();"}} | ||
}, | }, | ||
["warn_suggest_destructor_marked_not_override_overriding"]={ | ["warn_suggest_destructor_marked_not_override_overriding"]={ | ||
Line 5,971: | Line 5,971: | ||
[e]=p, | [e]=p, | ||
[i]={Kb,1582847864,Ub}, | [i]={Kb,1582847864,Ub}, | ||
[j]={{Y, | [j]={{Y,3315,"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_suggest_function_marked_not_override_overriding"]={ | ["warn_suggest_function_marked_not_override_overriding"]={ | ||
Line 5,986: | Line 5,986: | ||
[e]=p, | [e]=p, | ||
[i]={Kb,1582847864,Ub}, | [i]={Kb,1582847864,Ub}, | ||
[j]={{Y, | [j]={{Y,3318,"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_suggest_noreturn_block"]={ | ["warn_suggest_noreturn_block"]={ | ||
Line 6,001: | Line 6,001: | ||
[e]=p, | [e]=p, | ||
[i]={"bce7a27d222a",1248822672,"Add support for -Wmissing-noreturn."}, | [i]={"bce7a27d222a",1248822672,"Add support for -Wmissing-noreturn."}, | ||
[j]={{D, | [j]={{D,634,"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));"}} | ||
}, | }, | ||
["warn_suggest_noreturn_function"]={ | ["warn_suggest_noreturn_function"]={ | ||
Line 6,016: | Line 6,016: | ||
[e]=p, | [e]=p, | ||
[i]={"bce7a27d222a",1248822672,"Add support for -Wmissing-noreturn."}, | [i]={"bce7a27d222a",1248822672,"Add support for -Wmissing-noreturn."}, | ||
[j]={{D, | [j]={{D,572,"struct CheckFallThroughDiagnostics {\n static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n if (!isVirtualMethod && !isTemplateInstantiation)\n D.diag_NeverFallThroughOrReturn = diag::warn_suggest_noreturn_function;"}} | ||
}, | }, | ||
["warn_superclass_variable_sized_type_not_at_end"]={ | ["warn_superclass_variable_sized_type_not_at_end"]={ | ||
Line 6,030: | Line 6,030: | ||
[e]=p, | [e]=p, | ||
[i]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C."}, | [i]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C."}, | ||
[j]={{N, | [j]={{N,3922,"static void DiagnoseVariableSizedIvars(Sema &S, ObjCContainerDecl *OCD) {\n if (FirstIvar && (FirstIvar == IntfDecl->all_declared_ivar_begin())) {\n if (SuperClass) {\n if (IsVariableSizedType(LastIvar->getType())) {\n S.Diag(FirstIvar->getLocation(), diag::warn_superclass_variable_sized_type_not_at_end) << FirstIvar->getDeclName() << LastIvar->getDeclName() << LastIvar->getType() << SuperClass->getDeclName();"}} | ||
}, | }, | ||
["warn_suspicious_bzero_size"]={ | ["warn_suspicious_bzero_size"]={ | ||
Line 6,044: | Line 6,044: | ||
[e]=p, | [e]=p, | ||
[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"}, | [i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"}, | ||
[j]={{x, | [j]={{x,12393,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n if (isLiteralZero(SizeArg) && !isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {\n // Some platforms #define bzero to __builtin_memset. See if this is the\n // case, and if so, emit a better diagnostic.\n if (BId == Builtin::BIbzero || (CallLoc.isMacroID() && Lexer::getImmediateMacroName(CallLoc, SM, S.getLangOpts()) == \"bzero\")) {\n S.Diag(DiagLoc, diag::warn_suspicious_bzero_size);"}} | ||
}, | }, | ||
["warn_suspicious_sizeof_memset"]={ | ["warn_suspicious_sizeof_memset"]={ | ||
Line 6,058: | Line 6,058: | ||
[e]=p, | [e]=p, | ||
[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"}, | [i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"}, | ||
[j]={{x, | [j]={{x,12396,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n if (isLiteralZero(SizeArg) && !isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {\n // Some platforms #define bzero to __builtin_memset. See if this is the\n // case, and if so, emit a better diagnostic.\n if (BId == Builtin::BIbzero || (CallLoc.isMacroID() && Lexer::getImmediateMacroName(CallLoc, SM, S.getLangOpts()) == \"bzero\")) {\n } else if (!isLiteralZero(Call->getArg(1)->IgnoreImpCasts())) {\n S.Diag(DiagLoc, diag::warn_suspicious_sizeof_memset) << 0;"},{x,12409,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n // If the second argument to a memset is a sizeof expression and the third\n // isn\'t, this is also likely an error. This should catch\n // \'memset(buf, sizeof(buf), 0xff)\'.\n if (BId == Builtin::BImemset && doesExprLikelyComputeSize(Call->getArg(1)) && !doesExprLikelyComputeSize(Call->getArg(2))) {\n S.Diag(DiagLoc, diag::warn_suspicious_sizeof_memset) << 1;"}} | ||
}, | }, | ||
["warn_sycl_kernel_invalid_template_param_type"]={ | ["warn_sycl_kernel_invalid_template_param_type"]={ | ||
Line 6,072: | Line 6,072: | ||
[e]=w, | [e]=w, | ||
[i]={Bc,1573050950,Cc}, | [i]={Bc,1573050950,Cc}, | ||
[j]={{B, | [j]={{B,8407,"static void handleSYCLKernelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // Template parameters must be typenames.\n for (unsigned I = 0; I < 2; ++I) {\n if (isa<NonTypeTemplateParmDecl>(TParam)) {\n S.Diag(FT->getLocation(), diag::warn_sycl_kernel_invalid_template_param_type);"}} | ||
}, | }, | ||
["warn_sycl_kernel_num_of_function_params"]={ | ["warn_sycl_kernel_num_of_function_params"]={ | ||
Line 6,086: | Line 6,086: | ||
[e]=w, | [e]=w, | ||
[i]={Bc,1573050950,Cc}, | [i]={Bc,1573050950,Cc}, | ||
[j]={{B, | [j]={{B,8414,"static void handleSYCLKernelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // Function must have at least one argument.\n if (getFunctionOrMethodNumParams(D) != 1) {\n S.Diag(FT->getLocation(), diag::warn_sycl_kernel_num_of_function_params);"}} | ||
}, | }, | ||
["warn_sycl_kernel_num_of_template_params"]={ | ["warn_sycl_kernel_num_of_template_params"]={ | ||
Line 6,100: | Line 6,100: | ||
[e]=w, | [e]=w, | ||
[i]={Bc,1573050950,Cc}, | [i]={Bc,1573050950,Cc}, | ||
[j]={{B, | [j]={{B,8398,"static void handleSYCLKernelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (TL->size() < 2) {\n S.Diag(FT->getLocation(), diag::warn_sycl_kernel_num_of_template_params);"}} | ||
}, | }, | ||
["warn_sycl_kernel_return_type"]={ | ["warn_sycl_kernel_return_type"]={ | ||
Line 6,114: | Line 6,114: | ||
[e]=w, | [e]=w, | ||
[i]={Bc,1573050950,Cc}, | [i]={Bc,1573050950,Cc}, | ||
[j]={{B, | [j]={{B,8421,"static void handleSYCLKernelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (!RetTy->isVoidType()) {\n S.Diag(FT->getLocation(), diag::warn_sycl_kernel_return_type);"}} | ||
}, | }, | ||
["warn_sync_fetch_and_nand_semantics_change"]={ | ["warn_sync_fetch_and_nand_semantics_change"]={ | ||
Line 6,128: | Line 6,128: | ||
[e]=p, | [e]=p, | ||
[i]={"d2208b59cfaa",1412283230,"Add __sync_fetch_and_nand (again)"}, | [i]={"d2208b59cfaa",1412283230,"Add __sync_fetch_and_nand (again)"}, | ||
[j]={{x, | [j]={{x,7821,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n if (WarnAboutSemanticsChange) {\n Diag(TheCall->getEndLoc(), diag::warn_sync_fetch_and_nand_semantics_change) << Callee->getSourceRange();"}} | ||
}, | }, | ||
["warn_sync_op_misaligned"]={ | ["warn_sync_op_misaligned"]={ | ||
Line 6,142: | Line 6,142: | ||
[e]=w, | [e]=w, | ||
[i]={"ba6e747f9b05",1670524276,"[clang] Set ShowInSystemHeader for module-build and module-import remarks"}, | [i]={"ba6e747f9b05",1670524276,"[clang] Set ShowInSystemHeader for module-build and module-import remarks"}, | ||
[j]={{"clang/lib/CodeGen/CGBuiltin.cpp", | [j]={{"clang/lib/CodeGen/CGBuiltin.cpp",201,"static llvm::Value *CheckAtomicAlignment(CodeGenFunction &CGF, const CallExpr *E) {\n if (Align % Bytes != 0) {\n Diags.Report(E->getBeginLoc(), diag::warn_sync_op_misaligned);"}} | ||
}, | }, | ||
["warn_taking_address_of_packed_member"]={ | ["warn_taking_address_of_packed_member"]={ | ||
Line 6,156: | Line 6,156: | ||
[e]=p, | [e]=p, | ||
[i]={"ac6617b288ed",1465832500,"Warn when taking address of a packed member"}, | [i]={"ac6617b288ed",1465832500,"Warn when taking address of a packed member"}, | ||
[j]={{x, | [j]={{x,18481,"void Sema::DiagnoseMisalignedMembers() {\n for (MisalignedMember &m : MisalignedMembers) {\n Diag(m.E->getBeginLoc(), diag::warn_taking_address_of_packed_member) << m.MD << ND << m.E->getSourceRange();"}} | ||
}, | }, | ||
["warn_target_clone_duplicate_options"]={ | ["warn_target_clone_duplicate_options"]={ | ||
Line 6,170: | Line 6,170: | ||
[e]=w, | [e]=w, | ||
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | [i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | ||
[j]={{B, | [j]={{B,3549,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n while (!Parts.second.empty()) {\n if (TInfo.getTriple().isAArch64()) {\n // AArch64 target clones specific\n if (Cur == \"default\") {\n if (llvm::is_contained(StringsBuffer, Cur) || DefaultIsDupe)\n Diag(CurLoc, diag::warn_target_clone_duplicate_options);"},{B,3576,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n while (!Parts.second.empty()) {\n if (TInfo.getTriple().isAArch64()) {\n // AArch64 target clones specific\n if (Cur == \"default\") {\n } else {\n if (llvm::is_contained(StringsBuffer, Res) || DefaultIsDupe)\n Diag(CurLoc, diag::warn_target_clone_duplicate_options);"},{B,3601,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n while (!Parts.second.empty()) {\n if (TInfo.getTriple().isAArch64()) {\n } else {\n if (llvm::is_contained(StringsBuffer, Cur) || DefaultIsDupe)\n Diag(CurLoc, diag::warn_target_clone_duplicate_options);"}} | ||
}, | }, | ||
["warn_target_clone_mixed_values"]={ | ["warn_target_clone_mixed_values"]={ | ||
Line 6,184: | Line 6,184: | ||
[e]=w, | [e]=w, | ||
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | [i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | ||
[j]={{B, | [j]={{B,3645,"static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (HasCommas && AL.getNumArgs() > 1)\n S.Diag(AL.getLoc(), diag::warn_target_clone_mixed_values);"}} | ||
}, | }, | ||
["warn_target_clone_no_impact_options"]={ | ["warn_target_clone_no_impact_options"]={ | ||
Line 6,198: | Line 6,198: | ||
[e]=w, | [e]=w, | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{B, | [j]={{B,3580,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n while (!Parts.second.empty()) {\n if (TInfo.getTriple().isAArch64()) {\n // AArch64 target clones specific\n if (Cur == \"default\") {\n } else {\n if (llvm::is_contained(StringsBuffer, Res) || DefaultIsDupe)\n else if (!HasCodeGenImpact)\n Diag(CurLoc, diag::warn_target_clone_no_impact_options);"}} | ||
}, | }, | ||
["warn_target_override_arm64ec"]={ | ["warn_target_override_arm64ec"]={ | ||
Line 6,212: | Line 6,212: | ||
[e]=w, | [e]=w, | ||
[i]={"b0fff3db6ada",1664803233,"[ARM64EC][clang-cl] Add /arm64EC flag"}, | [i]={"b0fff3db6ada",1664803233,"[ARM64EC][clang-cl] Add /arm64EC flag"}, | ||
[j]={{"clang/lib/Driver/Driver.cpp", | [j]={{"clang/lib/Driver/Driver.cpp",1447,"Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {\n // Report warning when arm64EC option is overridden by specified target\n if ((TC.getTriple().getArch() != llvm::Triple::aarch64 || TC.getTriple().getSubArch() != llvm::Triple::AArch64SubArch_arm64ec) && UArgs->hasArg(options::OPT__SLASH_arm64EC)) {\n getDiags().Report(clang::diag::warn_target_override_arm64ec) << TC.getTriple().str();"}} | ||
}, | }, | ||
["warn_target_unrecognized_env"]={ | ["warn_target_unrecognized_env"]={ | ||
Line 6,226: | Line 6,226: | ||
[e]=w, | [e]=w, | ||
[i]={"041ffc155fd7",1687355349,"[Clang][Driver] Warn on invalid Arm or AArch64 baremetal target triple"}, | [i]={"041ffc155fd7",1687355349,"[Clang][Driver] Warn on invalid Arm or AArch64 baremetal target triple"}, | ||
[j]={{"clang/lib/Driver/Driver.cpp", | [j]={{"clang/lib/Driver/Driver.cpp",1462,"Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {\n // A common user mistake is specifying a target of aarch64-none-eabi or\n // arm-none-elf whereas the correct names are aarch64-none-elf &\n // arm-none-eabi. Detect these cases and issue a warning.\n if (TC.getTriple().getOS() == llvm::Triple::UnknownOS && TC.getTriple().getVendor() == llvm::Triple::UnknownVendor) {\n case llvm::Triple::thumbeb:\n if (TC.getTriple().getEnvironmentName() == \"elf\") {\n Diag(diag::warn_target_unrecognized_env) << TargetTriple << (TC.getTriple().getArchName().str() + \"-none-eabi\");"},{"clang/lib/Driver/Driver.cpp",1471,"Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {\n // A common user mistake is specifying a target of aarch64-none-eabi or\n // arm-none-elf whereas the correct names are aarch64-none-elf &\n // arm-none-eabi. Detect these cases and issue a warning.\n if (TC.getTriple().getOS() == llvm::Triple::UnknownOS && TC.getTriple().getVendor() == llvm::Triple::UnknownVendor) {\n case llvm::Triple::aarch64_32:\n if (TC.getTriple().getEnvironmentName().startswith(\"eabi\")) {\n Diag(diag::warn_target_unrecognized_env) << TargetTriple << (TC.getTriple().getArchName().str() + \"-none-elf\");"}} | ||
}, | }, | ||
["warn_target_unsupported_abs2008"]={ | ["warn_target_unsupported_abs2008"]={ | ||
Line 6,240: | Line 6,240: | ||
[e]=w, | [e]=w, | ||
[i]={"5076511ed6bd",1503590790,"[mips] Introducing option -mabs=[legacy/2008]"}, | [i]={"5076511ed6bd",1503590790,"[mips] Introducing option -mabs=[legacy/2008]"}, | ||
[j]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp", | [j]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",314,"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_mabs_EQ)) {\n if (Val == \"2008\") {\n if (mips::getIEEE754Standard(CPUName) & mips::Std2008) {\n } else {\n D.Diag(diag::warn_target_unsupported_abs2008) << CPUName;"}} | ||
}, | }, | ||
["warn_target_unsupported_abslegacy"]={ | ["warn_target_unsupported_abslegacy"]={ | ||
Line 6,254: | Line 6,254: | ||
[e]=w, | [e]=w, | ||
[i]={"5076511ed6bd",1503590790,"[mips] Introducing option -mabs=[legacy/2008]"}, | [i]={"5076511ed6bd",1503590790,"[mips] Introducing option -mabs=[legacy/2008]"}, | ||
[j]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp", | [j]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",321,"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_mabs_EQ)) {\n if (Val == \"2008\") {\n } else if (Val == \"legacy\") {\n if (mips::getIEEE754Standard(CPUName) & mips::Legacy) {\n } else {\n D.Diag(diag::warn_target_unsupported_abslegacy) << CPUName;"}} | ||
}, | }, | ||
["warn_target_unsupported_branch_protection_attribute"]={ | ["warn_target_unsupported_branch_protection_attribute"]={ | ||
Line 6,268: | Line 6,268: | ||
[e]=Ib, | [e]=Ib, | ||
[i]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for"}, | [i]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for"}, | ||
[j]={{"clang/lib/CodeGen/Targets/ARM.cpp", | [j]={{"clang/lib/CodeGen/Targets/ARM.cpp",153,"class ARMTargetCodeGenInfo : public TargetCodeGenInfo {\n void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule &CGM) const override {\n if (const auto *TA = FD->getAttr<TargetAttr>()) {\n if (!Attr.BranchProtection.empty()) {\n if (!CGM.getTarget().validateBranchProtection(Attr.BranchProtection, Arch, BPI, DiagMsg)) {\n CGM.getDiags().Report(D->getLocation(), diag::warn_target_unsupported_branch_protection_attribute) << Arch;"},{"clang/lib/CodeGen/Targets/ARM.cpp",174,"class ARMTargetCodeGenInfo : public TargetCodeGenInfo {\n void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule &CGM) const override {\n if (const auto *TA = FD->getAttr<TargetAttr>()) {\n if (!Attr.BranchProtection.empty()) {\n } else if (CGM.getLangOpts().BranchTargetEnforcement || CGM.getLangOpts().hasSignReturnAddress()) {\n // If the Branch Protection attribute is missing, validate the target\n // Architecture attribute against Branch Protection command line\n // settings.\n if (!CGM.getTarget().isBranchProtectionSupportedArch(Attr.CPU))\n CGM.getDiags().Report(D->getLocation(), diag::warn_target_unsupported_branch_protection_attribute) << Attr.CPU;"}} | ||
}, | }, | ||
["warn_target_unsupported_compact_branches"]={ | ["warn_target_unsupported_compact_branches"]={ | ||
Line 6,282: | Line 6,282: | ||
[e]=w, | [e]=w, | ||
[i]={"d0e83bad13b1",1464362011,"[mips] Compact branch policy setting."}, | [i]={"d0e83bad13b1",1464362011,"[mips] Compact branch policy setting."}, | ||
[j]={{"clang/lib/Driver/ToolChains/Clang.cpp", | [j]={{"clang/lib/Driver/ToolChains/Clang.cpp",2007,"void Clang::AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const {\n if (Arg *A = Args.getLastArg(options::OPT_mcompact_branches_EQ)) {\n if (mips::hasCompactBranches(CPUName)) {\n } else\n D.Diag(diag::warn_target_unsupported_compact_branches) << CPUName;"}} | ||
}, | }, | ||
["warn_target_unsupported_extension"]={ | ["warn_target_unsupported_extension"]={ | ||
Line 6,296: | Line 6,296: | ||
[e]=w, | [e]=w, | ||
[i]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs"}, | [i]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs"}, | ||
[j]={{"clang/lib/Driver/ToolChains/Arch/ARM.cpp", | [j]={{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",772,"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 (HasSHA2 || HasAES) {\n if (!((llvm::ARM::parseArchVersion(ArchSuffix) >= 8) && (ArchProfile == llvm::ARM::ProfileKind::A || ArchProfile == llvm::ARM::ProfileKind::R))) {\n if (HasSHA2)\n D.Diag(clang::diag::warn_target_unsupported_extension) << \"sha2\" << llvm::ARM::getArchName(llvm::ARM::parseArch(ArchSuffix));"},{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",776,"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 (HasSHA2 || HasAES) {\n if (!((llvm::ARM::parseArchVersion(ArchSuffix) >= 8) && (ArchProfile == llvm::ARM::ProfileKind::A || ArchProfile == llvm::ARM::ProfileKind::R))) {\n if (HasAES)\n D.Diag(clang::diag::warn_target_unsupported_extension) << \"aes\" << llvm::ARM::getArchName(llvm::ARM::parseArch(ArchSuffix));"}} | ||
}, | }, | ||
["warn_target_unsupported_nan2008"]={ | ["warn_target_unsupported_nan2008"]={ | ||
Line 6,310: | Line 6,310: | ||
[e]=w, | [e]=w, | ||
[i]={"1dbc317736ce",1429015748,"[Mips] Generate warning for invalid \'-mnan\' and \'-march\' combinations"}, | [i]={"1dbc317736ce",1429015748,"[Mips] Generate warning for invalid \'-mnan\' and \'-march\' combinations"}, | ||
[j]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp", | [j]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",293,"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_mnan_EQ)) {\n if (Val == \"2008\") {\n if (mips::getIEEE754Standard(CPUName) & mips::Std2008)\n else {\n D.Diag(diag::warn_target_unsupported_nan2008) << CPUName;"}} | ||
}, | }, | ||
["warn_target_unsupported_nanlegacy"]={ | ["warn_target_unsupported_nanlegacy"]={ | ||
Line 6,324: | Line 6,324: | ||
[e]=w, | [e]=w, | ||
[i]={"1dbc317736ce",1429015748,"[Mips] Generate warning for invalid \'-mnan\' and \'-march\' combinations"}, | [i]={"1dbc317736ce",1429015748,"[Mips] Generate warning for invalid \'-mnan\' and \'-march\' combinations"}, | ||
[j]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp", | [j]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",300,"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_mnan_EQ)) {\n if (Val == \"2008\") {\n } else if (Val == \"legacy\") {\n if (mips::getIEEE754Standard(CPUName) & mips::Legacy)\n else {\n D.Diag(diag::warn_target_unsupported_nanlegacy) << CPUName;"}} | ||
}, | }, | ||
["warn_tautological_bool_compare"]={ | ["warn_tautological_bool_compare"]={ | ||
Line 6,338: | Line 6,338: | ||
[e]=p, | [e]=p, | ||
[i]={"692f66ab626b",1512588199,"Delete special-case \"out-of-range\" handling for bools, and just use the normal"}, | [i]={"692f66ab626b",1512588199,"Delete special-case \"out-of-range\" handling for bools, and just use the normal"}, | ||
[j]={{x, | [j]={{x,13737,"static int classifyConstantValue(Expr *Constant) {\n // diag::warn_out_of_range_compare and diag::warn_tautological_bool_compare."},{x,13879,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n // FIXME: We use a somewhat different formatting for the in-range cases and\n // cases involving boolean values for historical reasons. We should pick a\n // consistent way of presenting these diagnostics.\n if (!InRange || Other->isKnownToHaveBooleanValue()) {\n S.DiagRuntimeBehavior(E->getOperatorLoc(), E, S.PDiag(!InRange ? diag::warn_out_of_range_compare : diag::warn_tautological_bool_compare) << OS.str() << classifyConstantValue(Constant) << OtherT << OtherIsBooleanDespiteType << *Result << E->getLHS()->getSourceRange() << E->getRHS()->getSourceRange());"}} | ||
}, | }, | ||
["warn_tautological_compare_objc_bool"]={ | ["warn_tautological_compare_objc_bool"]={ | ||
Line 6,352: | Line 6,352: | ||
[e]=p, | [e]=p, | ||
[i]={"fa591c370d24",1562629372,"[ObjC] Add a -Wtautological-compare warning for BOOL"}, | [i]={"fa591c370d24",1562629372,"[ObjC] Add a -Wtautological-compare warning for BOOL"}, | ||
[j]={{x, | [j]={{x,13866,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n if (IsObjCSignedCharBool) {\n S.DiagRuntimeBehavior(E->getOperatorLoc(), E, S.PDiag(diag::warn_tautological_compare_objc_bool) << OS.str() << *Result);"}} | ||
}, | }, | ||
["warn_tautological_compare_value_range"]={ | ["warn_tautological_compare_value_range"]={ | ||
Line 6,367: | Line 6,367: | ||
[e]=p, | [e]=p, | ||
[i]={Kb,1582847864,Ub}, | [i]={Kb,1582847864,Ub}, | ||
[j]={{x, | [j]={{x,13857,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n if (!TautologicalTypeCompare) {\n S.Diag(E->getOperatorLoc(), diag::warn_tautological_compare_value_range) << RhsConstant << OtherValueRange.Width << OtherValueRange.NonNegative << E->getOpcodeStr() << OS.str() << *Result << E->getLHS()->getSourceRange() << E->getRHS()->getSourceRange();"}} | ||
}, | }, | ||
["warn_tautological_constant_compare"]={ | ["warn_tautological_constant_compare"]={ | ||
Line 6,382: | Line 6,382: | ||
[e]=p, | [e]=p, | ||
[i]={"bd1fc22043b7",1507839411,"[Sema] Diagnose tautological comparison with type\'s min/max values"}, | [i]={"bd1fc22043b7",1507839411,"[Sema] Diagnose tautological comparison with type\'s min/max values"}, | ||
[j]={{x, | [j]={{x,13891,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n // FIXME: We use a somewhat different formatting for the in-range cases and\n // cases involving boolean values for historical reasons. We should pick a\n // consistent way of presenting these diagnostics.\n if (!InRange || Other->isKnownToHaveBooleanValue()) {\n } else {\n unsigned Diag = (isKnownToHaveUnsignedValue(OriginalOther) && Value == 0) ? (HasEnumType(OriginalOther) ? diag::warn_unsigned_enum_always_true_comparison : IsCharTy ? diag::warn_unsigned_char_always_true_comparison : diag::warn_unsigned_always_true_comparison) : diag::warn_tautological_constant_compare;"}} | ||
}, | }, | ||
["warn_tautological_overlap_comparison"]={ | ["warn_tautological_overlap_comparison"]={ | ||
Line 6,397: | Line 6,397: | ||
[e]=p, | [e]=p, | ||
[i]={"f935b562b9a7",1396675021,"Add a new subgroup to -Wtautological-compare, -Wtautological-overlap-compare,"}, | [i]={"f935b562b9a7",1396675021,"Add a new subgroup to -Wtautological-compare, -Wtautological-overlap-compare,"}, | ||
[j]={{D, | [j]={{D,167,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n void compareAlwaysTrue(const BinaryOperator *B, bool isAlwaysTrue) override {\n S.Diag(B->getExprLoc(), diag::warn_tautological_overlap_comparison) << DiagRange << isAlwaysTrue;"},{D,191,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n static bool hasActiveDiagnostics(DiagnosticsEngine &Diags, SourceLocation Loc) { return !Diags.isIgnored(diag::warn_tautological_overlap_comparison, Loc) || !Diags.isIgnored(diag::warn_comparison_bitwise_or, Loc); }"}} | ||
}, | }, | ||
["warn_tcb_enforcement_violation"]={ | ["warn_tcb_enforcement_violation"]={ | ||
Line 6,411: | Line 6,411: | ||
[e]=w, | [e]=w, | ||
[i]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"}, | [i]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"}, | ||
[j]={{x, | [j]={{x,19186,"/// \\brief Enforce the bounds of a TCB\n/// CheckTCBEnforcement - Enforces that every function in a named TCB only\n/// directly calls other functions in the same TCB as marked by the enforce_tcb\n/// and enforce_tcb_leaf attributes.\nvoid Sema::CheckTCBEnforcement(const SourceLocation CallExprLoc, const NamedDecl *Callee) {\n // Go through the TCBs the caller is a part of and emit warnings if Caller\n // is in a TCB that the Callee is not.\n for (const auto *A : Caller->specific_attrs<EnforceTCBAttr>()) {\n if (CalleeTCBs.count(CallerTCB) == 0) {\n this->Diag(CallExprLoc, diag::warn_tcb_enforcement_violation) << Callee << CallerTCB;"}} | ||
}, | }, | ||
["warn_template_arg_negative"]={ | ["warn_template_arg_negative"]={ | ||
Line 6,426: | Line 6,426: | ||
[e]=Rb, | [e]=Rb, | ||
[i]={"63eed63312c1",1269555664,"Warn when the conversion of an integral non-type template argument to"}, | [i]={"63eed63312c1",1269555664,"Warn when the conversion of an integral non-type template argument to"}, | ||
[j]={{Lc, | [j]={{Lc,7566,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // C++ [temp.arg.nontype]p5:\n // The following conversions are performed on each expression used\n // as a non-type template-argument. If a non-type\n // template-argument cannot be converted to the type of the\n // corresponding template-parameter then the program is\n // ill-formed.\n if (ParamType->isIntegralOrEnumerationType()) {\n if (ParamType->isBooleanType()) {\n } else {\n // Complain if an unsigned parameter received a negative value.\n if (IntegerType->isUnsignedIntegerOrEnumerationType() && (OldValue.isSigned() && OldValue.isNegative())) {\n Diag(Arg->getBeginLoc(), diag::warn_template_arg_negative) << toString(OldValue, 10) << toString(Value, 10) << Param->getType() << Arg->getSourceRange();"}} | ||
}, | }, | ||
["warn_template_arg_too_large"]={ | ["warn_template_arg_too_large"]={ | ||
Line 6,441: | Line 6,441: | ||
[e]=Rb, | [e]=Rb, | ||
[i]={"63eed63312c1",1269555664,"Warn when the conversion of an integral non-type template argument to"}, | [i]={"63eed63312c1",1269555664,"Warn when the conversion of an integral non-type template argument to"}, | ||
[j]={{Lc, | [j]={{Lc,7581,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // C++ [temp.arg.nontype]p5:\n // The following conversions are performed on each expression used\n // as a non-type template-argument. If a non-type\n // template-argument cannot be converted to the type of the\n // corresponding template-parameter then the program is\n // ill-formed.\n if (ParamType->isIntegralOrEnumerationType()) {\n if (ParamType->isBooleanType()) {\n } else {\n if (RequiredBits > AllowedBits) {\n Diag(Arg->getBeginLoc(), diag::warn_template_arg_too_large) << toString(OldValue, 10) << toString(Value, 10) << Param->getType() << Arg->getSourceRange();"}} | ||
}, | }, | ||
["warn_template_export_unsupported"]={ | ["warn_template_export_unsupported"]={ | ||
Line 6,453: | Line 6,453: | ||
[e]=p, | [e]=p, | ||
[i]={"5c80a27ba264",1259175314,"Implement support for default template arguments of function templates."}, | [i]={"5c80a27ba264",1259175314,"Implement support for default template arguments of function templates."}, | ||
[j]={{Lc, | [j]={{Lc,1805,"/// ActOnTemplateParameterList - Builds a TemplateParameterList, optionally\n/// constrained by RequiresClause, that contains the template parameters in\n/// Params.\nTemplateParameterList *Sema::ActOnTemplateParameterList(unsigned Depth, SourceLocation ExportLoc, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ArrayRef<NamedDecl *> Params, SourceLocation RAngleLoc, Expr *RequiresClause) {\n if (ExportLoc.isValid())\n Diag(ExportLoc, diag::warn_template_export_unsupported);"}} | ||
}, | }, | ||
["warn_template_qualified_friend_ignored"]={ | ["warn_template_qualified_friend_ignored"]={ | ||
Line 6,467: | Line 6,467: | ||
[e]=p, | [e]=p, | ||
[i]={"cd556eb26580",1383937196,"Issue a diagnostic if we see a templated friend declaration that we do not"}, | [i]={"cd556eb26580",1383937196,"Issue a diagnostic if we see a templated friend declaration that we do not"}, | ||
[j]={{Lc, | [j]={{Lc,1861,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n if (SS.isNotEmpty() && !SS.isInvalid()) {\n if (!SemanticContext) {\n Diag(NameLoc, TUK == TUK_Friend ? diag::warn_template_qualified_friend_ignored : diag::err_template_qualified_declarator_no_match) << SS.getScopeRep() << SS.getRange();"}} | ||
}, | }, | ||
["warn_template_qualified_friend_unsupported"]={ | ["warn_template_qualified_friend_unsupported"]={ | ||
Line 6,481: | Line 6,481: | ||
[e]=p, | [e]=p, | ||
[i]={"cd556eb26580",1383937196,"Issue a diagnostic if we see a templated friend declaration that we do not"}, | [i]={"cd556eb26580",1383937196,"Issue a diagnostic if we see a templated friend declaration that we do not"}, | ||
[j]={{Y, | [j]={{Y,17351,"/// Handle a friend tag declaration where the scope specifier was\n/// templated.\nDeclResult Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc, unsigned TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, MultiTemplateParamsArg TempParamLists) {\n Diag(NameLoc, diag::warn_template_qualified_friend_unsupported) << SS.getScopeRep() << SS.getRange() << cast<CXXRecordDecl>(CurContext);"},{Y,17782,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n if (ND->isInvalidDecl()) {\n } else {\n // Mark templated-scope function declarations as unsupported.\n if (FD->getNumTemplateParameterLists() && SS.isValid()) {\n Diag(FD->getLocation(), diag::warn_template_qualified_friend_unsupported) << SS.getScopeRep() << SS.getRange() << cast<CXXRecordDecl>(CurContext);"}} | ||
}, | }, | ||
["warn_template_spec_extra_headers"]={ | ["warn_template_spec_extra_headers"]={ | ||
Line 6,493: | Line 6,493: | ||
[e]=p, | [e]=p, | ||
[i]={"65911498eff3",1258978305,"Tolerate extraneous \"template<>\" headers better, downgrading the"}, | [i]={"65911498eff3",1258978305,"Tolerate extraneous \"template<>\" headers better, downgrading the"}, | ||
[j]={{Lc, | [j]={{Lc,3580,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n // If there were too many template parameter lists, complain about that now.\n if (ParamIdx < ParamLists.size() - 1) {\n if (!SuppressDiagnostic)\n Diag(ParamLists[ParamIdx]->getTemplateLoc(), AllExplicitSpecHeaders ? diag::warn_template_spec_extra_headers : diag::err_template_spec_extra_headers) << SourceRange(ParamLists[ParamIdx]->getTemplateLoc(), ParamLists[ParamLists.size() - 2]->getRAngleLoc());"}} | ||
}, | }, | ||
["warn_tentative_incomplete_array"]={ | ["warn_tentative_incomplete_array"]={ | ||
Line 6,505: | Line 6,505: | ||
[e]=p, | [e]=p, | ||
[i]={"c7ba5333782f",1239831327,"Add warning when a tentative array definition is assumed to have one element."}, | [i]={"c7ba5333782f",1239831327,"Add warning when a tentative array definition is assumed to have one element."}, | ||
[j]={{V, | [j]={{V,1308,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n for (TentativeDefinitionsType::iterator T = TentativeDefinitions.begin(ExternalSource.get()), TEnd = TentativeDefinitions.end(); T != TEnd; ++T) {\n if (const IncompleteArrayType *ArrayT = Context.getAsIncompleteArrayType(VD->getType())) {\n Diag(VD->getLocation(), diag::warn_tentative_incomplete_array);"}} | ||
}, | }, | ||
["warn_this_bool_conversion"]={ | ["warn_this_bool_conversion"]={ | ||
Line 6,519: | Line 6,519: | ||
[e]=Rb, | [e]=Rb, | ||
[i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"}, | [i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"}, | ||
[j]={{x, | [j]={{x,15459,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n if (isa<CXXThisExpr>(E)) {\n unsigned DiagID = IsCompare ? diag::warn_this_null_compare : diag::warn_this_bool_conversion;"}} | ||
}, | }, | ||
["warn_this_null_compare"]={ | ["warn_this_null_compare"]={ | ||
Line 6,533: | Line 6,533: | ||
[e]=p, | [e]=p, | ||
[i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"}, | [i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings"}, | ||
[j]={{x, | [j]={{x,15458,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n if (isa<CXXThisExpr>(E)) {\n unsigned DiagID = IsCompare ? diag::warn_this_null_compare : diag::warn_this_bool_conversion;"}} | ||
}, | }, | ||
["warn_thread_attribute_argument_not_lockable"]={ | ["warn_thread_attribute_argument_not_lockable"]={ | ||
Line 6,548: | Line 6,548: | ||
[e]=p, | [e]=p, | ||
[i]={"8d11c797b2b6",1334851844,"Thread safety analysis: split warnings into two groups: attribute warnings"}, | [i]={"8d11c797b2b6",1334851844,"Thread safety analysis: split warnings into two groups: attribute warnings"}, | ||
[j]={{B, | [j]={{B,679,"/// Checks that all attribute arguments, starting from Sidx, resolve to\n/// a capability object.\n/// \\param Sidx The attribute argument index to start checking with.\n/// \\param ParamIdxOk Whether an argument can be indexing into a function\n/// parameter list.\nstatic void checkAttrArgsAreCapabilityObjs(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args, unsigned Sidx = 0, bool ParamIdxOk = false) {\n for (unsigned Idx = Sidx; Idx < AL.getNumArgs(); ++Idx) {\n // If the type does not have a capability, see if the components of the\n // expression have capabilities. This allows for writing C code where the\n // capability may be on the type, and the expression is a capability\n // boolean logic expression. Eg) requires_capability(A || B && !C)\n if (!typeHasCapability(S, ArgTy) && !isCapabilityExpr(S, ArgExp))\n S.Diag(AL.getLoc(), diag::warn_thread_attribute_argument_not_lockable) << AL << ArgTy;"}} | ||
}, | }, | ||
["warn_thread_attribute_decl_not_lockable"]={ | ["warn_thread_attribute_decl_not_lockable"]={ | ||
Line 6,563: | Line 6,563: | ||
[e]=p, | [e]=p, | ||
[i]={"8d11c797b2b6",1334851844,"Thread safety analysis: split warnings into two groups: attribute warnings"}, | [i]={"8d11c797b2b6",1334851844,"Thread safety analysis: split warnings into two groups: attribute warnings"}, | ||
[j]={{B, | [j]={{B,738,"static bool checkAcquireOrderAttrCommon(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args) {\n if (!QT->isDependentType() && !typeHasCapability(S, QT)) {\n S.Diag(AL.getLoc(), diag::warn_thread_attribute_decl_not_lockable) << AL;"}} | ||
}, | }, | ||
["warn_thread_attribute_decl_not_pointer"]={ | ["warn_thread_attribute_decl_not_pointer"]={ | ||
Line 6,578: | Line 6,578: | ||
[e]=p, | [e]=p, | ||
[i]={"8d11c797b2b6",1334851844,"Thread safety analysis: split warnings into two groups: attribute warnings"}, | [i]={"8d11c797b2b6",1334851844,"Thread safety analysis: split warnings into two groups: attribute warnings"}, | ||
[j]={{B, | [j]={{B,490,"/// Check if passed in Decl is a pointer type.\n/// Note that this function may produce an error message.\n/// \\return true if the Decl is a pointer type; false otherwise\nstatic bool threadSafetyCheckIsPointer(Sema &S, const Decl *D, const ParsedAttr &AL) {\n S.Diag(AL.getLoc(), diag::warn_thread_attribute_decl_not_pointer) << AL << QT;"}} | ||
}, | }, | ||
["warn_thread_attribute_ignored"]={ | ["warn_thread_attribute_ignored"]={ | ||
Line 6,593: | Line 6,593: | ||
[e]=p, | [e]=p, | ||
[i]={"8d11c797b2b6",1334851844,"Thread safety analysis: split warnings into two groups: attribute warnings"}, | [i]={"8d11c797b2b6",1334851844,"Thread safety analysis: split warnings into two groups: attribute warnings"}, | ||
[j]={{B, | [j]={{B,637,"/// Checks that all attribute arguments, starting from Sidx, resolve to\n/// a capability object.\n/// \\param Sidx The attribute argument index to start checking with.\n/// \\param ParamIdxOk Whether an argument can be indexing into a function\n/// parameter list.\nstatic void checkAttrArgsAreCapabilityObjs(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args, unsigned Sidx = 0, bool ParamIdxOk = false) {\n for (unsigned Idx = Sidx; Idx < AL.getNumArgs(); ++Idx) {\n if (const auto *StrLit = dyn_cast<StringLiteral>(ArgExp)) {\n S.Diag(AL.getLoc(), diag::warn_thread_attribute_ignored) << AL;"}} | ||
}, | }, | ||
["warn_thread_attribute_not_on_capability_member"]={ | ["warn_thread_attribute_not_on_capability_member"]={ | ||
Line 6,608: | Line 6,608: | ||
[e]=p, | [e]=p, | ||
[i]={"7ba1ab71ecf4",1537403967,"Thread Safety Analysis: warnings for attributes without arguments"}, | [i]={"7ba1ab71ecf4",1537403967,"Thread Safety Analysis: warnings for attributes without arguments"}, | ||
[j]={{B, | [j]={{B,609,"/// Checks that all attribute arguments, starting from Sidx, resolve to\n/// a capability object.\n/// \\param Sidx The attribute argument index to start checking with.\n/// \\param ParamIdxOk Whether an argument can be indexing into a function\n/// parameter list.\nstatic void checkAttrArgsAreCapabilityObjs(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args, unsigned Sidx = 0, bool ParamIdxOk = false) {\n if (Sidx == AL.getNumArgs()) {\n if (MD && !MD->isStatic()) {\n // FIXME -- need to check this again on template instantiation\n if (!checkRecordDeclForAttr<CapabilityAttr>(RD) && !checkRecordDeclForAttr<ScopedLockableAttr>(RD))\n S.Diag(AL.getLoc(), diag::warn_thread_attribute_not_on_capability_member) << AL << MD->getParent();"}} | ||
}, | }, | ||
["warn_thread_attribute_not_on_non_static_member"]={ | ["warn_thread_attribute_not_on_non_static_member"]={ | ||
Line 6,623: | Line 6,623: | ||
[e]=p, | [e]=p, | ||
[i]={"7ba1ab71ecf4",1537403967,"Thread Safety Analysis: warnings for attributes without arguments"}, | [i]={"7ba1ab71ecf4",1537403967,"Thread Safety Analysis: warnings for attributes without arguments"}, | ||
[j]={{B, | [j]={{B,612,"/// Checks that all attribute arguments, starting from Sidx, resolve to\n/// a capability object.\n/// \\param Sidx The attribute argument index to start checking with.\n/// \\param ParamIdxOk Whether an argument can be indexing into a function\n/// parameter list.\nstatic void checkAttrArgsAreCapabilityObjs(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args, unsigned Sidx = 0, bool ParamIdxOk = false) {\n if (Sidx == AL.getNumArgs()) {\n if (MD && !MD->isStatic()) {\n } else {\n S.Diag(AL.getLoc(), diag::warn_thread_attribute_not_on_non_static_member) << AL;"}} | ||
}, | }, | ||
["warn_thread_safety_beta"]={ | ["warn_thread_safety_beta"]={ | ||
Line 6,638: | Line 6,638: | ||
[e]=p, | [e]=p, | ||
[i]={"8edae13dd069",1354665975,"Thread safety analysis: Add a new \"beta\" warning flag: -Wthread-safety-beta."}, | [i]={"8edae13dd069",1354665975,"Thread safety analysis: Add a new \"beta\" warning flag: -Wthread-safety-beta."}, | ||
[j]={{D, | [j]={{D,2612,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n // Check for thread safety violations\n if (P.enableThreadSafetyAnalysis) {\n if (!Diags.isIgnored(diag::warn_thread_safety_beta, D->getBeginLoc()))"}} | ||
}, | }, | ||
["warn_thread_safety_verbose"]={ | ["warn_thread_safety_verbose"]={ | ||
Line 6,653: | Line 6,653: | ||
[e]=p, | [e]=p, | ||
[i]={"eb0ea5f40a48",1408052415,"Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpf..."}, | [i]={"eb0ea5f40a48",1408052415,"Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpf..."}, | ||
[j]={{D, | [j]={{D,2614,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n // Check for thread safety violations\n if (P.enableThreadSafetyAnalysis) {\n if (!Diags.isIgnored(diag::warn_thread_safety_verbose, D->getBeginLoc()))"}} | ||
}, | }, | ||
["warn_throw_in_noexcept_func"]={ | ["warn_throw_in_noexcept_func"]={ | ||
Line 6,667: | Line 6,667: | ||
[e]=p, | [e]=p, | ||
[i]={"89fe9c269a22",1498249339,"Emit warning when throw exception in destruct or dealloc functions which has a "}, | [i]={"89fe9c269a22",1498249339,"Emit warning when throw exception in destruct or dealloc functions which has a "}, | ||
[j]={{D, | [j]={{D,358,"static void EmitDiagForCXXThrowInNonThrowingFunc(Sema &S, SourceLocation OpLoc, const FunctionDecl *FD) {\n if (!S.getSourceManager().isInSystemHeader(OpLoc) && FD->getTypeSourceInfo()) {\n S.Diag(OpLoc, diag::warn_throw_in_noexcept_func) << FD;"},{D,2688,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n if (!Diags.isIgnored(diag::warn_throw_in_noexcept_func, D->getBeginLoc()))"}} | ||
}, | }, | ||
["warn_throw_underaligned_obj"]={ | ["warn_throw_underaligned_obj"]={ | ||
Line 6,681: | Line 6,681: | ||
[e]=p, | [e]=p, | ||
[i]={"c39a243da651",1557454597,"Assume `__cxa_allocate_exception` returns an under-aligned memory on"}, | [i]={"c39a243da651",1557454597,"Assume `__cxa_allocate_exception` returns an under-aligned memory on"}, | ||
[j]={{Lb, | [j]={{Lb,1091,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n // Under the Itanium C++ ABI, memory for the exception object is allocated by\n // the runtime with no ability for the compiler to request additional\n // alignment. Warn if the exception type requires alignment beyond the minimum\n // guaranteed by the target C++ runtime.\n if (Context.getTargetInfo().getCXXABI().isItaniumFamily()) {\n if (ExnObjAlign < TypeAlign) {\n Diag(ThrowLoc, diag::warn_throw_underaligned_obj);"}} | ||
}, | }, | ||
["warn_transparent_union_attribute_field_size_align"]={ | ["warn_transparent_union_attribute_field_size_align"]={ | ||
Line 6,695: | Line 6,695: | ||
[e]=p, | [e]=p, | ||
[i]={"0cfbdab0cf8a",1241043376,"Implement semantic analysis for transparent unions. This is largely"}, | [i]={"0cfbdab0cf8a",1241043376,"Implement semantic analysis for transparent unions. This is largely"}, | ||
[j]={{B, | [j]={{B,4266,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n for (; Field != FieldEnd; ++Field) {\n // FIXME: this isn\'t fully correct; we also need to test whether the\n // members of the union would all have the same calling convention as the\n // first member of the union. Checking just the size and alignment isn\'t\n // sufficient (consider structs passed on the stack instead of in registers\n // as an example).\n if (S.Context.getTypeSize(FieldType) != FirstSize || S.Context.getTypeAlign(FieldType) > FirstAlign) {\n S.Diag(Field->getLocation(), diag::warn_transparent_union_attribute_field_size_align) << isSize << *Field << FieldBits;"}} | ||
}, | }, | ||
["warn_transparent_union_attribute_floating"]={ | ["warn_transparent_union_attribute_floating"]={ | ||
Line 6,709: | Line 6,709: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{B, | [j]={{B,4241,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (FirstType->hasFloatingRepresentation() || FirstType->isVectorType()) {\n S.Diag(FirstField->getLocation(), diag::warn_transparent_union_attribute_floating) << FirstType->isVectorType() << FirstType;"}} | ||
}, | }, | ||
["warn_transparent_union_attribute_not_definition"]={ | ["warn_transparent_union_attribute_not_definition"]={ | ||
Line 6,723: | Line 6,723: | ||
[e]=p, | [e]=p, | ||
[i]={"0cfbdab0cf8a",1241043376,"Implement semantic analysis for transparent unions. This is largely"}, | [i]={"0cfbdab0cf8a",1241043376,"Implement semantic analysis for transparent unions. This is largely"}, | ||
[j]={{B, | [j]={{B,4226,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (!RD->isCompleteDefinition()) {\n if (!RD->isBeingDefined())\n S.Diag(AL.getLoc(), diag::warn_transparent_union_attribute_not_definition);"}} | ||
}, | }, | ||
["warn_transparent_union_attribute_zero_fields"]={ | ["warn_transparent_union_attribute_zero_fields"]={ | ||
Line 6,737: | Line 6,737: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{B, | [j]={{B,4233,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (Field == FieldEnd) {\n S.Diag(AL.getLoc(), diag::warn_transparent_union_attribute_zero_fields);"}} | ||
}, | }, | ||
["warn_type_attribute_deprecated_on_decl"]={ | ["warn_type_attribute_deprecated_on_decl"]={ | ||
Line 6,751: | Line 6,751: | ||
[e]=Qb, | [e]=Qb, | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{B, | [j]={{B,8783,"/// ProcessDeclAttribute - Apply the specific attribute to the specified decl if\n/// the attribute applies to decls. If the attribute is a type attribute, just\n/// silently ignore it if a GNU attribute.\nstatic void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, const Sema::ProcessDeclAttributeOptions &Options) {\n default:\n if (AL.isTypeAttr()) {\n // According to the C and C++ standards, we should never see a\n // [[]] type attribute on a declaration. However, we have in the past\n // allowed some type attributes to \"slide\" to the `DeclSpec`, so we need\n // to continue to support this legacy behavior. We only do this, however,\n // if\n // - we actually have a `DeclSpec`, i.e. if we\'re looking at a\n // `DeclaratorDecl`, or\n // - we are looking at an alias-declaration, where historically we have\n // allowed type attributes after the identifier to slide to the type.\n if (AL.slidesFromDeclToDeclSpecLegacyBehavior() && isa<DeclaratorDecl, TypeAliasDecl>(D)) {\n // Suggest moving the attribute to the type instead, but only for our\n // own vendor attributes; moving other vendors\' attributes might hurt\n // portability.\n if (AL.isClangScope()) {\n S.Diag(AL.getLoc(), diag::warn_type_attribute_deprecated_on_decl) << AL << D->getLocation();"},{Q,1837,"#include \"clang/Basic/OpenCLImageTypes.def\"\n // Apply any type attributes from the decl spec. This may cause the\n // list of type attributes to be temporarily saved while the type\n // attributes are pushed around.\n // pipe attributes will be handled later ( at GetFullTypeForDeclarator )\n if (!DS.isTypeSpecPipe()) {\n for (ParsedAttr &AL : declarator.getDeclarationAttributes()) {\n if (AL.slidesFromDeclToDeclSpecLegacyBehavior()) {\n // For standard syntax attributes, which would normally appertain to the\n // declaration here, suggest moving them to the type instead. But only\n // do this for our own vendor attributes; moving other vendors\'\n // attributes might hurt portability.\n // There\'s one special case that we need to deal with here: The\n // `MatrixType` attribute may only be used in a typedef declaration. If\n // it\'s being used anywhere else, don\'t output the warning as\n // ProcessDeclAttributes() will output an error anyway.\n if (AL.isStandardAttributeSyntax() && AL.isClangScope() && !(AL.getKind() == ParsedAttr::AT_MatrixType && DS.getStorageClassSpec() != DeclSpec::SCS_typedef)) {\n S.Diag(AL.getLoc(), diag::warn_type_attribute_deprecated_on_decl) << AL;"}} | ||
}, | }, | ||
["warn_type_attribute_wrong_type"]={ | ["warn_type_attribute_wrong_type"]={ | ||
Line 6,765: | Line 6,765: | ||
[e]=p, | [e]=p, | ||
[i]={"db6d85ef9272",1374260024,"Replace some existing type attribute diagnostics with a"}, | [i]={"db6d85ef9272",1374260024,"Replace some existing type attribute diagnostics with a"}, | ||
[j]={{Q, | [j]={{Q,109,"/// diagnoseBadTypeAttribute - Diagnoses a type attribute which\n/// doesn\'t apply to the given type.\nstatic void diagnoseBadTypeAttribute(Sema &S, const ParsedAttr &attr, QualType type) {\n S.Diag(loc, attr.isRegularKeywordAttribute() ? diag::err_type_attribute_wrong_type : diag::warn_type_attribute_wrong_type) << name << WhichType << type;"},{Q,7004,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n if (NonObjCPointer) {\n S.Diag(AttrLoc, diag::warn_type_attribute_wrong_type) << name << TDS_ObjCObjOrBlock << type;"}} | ||
}, | }, | ||
["warn_type_safety_null_pointer_required"]={ | ["warn_type_safety_null_pointer_required"]={ | ||
Line 6,779: | Line 6,779: | ||
[e]=p, | [e]=p, | ||
[i]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"}, | [i]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"}, | ||
[j]={{x, | [j]={{x,18427,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n if (TypeInfo.MustBeNull) {\n // Type tag with matching void type requires a null pointer.\n if (!ArgumentExpr->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull)) {\n Diag(ArgumentExpr->getExprLoc(), diag::warn_type_safety_null_pointer_required) << ArgumentKind->getName() << ArgumentExpr->getSourceRange() << TypeTagExpr->getSourceRange();"}} | ||
}, | }, | ||
["warn_type_safety_type_mismatch"]={ | ["warn_type_safety_type_mismatch"]={ | ||
Line 6,793: | Line 6,793: | ||
[e]=p, | [e]=p, | ||
[i]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"}, | [i]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"}, | ||
[j]={{x, | [j]={{x,18462,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n if (mismatch)\n Diag(ArgumentExpr->getExprLoc(), diag::warn_type_safety_type_mismatch) << ArgumentType << ArgumentKind << TypeInfo.LayoutCompatible << RequiredType << ArgumentExpr->getSourceRange() << TypeTagExpr->getSourceRange();"}} | ||
}, | }, | ||
["warn_type_tag_for_datatype_wrong_kind"]={ | ["warn_type_tag_for_datatype_wrong_kind"]={ | ||
Line 6,807: | Line 6,807: | ||
[e]=p, | [e]=p, | ||
[i]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"}, | [i]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'"}, | ||
[j]={{x, | [j]={{x,18396,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n if (!GetMatchingCType(ArgumentKind, TypeTagExpr, Context, TypeTagForDatatypeMagicValues.get(), FoundWrongKind, TypeInfo, isConstantEvaluated())) {\n if (FoundWrongKind)\n Diag(TypeTagExpr->getExprLoc(), diag::warn_type_tag_for_datatype_wrong_kind) << TypeTagExpr->getSourceRange();"}} | ||
}, | }, | ||
["warn_typecheck_convert_incompatible_function_pointer_strict"]={ | ["warn_typecheck_convert_incompatible_function_pointer_strict"]={ | ||
Line 6,822: | Line 6,822: | ||
[e]=p, | [e]=p, | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{z, | [j]={{z,10068,"// checkPointerTypesForAssignment - This is a very tricky routine (despite\n// being closely modeled after the C99 spec:-). The odd characteristic of this\n// routine is it effectively iqnores the qualifiers on the top level pointee.\n// This circumvents the usual type rules specified in 6.2.7p1 & 6.7.5.[1-3].\n// FIXME: add a couple examples in this comment.\nstatic Sema::AssignConvertType checkPointerTypesForAssignment(Sema &S, QualType LHSType, QualType RHSType, SourceLocation Loc) {\n if (!S.Diags.isIgnored(diag::warn_typecheck_convert_incompatible_function_pointer_strict, Loc) && RHSType->isFunctionPointerType() && LHSType->isFunctionPointerType() && !S.IsFunctionConversion(RHSType, LHSType, RHSType))"},{z,17551,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case IncompatibleFunctionPointerStrict:\n DiagKind = diag::warn_typecheck_convert_incompatible_function_pointer_strict;"}} | ||
}, | }, | ||
["warn_typecheck_function_qualifiers_ignored"]={ | ["warn_typecheck_function_qualifiers_ignored"]={ | ||
Line 6,836: | Line 6,836: | ||
[e]=p, | [e]=p, | ||
[i]={"a462b4c9acd1",1431630642,"DR295: cv-qualifiers on function types are ignored in C++."}, | [i]={"a462b4c9acd1",1431630642,"DR295: cv-qualifiers on function types are ignored in C++."}, | ||
[j]={{Q, | [j]={{Q,1867,"#include \"clang/Basic/OpenCLImageTypes.def\"\n // Apply const/volatile/restrict qualifiers to T.\n if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n // Warn about CV qualifiers on function types.\n // C99 6.7.3p8:\n // If the specification of a function type includes any type qualifiers,\n // the behavior is undefined.\n // C++11 [dcl.fct]p7:\n // The effect of a cv-qualifier-seq in a function declarator is not the\n // same as adding cv-qualification on top of the function type. In the\n // latter case, the cv-qualifiers are ignored.\n if (Result->isFunctionType()) {\n diagnoseAndRemoveTypeQualifiers(S, DS, TypeQuals, Result, DeclSpec::TQ_const | DeclSpec::TQ_volatile, S.getLangOpts().CPlusPlus ? diag::warn_typecheck_function_qualifiers_ignored : diag::warn_typecheck_function_qualifiers_unspecified);"}} | ||
}, | }, | ||
["warn_typecheck_function_qualifiers_unspecified"]={ | ["warn_typecheck_function_qualifiers_unspecified"]={ | ||
Line 6,848: | Line 6,848: | ||
[e]=p, | [e]=p, | ||
[i]={"a462b4c9acd1",1431630642,"DR295: cv-qualifiers on function types are ignored in C++."}, | [i]={"a462b4c9acd1",1431630642,"DR295: cv-qualifiers on function types are ignored in C++."}, | ||
[j]={{Q, | [j]={{Q,1868,"#include \"clang/Basic/OpenCLImageTypes.def\"\n // Apply const/volatile/restrict qualifiers to T.\n if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n // Warn about CV qualifiers on function types.\n // C99 6.7.3p8:\n // If the specification of a function type includes any type qualifiers,\n // the behavior is undefined.\n // C++11 [dcl.fct]p7:\n // The effect of a cv-qualifier-seq in a function declarator is not the\n // same as adding cv-qualification on top of the function type. In the\n // latter case, the cv-qualifiers are ignored.\n if (Result->isFunctionType()) {\n diagnoseAndRemoveTypeQualifiers(S, DS, TypeQuals, Result, DeclSpec::TQ_const | DeclSpec::TQ_volatile, S.getLangOpts().CPlusPlus ? diag::warn_typecheck_function_qualifiers_ignored : diag::warn_typecheck_function_qualifiers_unspecified);"}} | ||
}, | }, | ||
["warn_typecheck_ordered_comparison_of_function_pointers"]={ | ["warn_typecheck_ordered_comparison_of_function_pointers"]={ | ||
Line 6,862: | Line 6,862: | ||
[e]=p, | [e]=p, | ||
[i]={Tb,1615397021,Sb}, | [i]={Tb,1615397021,Sb}, | ||
[j]={{z, | [j]={{z,13040,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n if (IsOrdered && LHSType->isFunctionPointerType() && RHSType->isFunctionPointerType()) {\n auto DiagID = IsError ? diag::err_typecheck_ordered_comparison_of_function_pointers : getLangOpts().CPlusPlus ? diag::warn_typecheck_ordered_comparison_of_function_pointers : diag::ext_typecheck_ordered_comparison_of_function_pointers;"}} | ||
}, | }, | ||
["warn_typecheck_reference_qualifiers"]={ | ["warn_typecheck_reference_qualifiers"]={ | ||
Line 6,876: | Line 6,876: | ||
[e]=p, | [e]=p, | ||
[i]={"40259443073b",1392768807,"PR13110: Add a -Wignored-qualifiers warning when ignoring a const, volatile, or"}, | [i]={"40259443073b",1392768807,"PR13110: Add a -Wignored-qualifiers warning when ignoring a const, volatile, or"}, | ||
[j]={{Q, | [j]={{Q,1885,"#include \"clang/Basic/OpenCLImageTypes.def\"\n // Apply const/volatile/restrict qualifiers to T.\n if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n // C++11 [dcl.ref]p1:\n // Cv-qualified references are ill-formed except when the\n // cv-qualifiers are introduced through the use of a typedef-name\n // or decltype-specifier, in which case the cv-qualifiers are ignored.\n //\n // There don\'t appear to be any other contexts in which a cv-qualified\n // reference type could be formed, so the \'ill-formed\' clause here appears\n // to never happen.\n if (TypeQuals && Result->isReferenceType()) {\n diagnoseAndRemoveTypeQualifiers(S, DS, TypeQuals, Result, DeclSpec::TQ_const | DeclSpec::TQ_volatile | DeclSpec::TQ_atomic, diag::warn_typecheck_reference_qualifiers);"}} | ||
}, | }, | ||
["warn_typecheck_vector_element_sizes_not_equal"]={ | ["warn_typecheck_vector_element_sizes_not_equal"]={ | ||
Line 6,890: | Line 6,890: | ||
[e]=p, | [e]=p, | ||
[i]={"9941ca8af6b4",1476878770,"[Sema] Gcc compatibility of vector shift"}, | [i]={"9941ca8af6b4",1476878770,"[Sema] Gcc compatibility of vector shift"}, | ||
[j]={{z, | [j]={{z,12192,"/// Return the resulting type when a vector is shifted\n/// by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n if (!LHSVecTy) {\n } else if (RHSVecTy) {\n if (!S.LangOpts.OpenCL && !S.LangOpts.ZVector) {\n if (LHSBT != RHSBT && S.Context.getTypeSize(LHSBT) != S.Context.getTypeSize(RHSBT)) {\n S.Diag(Loc, diag::warn_typecheck_vector_element_sizes_not_equal) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}} | ||
}, | }, | ||
["warn_ucn_escape_incomplete"]={ | ["warn_ucn_escape_incomplete"]={ | ||
Line 6,904: | Line 6,904: | ||
[e]=C, | [e]=C, | ||
[i]={"7f43dddae066",1359060646,"Handle universal character names and Unicode characters outside of literals."}, | [i]={"7f43dddae066",1359060646,"Handle universal character names and Unicode characters outside of literals."}, | ||
[j]={{Jb, | [j]={{Jb,3340,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n if (!Delimited && Count != NumHexDigits) {\n if (Diagnose) {\n Diag(SlashLoc, diag::warn_ucn_escape_incomplete);"},{Jb,3389,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n if (C != \'{\') {\n if (Diagnose)\n Diag(SlashLoc, diag::warn_ucn_escape_incomplete);"}} | ||
}, | }, | ||
["warn_ucn_escape_no_digits"]={ | ["warn_ucn_escape_no_digits"]={ | ||
Line 6,918: | Line 6,918: | ||
[e]=C, | [e]=C, | ||
[i]={"7f43dddae066",1359060646,"Handle universal character names and Unicode characters outside of literals."}, | [i]={"7f43dddae066",1359060646,"Handle universal character names and Unicode characters outside of literals."}, | ||
[j]={{Jb, | [j]={{Jb,3327,"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);"}} | ||
}, | }, | ||
["warn_ucn_escape_surrogate"]={ | ["warn_ucn_escape_surrogate"]={ | ||
Line 6,932: | Line 6,932: | ||
[e]=C, | [e]=C, | ||
[i]={"58c61e006f4d",1360372225,"Properly validate UCNs for C99 and C++03 (both more restrictive than C(++)11)."}, | [i]={"58c61e006f4d",1360372225,"Properly validate UCNs for C99 and C++03 (both more restrictive than C(++)11)."}, | ||
[j]={{Jb, | [j]={{Jb,3523,"uint32_t Lexer::tryReadUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n // C++11 [lex.charset]p2: If the hexadecimal value for a\n // universal-character-name corresponds to a surrogate code point (in the\n // range 0xD800-0xDFFF, inclusive), the program is ill-formed. Additionally,\n // if the hexadecimal value for a universal-character-name outside the\n // c-char-sequence, s-char-sequence, or r-char-sequence of a character or\n // string literal corresponds to a control character (in either of the\n // ranges 0x00-0x1F or 0x7F-0x9F, both inclusive) or to a character in the\n // basic source character set, the program is ill-formed.\n if (CodePoint < 0xA0) {\n } else if (CodePoint >= 0xD800 && CodePoint <= 0xDFFF) {\n // C++03 allows UCNs representing surrogate characters. C99 and C++11 don\'t.\n // We don\'t use isLexingRawMode() here because we need to diagnose bad\n // UCNs even when skipping preprocessing tokens in a #if block.\n if (Result && PP) {\n if (LangOpts.CPlusPlus && !LangOpts.CPlusPlus11)\n Diag(BufferPtr, diag::warn_ucn_escape_surrogate);"}} | ||
}, | }, | ||
["warn_ucn_not_valid_in_c89"]={ | ["warn_ucn_not_valid_in_c89"]={ | ||
Line 6,946: | Line 6,946: | ||
[e]=C, | [e]=C, | ||
[i]={"9762e0a2348b",1286341046,"Add support for 4-byte UCNs like \\U12345678. Warn about UCNs in c90 mode."}, | [i]={"9762e0a2348b",1286341046,"Add support for 4-byte UCNs like \\U12345678. Warn about UCNs in c90 mode."}, | ||
[j]={{Jb, | [j]={{Jb,3280,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n if (!LangOpts.CPlusPlus && !LangOpts.C99) {\n if (Diagnose)\n Diag(SlashLoc, diag::warn_ucn_not_valid_in_c89);"}} | ||
}, | }, | ||
["warn_ucn_not_valid_in_c89_literal"]={ | ["warn_ucn_not_valid_in_c89_literal"]={ | ||
Line 6,960: | Line 6,960: | ||
[e]=C, | [e]=C, | ||
[i]={"c0cba2723060",1359317524,"PR15067: Don\'t assert when a UCN appears in a C90 file."}, | [i]={"c0cba2723060",1359317524,"PR15067: Don\'t assert when a UCN appears in a C90 file."}, | ||
[j]={{"clang/lib/Lex/LiteralSupport.cpp", | [j]={{"clang/lib/Lex/LiteralSupport.cpp",695,"/// 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 (!Features.CPlusPlus && !Features.C99 && Diags)\n Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, diag::warn_ucn_not_valid_in_c89_literal);"}} | ||
}, | }, | ||
["warn_unaligned_access"]={ | ["warn_unaligned_access"]={ | ||
Line 6,975: | Line 6,975: | ||
[e]=w, | [e]=w, | ||
[i]={"683e83c56f98",1633469611,"[Clang][C++2b] P2242R3: Non-literal variables [...] in constexpr"}, | [i]={"683e83c56f98",1633469611,"[Clang][C++2b] P2242R3: Non-literal variables [...] in constexpr"}, | ||
[j]={{ac, | [j]={{ac,2131,"void ItaniumRecordLayoutBuilder::LayoutField(const FieldDecl *D, bool InsertExtraPadding) {\n // For checking the alignment of inner fields against\n // the alignment of its parent record.\n if (const RecordDecl *RD = D->getParent()) {\n // Check if packed attribute or pragma pack is present.\n if (RD->hasAttr<PackedAttr>() || !MaxFieldAlignment.isZero())\n if (FieldAlign < OriginalFieldAlign)\n if (D->getType()->isRecordType()) {\n // If the offset is a multiple of the alignment of\n // the type, raise the warning.\n // TODO: Takes no account the alignment of the outer struct\n if (FieldOffset % OriginalFieldAlign != 0)\n Diag(D->getLocation(), diag::warn_unaligned_access) << Context.getTypeDeclType(RD) << D->getName() << D->getType();"}} | ||
}, | }, | ||
["warn_unannotated_fallthrough"]={ | ["warn_unannotated_fallthrough"]={ | ||
Line 6,990: | Line 6,990: | ||
[e]=p, | [e]=p, | ||
[i]={"84837d5b5aa0",1336069659,"Add -Wimplicit-fallthrough warning flag, which warns on fallthrough between"}, | [i]={"84837d5b5aa0",1336069659,"Add -Wimplicit-fallthrough warning flag, which warns on fallthrough between"}, | ||
[j]={{D, | [j]={{D,1306,"static void DiagnoseSwitchLabelsFallthrough(Sema &S, AnalysisDeclContext &AC, bool PerFunction) {\n for (const CFGBlock *B : llvm::reverse(*Cfg)) {\n S.Diag(Label->getBeginLoc(), PerFunction ? diag::warn_unannotated_fallthrough_per_function : diag::warn_unannotated_fallthrough);"},{D,2666,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n bool FallThroughDiagFull = !Diags.isIgnored(diag::warn_unannotated_fallthrough, D->getBeginLoc());"}} | ||
}, | }, | ||
["warn_unannotated_fallthrough_per_function"]={ | ["warn_unannotated_fallthrough_per_function"]={ | ||
Line 7,005: | Line 7,005: | ||
[e]=p, | [e]=p, | ||
[i]={"2178f14c10af",1339795325,"Stop referring to functions as methods in per-function fallthrough-checking."}, | [i]={"2178f14c10af",1339795325,"Stop referring to functions as methods in per-function fallthrough-checking."}, | ||
[j]={{D, | [j]={{D,1305,"static void DiagnoseSwitchLabelsFallthrough(Sema &S, AnalysisDeclContext &AC, bool PerFunction) {\n for (const CFGBlock *B : llvm::reverse(*Cfg)) {\n S.Diag(Label->getBeginLoc(), PerFunction ? diag::warn_unannotated_fallthrough_per_function : diag::warn_unannotated_fallthrough);"},{D,2668,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n bool FallThroughDiagPerFunction = !Diags.isIgnored(diag::warn_unannotated_fallthrough_per_function, D->getBeginLoc());"}} | ||
}, | }, | ||
["warn_unavailable_def"]={ | ["warn_unavailable_def"]={ | ||
Line 7,020: | Line 7,020: | ||
[e]=p, | [e]=p, | ||
[i]={"e1088dc42b3e",1499963831,"Extend -Wdeprecated-implementations to warn about unavailable methods"}, | [i]={"e1088dc42b3e",1499963831,"Extend -Wdeprecated-implementations to warn about unavailable methods"}, | ||
[j]={{N, | [j]={{N,302,"static void DiagnoseObjCImplementedDeprecations(Sema &S, const NamedDecl *ND, SourceLocation ImplLoc) {\n if (Availability != AR_Deprecated) {\n if (isa<ObjCMethodDecl>(ND)) {\n S.Diag(ImplLoc, diag::warn_unavailable_def);"}} | ||
}, | }, | ||
["warn_unavailable_fwdclass_message"]={ | ["warn_unavailable_fwdclass_message"]={ | ||
Line 7,034: | Line 7,034: | ||
[e]=p, | [e]=p, | ||
[i]={"7d6e11a1923a",1292892241,"Warn when message is sent to receiver of"}, | [i]={"7d6e11a1923a",1292892241,"Warn when message is sent to receiver of"}, | ||
[j]={{wc, | [j]={{wc,450,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n case AR_Unavailable:\n diag_fwdclass_message = diag::warn_unavailable_fwdclass_message;"}} | ||
}, | }, | ||
["warn_uncovered_module_header"]={ | ["warn_uncovered_module_header"]={ | ||
Line 7,048: | Line 7,048: | ||
[e]=C, | [e]=C, | ||
[i]={"fe76cfd89c37",1324599839,"When building a module with an umbrella header, warn about any headers"}, | [i]={"fe76cfd89c37",1324599839,"When building a module with an umbrella header, warn about any headers"}, | ||
[j]={{"clang/lib/Lex/PPLexerChange.cpp", | [j]={{"clang/lib/Lex/PPLexerChange.cpp",297,"void Preprocessor::diagnoseMissingHeaderInUmbrellaDir(const Module &Mod) {\n if (getDiagnostics().isIgnored(diag::warn_uncovered_module_header, ExpectedHeadersLoc))"},{"clang/lib/Lex/PPLexerChange.cpp",323,"void Preprocessor::diagnoseMissingHeaderInUmbrellaDir(const Module &Mod) {\n for (llvm::vfs::recursive_directory_iterator Entry(FS, Dir->getName(), EC), End; Entry != End && !EC; Entry.increment(EC)) {\n if (auto Header = getFileManager().getOptionalFileRef(Entry->path()))\n if (!getSourceManager().hasFileInfo(*Header)) {\n if (!ModMap.isHeaderInUnavailableModule(*Header)) {\n Diag(ExpectedHeadersLoc, diag::warn_uncovered_module_header) << Mod.getFullModuleName() << RelativePath;"}} | ||
}, | }, | ||
["warn_undeclared_selector"]={ | ["warn_undeclared_selector"]={ | ||
Line 7,063: | Line 7,063: | ||
[e]=p, | [e]=p, | ||
[i]={"0571d9bbbaed",1245169500,"Implements -Wundeclared-selector for ObjC."}, | [i]={"0571d9bbbaed",1245169500,"Implements -Wundeclared-selector for ObjC."}, | ||
[j]={{Z, | [j]={{Z,1313,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n if (!Method) {\n if (const ObjCMethodDecl *OM = SelectorsForTypoCorrection(Sel)) {\n } else\n Diag(SelLoc, diag::warn_undeclared_selector) << Sel;"}} | ||
}, | }, | ||
["warn_undeclared_selector_with_typo"]={ | ["warn_undeclared_selector_with_typo"]={ | ||
Line 7,078: | Line 7,078: | ||
[e]=p, | [e]=p, | ||
[i]={"0c0fc9e14b9c",1370457974,"Objective-C: Provide fixit with suggested spelling correction"}, | [i]={"0c0fc9e14b9c",1370457974,"Objective-C: Provide fixit with suggested spelling correction"}, | ||
[j]={{Z, | [j]={{Z,1308,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n if (!Method) {\n if (const ObjCMethodDecl *OM = SelectorsForTypoCorrection(Sel)) {\n Diag(SelLoc, diag::warn_undeclared_selector_with_typo) << Sel << MatchedSel << FixItHint::CreateReplacement(SelectorRange, MatchedSel.getAsString());"}} | ||
}, | }, | ||
["warn_undef_interface"]={ | ["warn_undef_interface"]={ | ||
Line 7,090: | Line 7,090: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{N, | [j]={{N,1178,"/// ActOnCompatibilityAlias - this action is called after complete parsing of\n/// a \\@compatibility_alias declaration. It sets up the alias relationships.\nDecl *Sema::ActOnCompatibilityAlias(SourceLocation AtLoc, IdentifierInfo *AliasName, SourceLocation AliasLocation, IdentifierInfo *ClassName, SourceLocation ClassLocation) {\n if (!CDecl) {\n Diag(ClassLocation, diag::warn_undef_interface) << ClassName;"},{N,1999,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n } else if ((IDecl = dyn_cast_or_null<ObjCInterfaceDecl>(PrevDecl))) {\n RequireCompleteType(ClassLoc, Context.getObjCInterfaceType(IDecl), diag::warn_undef_interface);"},{N,2015,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n } else if ((IDecl = dyn_cast_or_null<ObjCInterfaceDecl>(PrevDecl))) {\n } else {\n if (Corrected.getCorrectionDeclAs<ObjCInterfaceDecl>()) {\n } else {\n Diag(ClassLoc, diag::warn_undef_interface) << ClassName;"}} | ||
}, | }, | ||
["warn_undef_interface_suggest"]={ | ["warn_undef_interface_suggest"]={ | ||
Line 7,102: | Line 7,102: | ||
[e]=p, | [e]=p, | ||
[i]={"40f7a007e9d0",1262626032,"When declaring an Objective-C implementation without a corresponding"}, | [i]={"40f7a007e9d0",1262626032,"When declaring an Objective-C implementation without a corresponding"}, | ||
[j]={{N, | [j]={{N,2012,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n } else if ((IDecl = dyn_cast_or_null<ObjCInterfaceDecl>(PrevDecl))) {\n } else {\n if (Corrected.getCorrectionDeclAs<ObjCInterfaceDecl>()) {\n diagnoseTypo(Corrected, PDiag(diag::warn_undef_interface_suggest) << ClassName,"}} | ||
}, | }, | ||
["warn_undef_method_impl"]={ | ["warn_undef_method_impl"]={ | ||
Line 7,116: | Line 7,116: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{N, | [j]={{N,2848,"/// MatchAllMethodDeclarations - Check methods declared in interface\n/// or protocol against those declared in their implementations.\n///\nvoid Sema::MatchAllMethodDeclarations(const SelectorSet &InsMap, const SelectorSet &ClsMap, SelectorSet &InsMapSeen, SelectorSet &ClsMapSeen, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, bool &IncompleteImpl, bool ImmediateClass, bool WarnCategoryMethodImpl) {\n // Check and see if instance methods in class interface have been\n // implemented in the implementation class. If so, their types match.\n for (auto *I : CDecl->instance_methods()) {\n if (!I->isPropertyAccessor() && !InsMap.count(I->getSelector())) {\n if (ImmediateClass)\n WarnUndefinedMethod(*this, IMPDecl, I, IncompleteImpl, diag::warn_undef_method_impl);"},{N,2878,"/// MatchAllMethodDeclarations - Check methods declared in interface\n/// or protocol against those declared in their implementations.\n///\nvoid Sema::MatchAllMethodDeclarations(const SelectorSet &InsMap, const SelectorSet &ClsMap, SelectorSet &InsMapSeen, SelectorSet &ClsMapSeen, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, bool &IncompleteImpl, bool ImmediateClass, bool WarnCategoryMethodImpl) {\n // Check and see if class methods in class interface have been\n // implemented in the implementation class. If so, their types match.\n for (auto *I : CDecl->class_methods()) {\n if (!I->isPropertyAccessor() && !ClsMap.count(I->getSelector())) {\n if (ImmediateClass)\n WarnUndefinedMethod(*this, IMPDecl, I, IncompleteImpl, diag::warn_undef_method_impl);"}} | ||
}, | }, | ||
["warn_undef_protocolref"]={ | ["warn_undef_protocolref"]={ | ||
Line 7,128: | Line 7,128: | ||
[e]=p, | [e]=p, | ||
[i]={bb,1236199783,ab}, | [i]={bb,1236199783,ab}, | ||
[j]={{N, | [j]={{N,1351,"/// FindProtocolDeclaration - This routine looks up protocols and\n/// issues an error if they are not declared. It returns list of\n/// protocol declarations in its \'Protocols\' argument.\nvoid Sema::FindProtocolDeclaration(bool WarnOnDeclarations, bool ForObjCContainer, ArrayRef<IdentifierLocPair> ProtocolId, SmallVectorImpl<Decl *> &Protocols) {\n for (const IdentifierLocPair &Pair : ProtocolId) {\n if (WarnOnDeclarations && NestedProtocolHasNoDefinition(PDecl, UndefinedProtocol)) {\n Diag(Pair.second, diag::warn_undef_protocolref) << Pair.first;"},{N,1487,"void Sema::actOnObjCTypeArgsOrProtocolQualifiers(Scope *S, ParsedType baseType, SourceLocation lAngleLoc, ArrayRef<IdentifierInfo *> identifiers, ArrayRef<SourceLocation> identifierLocs, SourceLocation rAngleLoc, SourceLocation &typeArgsLAngleLoc, SmallVectorImpl<ParsedType> &typeArgs, SourceLocation &typeArgsRAngleLoc, SourceLocation &protocolLAngleLoc, SmallVectorImpl<Decl *> &protocols, SourceLocation &protocolRAngleLoc, bool warnOnIncompleteProtocols) {\n auto resolvedAsProtocols = [&] {\n for (unsigned i = 0, n = protocols.size(); i != n; ++i) {\n if (warnOnIncompleteProtocols && NestedProtocolHasNoDefinition(proto, forwardDecl)) {\n Diag(identifierLocs[i], diag::warn_undef_protocolref) << proto->getDeclName();"}} | ||
}, | }, | ||
["warn_undefined_inline"]={ | ["warn_undefined_inline"]={ | ||
Line 7,142: | Line 7,142: | ||
[e]=p, | [e]=p, | ||
[i]={"9c7eb1d887c1",1359706400,"Add a new -Wundefined-inline warning for inline functions which are used but not"}, | [i]={"9c7eb1d887c1",1359706400,"Add a new -Wundefined-inline warning for inline functions which are used but not"}, | ||
[j]={{V, | [j]={{V,911,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n for (const auto &Undef : Undefined) {\n if (S.isExternalWithNoLinkageType(VD)) {\n } else if (!VD->isExternallyVisible()) {\n } else if (auto *FD = dyn_cast<FunctionDecl>(VD)) {\n S.Diag(VD->getLocation(), diag::warn_undefined_inline) << VD;"}} | ||
}, | }, | ||
["warn_undefined_internal"]={ | ["warn_undefined_internal"]={ | ||
Line 7,156: | Line 7,156: | ||
[e]=p, | [e]=p, | ||
[i]={"837796754391",1298084021,"Warn about code that uses variables and functions with internal linkage"}, | [i]={"837796754391",1298084021,"Warn about code that uses variables and functions with internal linkage"}, | ||
[j]={{V, | [j]={{V,904,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n for (const auto &Undef : Undefined) {\n if (S.isExternalWithNoLinkageType(VD)) {\n } else if (!VD->isExternallyVisible()) {\n if (!S.getLangOpts().OpenMP || !IsImplicitBase)\n S.Diag(VD->getLocation(), diag::warn_undefined_internal) << isa<VarDecl>(VD) << VD;"}} | ||
}, | }, | ||
["warn_undefined_reinterpret_cast"]={ | ["warn_undefined_reinterpret_cast"]={ | ||
Line 7,171: | Line 7,171: | ||
[e]=p, | [e]=p, | ||
[i]={"69a2c924b9e8",1304360479,"Add a warning for when reinterpret_cast leads to undefined behavior, patch by Richard Trieu!"}, | [i]={"69a2c924b9e8",1304360479,"Add a warning for when reinterpret_cast leads to undefined behavior, patch by Richard Trieu!"}, | ||
[j]={{Db, | [j]={{Db,2040,"// Checks for undefined behavior in reinterpret_cast.\n// The cases that is checked for is:\n// *reinterpret_cast<T*>(&a)\n// reinterpret_cast<T&>(a)\n// where accessing \'a\' as type \'T\' will result in undefined behavior.\nvoid Sema::CheckCompatibleReinterpretCast(QualType SrcType, QualType DestType, bool IsDereference, SourceRange Range) {\n unsigned DiagID = IsDereference ? diag::warn_pointer_indirection_from_incompatible_type : diag::warn_undefined_reinterpret_cast;"}} | ||
}, | }, | ||
["warn_unevaluated_string_prefix"]={ | ["warn_unevaluated_string_prefix"]={ | ||
Line 7,185: | Line 7,185: | ||
[e]=C, | [e]=C, | ||
[i]={"82343aa9cf9c",1690639424,"[Clang] Backport static_assert messages fixes"}, | [i]={"82343aa9cf9c",1690639424,"[Clang] Backport static_assert messages fixes"}, | ||
[j]={{"clang/lib/Lex/LiteralSupport.cpp", | [j]={{"clang/lib/Lex/LiteralSupport.cpp",1954,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n /// (C99 5.1.1.2p1). The common case is only one string fragment.\n for (const Token &Tok : StringToks) {\n // Remember if we see any wide or utf-8/16/32 strings.\n // Also check for illegal concatenations.\n if (isUnevaluated() && Tok.getKind() != tok::string_literal) {\n if (Diags) {\n Diags->Report(Tok.getLocation(), Features.CPlusPlus26 ? diag::err_unevaluated_string_prefix : diag::warn_unevaluated_string_prefix) << Prefix << Features.CPlusPlus << FixItHint::CreateRemoval(Range);"}} | ||
}, | }, | ||
["warn_unguarded_availability"]={ | ["warn_unguarded_availability"]={ | ||
Line 7,200: | Line 7,200: | ||
[e]=p, | [e]=p, | ||
[i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration"}, | [i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration"}, | ||
[j]={{wc, | [j]={{wc,387,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n case AR_NotYetIntroduced: {\n unsigned Warning = UseNewWarning ? diag::warn_unguarded_availability_new : diag::warn_unguarded_availability;"},{wc,772,"void DiagnoseUnguardedAvailability::DiagnoseDeclAvailability(NamedDecl *D, SourceRange Range, ObjCInterfaceDecl *ReceiverClass) {\n if (Result != AR_Available) {\n unsigned DiagKind = shouldDiagnoseAvailabilityByDefault(SemaRef.Context, SemaRef.Context.getTargetInfo().getPlatformMinVersion(), Introduced) ? diag::warn_unguarded_availability_new : diag::warn_unguarded_availability;"}} | ||
}, | }, | ||
["warn_unguarded_availability_new"]={ | ["warn_unguarded_availability_new"]={ | ||
Line 7,214: | Line 7,214: | ||
[e]=p, | [e]=p, | ||
[i]={"c9a369fbecd5",1498150944,"[Sema] Add -Wunguarded-availability-new"}, | [i]={"c9a369fbecd5",1498150944,"[Sema] Add -Wunguarded-availability-new"}, | ||
[j]={{wc, | [j]={{wc,386,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n case AR_NotYetIntroduced: {\n unsigned Warning = UseNewWarning ? diag::warn_unguarded_availability_new : diag::warn_unguarded_availability;"},{wc,771,"void DiagnoseUnguardedAvailability::DiagnoseDeclAvailability(NamedDecl *D, SourceRange Range, ObjCInterfaceDecl *ReceiverClass) {\n if (Result != AR_Available) {\n unsigned DiagKind = shouldDiagnoseAvailabilityByDefault(SemaRef.Context, SemaRef.Context.getTargetInfo().getPlatformMinVersion(), Introduced) ? diag::warn_unguarded_availability_new : diag::warn_unguarded_availability;"}} | ||
}, | }, | ||
["warn_unhandled_ms_attribute_ignored"]={ | ["warn_unhandled_ms_attribute_ignored"]={ | ||
Line 7,228: | Line 7,228: | ||
[e]=p, | [e]=p, | ||
[i]={"38c9ad9e725c",1340113766,"Improves parsing and semantic analysis for MS __declspec attributes. This includes support for the ..."}, | [i]={"38c9ad9e725c",1340113766,"Improves parsing and semantic analysis for MS __declspec attributes. This includes support for the ..."}, | ||
[j]={{B, | [j]={{B,8734,"/// ProcessDeclAttribute - Apply the specific attribute to the specified decl if\n/// the attribute applies to decls. If the attribute is a type attribute, just\n/// silently ignore it if a GNU attribute.\nstatic void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, const Sema::ProcessDeclAttributeOptions &Options) {\n // Unknown attributes are automatically warned on. Target-specific attributes\n // which do not apply to the current target architecture are treated as\n // though they were unknown attributes.\n if (AL.getKind() == ParsedAttr::UnknownAttribute || !AL.existsInTarget(S.Context.getTargetInfo())) {\n S.Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? (unsigned)diag::err_keyword_not_supported_on_target : AL.isDeclspecAttribute() ? (unsigned)diag::warn_unhandled_ms_attribute_ignored : (unsigned)diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{"clang/lib/Sema/SemaStmtAttr.cpp",497,"static Attr *ProcessStmtAttribute(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n if (A.getKind() == ParsedAttr::UnknownAttribute || !(A.existsInTarget(S.Context.getTargetInfo()) || (S.Context.getLangOpts().SYCLIsDevice && Aux && A.existsInTarget(*Aux)))) {\n S.Diag(A.getLoc(), A.isRegularKeywordAttribute() ? (unsigned)diag::err_keyword_not_supported_on_target : A.isDeclspecAttribute() ? (unsigned)diag::warn_unhandled_ms_attribute_ignored : (unsigned)diag::warn_unknown_attribute_ignored) << A << A.getRange();"}} | ||
}, | }, | ||
["warn_unimplemented_protocol_method"]={ | ["warn_unimplemented_protocol_method"]={ | ||
Line 7,242: | Line 7,242: | ||
[e]=p, | [e]=p, | ||
[i]={"c1fb862fda60",1270059813,"Patch implements gcc\'s -Wno-protocol option to suppress warning"}, | [i]={"c1fb862fda60",1270059813,"Patch implements gcc\'s -Wno-protocol option to suppress warning"}, | ||
[j]={{N, | [j]={{N,2793,"/// CheckProtocolMethodDefs - This routine checks unimplemented methods\n/// Declared in protocol, and those referenced by it.\nstatic void CheckProtocolMethodDefs(Sema &S, ObjCImplDecl *Impl, ObjCProtocolDecl *PDecl, bool &IncompleteImpl, const Sema::SelectorSet &InsMap, const Sema::SelectorSet &ClsMap, ObjCContainerDecl *CDecl, LazyProtocolNameSet &ProtocolsExplictImpl) {\n // check unimplemented instance methods.\n if (!NSIDecl)\n for (auto *method : PDecl->instance_methods()) {\n if (method->getImplementationControl() != ObjCMethodDecl::Optional && !method->isPropertyAccessor() && !InsMap.count(method->getSelector()) && (!Super || !Super->lookupMethod(method->getSelector(), true /* instance */, false /* shallowCategory */, true /* followsSuper */, nullptr /* category */))) {\n unsigned DIAG = diag::warn_unimplemented_protocol_method;"},{N,2815,"/// CheckProtocolMethodDefs - This routine checks unimplemented methods\n/// Declared in protocol, and those referenced by it.\nstatic void CheckProtocolMethodDefs(Sema &S, ObjCImplDecl *Impl, ObjCProtocolDecl *PDecl, bool &IncompleteImpl, const Sema::SelectorSet &InsMap, const Sema::SelectorSet &ClsMap, ObjCContainerDecl *CDecl, LazyProtocolNameSet &ProtocolsExplictImpl) {\n // check unimplemented class methods\n for (auto *method : PDecl->class_methods()) {\n if (method->getImplementationControl() != ObjCMethodDecl::Optional && !ClsMap.count(method->getSelector()) && (!Super || !Super->lookupMethod(method->getSelector(), false /* class method */, false /* shallowCategoryLookup */, true /* followSuper */, nullptr /* category */))) {\n unsigned DIAG = diag::warn_unimplemented_protocol_method;"}} | ||
}, | }, | ||
["warn_unimplemented_selector"]={ | ["warn_unimplemented_selector"]={ | ||
Line 7,257: | Line 7,257: | ||
[e]=p, | [e]=p, | ||
[i]={"6e7e8cc19d05",1279823060,"atch for implementation of objective-c\'s -Wselector"}, | [i]={"6e7e8cc19d05",1279823060,"atch for implementation of objective-c\'s -Wselector"}, | ||
[j]={{N, | [j]={{N,5274,"void Sema::DiagnoseUseOfUnimplementedSelectors() {\n for (auto &SelectorAndLocation : ReferencedSelectors) {\n if (!LookupImplementedMethodInGlobalPool(Sel))\n Diag(Loc, diag::warn_unimplemented_selector) << Sel;"}} | ||
}, | }, | ||
["warn_uninit_byref_blockvar_captured_by_block"]={ | ["warn_uninit_byref_blockvar_captured_by_block"]={ | ||
Line 7,272: | Line 7,272: | ||
[e]=p, | [e]=p, | ||
[i]={"429fadb8e262",1331166170,"improve on diagnostic and provide a fixit hint when"}, | [i]={"429fadb8e262",1331166170,"improve on diagnostic and provide a fixit hint when"}, | ||
[j]={{D, | [j]={{D,1041,"/// DiagnoseUninitializedUse -- Helper function for diagnosing uses of an\n/// uninitialized variable. This manages the different forms of diagnostic\n/// emitted for particular types of uses. Returns true if the use was diagnosed\n/// as a warning. If a particular use is one we omit warnings for, returns\n/// false.\nstatic bool DiagnoseUninitializedUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool alwaysReportSelfInit = false) {\n if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Use.getUser())) {\n } else {\n if (VD->getType()->isBlockPointerType() && !VD->hasAttr<BlocksAttr>())\n S.Diag(BE->getBeginLoc(), diag::warn_uninit_byref_blockvar_captured_by_block) << VD->getDeclName() << VD->getType().getQualifiers().hasObjCLifetime();"}} | ||
}, | }, | ||
["warn_uninit_const_reference"]={ | ["warn_uninit_const_reference"]={ | ||
Line 7,287: | Line 7,287: | ||
[e]=p, | [e]=p, | ||
[i]={cc,1576908663,bc}, | [i]={cc,1576908663,bc}, | ||
[j]={{D, | [j]={{D,998,"/// Diagnose uninitialized const reference usages.\nstatic bool DiagnoseUninitializedConstRefUse(Sema &S, const VarDecl *VD, const UninitUse &Use) {\n S.Diag(Use.getUser()->getBeginLoc(), diag::warn_uninit_const_reference) << VD->getDeclName() << Use.getUser()->getSourceRange();"},{D,2632,"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_uninit_self_reference_in_init"]={ | ["warn_uninit_self_reference_in_init"]={ | ||
Line 7,301: | Line 7,301: | ||
[e]=p, | [e]=p, | ||
[i]={"33bf3e758d1d",1301219216,"Diagnose uninitialized uses of a variable within its own initializer."}, | [i]={"33bf3e758d1d",1301219216,"Diagnose uninitialized uses of a variable within its own initializer."}, | ||
[j]={{D, | [j]={{D,1030,"/// DiagnoseUninitializedUse -- Helper function for diagnosing uses of an\n/// uninitialized variable. This manages the different forms of diagnostic\n/// emitted for particular types of uses. Returns true if the use was diagnosed\n/// as a warning. If a particular use is one we omit warnings for, returns\n/// false.\nstatic bool DiagnoseUninitializedUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool alwaysReportSelfInit = false) {\n if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Use.getUser())) {\n // Inspect the initializer of the variable declaration which is\n // being referenced prior to its initialization. We emit\n // specialized diagnostics for self-initialization, and we\n // specifically avoid warning about self references which take the\n // form of:\n //\n // int x = x;\n //\n // This is used to indicate to GCC that \'x\' is intentionally left\n // uninitialized. Proven code paths which access \'x\' in\n // an uninitialized state after this will still warn.\n if (const Expr *Initializer = VD->getInit()) {\n if (CR.doesContainReference()) {\n S.Diag(DRE->getBeginLoc(), diag::warn_uninit_self_reference_in_init) << VD->getDeclName() << VD->getLocation() << DRE->getSourceRange();"},{G,12623,"// Visits an initialization expression to see if OrigDecl is evaluated in\n// its own initialization and throws a warning if it does.\nclass SelfReferenceChecker : public EvaluatedExprVisitor<SelfReferenceChecker> {\n void HandleDeclRefExpr(DeclRefExpr *DRE) {\n if (isReferenceType) {\n } else if (cast<VarDecl>(OrigDecl)->isStaticLocal()) {\n } else if (isa<TranslationUnitDecl>(OrigDecl->getDeclContext()) || isa<NamespaceDecl>(OrigDecl->getDeclContext()) || DRE->getDecl()->getType()->isRecordType()) {\n diag = diag::warn_uninit_self_reference_in_init;"}} | ||
}, | }, | ||
["warn_uninit_self_reference_in_reference_init"]={ | ["warn_uninit_self_reference_in_reference_init"]={ | ||
Line 7,315: | Line 7,315: | ||
[e]=p, | [e]=p, | ||
[i]={"d799a2b3b91f",1345452742,"Better wording for reference self-initialization warning."}, | [i]={"d799a2b3b91f",1345452742,"Better wording for reference self-initialization warning."}, | ||
[j]={{G, | [j]={{G,12617,"// Visits an initialization expression to see if OrigDecl is evaluated in\n// its own initialization and throws a warning if it does.\nclass SelfReferenceChecker : public EvaluatedExprVisitor<SelfReferenceChecker> {\n void HandleDeclRefExpr(DeclRefExpr *DRE) {\n if (isReferenceType) {\n diag = diag::warn_uninit_self_reference_in_reference_init;"}} | ||
}, | }, | ||
["warn_uninit_var"]={ | ["warn_uninit_var"]={ | ||
Line 7,330: | Line 7,330: | ||
[e]=p, | [e]=p, | ||
[i]={"bcf848f70a42",1295982828,"Teach -Wuninitialized-experimental to also warn"}, | [i]={"bcf848f70a42",1295982828,"Teach -Wuninitialized-experimental to also warn"}, | ||
[j]={{D, | [j]={{D,834,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n case UninitUse::Always:\n S.Diag(Use.getUser()->getBeginLoc(), diag::warn_uninit_var) << VD->getDeclName() << IsCapturedByBlock << Use.getUser()->getSourceRange();"},{D,2629,"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_unknown_attribute_ignored"]={ | ["warn_unknown_attribute_ignored"]={ | ||
Line 7,344: | Line 7,344: | ||
[e]=w, | [e]=w, | ||
[i]={"dd1bc0f1b5a6",1278582146,"Add support for differentiating between attributes ignored when handled and"}, | [i]={"dd1bc0f1b5a6",1278582146,"Add support for differentiating between attributes ignored when handled and"}, | ||
[j]={{"clang/lib/Parse/ParseDecl.cpp", | [j]={{"clang/lib/Parse/ParseDecl.cpp",1769,"void Parser::ProhibitCXX11Attributes(ParsedAttributes &Attrs, unsigned AttrDiagID, unsigned KeywordDiagID, bool DiagnoseEmptyAttrs, bool WarnOnUnknownAttrs) {\n for (const ParsedAttr &AL : Attrs) {\n if (AL.getKind() == ParsedAttr::UnknownAttribute) {\n if (WarnOnUnknownAttrs)\n Diag(AL.getLoc(), diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{B,2231,"bool Sema::CheckAttrTarget(const ParsedAttr &AL) {\n // Check whether the attribute is valid on the current target.\n if (!AL.existsInTarget(Context.getTargetInfo())) {\n Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? diag::err_keyword_not_supported_on_target : diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{B,8735,"/// ProcessDeclAttribute - Apply the specific attribute to the specified decl if\n/// the attribute applies to decls. If the attribute is a type attribute, just\n/// silently ignore it if a GNU attribute.\nstatic void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, const Sema::ProcessDeclAttributeOptions &Options) {\n // Unknown attributes are automatically warned on. Target-specific attributes\n // which do not apply to the current target architecture are treated as\n // though they were unknown attributes.\n if (AL.getKind() == ParsedAttr::UnknownAttribute || !AL.existsInTarget(S.Context.getTargetInfo())) {\n S.Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? (unsigned)diag::err_keyword_not_supported_on_target : AL.isDeclspecAttribute() ? (unsigned)diag::warn_unhandled_ms_attribute_ignored : (unsigned)diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{B,9618,"/// checkUnusedDeclAttributes - Check a list of attributes to see if it\n/// contains any decl attributes that we should warn about.\nstatic void checkUnusedDeclAttributes(Sema &S, const ParsedAttributesView &A) {\n for (const ParsedAttr &AL : A) {\n if (AL.getKind() == ParsedAttr::UnknownAttribute) {\n S.Diag(AL.getLoc(), diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{Y,2824,"/// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is\n/// one entry in the base class list of a class specifier, for\n/// example:\n/// class foo : public bar, virtual private baz {\n/// \'public bar\' and \'virtual private baz\' are each base-specifiers.\nBaseResult Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange, const ParsedAttributesView &Attributes, bool Virtual, AccessSpecifier Access, ParsedType basetype, SourceLocation BaseLoc, SourceLocation EllipsisLoc) {\n // We do not support any C++11 attributes on base-specifiers yet.\n // Diagnose any attributes we see.\n for (const ParsedAttr &AL : Attributes) {\n if (AL.getKind() == ParsedAttr::UnknownAttribute)\n Diag(AL.getLoc(), diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{"clang/lib/Sema/SemaStmtAttr.cpp",498,"static Attr *ProcessStmtAttribute(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n if (A.getKind() == ParsedAttr::UnknownAttribute || !(A.existsInTarget(S.Context.getTargetInfo()) || (S.Context.getLangOpts().SYCLIsDevice && Aux && A.existsInTarget(*Aux)))) {\n S.Diag(A.getLoc(), A.isRegularKeywordAttribute() ? (unsigned)diag::err_keyword_not_supported_on_target : A.isDeclspecAttribute() ? (unsigned)diag::warn_unhandled_ms_attribute_ignored : (unsigned)diag::warn_unknown_attribute_ignored) << A << A.getRange();"},{Q,8580,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n for (ParsedAttr &attr : AttrsCopy) {\n case ParsedAttr::UnknownAttribute:\n if (attr.isStandardAttributeSyntax()) {\n state.getSema().Diag(attr.getLoc(), diag::warn_unknown_attribute_ignored) << attr << attr.getRange();"}} | ||
}, | }, | ||
["warn_unknown_comment_command_name"]={ | ["warn_unknown_comment_command_name"]={ | ||
Line 7,359: | Line 7,359: | ||
[e]="Documentation Issue", | [e]="Documentation Issue", | ||
[i]={"5b637078e1ab",1367622920,"[Doc parsing] Provide diagnostics for unknown documentation "}, | [i]={"5b637078e1ab",1367622920,"[Doc parsing] Provide diagnostics for unknown documentation "}, | ||
[j]={{"clang/lib/AST/CommentLexer.cpp", | [j]={{"clang/lib/AST/CommentLexer.cpp",417,"void Lexer::lexCommentText(Token &T) {\n case \'@\': {\n if (!Info) {\n if ((Info = Traits.getTypoCorrectCommandInfo(CommandName))) {\n } else {\n Diag(T.getLocation(), diag::warn_unknown_comment_command_name) << SourceRange(T.getLocation(), T.getEndLocation());"},{G,14660,"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_unknown_declare_variant_isa_trait"]={ | ["warn_unknown_declare_variant_isa_trait"]={ | ||
Line 7,373: | Line 7,373: | ||
[e]=A, | [e]=A, | ||
[i]={Kb,1582847864,Ub}, | [i]={Kb,1582847864,Ub}, | ||
[j]={{M, | [j]={{M,2244,"/// Parsing of declarative OpenMP directives.\n///\n/// threadprivate-directive:\n/// annot_pragma_openmp \'threadprivate\' simple-variable-list\n/// annot_pragma_openmp_end\n///\n/// allocate-directive:\n/// annot_pragma_openmp \'allocate\' simple-variable-list [<clause>]\n/// annot_pragma_openmp_end\n///\n/// declare-reduction-directive:\n/// annot_pragma_openmp \'declare\' \'reduction\' [...]\n/// annot_pragma_openmp_end\n///\n/// declare-mapper-directive:\n/// annot_pragma_openmp \'declare\' \'mapper\' \'(\' [<mapper-identifer> \':\']\n/// <type> <var> \')\' [<clause>[[,] <clause>] ... ]\n/// annot_pragma_openmp_end\n///\n/// declare-simd-directive:\n/// annot_pragma_openmp \'declare simd\' {<clause> [,]}\n/// annot_pragma_openmp_end\n/// <function declaration/definition>\n///\n/// requires directive:\n/// annot_pragma_openmp \'requires\' <clause> [[[,] <clause>] ... ]\n/// annot_pragma_openmp_end\n///\n/// assumes directive:\n/// annot_pragma_openmp \'assumes\' <clause> [[[,] <clause>] ... ]\n/// annot_pragma_openmp_end\n/// or\n/// annot_pragma_openmp \'begin assumes\' <clause> [[[,] <clause>] ... ]\n/// annot_pragma_openmp \'end assumes\'\n/// annot_pragma_openmp_end\n///\nParser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(AccessSpecifier &AS, ParsedAttributes &Attrs, bool Delayed, DeclSpec::TST TagType, Decl *Tag) {\n case OMPD_begin_declare_variant: {\n std::function<void(StringRef)> DiagUnknownTrait = [this, Loc](StringRef ISATrait) {\n Diag(Loc, diag::warn_unknown_declare_variant_isa_trait) << ISATrait;"},{M,2604,"/// Parsing of declarative or executable OpenMP directives.\n///\n/// threadprivate-directive:\n/// annot_pragma_openmp \'threadprivate\' simple-variable-list\n/// annot_pragma_openmp_end\n///\n/// allocate-directive:\n/// annot_pragma_openmp \'allocate\' simple-variable-list\n/// annot_pragma_openmp_end\n///\n/// declare-reduction-directive:\n/// annot_pragma_openmp \'declare\' \'reduction\' \'(\' <reduction_id> \':\'\n/// <type> {\',\' <type>} \':\' <expression> \')\' [\'initializer\' \'(\'\n/// (\'omp_priv\' \'=\' <expression>|<function_call>) \')\']\n/// annot_pragma_openmp_end\n///\n/// declare-mapper-directive:\n/// annot_pragma_openmp \'declare\' \'mapper\' \'(\' [<mapper-identifer> \':\']\n/// <type> <var> \')\' [<clause>[[,] <clause>] ... ]\n/// annot_pragma_openmp_end\n///\n/// executable-directive:\n/// annot_pragma_openmp \'parallel\' | \'simd\' | \'for\' | \'sections\' |\n/// \'section\' | \'single\' | \'master\' | \'critical\' [ \'(\' <name> \')\' ] |\n/// \'parallel for\' | \'parallel sections\' | \'parallel master\' | \'task\' |\n/// \'taskyield\' | \'barrier\' | \'taskwait\' | \'flush\' | \'ordered\' | \'error\'\n/// | \'atomic\' | \'for simd\' | \'parallel for simd\' | \'target\' | \'target\n/// data\' | \'taskgroup\' | \'teams\' | \'taskloop\' | \'taskloop simd\' |\n/// \'master taskloop\' | \'master taskloop simd\' | \'parallel master\n/// taskloop\' | \'parallel master taskloop simd\' | \'distribute\' | \'target\n/// enter data\' | \'target exit data\' | \'target parallel\' | \'target\n/// parallel for\' | \'target update\' | \'distribute parallel for\' |\n/// \'distribute paralle for simd\' | \'distribute simd\' | \'target parallel\n/// for simd\' | \'target simd\' | \'teams distribute\' | \'teams distribute\n/// simd\' | \'teams distribute parallel for simd\' | \'teams distribute\n/// parallel for\' | \'target teams\' | \'target teams distribute\' | \'target\n/// teams distribute parallel for\' | \'target teams distribute parallel\n/// for simd\' | \'target teams distribute simd\' | \'masked\' |\n/// \'parallel masked\' {clause} annot_pragma_openmp_end\n///\nStmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective(ParsedStmtContext StmtCtx, bool ReadDirectiveWithinMetadirective) {\n case OMPD_metadirective: {\n std::function<void(StringRef)> DiagUnknownTrait = [this, Loc](StringRef ISATrait) {\n Diag(Loc, diag::warn_unknown_declare_variant_isa_trait) << ISATrait;"},{nb,7264,"ExprResult Sema::ActOnOpenMPCall(ExprResult Call, Scope *Scope, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig) {\n std::function<void(StringRef)> DiagUnknownTrait = [this, CE](StringRef ISATrait) {\n Diag(CE->getBeginLoc(), diag::warn_unknown_declare_variant_isa_trait) << ISATrait;"}} | ||
}, | }, | ||
["warn_unknown_diag_option"]={ | ["warn_unknown_diag_option"]={ | ||
Line 7,387: | Line 7,387: | ||
[e]=w, | [e]=w, | ||
[i]={"3be1cb294f32",1407371061,"Use -Rblah, not -Wblah, to control remark diagnostics. This was always the"}, | [i]={"3be1cb294f32",1407371061,"Use -Rblah, not -Wblah, to control remark diagnostics. This was always the"}, | ||
[j]={{"clang/lib/Basic/Warnings.cpp", | [j]={{"clang/lib/Basic/Warnings.cpp",39,"// EmitUnknownDiagWarning - Emit a warning and typo hint for unknown warning\n// opts\nstatic void EmitUnknownDiagWarning(DiagnosticsEngine &Diags, diag::Flavor Flavor, StringRef Prefix, StringRef Opt) {\n Diags.Report(diag::warn_unknown_diag_option) << (Flavor == diag::Flavor::WarningOrError ? 0 : 1) << (Prefix.str() += std::string(Opt)) << !Suggestion.empty() << (Prefix.str() += std::string(Suggestion));"}} | ||
}, | }, | ||
["warn_unknown_sanitizer_ignored"]={ | ["warn_unknown_sanitizer_ignored"]={ | ||
Line 7,401: | Line 7,401: | ||
[e]=p, | [e]=p, | ||
[i]={"915df9968b65",1431714812,"Implement no_sanitize attribute."}, | [i]={"915df9968b65",1431714812,"Implement no_sanitize attribute."}, | ||
[j]={{B, | [j]={{B,8232,"static void handleNoSanitizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) {\n if (parseSanitizerValue(SanitizerName, /*AllowGroups=*/true) == SanitizerMask() && SanitizerName != \"coverage\")\n S.Diag(LiteralLoc, diag::warn_unknown_sanitizer_ignored) << SanitizerName;"}} | ||
}, | }, | ||
["warn_unknown_warning_specifier"]={ | ["warn_unknown_warning_specifier"]={ | ||
Line 7,415: | Line 7,415: | ||
[e]=w, | [e]=w, | ||
[i]={"b089c1de5521",1261594417,"switch -Werror/-Wfatal-errors error conditions to use diagnostics instead"}, | [i]={"b089c1de5521",1261594417,"switch -Werror/-Wfatal-errors error conditions to use diagnostics instead"}, | ||
[j]={{"clang/lib/Basic/Warnings.cpp", | [j]={{"clang/lib/Basic/Warnings.cpp",143,"void clang::ProcessWarningOptions(DiagnosticsEngine &Diags, const DiagnosticOptions &Opts, bool ReportDiags) {\n // We parse the warning options twice. The first pass sets diagnostic state,\n // while the second pass reports warnings/errors. This has the effect that\n // we follow the more canonical \"last option wins\" paradigm when there are\n // conflicting options.\n for (unsigned Report = 0, ReportEnd = 2; Report != ReportEnd; ++Report) {\n for (unsigned i = 0, e = Opts.Warnings.size(); i != e; ++i) {\n // -Werror/-Wno-error is a special case, not controlled by the option\n // table. It also has the \"specifier\" form of -Werror=foo. GCC supports\n // the deprecated -Werror-implicit-function-declaration which is used by\n // a few projects.\n if (Opt.startswith(\"error\")) {\n if (Opt.size() > 5) { // Specifier must be present.\n if (Opt[5] != \'=\' && Opt.substr(5) != \"-implicit-function-declaration\") {\n if (Report)\n Diags.Report(diag::warn_unknown_warning_specifier) << \"-Werror\" << (\"-W\" + OrigOpt.str());"},{"clang/lib/Basic/Warnings.cpp",171,"void clang::ProcessWarningOptions(DiagnosticsEngine &Diags, const DiagnosticOptions &Opts, bool ReportDiags) {\n // We parse the warning options twice. The first pass sets diagnostic state,\n // while the second pass reports warnings/errors. This has the effect that\n // we follow the more canonical \"last option wins\" paradigm when there are\n // conflicting options.\n for (unsigned Report = 0, ReportEnd = 2; Report != ReportEnd; ++Report) {\n for (unsigned i = 0, e = Opts.Warnings.size(); i != e; ++i) {\n // -Wfatal-errors is yet another special case.\n if (Opt.startswith(\"fatal-errors\")) {\n if (Opt.size() != 12) {\n if ((Opt[12] != \'=\' && Opt[12] != \'-\') || Opt.size() == 13) {\n if (Report)\n Diags.Report(diag::warn_unknown_warning_specifier) << \"-Wfatal-errors\" << (\"-W\" + OrigOpt.str());"}} | ||
}, | }, | ||
["warn_unlock_but_no_lock"]={ | ["warn_unlock_but_no_lock"]={ | ||
Line 7,430: | Line 7,430: | ||
[e]=p, | [e]=p, | ||
[i]={"ee5db8b5c4ab",1315518770,"Thread Safety: In C++0x Mutexes are the objects that control access to shared variables, while Lock..."}, | [i]={"ee5db8b5c4ab",1315518770,"Thread Safety: In C++0x Mutexes are the objects that control access to shared variables, while Lock..."}, | ||
[j]={{D, | [j]={{D,1873,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n void handleUnmatchedUnlock(StringRef Kind, Name LockName, SourceLocation Loc, SourceLocation LocPreviousUnlock) override {\n PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_unlock_but_no_lock) << Kind << LockName);"}} | ||
}, | }, | ||
["warn_unlock_kind_mismatch"]={ | ["warn_unlock_kind_mismatch"]={ | ||
Line 7,445: | Line 7,445: | ||
[e]=p, | [e]=p, | ||
[i]={"df115d9bf354",1395413328,"The release_capability, release_shared_capability and release_generic_capability functions are now f..."}, | [i]={"df115d9bf354",1395413328,"The release_capability, release_shared_capability and release_generic_capability functions are now f..."}, | ||
[j]={{D, | [j]={{D,1886,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n void handleIncorrectUnlockKind(StringRef Kind, Name LockName, LockKind Expected, LockKind Received, SourceLocation LocLocked, SourceLocation LocUnlock) override {\n PartialDiagnosticAt Warning(LocUnlock, S.PDiag(diag::warn_unlock_kind_mismatch) << Kind << LockName << Received << Expected);"}} | ||
}, | }, | ||
["warn_unnecessary_packed"]={ | ["warn_unnecessary_packed"]={ | ||
Line 7,460: | Line 7,460: | ||
[e]=w, | [e]=w, | ||
[i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | [i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | ||
[j]={{ac, | [j]={{ac,2215,"void ItaniumRecordLayoutBuilder::FinishLayout(const NamedDecl *D) {\n if (const RecordDecl *RD = dyn_cast<RecordDecl>(D)) {\n // Warn if we packed it unnecessarily, when the unpacked alignment is not\n // greater than the one after packing, the size in bits doesn\'t change and\n // the offset of each field is identical.\n // Unless the type is non-POD (for Clang ABI > 15), where the packed\n // attribute on such a type does allow the type to be packed into other\n // structures that use the packed attribute.\n if (Packed && UnpackedAlignment <= Alignment && UnpackedSizeInBits == getSizeInBits() && !HasPackedField && (!CXXRD || CXXRD->isPOD() || Context.getLangOpts().getClangABICompat() <= LangOptions::ClangABI::Ver15))\n Diag(D->getLocation(), diag::warn_unnecessary_packed) << Context.getTypeDeclType(RD);"}} | ||
}, | }, | ||
["warn_unneeded_internal_decl"]={ | ["warn_unneeded_internal_decl"]={ | ||
Line 7,475: | Line 7,475: | ||
[e]=X, | [e]=X, | ||
[i]={"1618023018cd",1303242670,"We regard a function as \'unused\' from the codegen perspective, so our warnings diverge from"}, | [i]={"1618023018cd",1303242670,"We regard a function as \'unused\' from the codegen perspective, so our warnings diverge from"}, | ||
[j]={{V, | [j]={{V,1368,"/// 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 there were errors, disable \'unused\' warnings since they will mostly be\n // noise. Don\'t warn for a use from a module: either we should warn on all\n // file-scope declarations in modules or not at all, but whether the\n // declaration is used is immaterial.\n if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n // Output warning for unused file scoped decls.\n for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n if (DiagD->isReferenced()) {\n if (isa<CXXMethodDecl>(DiagD))\n else {\n if (FD->getStorageClass() == SC_Static && !FD->isInlineSpecified() && !SourceMgr.isInMainFile(SourceMgr.getExpansionLoc(FD->getLocation())))\n else\n Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) << /*function=*/0 << DiagD << DiagRange;"},{V,1392,"/// 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 there were errors, disable \'unused\' warnings since they will mostly be\n // noise. Don\'t warn for a use from a module: either we should warn on all\n // file-scope declarations in modules or not at all, but whether the\n // declaration is used is immaterial.\n if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n // Output warning for unused file scoped decls.\n for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n } else {\n if (DiagD->isReferenced()) {\n Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) << /*variable=*/1 << DiagD << DiagRange;"}} | ||
}, | }, | ||
["warn_unneeded_member_function"]={ | ["warn_unneeded_member_function"]={ | ||
Line 7,490: | Line 7,490: | ||
[e]=p, | [e]=p, | ||
[i]={"1618023018cd",1303242670,"We regard a function as \'unused\' from the codegen perspective, so our warnings diverge from"}, | [i]={"1618023018cd",1303242670,"We regard a function as \'unused\' from the codegen perspective, so our warnings diverge from"}, | ||
[j]={{V, | [j]={{V,1357,"/// 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 there were errors, disable \'unused\' warnings since they will mostly be\n // noise. Don\'t warn for a use from a module: either we should warn on all\n // file-scope declarations in modules or not at all, but whether the\n // declaration is used is immaterial.\n if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n // Output warning for unused file scoped decls.\n for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n if (DiagD->isReferenced()) {\n if (isa<CXXMethodDecl>(DiagD))\n Diag(DiagD->getLocation(), diag::warn_unneeded_member_function) << DiagD << DiagRange;"}} | ||
}, | }, | ||
["warn_unneeded_static_internal_decl"]={ | ["warn_unneeded_static_internal_decl"]={ | ||
Line 7,505: | Line 7,505: | ||
[e]=X, | [e]=X, | ||
[i]={"91fc39e31324",1340826209,"patch to suggest \'static\' function should be \'static inline\' "}, | [i]={"91fc39e31324",1340826209,"patch to suggest \'static\' function should be \'static inline\' "}, | ||
[j]={{V, | [j]={{V,1365,"/// 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 there were errors, disable \'unused\' warnings since they will mostly be\n // noise. Don\'t warn for a use from a module: either we should warn on all\n // file-scope declarations in modules or not at all, but whether the\n // declaration is used is immaterial.\n if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n // Output warning for unused file scoped decls.\n for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n if (DiagD->isReferenced()) {\n if (isa<CXXMethodDecl>(DiagD))\n else {\n if (FD->getStorageClass() == SC_Static && !FD->isInlineSpecified() && !SourceMgr.isInMainFile(SourceMgr.getExpansionLoc(FD->getLocation())))\n Diag(DiagD->getLocation(), diag::warn_unneeded_static_internal_decl) << DiagD << DiagRange;"}} | ||
}, | }, | ||
["warn_unofficial_aarch64_simdlen_must_be_power_of_2"]={ | ["warn_unofficial_aarch64_simdlen_must_be_power_of_2"]={ | ||
Line 7,570: | Line 7,570: | ||
[e]=w, | [e]=w, | ||
[i]={"ec273d3e3a8c",1643408541,"Add a warning for not packing non-POD members in packed structs"}, | [i]={"ec273d3e3a8c",1643408541,"Add a warning for not packing non-POD members in packed structs"}, | ||
[j]={{ac, | [j]={{ac,2137,"void ItaniumRecordLayoutBuilder::LayoutField(const FieldDecl *D, bool InsertExtraPadding) {\n if (Packed && !FieldPacked && PackedFieldAlign < FieldAlign)\n Diag(D->getLocation(), diag::warn_unpacked_field) << D;"}} | ||
}, | }, | ||
["warn_unqualified_call_to_std_cast_function"]={ | ["warn_unqualified_call_to_std_cast_function"]={ | ||
Line 7,584: | Line 7,584: | ||
[e]=p, | [e]=p, | ||
[i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."}, | [i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."}, | ||
[j]={{z, | [j]={{z,7043,"// Once a call is fully resolved, warn for unqualified calls to specific\n// C++ standard functions, like move and forward.\nstatic void DiagnosedUnqualifiedCallsToStdFunctions(Sema &S, CallExpr *Call) {\n S.Diag(DRE->getLocation(), diag::warn_unqualified_call_to_std_cast_function) << FD->getQualifiedNameAsString() << FixItHint::CreateInsertion(DRE->getLocation(), \"std::\");"}} | ||
}, | }, | ||
["warn_unreachable"]={ | ["warn_unreachable"]={ | ||
Line 7,599: | Line 7,599: | ||
[e]=p, | [e]=p, | ||
[i]={"1bacb81d6f61",1263351594,"Add an unreachable code checker."}, | [i]={"1bacb81d6f61",1263351594,"Add an unreachable code checker."}, | ||
[j]={{D, | [j]={{D,94,"class UnreachableCodeHandler : public reachable_code::Callback {\n void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n unsigned diag = diag::warn_unreachable;"}} | ||
}, | }, | ||
["warn_unreachable_association"]={ | ["warn_unreachable_association"]={ | ||
Line 7,613: | Line 7,613: | ||
[e]=p, | [e]=p, | ||
[i]={Qc,1620530452,Pc}, | [i]={Qc,1620530452,Pc}, | ||
[j]={{z, | [j]={{z,1760,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n for (unsigned i = 0; i < NumAssocs; ++i) {\n if (Types[i]) {\n if (Types[i]->getType()->isDependentType()) {\n } else {\n if (ControllingExpr && Types[i]->getType()->isIncompleteType())\n else if (ControllingExpr && !Types[i]->getType()->isObjectType())\n else if (Types[i]->getType()->isVariablyModifiedType())\n else if (ControllingExpr) {\n if (Reason)\n Diag(Types[i]->getTypeLoc().getBeginLoc(), diag::warn_unreachable_association) << QT << (Reason - 1);"}} | ||
}, | }, | ||
["warn_unreachable_break"]={ | ["warn_unreachable_break"]={ | ||
Line 7,628: | Line 7,628: | ||
[e]=p, | [e]=p, | ||
[i]={"1a8641c1e772",1394846792,"Start breaking -Wunreachable-code up into different diagnostic groups."}, | [i]={"1a8641c1e772",1394846792,"Start breaking -Wunreachable-code up into different diagnostic groups."}, | ||
[j]={{D, | [j]={{D,97,"class UnreachableCodeHandler : public reachable_code::Callback {\n void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n case reachable_code::UK_Break:\n diag = diag::warn_unreachable_break;"}} | ||
}, | }, | ||
["warn_unreachable_default"]={ | ["warn_unreachable_default"]={ | ||
Line 7,643: | Line 7,643: | ||
[e]=p, | [e]=p, | ||
[i]={"645ae0ce10cb",1327169527,"Add -Wswitch-enum-redundant-default."}, | [i]={"645ae0ce10cb",1327169527,"Add -Wswitch-enum-redundant-default."}, | ||
[j]={{R, | [j]={{R,1599,"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 if (TheDefaultStmt && UnhandledNames.empty() && ED->isClosedNonFlag())\n Diag(TheDefaultStmt->getDefaultLoc(), diag::warn_unreachable_default);"}} | ||
}, | }, | ||
["warn_unreachable_fallthrough_attr"]={ | ["warn_unreachable_fallthrough_attr"]={ | ||
Line 7,658: | Line 7,658: | ||
[e]=p, | [e]=p, | ||
[i]={Tb,1615397021,Sb}, | [i]={Tb,1615397021,Sb}, | ||
[j]={{D, | [j]={{D,82,"class UnreachableCodeHandler : public reachable_code::Callback {\n void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n if (HasFallThroughAttr && !S.getDiagnostics().isIgnored(diag::warn_unreachable_fallthrough_attr, SourceLocation()))"},{D,1140,"class FallthroughMapper : public RecursiveASTVisitor<FallthroughMapper> {\n bool checkFallThroughIntoBlock(const CFGBlock &B, int &AnnotatedCnt, bool IsTemplateInstantiation) {\n while (!BlockQueue.empty()) {\n if (!ReachableBlocks.count(P)) {\n for (const CFGElement &Elem : llvm::reverse(*P)) {\n if (std::optional<CFGStmt> CS = Elem.getAs<CFGStmt>()) {\n if (const AttributedStmt *AS = asFallThroughAttr(CS->getStmt())) {\n // Don\'t issue a warning for an unreachable fallthrough\n // attribute in template instantiations as it may not be\n // unreachable in all instantiations of the template.\n if (!IsTemplateInstantiation)\n S.Diag(AS->getBeginLoc(), diag::warn_unreachable_fallthrough_attr);"}} | ||
}, | }, | ||
["warn_unreachable_loop_increment"]={ | ["warn_unreachable_loop_increment"]={ | ||
Line 7,673: | Line 7,673: | ||
[e]=p, | [e]=p, | ||
[i]={"1421037ece1f",1395381756,"[-Wunreachable-code] add a specialized diagnostic for unreachable increment expressions of loops."}, | [i]={"1421037ece1f",1395381756,"[-Wunreachable-code] add a specialized diagnostic for unreachable increment expressions of loops."}, | ||
[j]={{D, | [j]={{D,103,"class UnreachableCodeHandler : public reachable_code::Callback {\n void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n case reachable_code::UK_Loop_Increment:\n diag = diag::warn_unreachable_loop_increment;"}} | ||
}, | }, | ||
["warn_unreachable_return"]={ | ["warn_unreachable_return"]={ | ||
Line 7,688: | Line 7,688: | ||
[e]=p, | [e]=p, | ||
[i]={"ad8753c00eac",1394862426,"Further refine -Wunreachable-code groups so that -Wno-unreachable-code-break doesn\'t turn off all un..."}, | [i]={"ad8753c00eac",1394862426,"Further refine -Wunreachable-code groups so that -Wno-unreachable-code-break doesn\'t turn off all un..."}, | ||
[j]={{D, | [j]={{D,100,"class UnreachableCodeHandler : public reachable_code::Callback {\n void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n case reachable_code::UK_Return:\n diag = diag::warn_unreachable_return;"}} | ||
}, | }, | ||
["warn_unsafe_buffer_operation"]={ | ["warn_unsafe_buffer_operation"]={ | ||
Line 7,703: | Line 7,703: | ||
[e]=w, | [e]=w, | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{D, | [j]={{D,2215,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n void handleUnsafeOperation(const Stmt *Operation, bool IsRelatedToDecl) override {\n if (IsRelatedToDecl) {\n } else {\n S.Diag(Loc, diag::warn_unsafe_buffer_operation) << MsgParam << Range;"},{D,2447,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(TranslationUnitDecl *TU) {\n // The Callback function that performs analyses:\n auto CallAnalyzers = [&](const Decl *Node) -> void {\n if (!Diags.isIgnored(diag::warn_unsafe_buffer_operation, Node->getBeginLoc()) || !Diags.isIgnored(diag::warn_unsafe_buffer_variable, Node->getBeginLoc())) {"},{D,2459,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(TranslationUnitDecl *TU) {\n if (!Diags.isIgnored(diag::warn_unsafe_buffer_operation, SourceLocation()) || !Diags.isIgnored(diag::warn_unsafe_buffer_variable, SourceLocation())) {"}} | ||
}, | }, | ||
["warn_unsafe_buffer_variable"]={ | ["warn_unsafe_buffer_variable"]={ | ||
Line 7,718: | Line 7,718: | ||
[e]=w, | [e]=w, | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{D, | [j]={{D,2227,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n void handleUnsafeVariableGroup(const VarDecl *Variable, const DefMapTy &VarGrpMap, FixItList &&Fixes) override {\n S.Diag(Variable->getLocation(), diag::warn_unsafe_buffer_variable) << Variable << (Variable->getType()->isPointerType() ? 0 : 1) << Variable->getSourceRange();"},{D,2449,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(TranslationUnitDecl *TU) {\n // The Callback function that performs analyses:\n auto CallAnalyzers = [&](const Decl *Node) -> void {\n if (!Diags.isIgnored(diag::warn_unsafe_buffer_operation, Node->getBeginLoc()) || !Diags.isIgnored(diag::warn_unsafe_buffer_variable, Node->getBeginLoc())) {"},{D,2460,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(TranslationUnitDecl *TU) {\n if (!Diags.isIgnored(diag::warn_unsafe_buffer_operation, SourceLocation()) || !Diags.isIgnored(diag::warn_unsafe_buffer_variable, SourceLocation())) {"}} | ||
}, | }, | ||
["warn_unsequenced_mod_mod"]={ | ["warn_unsequenced_mod_mod"]={ | ||
Line 7,732: | Line 7,732: | ||
[e]=p, | [e]=p, | ||
[i]={"c406cb736484",1358385476,"Add -Wunsequenced (with compatibility alias -Wsequence-point) to warn on"}, | [i]={"c406cb736484",1358385476,"Add -Wunsequenced (with compatibility alias -Wsequence-point) to warn on"}, | ||
[j]={{x, | [j]={{x,15948,"/// Visitor for expressions which looks for unsequenced operations on the\n/// same object.\nclass SequenceChecker : public ConstEvaluatedExprVisitor<SequenceChecker> {\n /// Check whether a modification or use of an object \\p O in an expression\n /// \\p UsageExpr conflicts with a prior usage of kind \\p OtherKind. \\p UI is\n /// the \\p UsageInfo for the object \\p O as obtained via the \\p UsageMap.\n /// \\p IsModMod is true when we are checking for a mod-mod unsequenced\n /// usage and false we are checking for a mod-use unsequenced usage.\n void checkUsage(Object O, UsageInfo &UI, const Expr *UsageExpr, UsageKind OtherKind, bool IsModMod) {\n SemaRef.DiagRuntimeBehavior(Mod->getExprLoc(), {Mod, ModOrUse}, SemaRef.PDiag(IsModMod ? diag::warn_unsequenced_mod_mod : diag::warn_unsequenced_mod_use) << O << SourceRange(ModOrUse->getExprLoc()));"}} | ||
}, | }, | ||
["warn_unsequenced_mod_use"]={ | ["warn_unsequenced_mod_use"]={ | ||
Line 7,746: | Line 7,746: | ||
[e]=p, | [e]=p, | ||
[i]={"c406cb736484",1358385476,"Add -Wunsequenced (with compatibility alias -Wsequence-point) to warn on"}, | [i]={"c406cb736484",1358385476,"Add -Wunsequenced (with compatibility alias -Wsequence-point) to warn on"}, | ||
[j]={{x, | [j]={{x,15949,"/// Visitor for expressions which looks for unsequenced operations on the\n/// same object.\nclass SequenceChecker : public ConstEvaluatedExprVisitor<SequenceChecker> {\n /// Check whether a modification or use of an object \\p O in an expression\n /// \\p UsageExpr conflicts with a prior usage of kind \\p OtherKind. \\p UI is\n /// the \\p UsageInfo for the object \\p O as obtained via the \\p UsageMap.\n /// \\p IsModMod is true when we are checking for a mod-mod unsequenced\n /// usage and false we are checking for a mod-use unsequenced usage.\n void checkUsage(Object O, UsageInfo &UI, const Expr *UsageExpr, UsageKind OtherKind, bool IsModMod) {\n SemaRef.DiagRuntimeBehavior(Mod->getExprLoc(), {Mod, ModOrUse}, SemaRef.PDiag(IsModMod ? diag::warn_unsequenced_mod_mod : diag::warn_unsequenced_mod_use) << O << SourceRange(ModOrUse->getExprLoc()));"}} | ||
}, | }, | ||
["warn_unsigned_abs"]={ | ["warn_unsigned_abs"]={ | ||
Line 7,760: | Line 7,760: | ||
[e]=p, | [e]=p, | ||
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."}, | [i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."}, | ||
[j]={{x, | [j]={{x,12025,"// Warn when using the wrong abs() function.\nvoid Sema::CheckAbsoluteValueFunction(const CallExpr *Call, const FunctionDecl *FDecl) {\n // Unsigned types cannot be negative. Suggest removing the absolute value\n // function call.\n if (ArgType->isUnsignedIntegerType()) {\n Diag(Call->getExprLoc(), diag::warn_unsigned_abs) << ArgType << ParamType;"},{"clang/utils/TableGen/ClangDiagnosticsEmitter.cpp",1410,"/// diag::warn_unsigned_abs,"}} | ||
}, | }, | ||
["warn_unsigned_always_true_comparison"]={ | ["warn_unsigned_always_true_comparison"]={ | ||
Line 7,775: | Line 7,775: | ||
[e]=p, | [e]=p, | ||
[i]={"bd1fc22043b7",1507839411,"[Sema] Diagnose tautological comparison with type\'s min/max values"}, | [i]={"bd1fc22043b7",1507839411,"[Sema] Diagnose tautological comparison with type\'s min/max values"}, | ||
[j]={{x, | [j]={{x,13890,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n // FIXME: We use a somewhat different formatting for the in-range cases and\n // cases involving boolean values for historical reasons. We should pick a\n // consistent way of presenting these diagnostics.\n if (!InRange || Other->isKnownToHaveBooleanValue()) {\n } else {\n unsigned Diag = (isKnownToHaveUnsignedValue(OriginalOther) && Value == 0) ? (HasEnumType(OriginalOther) ? diag::warn_unsigned_enum_always_true_comparison : IsCharTy ? diag::warn_unsigned_char_always_true_comparison : diag::warn_unsigned_always_true_comparison) : diag::warn_tautological_constant_compare;"}} | ||
}, | }, | ||
["warn_unsigned_bitfield_assigned_signed_enum"]={ | ["warn_unsigned_bitfield_assigned_signed_enum"]={ | ||
Line 7,790: | Line 7,790: | ||
[e]=Rb, | [e]=Rb, | ||
[i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values"}, | [i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values"}, | ||
[j]={{x, | [j]={{x,14084,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n if (!OriginalInit->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n // The RHS is not constant. If the RHS has an enum type, make sure the\n // bitfield is wide enough to hold all the values of the enum without\n // truncation.\n if (const auto *EnumTy = OriginalInit->getType()->getAs<EnumType>()) {\n if (SignedEnum && !SignedBitfield) {\n DiagID = diag::warn_unsigned_bitfield_assigned_signed_enum;"}} | ||
}, | }, | ||
["warn_unsigned_char_always_true_comparison"]={ | ["warn_unsigned_char_always_true_comparison"]={ | ||
Line 7,805: | Line 7,805: | ||
[e]=p, | [e]=p, | ||
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"}, | [i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"}, | ||
[j]={{x, | [j]={{x,13889,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n // FIXME: We use a somewhat different formatting for the in-range cases and\n // cases involving boolean values for historical reasons. We should pick a\n // consistent way of presenting these diagnostics.\n if (!InRange || Other->isKnownToHaveBooleanValue()) {\n } else {\n unsigned Diag = (isKnownToHaveUnsignedValue(OriginalOther) && Value == 0) ? (HasEnumType(OriginalOther) ? diag::warn_unsigned_enum_always_true_comparison : IsCharTy ? diag::warn_unsigned_char_always_true_comparison : diag::warn_unsigned_always_true_comparison) : diag::warn_tautological_constant_compare;"}} | ||
}, | }, | ||
["warn_unsigned_enum_always_true_comparison"]={ | ["warn_unsigned_enum_always_true_comparison"]={ | ||
Line 7,820: | Line 7,820: | ||
[e]=p, | [e]=p, | ||
[i]={"bd1fc22043b7",1507839411,"[Sema] Diagnose tautological comparison with type\'s min/max values"}, | [i]={"bd1fc22043b7",1507839411,"[Sema] Diagnose tautological comparison with type\'s min/max values"}, | ||
[j]={{x, | [j]={{x,13888,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n // FIXME: We use a somewhat different formatting for the in-range cases and\n // cases involving boolean values for historical reasons. We should pick a\n // consistent way of presenting these diagnostics.\n if (!InRange || Other->isKnownToHaveBooleanValue()) {\n } else {\n unsigned Diag = (isKnownToHaveUnsignedValue(OriginalOther) && Value == 0) ? (HasEnumType(OriginalOther) ? diag::warn_unsigned_enum_always_true_comparison : IsCharTy ? diag::warn_unsigned_char_always_true_comparison : diag::warn_unsigned_always_true_comparison) : diag::warn_tautological_constant_compare;"}} | ||
}, | }, | ||
["warn_unsupported_branch_protection"]={ | ["warn_unsupported_branch_protection"]={ | ||
Line 7,834: | Line 7,834: | ||
[e]=w, | [e]=w, | ||
[i]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths."}, | [i]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths."}, | ||
[j]={{"clang/lib/Driver/ToolChains/Clang.cpp", | [j]={{"clang/lib/Driver/ToolChains/Clang.cpp",1618,"static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool isAArch64) {\n if (A->getOption().matches(options::OPT_msign_return_address_EQ)) {\n } else {\n if (!isAArch64 && PBP.Key == \"b_key\")\n D.Diag(diag::warn_unsupported_branch_protection) << \"b-key\" << A->getAsString(Args);"}} | ||
}, | }, | ||
["warn_unsupported_branch_protection_spec"]={ | ["warn_unsupported_branch_protection_spec"]={ | ||
Line 7,848: | Line 7,848: | ||
[e]=p, | [e]=p, | ||
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | [i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | ||
[j]={{B, | [j]={{B,3463,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n if (!DiagMsg.empty())\n Diag(LiteralLoc, diag::warn_unsupported_branch_protection_spec) << DiagMsg;"}} | ||
}, | }, | ||
["warn_unsupported_lifetime_extension"]={ | ["warn_unsupported_lifetime_extension"]={ | ||
Line 7,862: | Line 7,862: | ||
[e]=p, | [e]=p, | ||
[i]={"0e3102d1dc04",1532393708,"Warn if a local variable\'s initializer retains a pointer/reference to a"}, | [i]={"0e3102d1dc04",1532393708,"Warn if a local variable\'s initializer retains a pointer/reference to a"}, | ||
[j]={{vb, | [j]={{vb,8143,"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::ShouldExtend:\n Diag(DiagLoc, diag::warn_unsupported_lifetime_extension) << RK << DiagRange;"}} | ||
}, | }, | ||
["warn_unsupported_target_attribute"]={ | ["warn_unsupported_target_attribute"]={ | ||
Line 7,876: | Line 7,876: | ||
[e]=p, | [e]=p, | ||
[i]={"789a7ad1a855",1434072965,"Add a warning for unsupported elements of the target attribute."}, | [i]={"789a7ad1a855",1434072965,"Add a warning for unsupported elements of the target attribute."}, | ||
[j]={{B, | [j]={{B,3417,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n if (AttrStr.contains(\"fpmath=\"))\n return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << \"fpmath=\" << Target;"},{B,3423,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n // Diagnose use of tune if target doesn\'t support it.\n if (!Context.getTargetInfo().supportsTargetAttributeTune() && AttrStr.contains(\"tune=\"))\n return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << \"tune=\" << Target;"},{B,3431,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n if (!ParsedAttrs.CPU.empty() && !Context.getTargetInfo().isValidCPUName(ParsedAttrs.CPU))\n return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unknown << CPU << ParsedAttrs.CPU << Target;"},{B,3436,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n if (!ParsedAttrs.Tune.empty() && !Context.getTargetInfo().isValidCPUName(ParsedAttrs.Tune))\n return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unknown << Tune << ParsedAttrs.Tune << Target;"},{B,3440,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n if (ParsedAttrs.Duplicate != \"\")\n return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Duplicate << None << ParsedAttrs.Duplicate << Target;"},{B,3446,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n for (const auto &Feature : ParsedAttrs.Features) {\n if (!Context.getTargetInfo().isValidFeatureName(CurFeature))\n return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << CurFeature << Target;"},{B,3457,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n if (!Context.getTargetInfo().validateBranchProtection(ParsedAttrs.BranchProtection, ParsedAttrs.CPU, BPI, DiagMsg)) {\n if (DiagMsg.empty())\n return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << \"branch-protection\" << Target;"},{B,3483,"// Check Target Version attrs\nbool Sema::checkTargetVersionAttr(SourceLocation LiteralLoc, StringRef &AttrStr, bool &isDefault) {\n for (auto &CurFeature : Features) {\n if (!Context.getTargetInfo().validateCpuSupports(CurFeature))\n return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << CurFeature << TargetVersion;"},{B,3526,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n // Warn on empty at the beginning of a string.\n if (Str.size() == 0)\n return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << \"\" << TargetClones;"},{B,3540,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n while (!Parts.second.empty()) {\n if (Cur.empty())\n return Diag(CurLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << \"\" << TargetClones;"},{B,3559,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n while (!Parts.second.empty()) {\n if (TInfo.getTriple().isAArch64()) {\n // AArch64 target clones specific\n if (Cur == \"default\") {\n } else {\n while (!CurParts.second.empty()) {\n if (!TInfo.validateCpuSupports(CurFeature)) {\n Diag(CurLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << CurFeature << TargetClones;"},{B,3591,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n while (!Parts.second.empty()) {\n if (TInfo.getTriple().isAArch64()) {\n } else {\n // Other targets ( currently X86 )\n if (Cur.startswith(\"arch=\")) {\n if (!Context.getTargetInfo().isValidCPUName(Cur.drop_front(sizeof(\"arch=\") - 1)))\n return Diag(CurLoc, diag::warn_unsupported_target_attribute) << Unsupported << CPU << Cur.drop_front(sizeof(\"arch=\") - 1) << TargetClones;"},{B,3598,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n while (!Parts.second.empty()) {\n if (TInfo.getTriple().isAArch64()) {\n } else {\n // Other targets ( currently X86 )\n if (Cur.startswith(\"arch=\")) {\n } else if (Cur == \"default\") {\n } else if (!Context.getTargetInfo().isValidFeatureName(Cur))\n return Diag(CurLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << Cur << TargetClones;"},{B,3607,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n if (Str.rtrim().endswith(\",\"))\n return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << \"\" << TargetClones;"}} | ||
}, | }, | ||
["warn_unused_but_set_parameter"]={ | ["warn_unused_but_set_parameter"]={ | ||
Line 7,891: | Line 7,891: | ||
[e]=p, | [e]=p, | ||
[i]={Tb,1615397021,Sb}, | [i]={Tb,1615397021,Sb}, | ||
[j]={{G, | [j]={{G,2205,"void Sema::DiagnoseUnusedButSetDecl(const VarDecl *VD, DiagReceiverTy DiagReceiver) {\n unsigned DiagID = isa<ParmVarDecl>(VD) ? diag::warn_unused_but_set_parameter : diag::warn_unused_but_set_variable;"}} | ||
}, | }, | ||
["warn_unused_but_set_variable"]={ | ["warn_unused_but_set_variable"]={ | ||
Line 7,906: | Line 7,906: | ||
[e]=X, | [e]=X, | ||
[i]={Tb,1615397021,Sb}, | [i]={Tb,1615397021,Sb}, | ||
[j]={{G, | [j]={{G,2206,"void Sema::DiagnoseUnusedButSetDecl(const VarDecl *VD, DiagReceiverTy DiagReceiver) {\n unsigned DiagID = isa<ParmVarDecl>(VD) ? diag::warn_unused_but_set_parameter : diag::warn_unused_but_set_variable;"}} | ||
}, | }, | ||
["warn_unused_call"]={ | ["warn_unused_call"]={ | ||
Line 7,920: | Line 7,920: | ||
[e]=X, | [e]=X, | ||
[i]={"1a6babf1f41c",1255409628,"make the diagnostic in the \'unused result\' warning more precise"}, | [i]={"1a6babf1f41c",1255409628,"make the diagnostic in the \'unused result\' warning more precise"}, | ||
[j]={{R, | [j]={{R,300,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n // If the callee has attribute pure, const, or warn_unused_result, warn with\n // a more specific message to make it clear what is happening. If the call\n // is written in a macro body, only warn if it has the warn_unused_result\n // attribute.\n if (const Decl *FD = CE->getCalleeDecl()) {\n if (FD->hasAttr<PureAttr>()) {\n Diag(Loc, diag::warn_unused_call) << R1 << R2 << \"pure\";"},{R,304,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n // If the callee has attribute pure, const, or warn_unused_result, warn with\n // a more specific message to make it clear what is happening. If the call\n // is written in a macro body, only warn if it has the warn_unused_result\n // attribute.\n if (const Decl *FD = CE->getCalleeDecl()) {\n if (FD->hasAttr<ConstAttr>()) {\n Diag(Loc, diag::warn_unused_call) << R1 << R2 << \"const\";"}} | ||
}, | }, | ||
["warn_unused_comma_left_operand"]={ | ["warn_unused_comma_left_operand"]={ | ||
Line 7,934: | Line 7,934: | ||
[e]=X, | [e]=X, | ||
[i]={Tb,1615397021,Sb}, | [i]={Tb,1615397021,Sb}, | ||
[j]={{z, | [j]={{z,14667,"// C99 6.5.17\nstatic QualType CheckCommaOperands(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n S.DiagnoseUnusedExprResult(LHS.get(), diag::warn_unused_comma_left_operand);"},{R,386,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n if (DiagID != diag::warn_unused_comma_left_operand || !isSFINAEContext())"}} | ||
}, | }, | ||
["warn_unused_comparison"]={ | ["warn_unused_comparison"]={ | ||
Line 7,948: | Line 7,948: | ||
[e]=X, | [e]=X, | ||
[i]={"e2669397f1cf",1313573677,"Treating the unused equality comparisons as something other than part of"}, | [i]={"e2669397f1cf",1313573677,"Treating the unused equality comparisons as something other than part of"}, | ||
[j]={{R, | [j]={{R,185,"/// Diagnose unused comparisons, both builtin and overloaded operators.\n/// For \'==\' and \'!=\', suggest fixits for \'=\' or \'|=\'.\n///\n/// Adding a cast to void (or other expression wrappers) will prevent the\n/// warning from firing.\nstatic bool DiagnoseUnusedComparison(Sema &S, const Expr *E) {\n S.Diag(Loc, diag::warn_unused_comparison) << (unsigned)Kind << E->getSourceRange();"}} | ||
}, | }, | ||
["warn_unused_const_variable"]={ | ["warn_unused_const_variable"]={ | ||
Line 7,963: | Line 7,963: | ||
[e]=X, | [e]=X, | ||
[i]={"c531daefd9cc",1378895855,"Split -Wunused-variable warning."}, | [i]={"c531daefd9cc",1378895855,"Split -Wunused-variable warning."}, | ||
[j]={{V, | [j]={{V,1401,"/// 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 there were errors, disable \'unused\' warnings since they will mostly be\n // noise. Don\'t warn for a use from a module: either we should warn on all\n // file-scope declarations in modules or not at all, but whether the\n // declaration is used is immaterial.\n if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n // Output warning for unused file scoped decls.\n for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n } else {\n if (DiagD->isReferenced()) {\n } else if (DiagD->getDescribedVarTemplate()) {\n } else if (DiagD->getType().isConstQualified()) {\n if (SM.getMainFileID() != SM.getFileID(DiagD->getLocation()) || !PP.getLangOpts().IsHeaderFile)\n Diag(DiagD->getLocation(), diag::warn_unused_const_variable) << DiagD << DiagRange;"}} | ||
}, | }, | ||
["warn_unused_constructor"]={ | ["warn_unused_constructor"]={ | ||
Line 7,977: | Line 7,977: | ||
[e]=X, | [e]=X, | ||
[i]={"46441fdb3c1d",1564067456,"Implement P1771"}, | [i]={"46441fdb3c1d",1564067456,"Implement P1771"}, | ||
[j]={{R, | [j]={{R,211,"static bool DiagnoseNoDiscard(Sema &S, const WarnUnusedResultAttr *A, SourceLocation Loc, SourceRange R1, SourceRange R2, bool IsCtor) {\n if (Msg.empty()) {\n if (IsCtor)\n return S.Diag(Loc, diag::warn_unused_constructor) << A << R1 << R2;"}} | ||
}, | }, | ||
["warn_unused_constructor_msg"]={ | ["warn_unused_constructor_msg"]={ | ||
Line 7,991: | Line 7,991: | ||
[e]=X, | [e]=X, | ||
[i]={"46441fdb3c1d",1564067456,"Implement P1771"}, | [i]={"46441fdb3c1d",1564067456,"Implement P1771"}, | ||
[j]={{R, | [j]={{R,216,"static bool DiagnoseNoDiscard(Sema &S, const WarnUnusedResultAttr *A, SourceLocation Loc, SourceRange R1, SourceRange R2, bool IsCtor) {\n if (IsCtor)\n return S.Diag(Loc, diag::warn_unused_constructor_msg) << A << Msg << R1 << R2;"}} | ||
}, | }, | ||
["warn_unused_container_subscript_expr"]={ | ["warn_unused_container_subscript_expr"]={ | ||
Line 8,005: | Line 8,005: | ||
[e]=X, | [e]=X, | ||
[i]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"}, | [i]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"}, | ||
[j]={{R, | [j]={{R,345,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n if (const ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(E)) {\n } else if (const PseudoObjectExpr *POE = dyn_cast<PseudoObjectExpr>(E)) {\n if (isa<ObjCSubscriptRefExpr>(Source))\n DiagID = diag::warn_unused_container_subscript_expr;"}} | ||
}, | }, | ||
["warn_unused_exception_param"]={ | ["warn_unused_exception_param"]={ | ||
Line 8,020: | Line 8,020: | ||
[e]=p, | [e]=p, | ||
[i]={"3f324d569bfc",1272912674,"Diagnose unused exception parameters under a different warning group"}, | [i]={"3f324d569bfc",1272912674,"Diagnose unused exception parameters under a different warning group"}, | ||
[j]={{G, | [j]={{G,2150,"/// DiagnoseUnusedDecl - Emit warnings about declarations that are not used\n/// unless they are marked attr(unused).\nvoid Sema::DiagnoseUnusedDecl(const NamedDecl *D, DiagReceiverTy DiagReceiver) {\n if (isa<VarDecl>(D) && cast<VarDecl>(D)->isExceptionVariable())\n DiagID = diag::warn_unused_exception_param;"}} | ||
}, | }, | ||
["warn_unused_expr"]={ | ["warn_unused_expr"]={ | ||
Line 8,034: | Line 8,034: | ||
[e]=X, | [e]=X, | ||
[i]={oc,1237025389,vc}, | [i]={oc,1237025389,vc}, | ||
[j]={{"clang/lib/Interpreter/Interpreter.cpp", | [j]={{"clang/lib/Interpreter/Interpreter.cpp",360,"llvm::Expected<PartialTranslationUnit &> Interpreter::Parse(llvm::StringRef Code) {\n getCompilerInstance()->getDiagnostics().setSeverity(clang::diag::warn_unused_expr, diag::Severity::Ignored, SourceLocation());"},{Lb,8843,"ExprResult Sema::ActOnFinishFullExpr(Expr *FE, SourceLocation CC, bool DiscardedValue, bool IsConstexpr, bool IsTemplateArgument) {\n if (DiscardedValue) {\n DiagnoseUnusedExprResult(FullExpr.get(), diag::warn_unused_expr);"}} | ||
}, | }, | ||
["warn_unused_function"]={ | ["warn_unused_function"]={ | ||
Line 8,049: | Line 8,049: | ||
[e]=X, | [e]=X, | ||
[i]={"90073804fb1c",1265933250,"Implementing unused function warning."}, | [i]={"90073804fb1c",1265933250,"Implementing unused function warning."}, | ||
[j]={{V, | [j]={{V,1378,"/// 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 there were errors, disable \'unused\' warnings since they will mostly be\n // noise. Don\'t warn for a use from a module: either we should warn on all\n // file-scope declarations in modules or not at all, but whether the\n // declaration is used is immaterial.\n if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n // Output warning for unused file scoped decls.\n for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n if (DiagD->isReferenced()) {\n } else {\n if (FD->getDescribedFunctionTemplate())\n else\n Diag(DiagD->getLocation(), isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function : diag::warn_unused_function) << DiagD << DiagRange;"}} | ||
}, | }, | ||
["warn_unused_label"]={ | ["warn_unused_label"]={ | ||
Line 8,064: | Line 8,064: | ||
[e]=X, | [e]=X, | ||
[i]={"72664df10386",1284931285,"Implement -Wunused-label."}, | [i]={"72664df10386",1284931285,"Implement -Wunused-label."}, | ||
[j]={{G, | [j]={{G,2152,"/// DiagnoseUnusedDecl - Emit warnings about declarations that are not used\n/// unless they are marked attr(unused).\nvoid Sema::DiagnoseUnusedDecl(const NamedDecl *D, DiagReceiverTy DiagReceiver) {\n if (isa<VarDecl>(D) && cast<VarDecl>(D)->isExceptionVariable())\n else if (isa<LabelDecl>(D))\n DiagID = diag::warn_unused_label;"}} | ||
}, | }, | ||
["warn_unused_lambda_capture"]={ | ["warn_unused_lambda_capture"]={ | ||
Line 8,079: | Line 8,079: | ||
[e]=X, | [e]=X, | ||
[i]={"87a036259bb4",1484319666,"[Sema] Add warning for unused lambda captures"}, | [i]={"87a036259bb4",1484319666,"[Sema] Add warning for unused lambda captures"}, | ||
[j]={{"clang/lib/Sema/SemaLambda.cpp", | [j]={{"clang/lib/Sema/SemaLambda.cpp",1879,"bool Sema::DiagnoseUnusedLambdaCapture(SourceRange CaptureRange, const Capture &From) {\n auto diag = Diag(From.getLocation(), diag::warn_unused_lambda_capture);"}} | ||
}, | }, | ||
["warn_unused_local_typedef"]={ | ["warn_unused_local_typedef"]={ | ||
Line 8,094: | Line 8,094: | ||
[e]=X, | [e]=X, | ||
[i]={"728894340f2a",1409966755,"Add -Wunused-local-typedef, a warning that finds unused local typedefs."}, | [i]={"728894340f2a",1409966755,"Add -Wunused-local-typedef, a warning that finds unused local typedefs."}, | ||
[j]={{V, | [j]={{V,1022,"void Sema::emitAndClearUnusedLocalTypedefWarnings() {\n for (const TypedefNameDecl *TD : UnusedLocalTypedefNameCandidates) {\n Diag(TD->getLocation(), diag::warn_unused_local_typedef) << isa<TypeAliasDecl>(TD) << TD->getDeclName();"}} | ||
}, | }, | ||
["warn_unused_member_function"]={ | ["warn_unused_member_function"]={ | ||
Line 8,109: | Line 8,109: | ||
[e]=p, | [e]=p, | ||
[i]={"beb71b315a89",1282082804,"Rename -Wunused-method -> -Wunused-member-function."}, | [i]={"beb71b315a89",1282082804,"Rename -Wunused-method -> -Wunused-member-function."}, | ||
[j]={{V, | [j]={{V,1377,"/// 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 there were errors, disable \'unused\' warnings since they will mostly be\n // noise. Don\'t warn for a use from a module: either we should warn on all\n // file-scope declarations in modules or not at all, but whether the\n // declaration is used is immaterial.\n if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n // Output warning for unused file scoped decls.\n for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n if (DiagD->isReferenced()) {\n } else {\n if (FD->getDescribedFunctionTemplate())\n else\n Diag(DiagD->getLocation(), isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function : diag::warn_unused_function) << DiagD << DiagRange;"}} | ||
}, | }, | ||
["warn_unused_parameter"]={ | ["warn_unused_parameter"]={ | ||
Line 8,124: | Line 8,124: | ||
[e]=p, | [e]=p, | ||
[i]={"c9c02ed8f499",1245455562,"Keep track of when declarations are \"used\" according to C and"}, | [i]={"c9c02ed8f499",1245455562,"Keep track of when declarations are \"used\" according to C and"}, | ||
[j]={{G, | [j]={{G,14854,"void Sema::DiagnoseUnusedParameters(ArrayRef<ParmVarDecl *> Parameters) {\n for (const ParmVarDecl *Parameter : Parameters) {\n if (!Parameter->isReferenced() && Parameter->getDeclName() && !Parameter->hasAttr<UnusedAttr>()) {\n Diag(Parameter->getLocation(), diag::warn_unused_parameter) << Parameter->getDeclName();"}} | ||
}, | }, | ||
["warn_unused_private_field"]={ | ["warn_unused_private_field"]={ | ||
Line 8,139: | Line 8,139: | ||
[e]=X, | [e]=X, | ||
[i]={"0baec549a3f4",1338971524,"Introduce -Wunused-private-field. If enabled, this warning detects"}, | [i]={"0baec549a3f4",1338971524,"Introduce -Wunused-private-field. If enabled, this warning detects"}, | ||
[j]={{V, | [j]={{V,1413,"/// 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_unused_private_field, SourceLocation())) {"},{V,1422,"/// 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_unused_private_field, SourceLocation())) {\n for (const NamedDecl *D : UnusedPrivateFields) {\n if (RD && !RD->isUnion() && IsRecordFullyDefined(RD, RecordsComplete, MNCComplete)) {\n Diag(D->getLocation(), diag::warn_unused_private_field) << D->getDeclName();"},{Y,3704,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n if (isInstField) {\n if (!Diags.isIgnored(diag::warn_unused_private_field, FD->getLocation())) {"}} | ||
}, | }, | ||
["warn_unused_property_backing_ivar"]={ | ["warn_unused_property_backing_ivar"]={ | ||
Line 8,154: | Line 8,154: | ||
[e]=X, | [e]=X, | ||
[i]={"5e3429c39583",1382737490,"ObjectiveC: under -Wunused-property-ivar warn if property\'s"}, | [i]={"5e3429c39583",1382737490,"ObjectiveC: under -Wunused-property-ivar warn if property\'s"}, | ||
[j]={{N, | [j]={{N,5346,"void Sema::DiagnoseUnusedBackingIvarInAccessor(Scope *S, const ObjCImplementationDecl *ImplD) {\n for (const auto *CurMethod : ImplD->instance_methods()) {\n unsigned DIAG = diag::warn_unused_property_backing_ivar;"}} | ||
}, | }, | ||
["warn_unused_property_expr"]={ | ["warn_unused_property_expr"]={ | ||
Line 8,168: | Line 8,168: | ||
[e]=p, | [e]=p, | ||
[i]={"2ba5ca9d4fd5",1250441847,"Improve the diagnostic emitted when an unused ObjC property getter"}, | [i]={"2ba5ca9d4fd5",1250441847,"Improve the diagnostic emitted when an unused ObjC property getter"}, | ||
[j]={{R, | [j]={{R,347,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n if (const ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(E)) {\n } else if (const PseudoObjectExpr *POE = dyn_cast<PseudoObjectExpr>(E)) {\n if (isa<ObjCSubscriptRefExpr>(Source))\n else if (isa<ObjCPropertyRefExpr>(Source))\n DiagID = diag::warn_unused_property_expr;"}} | ||
}, | }, | ||
["warn_unused_result"]={ | ["warn_unused_result"]={ | ||
Line 8,182: | Line 8,182: | ||
[e]=X, | [e]=X, | ||
[i]={"a17cf6330fb7",1312499464,"Specialize diag::warn_unused_call for the \"warn_unused_result\" attribute, so"}, | [i]={"a17cf6330fb7",1312499464,"Specialize diag::warn_unused_call for the \"warn_unused_result\" attribute, so"}, | ||
[j]={{R, | [j]={{R,212,"static bool DiagnoseNoDiscard(Sema &S, const WarnUnusedResultAttr *A, SourceLocation Loc, SourceRange R1, SourceRange R2, bool IsCtor) {\n if (Msg.empty()) {\n return S.Diag(Loc, diag::warn_unused_result) << A << R1 << R2;"}} | ||
}, | }, | ||
["warn_unused_result_msg"]={ | ["warn_unused_result_msg"]={ | ||
Line 8,196: | Line 8,196: | ||
[e]=X, | [e]=X, | ||
[i]={"3bef014e7d79",1563609394,"Implement P1301R4, which allows specifying an optional message on the [[nodiscard]] attribute."}, | [i]={"3bef014e7d79",1563609394,"Implement P1301R4, which allows specifying an optional message on the [[nodiscard]] attribute."}, | ||
[j]={{R, | [j]={{R,218,"static bool DiagnoseNoDiscard(Sema &S, const WarnUnusedResultAttr *A, SourceLocation Loc, SourceRange R1, SourceRange R2, bool IsCtor) {\n return S.Diag(Loc, diag::warn_unused_result_msg) << A << Msg << R1 << R2;"}} | ||
}, | }, | ||
["warn_unused_result_typedef_unsupported_spelling"]={ | ["warn_unused_result_typedef_unsupported_spelling"]={ | ||
Line 8,210: | Line 8,210: | ||
[e]=p, | [e]=p, | ||
[i]={Qc,1620530452,Pc}, | [i]={Qc,1620530452,Pc}, | ||
[j]={{B, | [j]={{B,3182,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n if ((!AL.isGNUAttribute() && !(AL.isStandardAttributeSyntax() && AL.isClangScope())) && isa<TypedefNameDecl>(D)) {\n S.Diag(AL.getLoc(), diag::warn_unused_result_typedef_unsupported_spelling) << AL.isGNUScope();"}} | ||
}, | }, | ||
["warn_unused_template"]={ | ["warn_unused_template"]={ | ||
Line 8,225: | Line 8,225: | ||
[e]=p, | [e]=p, | ||
[i]={"64e1e1ea0a27",1494329141,"Reland \"Warn about unused static file scope function template declarations.\""}, | [i]={"64e1e1ea0a27",1494329141,"Reland \"Warn about unused static file scope function template declarations.\""}, | ||
[j]={{V, | [j]={{V,1373,"/// 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 there were errors, disable \'unused\' warnings since they will mostly be\n // noise. Don\'t warn for a use from a module: either we should warn on all\n // file-scope declarations in modules or not at all, but whether the\n // declaration is used is immaterial.\n if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n // Output warning for unused file scoped decls.\n for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n if (DiagD->isReferenced()) {\n } else {\n if (FD->getDescribedFunctionTemplate())\n Diag(DiagD->getLocation(), diag::warn_unused_template) << /*function=*/0 << DiagD << DiagRange;"},{V,1395,"/// 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 there were errors, disable \'unused\' warnings since they will mostly be\n // noise. Don\'t warn for a use from a module: either we should warn on all\n // file-scope declarations in modules or not at all, but whether the\n // declaration is used is immaterial.\n if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n // Output warning for unused file scoped decls.\n for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n } else {\n if (DiagD->isReferenced()) {\n } else if (DiagD->getDescribedVarTemplate()) {\n Diag(DiagD->getLocation(), diag::warn_unused_template) << /*variable=*/1 << DiagD << DiagRange;"}} | ||
}, | }, | ||
["warn_unused_variable"]={ | ["warn_unused_variable"]={ | ||
Line 8,240: | Line 8,240: | ||
[e]=X, | [e]=X, | ||
[i]={"3beaf9bbcdb3",1255037742,"Implement support for -Wunused-variable, from Oscar Bonilla!"}, | [i]={"3beaf9bbcdb3",1255037742,"Implement support for -Wunused-variable, from Oscar Bonilla!"}, | ||
[j]={{V, | [j]={{V,1404,"/// 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 there were errors, disable \'unused\' warnings since they will mostly be\n // noise. Don\'t warn for a use from a module: either we should warn on all\n // file-scope declarations in modules or not at all, but whether the\n // declaration is used is immaterial.\n if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n // Output warning for unused file scoped decls.\n for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n } else {\n if (DiagD->isReferenced()) {\n } else if (DiagD->getDescribedVarTemplate()) {\n } else if (DiagD->getType().isConstQualified()) {\n } else {\n Diag(DiagD->getLocation(), diag::warn_unused_variable) << DiagD << DiagRange;"},{G,2154,"/// DiagnoseUnusedDecl - Emit warnings about declarations that are not used\n/// unless they are marked attr(unused).\nvoid Sema::DiagnoseUnusedDecl(const NamedDecl *D, DiagReceiverTy DiagReceiver) {\n if (isa<VarDecl>(D) && cast<VarDecl>(D)->isExceptionVariable())\n else if (isa<LabelDecl>(D))\n else\n DiagID = diag::warn_unused_variable;"}} | ||
}, | }, | ||
["warn_unused_voidptr"]={ | ["warn_unused_voidptr"]={ | ||
Line 8,254: | Line 8,254: | ||
[e]=X, | [e]=X, | ||
[i]={"2351cb9139a4",1270592654,"Devote a special diagnostic to the typo"}, | [i]={"2351cb9139a4",1270592654,"Devote a special diagnostic to the typo"}, | ||
[j]={{R, | [j]={{R,369,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n }\n // Diagnose \"(void*) blah\" as a typo for \"(void) blah\".\n else if (const CStyleCastExpr *CE = dyn_cast<CStyleCastExpr>(E)) {\n // We really do want to use the non-canonical type here.\n if (T == Context.VoidPtrTy) {\n Diag(Loc, diag::warn_unused_voidptr) << FixItHint::CreateRemoval(TL.getStarLoc());"}} | ||
}, | }, | ||
["warn_unused_volatile"]={ | ["warn_unused_volatile"]={ | ||
Line 8,268: | Line 8,268: | ||
[e]=p, | [e]=p, | ||
[i]={"c11535c248cf",1337820425,"Add a warning to diagnose statements in C++ like \"*(volatile int*)x;\". Conceptually, this is part o..."}, | [i]={"c11535c248cf",1337820425,"Add a warning to diagnose statements in C++ like \"*(volatile int*)x;\". Conceptually, this is part o..."}, | ||
[j]={{R, | [j]={{R,379,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n // Tell the user to assign it into a variable to force a volatile load if this\n // isn\'t an array.\n if (E->isGLValue() && E->getType().isVolatileQualified() && !E->getType()->isArrayType()) {\n Diag(Loc, diag::warn_unused_volatile) << R1 << R2;"}} | ||
}, | }, | ||
["warn_use_in_invalid_state"]={ | ["warn_use_in_invalid_state"]={ | ||
Line 8,283: | Line 8,283: | ||
[e]=p, | [e]=p, | ||
[i]={"210791a021a1",1380922086,"Consumed Analysis: Change callable_when so that it can take a list of states"}, | [i]={"210791a021a1",1380922086,"Consumed Analysis: Change callable_when so that it can take a list of states"}, | ||
[j]={{D, | [j]={{D,2148,"class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {\n void warnUseInInvalidState(StringRef MethodName, StringRef VariableName, StringRef State, SourceLocation Loc) override {\n PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_use_in_invalid_state) << MethodName << VariableName << State);"}} | ||
}, | }, | ||
["warn_use_of_private_header_outside_module"]={ | ["warn_use_of_private_header_outside_module"]={ | ||
Line 8,297: | Line 8,297: | ||
[e]=C, | [e]=C, | ||
[i]={"11152dd55f7a",1424304628,"Allow errors on use of a private module header to be disabled, to better support incremental transit..."}, | [i]={"11152dd55f7a",1424304628,"Allow errors on use of a private module header to be disabled, to better support incremental transit..."}, | ||
[j]={{"clang/lib/Lex/ModuleMap.cpp", | [j]={{"clang/lib/Lex/ModuleMap.cpp",521,"void ModuleMap::diagnoseHeaderInclusion(Module *RequestingModule, bool RequestingModuleIsModuleInterface, SourceLocation FilenameLoc, StringRef Filename, FileEntryRef File) {\n // We have found a header, but it is private.\n if (Private) {\n Diags.Report(FilenameLoc, diag::warn_use_of_private_header_outside_module) << Filename;"}} | ||
}, | }, | ||
["warn_use_of_temp_in_invalid_state"]={ | ["warn_use_of_temp_in_invalid_state"]={ | ||
Line 8,312: | Line 8,312: | ||
[e]=p, | [e]=p, | ||
[i]={"210791a021a1",1380922086,"Consumed Analysis: Change callable_when so that it can take a list of states"}, | [i]={"210791a021a1",1380922086,"Consumed Analysis: Change callable_when so that it can take a list of states"}, | ||
[j]={{D, | [j]={{D,2140,"class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {\n void warnUseOfTempInInvalidState(StringRef MethodName, StringRef State, SourceLocation Loc) override {\n PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_use_of_temp_in_invalid_state) << MethodName << State);"}} | ||
}, | }, | ||
["warn_used_but_marked_unused"]={ | ["warn_used_but_marked_unused"]={ | ||
Line 8,327: | Line 8,327: | ||
[e]=p, | [e]=p, | ||
[i]={"73067a02db9a",1287790628,"Warn if a variable marked with the \"unused\" attribute is used. Patch by Darin Adler!"}, | [i]={"73067a02db9a",1287790628,"Warn if a variable marked with the \"unused\" attribute is used. Patch by Darin Adler!"}, | ||
[j]={{ib, | [j]={{ib,846,"void Sema::ActOnPragmaUnused(const Token &IdTok, Scope *curScope, SourceLocation PragmaLoc) {\n // Warn if this was used before being marked unused.\n if (VD->isUsed())\n Diag(PragmaLoc, diag::warn_used_but_marked_unused) << Name;"},{z,111,"static void DiagnoseUnusedOfDecl(Sema &S, NamedDecl *D, SourceLocation Loc) {\n // Warn if this is used but marked unused.\n if (const auto *A = D->getAttr<UnusedAttr>()) {\n // [[maybe_unused]] should not diagnose uses, but __attribute__((unused))\n // should diagnose them.\n if (A->getSemanticSpelling() != UnusedAttr::CXX11_maybe_unused && A->getSemanticSpelling() != UnusedAttr::C2x_maybe_unused) {\n if (DC && !DC->hasAttr<UnusedAttr>())\n S.Diag(Loc, diag::warn_used_but_marked_unused) << D;"}} | ||
}, | }, | ||
["warn_user_literal_reserved"]={ | ["warn_user_literal_reserved"]={ | ||
Line 8,341: | Line 8,341: | ||
[e]=p, | [e]=p, | ||
[i]={"86325ad2b521",1314744035,"Allow C99 hexfloats in C++0x mode. This change resolves the standards"}, | [i]={"86325ad2b521",1314744035,"Allow C99 hexfloats in C++0x mode. This change resolves the standards"}, | ||
[j]={{Y, | [j]={{Y,16507,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n if (Status != ReservedLiteralSuffixIdStatus::NotReserved && !getSourceManager().isInSystemHeader(FnDecl->getLocation())) {\n Diag(FnDecl->getLocation(), diag::warn_user_literal_reserved) << static_cast<int>(Status) << StringLiteralParser::isValidUDSuffix(getLangOpts(), II->getName());"}} | ||
}, | }, | ||
["warn_using_directive_in_header"]={ | ["warn_using_directive_in_header"]={ | ||
Line 8,356: | Line 8,356: | ||
[e]=p, | [e]=p, | ||
[i]={"96a4bddefbfc",1300464652,"Add an opt-in -Wheader-hygiene, which current diagnoses the use of"}, | [i]={"96a4bddefbfc",1300464652,"Add an opt-in -Wheader-hygiene, which current diagnoses the use of"}, | ||
[j]={{Y, | [j]={{Y,11986,"Decl *Sema::ActOnUsingDirective(Scope *S, SourceLocation UsingLoc, SourceLocation NamespcLoc, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *NamespcName, const ParsedAttributesView &AttrList) {\n if (!R.empty()) {\n if (IsUsingDirectiveInToplevelContext(CurContext) && !SourceMgr.isInMainFile(SourceMgr.getExpansionLoc(IdentLoc))) {\n Diag(IdentLoc, diag::warn_using_directive_in_header);"}} | ||
}, | }, | ||
["warn_utf8_symbol_homoglyph"]={ | ["warn_utf8_symbol_homoglyph"]={ | ||
Line 8,370: | Line 8,370: | ||
[e]=C, | [e]=C, | ||
[i]={"77091b167fd9",1513257308,"Warn if we find a Unicode homoglyph for a symbol in an identifier."}, | [i]={"77091b167fd9",1513257308,"Warn if we find a Unicode homoglyph for a symbol in an identifier."}, | ||
[j]={{Jb, | [j]={{Jb,1661,"/// After encountering UTF-8 character C and interpreting it as an identifier\n/// character, check whether it\'s a homoglyph for a common non-identifier\n/// source character that is unlikely to be an intentional identifier\n/// character and warn if so.\nstatic void maybeDiagnoseUTF8Homoglyph(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range) {\n if (Homoglyph->Character == C) {\n if (Homoglyph->LooksLike) {\n Diags.Report(Range.getBegin(), diag::warn_utf8_symbol_homoglyph) << Range << codepointAsHexString(C) << LooksLikeStr;"}} | ||
}, | }, | ||
["warn_utf8_symbol_zero_width"]={ | ["warn_utf8_symbol_zero_width"]={ | ||
Line 8,384: | Line 8,384: | ||
[e]=C, | [e]=C, | ||
[i]={"8ed7776bc404",1536348339,"PR38870: Add warning for zero-width unicode characters appearing in"}, | [i]={"8ed7776bc404",1536348339,"PR38870: Add warning for zero-width unicode characters appearing in"}, | ||
[j]={{Jb, | [j]={{Jb,1664,"/// After encountering UTF-8 character C and interpreting it as an identifier\n/// character, check whether it\'s a homoglyph for a common non-identifier\n/// source character that is unlikely to be an intentional identifier\n/// character and warn if so.\nstatic void maybeDiagnoseUTF8Homoglyph(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range) {\n if (Homoglyph->Character == C) {\n if (Homoglyph->LooksLike) {\n } else {\n Diags.Report(Range.getBegin(), diag::warn_utf8_symbol_zero_width) << Range << codepointAsHexString(C);"}} | ||
}, | }, | ||
["warn_va_start_type_is_undefined"]={ | ["warn_va_start_type_is_undefined"]={ | ||
Line 8,398: | Line 8,398: | ||
[e]=p, | [e]=p, | ||
[i]={"1de59c5d92b9",1461504621,"Improve diagnostic checking for va_start to also warn on other instances of undefined behavior, such..."}, | [i]={"1de59c5d92b9",1461504621,"Improve diagnostic checking for va_start to also warn on other instances of undefined behavior, such..."}, | ||
[j]={{x, | [j]={{x,8171,"/// Check the arguments to \'__builtin_va_start\' or \'__builtin_ms_va_start\'\n/// for validity. Emit an error and return true on failure; return false\n/// on success.\nbool Sema::SemaBuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall) {\n if (!SecondArgIsLastNamedArgument)\n else if (IsCRegister || Type->isReferenceType() || Type->isSpecificBuiltinType(BuiltinType::Float) || [=] {\n Diag(Arg->getBeginLoc(), diag::warn_va_start_type_is_undefined) << Reason;"}} | ||
}, | }, | ||
["warn_var_decl_not_read_only"]={ | ["warn_var_decl_not_read_only"]={ | ||
Line 8,412: | Line 8,412: | ||
[e]=p, | [e]=p, | ||
[i]={pb,1625925174,ob}, | [i]={pb,1625925174,ob}, | ||
[j]={{G, | [j]={{G,7438,"// This function emits warning and a corresponding note based on the\n// ReadOnlyPlacementAttr attribute. The warning checks that all global variable\n// declarations of an annotated type must be const qualified.\nvoid emitReadOnlyPlacementAttrWarning(Sema &S, const VarDecl *VD) {\n if (const auto *ConstDecl = RD->getAttr<ReadOnlyPlacementAttr>()) {\n S.Diag(VD->getLocation(), diag::warn_var_decl_not_read_only) << RD;"}} | ||
}, | }, | ||
["warn_var_deref_requires_any_lock"]={ | ["warn_var_deref_requires_any_lock"]={ | ||
Line 8,427: | Line 8,427: | ||
[e]=p, | [e]=p, | ||
[i]={"dd5fd87a6dfe",1314656871,"Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identif..."}, | [i]={"dd5fd87a6dfe",1314656871,"Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identif..."}, | ||
[j]={{D, | [j]={{D,1947,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n void handleNoMutexHeld(const NamedDecl *D, ProtectedOperationKind POK, AccessKind AK, SourceLocation Loc) override {\n unsigned DiagID = POK == POK_VarAccess ? diag::warn_variable_requires_any_lock : diag::warn_var_deref_requires_any_lock;"}} | ||
}, | }, | ||
["warn_var_deref_requires_lock"]={ | ["warn_var_deref_requires_lock"]={ | ||
Line 8,442: | Line 8,442: | ||
[e]=p, | [e]=p, | ||
[i]={"dd5fd87a6dfe",1314656871,"Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identif..."}, | [i]={"dd5fd87a6dfe",1314656871,"Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identif..."}, | ||
[j]={{D, | [j]={{D,1994,"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_VarDereference:\n DiagID = diag::warn_var_deref_requires_lock;"}} | ||
}, | }, | ||
["warn_var_deref_requires_lock_precise"]={ | ["warn_var_deref_requires_lock_precise"]={ | ||
Line 8,457: | Line 8,457: | ||
[e]=p, | [e]=p, | ||
[i]={"5ff1644e624e",1347307103,"Thread-safety analysis: differentiate between two forms of analysis; a precise"}, | [i]={"5ff1644e624e",1347307103,"Thread-safety analysis: differentiate between two forms of analysis; a precise"}, | ||
[j]={{D, | [j]={{D,1964,"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_VarDereference:\n DiagID = diag::warn_var_deref_requires_lock_precise;"}} | ||
}, | }, | ||
["warn_var_template_missing"]={ | ["warn_var_template_missing"]={ | ||
Line 8,471: | Line 8,471: | ||
[e]=p, | [e]=p, | ||
[i]={"7dcc97e7ac0a",1461046792,"Warn if function or variable cannot be implicitly instantiated"}, | [i]={"7dcc97e7ac0a",1461046792,"Warn if function or variable cannot be implicitly instantiated"}, | ||
[j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp", | [j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",5527,"/// Instantiate the definition of the given variable 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 variable, but it\'s close.\n///\n/// \\param Var the already-instantiated declaration of a templated variable.\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 a definition of the variable is required. Complain\n/// if there is no such definition.\nvoid Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation, VarDecl *Var, bool Recursive, bool DefinitionRequired, bool AtEndOfTU) {\n // If we don\'t have a definition of the variable template, we won\'t perform\n // any instantiation. Rather, we rely on the user to instantiate this\n // definition (or provide a specialization for it) in another translation\n // unit.\n if (!Def && !DefinitionRequired) {\n if (TSK == TSK_ExplicitInstantiationDefinition) {\n } else if (TSK == TSK_ImplicitInstantiation) {\n // Warn about missing definition at the end of translation unit.\n if (AtEndOfTU && !getDiagnostics().hasErrorOccurred() && !getSourceManager().isInSystemHeader(PatternDecl->getBeginLoc())) {\n Diag(PointOfInstantiation, diag::warn_var_template_missing) << Var;"}} | ||
}, | }, | ||
["warn_variable_requires_any_lock"]={ | ["warn_variable_requires_any_lock"]={ | ||
Line 8,486: | Line 8,486: | ||
[e]=p, | [e]=p, | ||
[i]={"dd5fd87a6dfe",1314656871,"Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identif..."}, | [i]={"dd5fd87a6dfe",1314656871,"Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identif..."}, | ||
[j]={{D, | [j]={{D,1946,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n void handleNoMutexHeld(const NamedDecl *D, ProtectedOperationKind POK, AccessKind AK, SourceLocation Loc) override {\n unsigned DiagID = POK == POK_VarAccess ? diag::warn_variable_requires_any_lock : diag::warn_var_deref_requires_any_lock;"}} | ||
}, | }, | ||
["warn_variable_requires_lock"]={ | ["warn_variable_requires_lock"]={ | ||
Line 8,501: | Line 8,501: | ||
[e]=p, | [e]=p, | ||
[i]={"dd5fd87a6dfe",1314656871,"Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identif..."}, | [i]={"dd5fd87a6dfe",1314656871,"Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identif..."}, | ||
[j]={{D, | [j]={{D,1991,"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_VarAccess:\n DiagID = diag::warn_variable_requires_lock;"}} | ||
}, | }, | ||
["warn_variable_requires_lock_precise"]={ | ["warn_variable_requires_lock_precise"]={ | ||
Line 8,516: | Line 8,516: | ||
[e]=p, | [e]=p, | ||
[i]={"5ff1644e624e",1347307103,"Thread-safety analysis: differentiate between two forms of analysis; a precise"}, | [i]={"5ff1644e624e",1347307103,"Thread-safety analysis: differentiate between two forms of analysis; a precise"}, | ||
[j]={{D, | [j]={{D,1961,"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_VarAccess:\n DiagID = diag::warn_variable_requires_lock_precise;"}} | ||
}, | }, | ||
["warn_variable_sized_ivar_visibility"]={ | ["warn_variable_sized_ivar_visibility"]={ | ||
Line 8,530: | Line 8,530: | ||
[e]=p, | [e]=p, | ||
[i]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C."}, | [i]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C."}, | ||
[j]={{N, | [j]={{N,3869,"static void DiagnoseVariableSizedIvars(Sema &S, ObjCContainerDecl *OCD) {\n // Check if variable sized ivar is in interface and visible to subclasses.\n if (!isa<ObjCInterfaceDecl>(OCD)) {\n for (auto *ivar : Ivars) {\n if (!ivar->isInvalidDecl() && IsVariableSizedType(ivar->getType())) {\n S.Diag(ivar->getLocation(), diag::warn_variable_sized_ivar_visibility) << ivar->getDeclName() << ivar->getType();"}} | ||
}, | }, | ||
["warn_variables_not_in_loop_body"]={ | ["warn_variables_not_in_loop_body"]={ | ||
Line 8,545: | Line 8,545: | ||
[e]=p, | [e]=p, | ||
[i]={"451a5db01baf",1335808890,"Add -Wloop-analysis. This warning will fire on for loops which the variables"}, | [i]={"451a5db01baf",1335808890,"Add -Wloop-analysis. This warning will fire on for loops which the variables"}, | ||
[j]={{R, | [j]={{R,1904,"void CheckForLoopConditionalStatement(Sema &S, Expr *Second, Expr *Third, Stmt *Body) {\n if (S.Diags.isIgnored(diag::warn_variables_not_in_loop_body, Second->getBeginLoc()))"},{R,1908,"void CheckForLoopConditionalStatement(Sema &S, Expr *Second, Expr *Third, Stmt *Body) {\n PartialDiagnostic PDiag = S.PDiag(diag::warn_variables_not_in_loop_body);"}} | ||
}, | }, | ||
["warn_vbase_moved_multiple_times"]={ | ["warn_vbase_moved_multiple_times"]={ | ||
Line 8,559: | Line 8,559: | ||
[e]=p, | [e]=p, | ||
[i]={"b2504bdc0d0e",1383539174,"Issue a diagnostic if an implicitly-defined move assignment operator would move"}, | [i]={"b2504bdc0d0e",1383539174,"Issue a diagnostic if an implicitly-defined move assignment operator would move"}, | ||
[j]={{Y, | [j]={{Y,15083,"/// Check if we\'re implicitly defining a move assignment operator for a class\n/// with virtual bases. Such a move assignment might move-assign the virtual\n/// base multiple times.\nstatic void checkMoveAssignmentForRepeatedMove(Sema &S, CXXRecordDecl *Class, SourceLocation CurrentLocation) {\n for (auto &BI : Class->bases()) {\n while (!Worklist.empty()) {\n if (BaseSpec->isVirtual()) {\n if (Existing && Existing != &BI) {\n S.Diag(CurrentLocation, diag::warn_vbase_moved_multiple_times) << Class << Base;"}} | ||
}, | }, | ||
["warn_vector_long_decl_spec_combination"]={ | ["warn_vector_long_decl_spec_combination"]={ | ||
Line 8,573: | Line 8,573: | ||
[e]=Qb, | [e]=Qb, | ||
[i]={"2233460de6ed",1265328742,"First stage of adding AltiVec support"}, | [i]={"2233460de6ed",1265328742,"First stage of adding AltiVec support"}, | ||
[j]={{"clang/lib/Sema/DeclSpec.cpp", | [j]={{"clang/lib/Sema/DeclSpec.cpp",1241,"/// 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 // Validate and finalize AltiVec vector declspec.\n if (TypeAltiVecVector) {\n if (TypeAltiVecBool) {\n } else if (TypeSpecType == TST_double) {\n } else if (TypeSpecType == TST_float) {\n } else if (getTypeSpecWidth() == TypeSpecifierWidth::Long) {\n // Vector long is unsupported for ZVector, or without VSX, and deprecated\n // for AltiVec.\n // It has also been historically deprecated on AIX (as an alias for\n // \"vector int\" in both 32-bit and 64-bit modes). It was then made\n // unsupported in the Clang-based XL compiler since the deprecated type\n // has a number of conflicting semantics and continuing to support it\n // is a disservice to users.\n if (S.getLangOpts().ZVector || !S.Context.getTargetInfo().hasFeature(\"vsx\") || S.Context.getTargetInfo().getTriple().isOSAIX())\n else\n S.Diag(TSWRange.getBegin(), diag::warn_vector_long_decl_spec_combination) << getSpecifierName((TST)TypeSpecType, Policy);"}} | ||
}, | }, | ||
["warn_vector_mode_deprecated"]={ | ["warn_vector_mode_deprecated"]={ | ||
Line 8,587: | Line 8,587: | ||
[e]=Qb, | [e]=Qb, | ||
[i]={"f278eb10b7da",1447927991,"PR10235: support for vector mode attributes + warning, by Dmitry Polukhin."}, | [i]={"f278eb10b7da",1447927991,"PR10235: support for vector mode attributes + warning, by Dmitry Polukhin."}, | ||
[j]={{B, | [j]={{B,4761,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n if (Str.size() >= 4 && Str[0] == \'V\') {\n if (VectorStringLength && !Str.substr(1, VectorStringLength).getAsInteger(10, VectorSize) && VectorSize.isPowerOf2()) {\n // Avoid duplicate warning from template instantiation.\n if (!InInstantiation)\n Diag(AttrLoc, diag::warn_vector_mode_deprecated);"}} | ||
}, | }, | ||
["warn_verbatim_block_end_without_start"]={ | ["warn_verbatim_block_end_without_start"]={ | ||
Line 8,602: | Line 8,602: | ||
[e]="Documentation Issue", | [e]="Documentation Issue", | ||
[i]={"76b91c343111",1353198631,"Documentation parsing: propely handle a lone \'\\endverbatim\' and emit a warning."}, | [i]={"76b91c343111",1353198631,"Documentation parsing: propely handle a lone \'\\endverbatim\' and emit a warning."}, | ||
[j]={{"clang/lib/AST/CommentParser.cpp", | [j]={{"clang/lib/AST/CommentParser.cpp",571,"BlockContentComment *Parser::parseParagraphOrBlockCommand() {\n while (true) {\n case tok::at_command: {\n if (Info->IsVerbatimBlockEndCommand) {\n Diag(Tok.getLocation(), diag::warn_verbatim_block_end_without_start) << Tok.is(tok::at_command) << Info->Name << SourceRange(Tok.getLocation(), Tok.getEndLocation());"}} | ||
}, | }, | ||
["warn_vla_used"]={ | ["warn_vla_used"]={ | ||
Line 8,617: | Line 8,617: | ||
[e]=p, | [e]=p, | ||
[i]={"6c926ccbd2bd",1358971371,"Implement -Wvla correctly"}, | [i]={"6c926ccbd2bd",1358971371,"Implement -Wvla correctly"}, | ||
[j]={{Q, | [j]={{Q,2583,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n if (getLangOpts().OpenCL) {\n } else if (getLangOpts().C99) {\n VLADiag = diag::warn_vla_used;"}} | ||
}, | }, | ||
["warn_void_pointer_to_enum_cast"]={ | ["warn_void_pointer_to_enum_cast"]={ | ||
Line 8,631: | Line 8,631: | ||
[e]=p, | [e]=p, | ||
[i]={cc,1576908663,bc}, | [i]={cc,1576908663,bc}, | ||
[j]={{Db, | [j]={{Db,3171,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // If either type is a pointer, the other type has to be either an\n // integer or a pointer.\n if (!DestType->isArithmeticType()) {\n } else if (!SrcType->isArithmeticType()) {\n if ((Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType)) && !DestType->isBooleanType()) {\n if (SrcType->isVoidPointerType())\n Diag = DestType->isEnumeralType() ? diag::warn_void_pointer_to_enum_cast : diag::warn_void_pointer_to_int_cast;"}} | ||
}, | }, | ||
["warn_void_pointer_to_int_cast"]={ | ["warn_void_pointer_to_int_cast"]={ | ||
Line 8,645: | Line 8,645: | ||
[e]=p, | [e]=p, | ||
[i]={cc,1576908663,bc}, | [i]={cc,1576908663,bc}, | ||
[j]={{Db, | [j]={{Db,2467,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n if (DestType->isIntegralType(Self.Context)) {\n // C++ 5.2.10p4: A pointer can be explicitly converted to any integral\n // type large enough to hold it; except in Microsoft mode, where the\n // integral type size doesn\'t matter (except we don\'t allow bool).\n if ((Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType))) {\n if (MicrosoftException) {\n unsigned Diag = SrcType->isVoidPointerType() ? diag::warn_void_pointer_to_int_cast : diag::warn_pointer_to_int_cast;"},{Db,3172,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // If either type is a pointer, the other type has to be either an\n // integer or a pointer.\n if (!DestType->isArithmeticType()) {\n } else if (!SrcType->isArithmeticType()) {\n if ((Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType)) && !DestType->isBooleanType()) {\n if (SrcType->isVoidPointerType())\n Diag = DestType->isEnumeralType() ? diag::warn_void_pointer_to_enum_cast : diag::warn_void_pointer_to_int_cast;"}} | ||
}, | }, | ||
["warn_wasm_dynamic_exception_spec_ignored"]={ | ["warn_wasm_dynamic_exception_spec_ignored"]={ | ||
Line 8,659: | Line 8,659: | ||
[e]=p, | [e]=p, | ||
[i]={cc,1576908663,bc}, | [i]={cc,1576908663,bc}, | ||
[j]={{"clang/lib/CodeGen/CGException.cpp", | [j]={{"clang/lib/CodeGen/CGException.cpp",498,"void CodeGenFunction::EmitStartEHSpec(const Decl *D) {\n // In C++17 and later, \'throw()\' aka EST_DynamicNone is treated the same way\n // as noexcept. In earlier standards, it is handled in this block, along with\n // \'throw(X...)\'.\n if (EST == EST_Dynamic || (EST == EST_DynamicNone && !getLangOpts().CPlusPlus17)) {\n // In Wasm EH we currently treat \'throw()\' in the same way as \'noexcept\'. In\n // case of throw with types, we ignore it and print a warning for now.\n // TODO Correctly handle exception specification in Wasm EH\n if (CGM.getLangOpts().hasWasmExceptions()) {\n if (EST == EST_DynamicNone)\n else\n CGM.getDiags().Report(D->getLocation(), diag::warn_wasm_dynamic_exception_spec_ignored) << FD->getExceptionSpecSourceRange();"},{"clang/lib/CodeGen/CGException.cpp",512,"void CodeGenFunction::EmitStartEHSpec(const Decl *D) {\n // In C++17 and later, \'throw()\' aka EST_DynamicNone is treated the same way\n // as noexcept. In earlier standards, it is handled in this block, along with\n // \'throw(X...)\'.\n if (EST == EST_Dynamic || (EST == EST_DynamicNone && !getLangOpts().CPlusPlus17)) {\n // Currently Emscripten EH only handles \'throw()\' but not \'throw\' with\n // types. \'throw()\' handling will be done in JS glue code so we don\'t need\n // to do anything in that case. Just print a warning message in case of\n // throw with types.\n // TODO Correctly handle exception specification in Emscripten EH\n if (getTarget().getCXXABI() == TargetCXXABI::WebAssembly && CGM.getLangOpts().getExceptionHandling() == LangOptions::ExceptionHandlingKind::None && EST == EST_Dynamic)\n CGM.getDiags().Report(D->getLocation(), diag::warn_wasm_dynamic_exception_spec_ignored) << FD->getExceptionSpecSourceRange();"}} | ||
}, | }, | ||
["warn_weak_identifier_undeclared"]={ | ["warn_weak_identifier_undeclared"]={ | ||
Line 8,671: | Line 8,671: | ||
[e]=p, | [e]=p, | ||
[i]={"7d470f3466c0",1248923739,"PR3679 - handle #pragma weak"}, | [i]={"7d470f3466c0",1248923739,"PR3679 - handle #pragma weak"}, | ||
[j]={{V, | [j]={{V,1190,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n for (const auto &WeakIDs : WeakUndeclaredIdentifiers) {\n if (PrevDecl != nullptr && !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))\n else\n for (const auto &WI : WeakIDs.second)\n Diag(WI.getLocation(), diag::warn_weak_identifier_undeclared) << WeakIDs.first;"}} | ||
}, | }, | ||
["warn_weak_import"]={ | ["warn_weak_import"]={ | ||
Line 8,683: | Line 8,683: | ||
[e]=p, | [e]=p, | ||
[i]={"33e022650ade",1308780530,"Issue warning if weak_import attribute is added to an already"}, | [i]={"33e022650ade",1308780530,"Issue warning if weak_import attribute is added to an already"}, | ||
[j]={{G, | [j]={{G,4592,"/// 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 // Warn if an already-declared variable is made a weak_import in a subsequent\n // declaration\n if (New->hasAttr<WeakImportAttr>() && Old->getStorageClass() == SC_None && !Old->hasAttr<WeakImportAttr>()) {\n Diag(New->getLocation(), diag::warn_weak_import) << New->getDeclName();"}} | ||
}, | }, | ||
["warn_weak_template_vtable"]={ | ["warn_weak_template_vtable"]={ | ||
Line 8,712: | Line 8,712: | ||
[e]=p, | [e]=p, | ||
[i]={"0da714a3e216",1265423230,"Implement a warning diagnostic for weak vtables. Fixes PR6116."}, | [i]={"0da714a3e216",1265423230,"Implement a warning diagnostic for weak vtables. Fixes PR6116."}, | ||
[j]={{Y, | [j]={{Y,18396,"bool Sema::DefineUsedVTables() {\n for (unsigned I = 0; I != VTableUses.size(); ++I) {\n // Warn if we\'re emitting a weak vtable. The vtable will be weak if there is\n // no key function or the key function is inlined. Don\'t warn in C++ ABIs\n // that lack key functions, since the user won\'t be able to make one.\n if (Context.getTargetInfo().getCXXABI().hasKeyFunctions() && Class->isExternallyVisible() && ClassTSK != TSK_ImplicitInstantiation && ClassTSK != TSK_ExplicitInstantiationDefinition) {\n if (!KeyFunction || (KeyFunction->hasBody(KeyFunctionDef) && KeyFunctionDef->isInlined()))\n Diag(Class->getLocation(), diag::warn_weak_vtable) << Class;"}} | ||
}, | }, | ||
["warn_wrong_absolute_value_type"]={ | ["warn_wrong_absolute_value_type"]={ | ||
Line 8,726: | Line 8,726: | ||
[e]=p, | [e]=p, | ||
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."}, | [i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."}, | ||
[j]={{x, | [j]={{x,12079,"// Warn when using the wrong abs() function.\nvoid Sema::CheckAbsoluteValueFunction(const CallExpr *Call, const FunctionDecl *FDecl) {\n Diag(Call->getExprLoc(), diag::warn_wrong_absolute_value_type) << FDecl << ParamValueKind << ArgValueKind;"},{"clang/utils/TableGen/ClangDiagnosticsEmitter.cpp",1411,"/// diag::warn_wrong_absolute_value_type,"}} | ||
}, | }, | ||
["warn_wrong_clang_attr_namespace"]={ | ["warn_wrong_clang_attr_namespace"]={ | ||
Line 8,740: | Line 8,740: | ||
[e]=A, | [e]=A, | ||
[i]={"c44c17424628",1541783985,"Introduce the _Clang scoped attribute token."}, | [i]={"c44c17424628",1541783985,"Introduce the _Clang scoped attribute token."}, | ||
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp", | [j]={{"clang/lib/Parse/ParseDeclCXX.cpp",4257,"/// Try to parse an \'identifier\' which appears within an attribute-token.\n///\n/// \\return the parsed identifier on success, and 0 if the next token is not an\n/// attribute-token.\n///\n/// C++11 [dcl.attr.grammar]p3:\n/// If a keyword or an alternative token that satisfies the syntactic\n/// requirements of an identifier is contained in an attribute-token,\n/// it is considered an identifier.\nIdentifierInfo *Parser::TryParseCXX11AttributeIdentifier(SourceLocation &Loc, Sema::AttributeCompletion Completion, const IdentifierInfo *Scope) {\n case tok::numeric_constant: {\n // If we got a numeric constant, check to see if it comes from a macro that\n // corresponds to the predefined __clang__ macro. If it does, warn the user\n // and recover by pretending they said _Clang instead.\n if (Tok.getLocation().isMacroID()) {\n if (Spelling == \"__clang__\") {\n Diag(Tok, diag::warn_wrong_clang_attr_namespace) << FixItHint::CreateReplacement(TokRange, \"_Clang\");"}} | ||
}, | }, | ||
["warn_xor_used_as_pow"]={ | ["warn_xor_used_as_pow"]={ | ||
Line 8,754: | Line 8,754: | ||
[e]=p, | [e]=p, | ||
[i]={hc,1567434909,zc}, | [i]={hc,1567434909,zc}, | ||
[j]={{z, | [j]={{z,13680,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n if (Overflow) {\n if (RightSideIntValue < 64)\n else if (RightSideIntValue == 64)\n S.Diag(Loc, diag::warn_xor_used_as_pow) << ExprStr << toString(XorValue, 10, true);"}} | ||
}, | }, | ||
["warn_xor_used_as_pow_base"]={ | ["warn_xor_used_as_pow_base"]={ | ||
Line 8,768: | Line 8,768: | ||
[e]=p, | [e]=p, | ||
[i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow"}, | [i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow"}, | ||
[j]={{z, | [j]={{z,13675,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n if (Overflow) {\n if (RightSideIntValue < 64)\n S.Diag(Loc, diag::warn_xor_used_as_pow_base) << ExprStr << toString(XorValue, 10, true) << (\"1LL << \" + RHSStr) << FixItHint::CreateReplacement(ExprRange, \"1LL << \" + RHSStr);"},{z,13694,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n } else if (LeftSideValue == 10) {\n S.Diag(Loc, diag::warn_xor_used_as_pow_base) << ExprStr << toString(XorValue, 10, true) << SuggestedValue << FixItHint::CreateReplacement(ExprRange, SuggestedValue);"}} | ||
}, | }, | ||
["warn_xor_used_as_pow_base_extra"]={ | ["warn_xor_used_as_pow_base_extra"]={ | ||
Line 8,782: | Line 8,782: | ||
[e]=p, | [e]=p, | ||
[i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow"}, | [i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow"}, | ||
[j]={{z, | [j]={{z,13687,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n if (Overflow) {\n } else {\n S.Diag(Loc, diag::warn_xor_used_as_pow_base_extra) << ExprStr << toString(XorValue, 10, true) << SuggestedExpr << toString(PowValue, 10, true) << FixItHint::CreateReplacement(ExprRange, (RightSideIntValue == 0) ? \"1\" : SuggestedExpr);"}} | ||
}, | }, | ||
["warn_zero_as_null_pointer_constant"]={ | ["warn_zero_as_null_pointer_constant"]={ | ||
Line 8,797: | Line 8,797: | ||
[e]=Ib, | [e]=Ib, | ||
[i]={"d7ba86b6bf54",1494000668,"Introduce Wzero-as-null-pointer-constant."}, | [i]={"d7ba86b6bf54",1494000668,"Introduce Wzero-as-null-pointer-constant."}, | ||
[j]={{V, | [j]={{V,598,"void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr *E) {\n if (Diags.isIgnored(diag::warn_zero_as_null_pointer_constant, E->getBeginLoc()))"},{V,623,"void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr *E) {\n Diag(E->getBeginLoc(), diag::warn_zero_as_null_pointer_constant) << FixItHint::CreateReplacement(E->getSourceRange(), \"nullptr\");"}} | ||
}, | }, | ||
["warn_zero_size_struct_union_compat"]={ | ["warn_zero_size_struct_union_compat"]={ | ||
Line 8,812: | Line 8,812: | ||
[e]=p, | [e]=p, | ||
[i]={"89578fd43981",1370698198,"Recognition of empty structures and unions is moved to semantic stage"}, | [i]={"89578fd43981",1370698198,"Recognition of empty structures and unions is moved to semantic stage"}, | ||
[j]={{G, | [j]={{G,19128,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // Okay, we successfully defined \'Record\'.\n if (Record) {\n if (CheckForZeroSize) {\n // Empty structs are an extension in C (C99 6.7.2.1p7). They are\n // allowed in C++, but warn if its declaration is inside\n // extern \"C\" block.\n if (ZeroSize) {\n Diag(RecLoc, getLangOpts().CPlusPlus ? diag::warn_zero_size_struct_union_in_extern_c : diag::warn_zero_size_struct_union_compat) << IsEmpty << Record->isUnion() << (NonBitFields > 1);"}} | ||
}, | }, | ||
["warn_zero_size_struct_union_in_extern_c"]={ | ["warn_zero_size_struct_union_in_extern_c"]={ | ||
Line 8,826: | Line 8,826: | ||
[e]=p, | [e]=p, | ||
[i]={"3cb8022849b9",1384395183,"Added warning on structures/unions that are empty or contain only"}, | [i]={"3cb8022849b9",1384395183,"Added warning on structures/unions that are empty or contain only"}, | ||
[j]={{G, | [j]={{G,19127,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // Okay, we successfully defined \'Record\'.\n if (Record) {\n if (CheckForZeroSize) {\n // Empty structs are an extension in C (C99 6.7.2.1p7). They are\n // allowed in C++, but warn if its declaration is inside\n // extern \"C\" block.\n if (ZeroSize) {\n Diag(RecLoc, getLangOpts().CPlusPlus ? diag::warn_zero_size_struct_union_in_extern_c : diag::warn_zero_size_struct_union_compat) << IsEmpty << Record->isUnion() << (NonBitFields > 1);"}} | ||
} | } | ||
}; | }; |
edits