Module:ClangDiags/DiagsLongData9: Difference between revisions

Jump to navigation Jump to search
no edit summary
(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...")
 
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,1413,"bool CompilerInstance::loadModuleFile(StringRef FileName) {\n  bool ConfigMismatchIsRecoverable = getDiagnostics().getDiagnosticLevel(diag::warn_module_config_mismatch, SourceLocation()) <= DiagnosticsEngine::Warning;"},{Jc,1429,"bool CompilerInstance::loadModuleFile(StringRef FileName) {\n  case ASTReader::ConfigurationMismatch:\n    getDiagnostics().Report(SourceLocation(), diag::warn_module_config_mismatch) << FileName;"},{Jc,1543,"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;"}}
[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,1250,"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;"}}
[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",4247,"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;"}}
[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",2136,"/// 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;"}}
[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",576,"void TransformActions::reportWarning(StringRef message, SourceLocation loc, SourceRange range) { report(loc, diag::warn_mt_message, range) << message; }"},{"clang/unittests/Basic/DiagnosticTest.cpp",47,"// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.\nTEST(DiagnosticTest, suppressAndTrap) {\n  {\n    Diags.Report(diag::warn_mt_message) << \"warning\";"},{"clang/unittests/Basic/DiagnosticTest.cpp",71,"// 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\";"}}
[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",1622,"/// \\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);"}}
[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,2977,"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;"}}
[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,965,"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,975,"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()))"}}
[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,1900,"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);"}}
[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,5503,"/// 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;"}}
[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,1488,"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);"}}
[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,2643,"#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);"}}
[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,7020,"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;"}}
[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,7020,"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;"}}
[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,1555,"/// 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();"}}
[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,1533,"/// 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();"}}
[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,5920,"/// 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;"}}
[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,786,"/// 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;"}}
[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,2817,"/// 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;"}}
[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,1676,"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,1677,"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);"}}
[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",1176,"/// 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);"}}
[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,637,"/// 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);"}}
[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,12564,"/// 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;"}}
[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,1653,"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;"}}
[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,1983,"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,6961,"/// 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);"}}
[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,5036,"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,5043,"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);"}}
[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,166,"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,9041,"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,7641,"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();"}}
[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",1325,"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;"}}
[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,1988,"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;"}}
[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,1988,"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;"}}
[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,1943,"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;"}}
[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,1943,"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;"}}
[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",2681,"/// 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();"}}
[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",471,"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;"}}
[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",471,"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;"}}
[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,10262,"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);"}}
[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,3741,"/// 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,13768,"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,13776,"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;"}}
[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,5952,"/// 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);"}}
[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,13781,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  auto ComplainAboutNonnullParamOrCall = [&](const Attr *NonnullAttr) {\n    unsigned DiagID = IsCompare ? diag::warn_nonnull_expr_compare : diag::warn_cast_nonnull_to_bool;"}}
[j]={{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,567,"struct CheckFallThroughDiagnostics {\n  bool checkDiagnostics(DiagnosticsEngine &D, bool ReturnsVoid, bool HasNoReturn) const {\n    if (funMode == Function) {\n      return (ReturnsVoid || D.isIgnored(diag::warn_maybe_falloff_nonvoid_function, FuncLoc)) && (!HasNoReturn || D.isIgnored(diag::warn_noreturn_function_has_return_expr, FuncLoc)) && (!ReturnsVoid || D.isIgnored(diag::warn_suggest_noreturn_block, FuncLoc));"},{R,3408,"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;"}}
[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,2150,"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);"}}
[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,12488,"// 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());"}}
[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,430,"/// 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();"}}
[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,1302,"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,1310,"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,1317,"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;"}}
[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,1394,"void Sema::DiagnoseAssignmentEnum(QualType DstType, QualType SrcType, Expr *SrcExpr) {\n  if (Diags.isIgnored(diag::warn_not_in_enum_assignment, SrcExpr->getExprLoc()))"},{R,1413,"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,1435,"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();"}}
[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,6280,"// 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;"}}
[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,7038,"/// 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);"}}
[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,1782,"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);"}}
[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,5181,"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,5191,"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,5195,"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,5261,"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,5324,"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,8038,"/// 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,8042,"/// 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,"}}
[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,5229,"bool Sema::checkNSReturnsRetainedReturnType(SourceLocation Loc, QualType QT) {\n  Diag(Loc, diag::warn_ns_attribute_wrong_return_type) << \"\'ns_returns_retained\'\" << 0 << 0;"},{B,5332,"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,5376,"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;"}}
[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,174,"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);"}}
[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,765,"/// 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);"}}
[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,2640,"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);"}}
[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,161,"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,165,"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;"}}
[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,6111,"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,5768,"/// 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();"}}
[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,9747,"// 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());"}}
[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,9756,"// 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();"}}
[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,13859,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  unsigned DiagID = IsCompare ? diag::warn_null_pointer_compare : diag::warn_impcast_pointer_to_bool;"}}
[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,1716,"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();"}}
[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,11573,"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();"}}
[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",1038,"/// 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));"}}
[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,6779,"/// 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);"}}
[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",761,"/// 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,6643,"/// 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);"}}
[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,4370,"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);"}}
[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,503,"void Sema::diagnoseNullableToNonnullConversion(QualType DstType, QualType SrcType, SourceLocation Loc) {\n  Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType;"}}
[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,3937,"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,3976,"/// 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;"}}
[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,3935,"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,3974,"/// 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;"}}
[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,476,"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();"}}
[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,6152,"/// 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,2067,"/// 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;"}}
[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,15768,"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,15782,"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,15792,"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;"}}
[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,12933,"/// 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();"}}
[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,13837,"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);"}}
[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,2572,"/// 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);"}}
[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,2572,"/// 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);"}}
[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,2585,"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,2593,"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;"}}
[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,590,"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();"}}
[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,1872,"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();"}}
[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,3261,"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,3270,"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;"}}
[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,3313,"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,3324,"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;"}}
[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,553,"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,555,"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,13630,"/// 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,13632,"/// 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);"}}
[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,559,"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,561,"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,613,"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,615,"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);"}}
[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,10787,"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();"}}
[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,13816,"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();"}}
[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,14218,"/// 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);"}}
[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,13320,"/// 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;"}}
[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,13330,"/// 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;"}}
[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,5563,"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);"}}
[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,2121,"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);"}}
[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,2245,"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);"}}
[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,2234,"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);"}}
[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,2230,"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);"}}
[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,2247,"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);"}}
[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",1481,"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);"}}
[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,2250,"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);"}}
[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,2008,"static void checkCocoaAPI(Sema &S, const ObjCMessageExpr *Msg) { applyCocoaAPICheck(S, Msg, diag::warn_objc_redundant_literal_use, edit::rewriteObjCRedundantCallWithLiteral); }"}}
[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,1219,"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), \" *\");"}}
[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,5390,"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,5395,"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;"}}
[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,3400,"// 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();"}}
[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,13845,"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);"}}
[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,2579,"/// 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);"}}
[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,10785,"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();"}}
[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,2038,"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);"}}
[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,1809,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  case diag::err_odr_different_num_template_parameters:\n    return diag::warn_odr_different_num_template_parameters;"}}
[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,1811,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  case diag::err_odr_different_template_parameter_kind:\n    return diag::warn_odr_different_template_parameter_kind;"}}
[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,3481,"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,3550,"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,1789,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  case diag::err_odr_field_type_inconsistent:\n    return diag::warn_odr_field_type_inconsistent;"}}
[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,3171,"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,1785,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  case diag::err_odr_function_type_inconsistent:\n    return diag::warn_odr_function_type_inconsistent;"}}
[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,3724,"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,1791,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  case diag::err_odr_ivar_type_inconsistent:\n    return diag::warn_odr_ivar_type_inconsistent;"}}
[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,1815,"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;"}}
[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,4008,"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,1797,"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;"}}
[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,4017,"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,1799,"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;"}}
[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,4000,"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,1795,"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;"}}
[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,4027,"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,1801,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  case diag::err_odr_objc_method_variadic_inconsistent:\n    return diag::warn_odr_objc_method_variadic_inconsistent;"}}
[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,4964,"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,1805,"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;"}}
[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,4879,"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,1803,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  case diag::err_odr_objc_property_type_inconsistent:\n    return diag::warn_odr_objc_property_type_inconsistent;"}}
[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,4604,"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,4834,"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,1793,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  case diag::err_odr_objc_superclass_inconsistent:\n    return diag::warn_odr_objc_superclass_inconsistent;"}}
[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,4972,"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,1807,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  case diag::err_odr_objc_synthesize_ivar_inconsistent:\n    return diag::warn_odr_objc_synthesize_ivar_inconsistent;"}}
[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,1813,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  case diag::err_odr_parameter_pack_non_pack:\n    return diag::warn_odr_parameter_pack_non_pack;"}}
[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,1787,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  case diag::err_odr_tag_type_inconsistent:\n    return diag::warn_odr_tag_type_inconsistent;"}}
[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,1783,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  case diag::err_odr_variable_multiple_def:\n    return diag::warn_odr_variable_multiple_def;"}}
[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,3824,"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,1781,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  case diag::err_odr_variable_type_inconsistent:\n    return diag::warn_odr_variable_type_inconsistent;"}}
[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,3662,"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);"}}
[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,3662,"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);"}}
[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,7290,"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();"}}
[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",3859,"/// 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);"}}
[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,13581,"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();"}}
[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,4301,"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());"}}
[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,807,"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);"}}
[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,940,"/// 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,942,"/// 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>\";"}}
[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,906,"/// 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);"}}
[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,917,"/// 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);"}}
[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,18874,"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);"}}
[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,5869,"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();"}}
[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,5864,"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();"}}
[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,695,"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;"}}
[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,721,"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);"}}
[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,830,"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);"}}
[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,977,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n  Diag(NameLoc, diag::warn_omp_declare_variant_ctx_not_a_set) << Name;"}}
[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,864,"/// 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,1034,"/// 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,1040,"/// 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,1055,"/// 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();"}}
[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,6019,"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();"}}
[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,5889,"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;"}}
[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,684,"static StringRef getNameFromIdOrString(Parser &P, Token &Tok, OMPContextLvl Lvl) {\n  P.Diag(Tok.getLocation(), diag::warn_omp_declare_variant_string_literal_or_identifier) << Lvl;"}}
[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,2847,"/// 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);"}}
[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,1571,"void Parser::skipUntilPragmaOpenMPEnd(OpenMPDirectiveKind DKind) {\n  Diag(Tok, diag::warn_omp_extra_tokens_at_eol) << getOpenMPDirectiveName(DKind);"}}
[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,16487,"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);"}}
[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,7068,"/// 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;"}}
[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,15799,"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);"}}
[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,1503,"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);"}}
[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,3021,"/// 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,3026,"/// 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\";"}}
[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,3685,"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);"}}
[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,3930,"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);"}}
[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,17149,"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;"}}
[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,18930,"static void checkDeclInTargetContext(SourceLocation SL, SourceRange SR, Sema &SemaRef, Decl *D) {\n  SemaRef.Diag(VD->getLocation(), diag::warn_omp_not_in_target_context);"}}
[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,4636,"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,4645,"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,4654,"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();"}}
[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,1365,"/// `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;"}}
[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,1381,"/// `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;"}}
[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,18837,"void Sema::DiagnoseUnterminatedOpenMPDeclareTarget() {\n  Diag(DTCI.Loc, diag::warn_omp_unterminated_declare_target) << getOpenMPDirectiveName(DTCI.Kind);"}}
[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,2684,"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;"}}
[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,1755,"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);"}}
[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,7297,"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();"}}
[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,1632,"// 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();"}}
[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",796,"/// 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();"}}
[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,11585,"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;"}}
[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",424,"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);"}}
[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,9802,"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()),"}}
[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,12303,"static int classifyConstantValue(Expr *Constant) {\n  // diag::warn_out_of_range_compare and diag::warn_tautological_bool_compare."},{x,12419,"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());"}}
[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,2001,"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());"}}
[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,13766,"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);"}}
[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,8798,"/// 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,8804,"/// 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);"}}
[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,15369,"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,112,"/// 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);"}}
[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,2087,"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)"}}
[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,2084,"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)"}}
[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,1991,"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)"}}
[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,6317,"/// 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;"}}
[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,1798,"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);"}}
[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,1805,"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);"}}
[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,12994,"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;"}}
[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,3387,"/// Produce an appropriate diagnostic for an ambiguity between a function\n/// declarator and a C++ direct-initializer.\nstatic void warnAboutAmbiguousFunction(Sema &S, Declarator &D, DeclaratorChunk &DeclType, QualType RT) {\n  S.Diag(DeclType.Loc, FTI.NumParams ? diag::warn_parens_disambiguated_as_function_declaration : diag::warn_empty_parens_are_function_decl) << ParenRange;"}}
[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,3527,"/// 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();"}}
[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,886,"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()\");"}}
[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,7163,"/// 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;"}}
[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,7161,"/// 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;"}}
[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,10801,"// 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;"}}
[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,9884,"/// 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();"}}
[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,11140,"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,11145,"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\");"}}
[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,1747,"// 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;"}}
[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,9898,"/// 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());"}}
[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,2736,"/// 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;"}}
[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,2131,"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,2738,"/// 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;"}}
[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",128,"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;"}}
[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,1074,"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;"}}
[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",533,"/// 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();"}}
[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,672,"/// 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,674,"/// 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();"}}
[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",1468,"/// 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",1476,"/// 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",1499,"/// 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);"}}
[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,465,"/// 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,830,"/// 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();"}}
[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,839,"void Preprocessor::HandlePragmaHdrstop(Token &Tok) {\n  if (Tok.is(tok::l_paren)) {\n    Diag(Tok.getLocation(), diag::warn_pp_hdrstop_filename_ignored);"}}
[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,405,"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;"}}
[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,1265,"/// 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;"}}
[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,2830,"/// 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();"}}
[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,2809,"/// 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);"}}
[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,315,"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);"}}
[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,2852,"/// 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);"}}
[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,252,"/// 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,256,"/// 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())) {"}}
[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,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          // 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;"}}
[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,1983,"// #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;"}}
[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,2008,"// #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;"}}
[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,15615,"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);"}}
[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,903,"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;"}}
[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,2734,"/// 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();"}}
[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,664,"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());"}}
[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,1034,"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,1049,"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,1097,"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,646,"void Parser::HandlePragmaDump() {\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok, diag::warn_pragma_debug_missing_argument) << \"dump\";"}}
[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,996,"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);"}}
[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,1127,"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,649,"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);"}}
[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,1115,"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,1133,"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();"}}
[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,1059,"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;"}}
[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,1342,"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,1344,"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;"}}
[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,1223,"/// 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,1331,"/// \"\\#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);"}}
[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,1211,"/// 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,1243,"/// 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);"}}
[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,1260,"/// 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);"}}
[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,1228,"/// 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,1236,"/// 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,1255,"/// 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);"}}
[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,1275,"/// 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;"}}
[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,1437,"/// \"\\#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,1474,"/// \"\\#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) << \")\";"}}
[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,1457,"/// \"\\#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;"}}
[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,1469,"/// \"\\#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);"}}
[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,911,"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;"}}
[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,3069,"/// 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,3258,"/// 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,3290,"/// 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,3317,"/// 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,3735,"/// 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,3773,"/// 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,3910,"/// 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,3912,"/// 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,3964,"/// 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,2239,"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;"}}
[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,3773,"/// 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\");"}}
[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,1136,"bool Parser::HandlePragmaMSAllocText(StringRef PragmaName, SourceLocation PragmaLocation) {\n  if (ExpectAndConsume(tok::comma, diag::warn_pragma_expected_comma, PragmaName))"},{r,3268,"// #pragma optimize(\"gsty\", on|off)\nbool Parser::HandlePragmaMSOptimize(StringRef PragmaName, SourceLocation PragmaLocation) {\n  if (ExpectAndConsume(tok::comma, diag::warn_pragma_expected_comma, PragmaName))"}}
[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,1142,"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,1741,"// #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,1750,"// #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,1989,"// #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,2125,"// #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,2138,"// #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,2181,"// #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,2189,"// #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,2231,"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,2352,"/// 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,2917,"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();"}}
[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,1054,"// #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;"}}
[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,2471,"/// 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\";"}}
[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,236,"// \"\\#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,881,"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,943,"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,1021,"// #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,1069,"// #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,1114,"bool Parser::HandlePragmaMSAllocText(StringRef PragmaName, SourceLocation PragmaLocation) {\n  if (ExpectAndConsume(tok::l_paren, diag::warn_pragma_expected_lparen, PragmaName))"},{r,1735,"// #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,1780,"// #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,1979,"// #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,2050,"// #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,2346,"/// 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,2429,"/// 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,3192,"/// 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,3223,"bool Parser::HandlePragmaMSFunction(StringRef PragmaName, SourceLocation PragmaLocation) {\n  if (ExpectAndConsume(tok::l_paren, diag::warn_pragma_expected_lparen, PragmaName))"},{r,3252,"// #pragma optimize(\"gsty\", on|off)\nbool Parser::HandlePragmaMSOptimize(StringRef PragmaName, SourceLocation PragmaLocation) {\n  if (ExpectAndConsume(tok::l_paren, diag::warn_pragma_expected_lparen, PragmaName))"}}
[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,895,"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,993,"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,1047,"// #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,1124,"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,3264,"// #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;"}}
[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,817,"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,2245,"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,2260,"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\");"}}
[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,970,"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,975,"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,1078,"// #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,2086,"// #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,2441,"/// 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\";"}}
[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,257,"// \"\\#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,928,"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,1001,"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,1058,"// #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,1102,"// #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,1155,"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,1746,"// #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,1854,"// #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,2015,"// #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,2482,"/// 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,3211,"/// 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,3242,"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,3283,"// #pragma optimize(\"gsty\", on|off)\nbool Parser::HandlePragmaMSOptimize(StringRef PragmaName, SourceLocation PragmaLocation) {\n  if (ExpectAndConsume(tok::r_paren, diag::warn_pragma_expected_rparen, PragmaName))"}}
[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,984,"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;"}}
[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,887,"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,984,"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,1132,"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;"}}
[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,956,"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,984,"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;"}}
[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,3256,"// #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;"}}
[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,833,"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;"}}
[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,263,"// \"\\#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,933,"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,1006,"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,1058,"// #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,1105,"// #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,1155,"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,1236,"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,1252,"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,1286,"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,1309,"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,1756,"// #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,1861,"// #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,1904,"// #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,2023,"// #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,2092,"// #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,2146,"// #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,2197,"// #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,2267,"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,2404,"/// 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,2488,"/// 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,2629,"/// 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,2888,"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,2930,"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,3096,"/// 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,3139,"/// 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,3160,"/// 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,3217,"/// 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,3242,"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,3292,"// #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,3440,"/// 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,3469,"// 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,3494,"// 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,3522,"// 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\";"}}
[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,1363,"void Preprocessor::emitFinalMacroWarning(const Token &Identifier, bool IsUndef) const {\n  Diag(Identifier, diag::warn_pragma_final_macro) << Identifier.getIdentifierInfo() << (IsUndef ? 0 : 1);"}}
[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,3305,"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,3316,"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);"}}
[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,98,"/// 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,229,"// \"\\#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,2546,"/// 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,2911,"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();"}}
[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,111,"void PragmaNamespace::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  if (!Handler) {\n    PP.Diag(Tok, diag::warn_pragma_ignored);"}}
[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,671,"void Preprocessor::HandlePragmaIncludeAlias(Token &Tok) {\n  if (Tok.isNot(tok::l_paren)) {\n    Diag(Tok, diag::warn_pragma_include_alias_expected) << \"(\";"},{H,693,"void Preprocessor::HandlePragmaIncludeAlias(Token &Tok) {\n  if (Tok.isNot(tok::comma)) {\n    Diag(Tok, diag::warn_pragma_include_alias_expected) << \",\";"},{H,712,"void Preprocessor::HandlePragmaIncludeAlias(Token &Tok) {\n  if (Tok.isNot(tok::r_paren)) {\n    Diag(Tok, diag::warn_pragma_include_alias_expected) << \")\";"}}
[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,685,"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,705,"void Preprocessor::HandlePragmaIncludeAlias(Token &Tok) {\n  if (ReplaceFilenameTok.is(tok::header_name)) {\n  } else {\n    Diag(Tok, diag::warn_pragma_include_alias_expected_filename);"}}
[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,725,"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;"}}
[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,727,"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;"}}
[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,1017,"// #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);"}}
[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,3202,"/// 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,3232,"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;"}}
[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,1096,"// #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,1809,"// #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,2475,"/// 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\";"}}
[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,3277,"// #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,3288,"// #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,3509,"// 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,3516,"// 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\'\";"}}
[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,916,"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();"}}
[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,1562,"/// 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",1275,"///    /* DiagArray1 */ diag::warn_pragma_message,"}}
[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,3272,"// #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\'\";"}}
[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,241,"// \"\\#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,253,"// \"\\#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);"}}
[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,1888,"// #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,1899,"// #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);"}}
[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,2290,"/// 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,2291,"/// 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,2292,"/// 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());"}}
[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,206,"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\";"}}
[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,1971,"// #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);"}}
[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,285,"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);"}}
[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,1830,"// #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,1840,"// #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);"}}
[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,390,"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);"}}
[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,404,"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);"}}
[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,385,"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);"}}
[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,313,"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);"}}
[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,304,"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,306,"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;"}}
[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,316,"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,498,"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,516,"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,620,"/// 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,635,"/// 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\""}}
[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,658,"/// 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();"}}
[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,1353,"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,1355,"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;"}}
[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,829,"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;"}}
[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,3157,"/// 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);"}}
[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,916,"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();"}}
[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,835,"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;"}}
[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,2070,"// #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);"}}
[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,698,"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());"}}
[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,692,"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());"}}
[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,1303,"/// \"\\#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,1372,"/// \"\\#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,1412,"/// \"\\#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) << \")\";"}}
[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,1382,"/// \"\\#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);"}}
[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,1320,"/// \"\\#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);"}}
[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,1340,"/// \"\\#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,1368,"/// \"\\#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);"}}
[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",3945,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  if (getLangOpts().CPlusPlus) {\n  } else {\n    Diag(OpenLoc, getLangOpts().C2x ? diag::warn_pre_c2x_compat_attributes : diag::warn_ext_c2x_attributes);"}}
[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,8223,"/// 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;"}}
[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,13686,"/// 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;"}}
[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,8223,"/// 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;"}}
[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,9657,"void CheckPrintfHandler::HandleObjCFlagsWithNonObjCConversion(const char *flagsStart, const char *flagsEnd, const char *conversionPosition) {\n  auto diag = diag::warn_printf_ObjCflags_without_ObjCConversion;"}}
[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,9585,"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()),"}}
[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,9607,"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()),"}}
[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,9421,"void UncoveredArgHandler::Diagnose(Sema &S, bool IsFunctionCall, const Expr *ArgExpr) {\n  PartialDiagnostic PDiag = S.PDiag(diag::warn_printf_data_arg_not_used);"}}
[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,9642,"void CheckPrintfHandler::HandleEmptyObjCModifierFlag(const char *startFlag, unsigned flagLen) {\n  EmitFormatDiagnostic(S.PDiag(diag::warn_printf_empty_objc_flag), getLocationOfByte(startFlag),"}}
[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,9386,"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());"}}
[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,10442,"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(),"}}
[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,9636,"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()),"}}
[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,9306,"void CheckFormatHandler::HandleIncompleteSpecifier(const char *startSpecifier, unsigned specifierLen) {\n  EmitFormatDiagnostic(S.PDiag(diag::warn_printf_incomplete_specifier), getLocationOfByte(startSpecifier),"}}
[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,9482,"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);"}}
[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,9650,"void CheckPrintfHandler::HandleInvalidObjCModifierFlag(const char *startFlag, unsigned flagLen) {\n  EmitFormatDiagnostic(S.PDiag(diag::warn_printf_invalid_objc_flag) << flag, getLocationOfByte(startFlag),"}}
[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,9827,"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()),"}}
[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,9630,"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()),"}}
[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,9623,"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()),"}}
[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,9482,"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);"}}
[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,12031,"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);"}}
[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",716,"void BackendConsumer::MisExpectDiagHandler(const llvm::DiagnosticInfoMisExpect &D) {\n  Diags.Report(Loc, diag::warn_profile_data_misexpect) << D.getMsg().str();"},{"clang/lib/Frontend/CompilerInvocation.cpp",3718,"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())) {"}}
[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",633,"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;"}}
[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",630,"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;"}}
[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",627,"void InstrProfStats::reportDiagnostics(DiagnosticsEngine &Diags, StringRef MainFile) {\n  if (VisitedInMainFile > 0 && VisitedInMainFile == MissingInMainFile) {\n    Diags.Report(diag::warn_profile_data_unprofiled) << MainFile;"}}
[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,1694,"/// 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());"}}
[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,412,"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);"}}
[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,346,"/// 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,1325,"/// 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,1332,"/// 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,1343,"/// 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,1347,"/// 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;"}}
[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,1195,"/// 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);"}}
[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,422,"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);"}}
[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,372,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Deprecated:\n    diag = !ObjCPropertyAccess ? diag::warn_deprecated : diag::warn_property_method_deprecated;"}}
[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,397,"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;"}}
[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,1360,"/// 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;"}}
[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,789,"/// 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);"}}
[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,1696,"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,1721,"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;"}}
[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,15337,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (index.isUnsigned() || !index.isNegative()) {\n    unsigned DiagID = ASE ? diag::warn_array_index_exceeds_bounds : diag::warn_ptr_arith_exceeds_bounds;"}}
[j]={{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,15258,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (IsUnboundedArray) {\n    if (index.isUnsigned() || !index.isNegative()) {\n      unsigned DiagID = ASE ? diag::warn_array_index_exceeds_max_addressable_bounds : diag::warn_ptr_arith_exceeds_max_addressable_bounds;"}}
[j]={{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,15345,"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;"}}
[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,2649,"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);"}}
[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,2916,"// 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,2928,"// 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,2941,"// 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,2956,"// 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());"}}
[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",745,"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);"}}
[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",2594,"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;"}}
[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,1323,"/// 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;"}}
[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,2139,"/// \\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)) {"}}
[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,2461,"/// 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)) {"}}
[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,3848,"/// 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;"}}
[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,6354,"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;"}}
[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,6345,"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;"}}
[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,7062,"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,8847,"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,17496,"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;"}}
[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,15179,"/// 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;"}}
[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,1809,"// 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,1836,"// 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;"}}
[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,7159,"/// 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;"}}
[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,3523,"/// 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);"}}
[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,3288,"class UninitializedFieldVisitor : public EvaluatedExprVisitor<UninitializedFieldVisitor> {\n  void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, bool AddressOf) {\n    unsigned diag = IsReference ? diag::warn_reference_field_is_uninit : diag::warn_field_is_uninit;"}}
[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,4327,"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()));"}}
[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,905,"/// 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;"}}
[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,149,"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;"}}
[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,151,"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;"}}
[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,9803,"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());"}}
[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,2861,"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()));"}}
[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,5422,"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,465,"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,512,"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);"}}
[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",152,"/// 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",244,"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;"}}
[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,7042,"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;"}}
[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,7044,"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;"}}
[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,7034,"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;"}}
[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,3567,"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;"}}
[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,1811,"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);"}}
[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,1818,"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);"}}
[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,12983,"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;"}}
[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,10480,"/// 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;"}}
[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,10478,"/// 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;"}}
[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,6833,"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);"}}
[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,2429,"/// 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);"}}
[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,7951,"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,7953,"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\";"}}
[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,10343,"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()),"}}
[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,10312,"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)); }"}}
[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,7666,"/// 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);"}}
[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,15006,"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());"}}
[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,14959,"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();"}}
[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,14959,"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();"}}
[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,13290,"/// 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();"}}
[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,13290,"/// 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();"}}
[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,16104,"/// 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,16141,"/// 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,16146,"/// 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();"}}
[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",2468,"///  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());"}}
[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,1598,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // When reporting on missing property setter/getter implementation in\n  // categories, do not report when they are declared in primary class,\n  // class\'s protocol, or one of it super classes. This is because,\n  // the class is going to implement them.\n  if (I == SMap.end() && (PrimaryClass == nullptr || !PrimaryClass->lookupPropertyAccessor(Method, C, Prop->isClassProperty()))) {\n    unsigned diag = isa<ObjCCategoryDecl>(CDecl) ? (Prop->isClassProperty() ? diag::warn_impl_required_in_category_for_class_property : diag::warn_setter_getter_impl_required_in_category) : (Prop->isClassProperty() ? diag::warn_impl_required_for_class_property : diag::warn_setter_getter_impl_required);"}}
[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,1598,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // When reporting on missing property setter/getter implementation in\n  // categories, do not report when they are declared in primary class,\n  // class\'s protocol, or one of it super classes. This is because,\n  // the class is going to implement them.\n  if (I == SMap.end() && (PrimaryClass == nullptr || !PrimaryClass->lookupPropertyAccessor(Method, C, Prop->isClassProperty()))) {\n    unsigned diag = isa<ObjCCategoryDecl>(CDecl) ? (Prop->isClassProperty() ? diag::warn_impl_required_in_category_for_class_property : diag::warn_setter_getter_impl_required_in_category) : (Prop->isClassProperty() ? diag::warn_impl_required_for_class_property : diag::warn_setter_getter_impl_required);"}}
[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,2848,"// 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,2883,"// 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;"}}
[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,10361,"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());"}}
[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,10390,"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());"}}
[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,10347,"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());"}}
[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,10414,"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();"}}
[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,10410,"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();"}}
[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,580,"/// 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);"}}
[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,1472,"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,3816,"/// 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,580,"/// 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,6997,"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,8410,"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);"}}
[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,12598,"/// 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;"}}
[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,3788,"/// 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();"}}
[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,3862,"/// 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;"}}
[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,11182,"/// 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,11216,"/// 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,16072,"/// 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))"}}
[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,11217,"/// 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);"}}
[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,11228,"/// 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());"}}
[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",2503,"// 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;"}}
[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",663,"/// 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);"}}
[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,4739,"static void DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef, const CXXConstructorDecl *Constructor, ArrayRef<CXXCtorInitializer *> Inits) {\n  // Introduce a new scope as SemaDiagnosticBuilder needs to be destroyed to\n  // emit the diagnostic before we can try adding notes.\n  {\n    Sema::SemaDiagnosticBuilder D = SemaRef.Diag(Inits[WarnIndexes.front() - 1]->getSourceLocation(), WarnIndexes.size() == 1 ? diag::warn_initializer_out_of_order : diag::warn_some_initializers_out_of_order);"}}
[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,750,"/// 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,874,"/// 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,2242,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  if (!Diags.isIgnored(diag::warn_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_sometimes_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_maybe_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_uninit_const_reference, D->getBeginLoc())) {"}}
[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,2144,"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);"}}
[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",2572,"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);"}}
[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,429,"void Sema::warnStackExhausted(SourceLocation Loc) {\n  // Only warn about this once.\n  if (!WarnedStackExhausted) {\n    Diag(Loc, diag::warn_stack_exhausted);"}}
[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,4702,"/// 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;"}}
[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,5783,"/// 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,5792,"/// 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;"}}
[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,14537,"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,14544,"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);"}}
[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",907,"/// 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",926,"/// 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;"}}
[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,6937,"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);"}}
[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,10532,"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());"}}
[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,11048,"// 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;"}}
[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,2935,"void PragmaSTDC_FENV_ROUNDHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  PP.Diag(Tok.getLocation(), diag::warn_stdc_fenv_round_not_supported);"}}
[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,2924,"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);"}}
[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,2947,"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,2975,"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;"}}
[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,1079,"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;"}}
[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,5069,"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\");"}}
[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,6512,"/// 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,6513,"/// 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;"}}
[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,10081,"/// 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,10083,"/// 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();"}}
[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,10043,"/// 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();"}}
[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,10961,"/// 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());"}}
[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,11357,"// 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;"}}
[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,11457,"// 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;"}}
[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,11452,"// 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,11459,"// 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;"}}
[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,11450,"// 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;"}}
[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,14541,"/// 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());"}}
[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,14498,"/// 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,14518,"/// 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,14557,"/// 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);"}}
[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,10315,"// 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();"}}
[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,5182,"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();"}}
[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,2819,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  if (MD->size_overridden_methods() > 0) {\n    if (isa<CXXDestructorDecl>(MD))\n      EmitDiag(diag::warn_inconsistent_destructor_marked_not_override_overriding, diag::warn_suggest_destructor_marked_not_override_overriding);"}}
[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,2821,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  if (MD->size_overridden_methods() > 0) {\n    if (isa<CXXDestructorDecl>(MD))\n    else\n      EmitDiag(diag::warn_inconsistent_function_marked_not_override_overriding, diag::warn_suggest_function_marked_not_override_overriding);"}}
[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,567,"struct CheckFallThroughDiagnostics {\n  bool checkDiagnostics(DiagnosticsEngine &D, bool ReturnsVoid, bool HasNoReturn) const {\n    if (funMode == Function) {\n      return (ReturnsVoid || D.isIgnored(diag::warn_maybe_falloff_nonvoid_function, FuncLoc)) && (!HasNoReturn || D.isIgnored(diag::warn_noreturn_function_has_return_expr, FuncLoc)) && (!ReturnsVoid || D.isIgnored(diag::warn_suggest_noreturn_block, FuncLoc));"}}
[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,523,"struct CheckFallThroughDiagnostics {\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    if (!isVirtualMethod && !isTemplateInstantiation)\n      D.diag_NeverFallThroughOrReturn = diag::warn_suggest_noreturn_function;"}}
[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,3216,"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();"}}
[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,11106,"/// 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);"}}
[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,11109,"/// 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,11120,"/// 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;"}}
[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,7405,"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);"}}
[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,7412,"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);"}}
[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,7397,"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);"}}
[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,7419,"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);"}}
[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,7364,"/// 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();"}}
[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",163,"static llvm::Value *CheckAtomicAlignment(CodeGenFunction &CGF, const CallExpr *E) {\n  if (Align % Bytes != 0) {\n    Diags.Report(E->getBeginLoc(), diag::warn_sync_op_misaligned);"}}
[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,16512,"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();"}}
[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,3103,"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,3129,"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,3150,"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);"}}
[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,3188,"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);"}}
[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,3133,"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);"}}
[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",1246,"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();"}}
[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",1259,"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",1266,"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\");"}}
[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",255,"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;"}}
[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",262,"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;"}}
[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",128,"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",141,"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;"}}
[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",1777,"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;"}}
[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",655,"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",657,"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));"}}
[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",235,"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;"}}
[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",242,"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;"}}
[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,12303,"static int classifyConstantValue(Expr *Constant) {\n  // diag::warn_out_of_range_compare and diag::warn_tautological_bool_compare."},{x,12419,"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());"}}
[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,12410,"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);"}}
[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,12405,"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();"}}
[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,12422,"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;"}}
[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,157,"/// 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,176,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  static bool hasActiveDiagnostics(DiagnosticsEngine &Diags, SourceLocation Loc) { return !Diags.isIgnored(diag::warn_tautological_overlap_comparison, Loc) || !Diags.isIgnored(diag::warn_comparison_bitwise_or, Loc); }"}}
[j]={{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,17156,"/// \\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;"}}
[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,6199,"/// 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();"}}
[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,6212,"/// 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();"}}
[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,1517,"/// 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);"}}
[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,1559,"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();"}}
[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,14775,"/// 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,15188,"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);"}}
[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,3011,"/// 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());"}}
[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,1155,"/// 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);"}}
[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,13754,"/// 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;"}}
[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,13754,"/// 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;"}}
[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,586,"/// 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;"}}
[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,642,"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;"}}
[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,413,"/// 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;"}}
[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,546,"/// 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;"}}
[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,521,"/// 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();"}}
[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,523,"/// 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;"}}
[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,2226,"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()))"}}
[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,2228,"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()))"}}
[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,330,"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,2284,"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()))"}}
[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,982,"/// 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);"}}
[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,3730,"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;"}}
[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,3709,"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;"}}
[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,3696,"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);"}}
[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,3702,"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);"}}
[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,7734,"/// 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,1609,"#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;"}}
[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,100,"/// 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,6189,"/// 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;"}}
[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,16473,"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();"}}
[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,16500,"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();"}}
[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,16447,"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();"}}
[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,8450,"// 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,15223,"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;"}}
[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,1635,"#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);"}}
[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,1635,"#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);"}}
[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,11245,"// 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;"}}
[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,1649,"#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);"}}
[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,10487,"/// 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();"}}
[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,3088,"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,3131,"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);"}}
[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,3076,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (Count == 0) {\n    if (Diagnose)\n      Diag(SlashLoc, FoundEndDelimiter ? diag::warn_delimited_ucn_empty : diag::warn_ucn_escape_no_digits) << StringRef(KindLoc, 1);"}}
[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,3253,"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);"}}
[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,3031,"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);"}}
[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",582,"/// 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);"}}
[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,1933,"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();"}}
[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,1167,"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,2267,"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());"}}
[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,1167,"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,2268,"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());"}}
[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,252,"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);"}}
[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,384,"/// 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;"}}
[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",262,"void Preprocessor::diagnoseMissingHeaderInUmbrellaDir(const Module &Mod) {\n  if (getDiagnostics().isIgnored(diag::warn_uncovered_module_header, ExpectedHeadersLoc))"},{"clang/lib/Lex/PPLexerChange.cpp",283,"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;"}}
[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,1057,"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;"}}
[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,1054,"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());"}}
[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,929,"/// 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,1606,"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,1619,"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;"}}
[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,1616,"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,"}}
[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,2279,"/// 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,2304,"/// 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);"}}
[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,1076,"/// 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,1181,"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();"}}
[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,810,"/// 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;"}}
[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,805,"/// 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;"}}
[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,1747,"// 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;"}}
[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",1761,"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);"}}
[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,342,"/// 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,659,"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;"}}
[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,342,"/// 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,659,"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;"}}
[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,7688,"/// 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",412,"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();"}}
[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,2244,"/// 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,2257,"/// 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;"}}
[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,4395,"void Sema::DiagnoseUseOfUnimplementedSelectors() {\n  for (auto &SelectorAndLocation : ReferencedSelectors) {\n    if (!LookupImplementedMethodInGlobalPool(Sel))\n      Diag(Loc, diag::warn_unimplemented_selector) << Sel;"}}
[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,926,"/// 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();"}}
[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,888,"/// 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,2242,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  if (!Diags.isIgnored(diag::warn_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_sometimes_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_maybe_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_uninit_const_reference, D->getBeginLoc())) {"}}
[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,917,"/// 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,11050,"// 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;"}}
[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,11046,"// 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;"}}
[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,745,"/// 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,2242,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  if (!Diags.isIgnored(diag::warn_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_sometimes_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_maybe_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_uninit_const_reference, D->getBeginLoc())) {"}}
[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",1592,"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,2000,"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,7688,"/// 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,8552,"/// 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,2397,"/// 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",412,"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,7581,"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();"}}
[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",393,"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,12797,"void Sema::ActOnDocumentableDecls(ArrayRef<Decl *> Group) {\n  if (Diags.isIgnored(diag::warn_doc_param_not_found, Group[0]->getLocation()) && Diags.isIgnored(diag::warn_unknown_comment_command_name, Group[0]->getLocation()))"}}
[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,1816,"/// 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,2149,"/// 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,5753,"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;"}}
[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",36,"// 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));"}}
[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,7255,"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;"}}
[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",132,"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",159,"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());"}}
[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,1625,"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);"}}
[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,1632,"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);"}}
[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,2003,"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);"}}
[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,1203,"/// 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,1221,"/// 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;"}}
[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,1198,"/// 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;"}}
[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,1201,"/// 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;"}}
[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,1938,"void ItaniumRecordLayoutBuilder::LayoutField(const FieldDecl *D, bool InsertExtraPadding) {\n  if (Packed && !FieldPacked && PackedFieldAlign < FieldAlign)\n    Diag(D->getLocation(), diag::warn_unpacked_field) << D;"}}
[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,6067,"// 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::\");"}}
[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,86,"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;"}}
[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,1529,"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);"}}
[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,89,"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;"}}
[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,1367,"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);"}}
[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,77,"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,1016,"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);"}}
[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,95,"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;"}}
[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,92,"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;"}}
[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,1893,"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,2089,"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,2097,"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())) {"}}
[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,1902,"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,2089,"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,2097,"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())) {"}}
[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,14213,"/// 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()));"}}
[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,14213,"/// 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()));"}}
[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,10787,"// 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",1278,"///                      diag::warn_unsigned_abs,"}}
[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,12422,"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;"}}
[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,12596,"/// 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;"}}
[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,12422,"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;"}}
[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,12422,"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;"}}
[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",1420,"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);"}}
[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,3029,"// 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;"}}
[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,6942,"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;"}}
[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,2996,"// 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,3000,"// 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,3005,"// 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,3008,"// 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,3011,"// 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,3016,"// 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,3025,"// 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,3048,"// 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,3084,"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,3095,"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,3113,"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,3143,"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,3148,"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,3156,"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;"}}
[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,1987,"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;"}}
[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,1987,"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;"}}
[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,284,"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,288,"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\";"}}
[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,12631,"// 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,363,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n  if (DiagID != diag::warn_unused_comma_left_operand || !isSFINAEContext())"}}
[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,180,"/// 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();"}}
[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,1227,"/// 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;"}}
[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,201,"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;"}}
[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,206,"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;"}}
[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,325,"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;"}}
[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,1935,"/// 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;"}}
[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",314,"llvm::Expected<PartialTranslationUnit &> Interpreter::Parse(llvm::StringRef Code) {\n  getCompilerInstance()->getDiagnostics().setSeverity(clang::diag::warn_unused_expr, diag::Severity::Ignored, SourceLocation());"},{Lb,7663,"ExprResult Sema::ActOnFinishFullExpr(Expr *FE, SourceLocation CC, bool DiscardedValue, bool IsConstexpr, bool IsTemplateArgument) {\n  if (DiscardedValue) {\n    DiagnoseUnusedExprResult(FullExpr.get(), diag::warn_unused_expr);"}}
[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,1209,"/// 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;"}}
[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,1937,"/// 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;"}}
[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",1602,"bool Sema::DiagnoseUnusedLambdaCapture(SourceRange CaptureRange, const Capture &From) {\n  auto diag = Diag(From.getLocation(), diag::warn_unused_lambda_capture);"}}
[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,907,"void Sema::emitAndClearUnusedLocalTypedefWarnings() {\n  for (const TypedefNameDecl *TD : UnusedLocalTypedefNameCandidates) {\n    Diag(TD->getLocation(), diag::warn_unused_local_typedef) << isa<TypeAliasDecl>(TD) << TD->getDeclName();"}}
[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,1209,"/// 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;"}}
[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,12969,"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();"}}
[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,1237,"/// 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,1245,"/// 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,3152,"/// 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())) {"}}
[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,4456,"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;"}}
[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,327,"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;"}}
[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,202,"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;"}}
[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,207,"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;"}}
[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,2791,"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();"}}
[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,1207,"/// 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,1223,"/// 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;"}}
[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,1229,"/// 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,1939,"/// 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;"}}
[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,348,"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());"}}
[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,356,"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;"}}
[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,1832,"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);"}}
[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",452,"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;"}}
[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,1825,"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);"}}
[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,704,"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,106,"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;"}}
[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,14069,"/// 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());"}}
[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,10307,"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);"}}
[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,1511,"/// 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;"}}
[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,1513,"/// 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);"}}
[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,7682,"/// 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;"}}
[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,6622,"// 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;"}}
[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,1674,"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;"}}
[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,1712,"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;"}}
[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,1687,"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;"}}
[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",4585,"/// 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;"}}
[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,1674,"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;"}}
[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,1709,"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;"}}
[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,1684,"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;"}}
[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,3173,"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();"}}
[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,1634,"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,1637,"void CheckForLoopConditionalStatement(Sema &S, Expr *Second, Expr *Third, Stmt *Body) {\n  PartialDiagnostic PDiag = S.PDiag(diag::warn_variables_not_in_loop_body);"}}
[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,12937,"/// 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;"}}
[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",1123,"/// 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);"}}
[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,4172,"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);"}}
[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",488,"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());"}}
[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,2281,"/// 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;"}}
[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,2734,"/// 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;"}}
[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,2131,"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,2734,"/// 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;"}}
[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",446,"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",455,"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();"}}
[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,1053,"/// 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;"}}
[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,4108,"/// 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();"}}
[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,15732,"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;"}}
[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,10837,"// 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",1279,"///                      diag::warn_wrong_absolute_value_type,"}}
[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",3701,"/// 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\");"}}
[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,11775,"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);"}}
[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,11773,"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,11785,"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);"}}
[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,11779,"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);"}}
[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,516,"void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr *E) {\n  if (Diags.isIgnored(diag::warn_zero_as_null_pointer_constant, E->getBeginLoc()))"},{V,536,"void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr *E) {\n  Diag(E->getBeginLoc(), diag::warn_zero_as_null_pointer_constant) << FixItHint::CreateReplacement(E->getSourceRange(), \"nullptr\");"}}
[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,16736,"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);"}}
[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,16736,"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);"}}
[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);"}}
}
}
};
};
Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557

edits

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

Navigation menu