Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557
edits
Timo.stripf (talk | contribs) No edit summary |
Timo.stripf (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
local a=" | local a="regex2"; | ||
local b=" | local b="regex3"; | ||
local c="prefix"; | local c="prefix"; | ||
local d="type"; | local d="type"; | ||
local e=" | local e="message"; | ||
local f=" | local f="regex1"; | ||
local g=" | local g="title"; | ||
local h=" | local h="category"; | ||
local i="commit"; | local i="commit"; | ||
local j="source"; | local j="source"; | ||
Line 12: | Line 12: | ||
local l="Warning"; | local l="Warning"; | ||
local m="(?:warning|error|fatal error)\\: "; | local m="(?:warning|error|fatal error)\\: "; | ||
local n=" | local n="groups"; | ||
local o=" | local o="maingroup"; | ||
local p="Semantic Issue"; | local p="tests2"; | ||
local | local q="Semantic Issue"; | ||
local | local r="defaultactive"; | ||
local | local s="clang/lib/Parse/ParsePragma.cpp"; | ||
local | local t="CL4"; | ||
local | local u="all"; | ||
local | local v="most"; | ||
local | local w="ignored-pragmas"; | ||
local | local x=""; | ||
local | local y="clang/lib/Sema/SemaChecking.cpp"; | ||
local | local z="pragmas"; | ||
local | local A="clang/lib/Sema/SemaExpr.cpp"; | ||
local | local B="Parse Issue"; | ||
local | local C="clang/lib/Sema/SemaDeclAttr.cpp"; | ||
local | local D="Lexical or Preprocessor Issue"; | ||
local | local E="clang/lib/Sema/AnalysisBasedWarnings.cpp"; | ||
local | local F=" \\[(?:\\-Werror,)?\\-Wignored\\-pragmas[^\\]]*\\]"; | ||
local | local G="ignored-attributes"; | ||
local | local H="clang/lib/Sema/SemaDecl.cpp"; | ||
local | local I="clang/lib/Lex/Pragma.cpp"; | ||
local | local J="openmp-clauses"; | ||
local K="odr"; | |||
local L | local L="clang/lib/Parse/ParseOpenMP.cpp"; | ||
local M="format"; | |||
local N=" | local N="unknown-pragmas"; | ||
local O="openmp"; | local O="openmp"; | ||
local P="(?: \\[(?:\\-Werror)?[^\\]]*\\])?"; | local P="clang/lib/Sema/SemaDeclObjC.cpp"; | ||
local | local Q="(?: \\[(?:\\-Werror)?[^\\]]*\\])?"; | ||
local | local R="clang/lib/Sema/SemaType.cpp"; | ||
local | local S="clang/lib/Sema/SemaStmt.cpp"; | ||
local | local T="clang/lib/Sema/SemaObjCProperty.cpp"; | ||
local U="attributes"; | |||
local V | local V=" \\[(?:\\-Werror,)?\\-Wignored\\-attributes[^\\]]*\\]"; | ||
local W="clang/lib/Sema/Sema.cpp"; | |||
local X="Unused Entity Issue"; | local X="Unused Entity Issue"; | ||
local Y=" | local Y="unused"; | ||
local Z="clang/lib/Sema/SemaExprObjC.cpp"; | local Z="clang/lib/Sema/SemaExprObjC.cpp"; | ||
local ab=" | local ab="clang/lib/Sema/SemaDeclCXX.cpp"; | ||
local bb="b1c4d5507fad"; | local bb="b1c4d5507fad"; | ||
local cb=" | local cb="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp..."; | ||
local db="Format String Issue"; | local db="Format String Issue"; | ||
local eb=" \\[(?:\\-Werror,)?\\-Wopenmp\\-clauses[^\\]]*\\]"; | local eb=" \\[(?:\\-Werror,)?\\-Wopenmp\\-clauses[^\\]]*\\]"; | ||
local fb="clang/lib/AST/ASTStructuralEquivalence.cpp"; | local fb="unused-value"; | ||
local | local gb="clang/lib/AST/ASTStructuralEquivalence.cpp"; | ||
local hb=" \\[(?:\\-Werror,)?\\-Wodr[^\\]]*\\]"; | |||
local ib | local ib=" \\[(?:\\-Werror,)?\\-Wunknown\\-pragmas[^\\]]*\\]"; | ||
local jb="clang/lib/Sema/SemaAttr.cpp"; | |||
local kb="[ASTImporter] Make ODR error handling configurable"; | local kb="[ASTImporter] Make ODR error handling configurable"; | ||
local lb=" | local lb="60768cd89672"; | ||
local mb | local mb="clang/lib/Sema/SemaOpenMP.cpp"; | ||
local nb="source-uses-openmp"; | |||
local ob=" | local ob="thread-safety"; | ||
local pb=" | local pb="OpenMP Issue"; | ||
local qb=" | local qb="Implement P2361 Unevaluated string literals"; | ||
local rb=" \\[(?:\\-Werror,)?\\-Wformat[^\\]]*\\] | local rb="95f50964fbf5"; | ||
local sb=" \\[(?:\\-Werror,)?\\-Wformat[^\\]]*\\]"; | |||
local tb="thread-safety-analysis"; | local tb="thread-safety-analysis"; | ||
local ub=" | local ub="clang/lib/AST/ASTImporter.cpp"; | ||
local vb="clang/lib/Sema/SemaInit.cpp"; | local vb="clang/lib/Sema/SemaInit.cpp"; | ||
local wb=" | local wb="clang/test/Preprocessor/pragma_microsoft.c"; | ||
local xb=" | local xb="uninitialized"; | ||
local yb="deprecated"; | local yb="deprecated"; | ||
local zb=" | local zb="objc-designated-initializers"; | ||
local Ab="thread-safety-attributes"; | local Ab="thread-safety-attributes"; | ||
local Bb=" | local Bb="consumed"; | ||
local Cb=" | local Cb="error: "; | ||
local Db="clang/lib/Sema/SemaCast.cpp"; | local Db="clang/lib/Sema/SemaCast.cpp"; | ||
local Eb="1228d42ddab8"; | local Eb="1228d42ddab8"; | ||
local Fb=" | local Fb="conversion"; | ||
local Gb="Downgradable Error"; | local Gb="[OpenMP][Part 2] Use reusable OpenMP context/traits handling"; | ||
local | local Hb="Downgradable Error"; | ||
local | local Ib="(?:error|warning|fatal error)\\: "; | ||
local | local Jb="unicode"; | ||
local | local Kb="clang/test/OpenMP/declare_variant_messages.c"; | ||
local | local Lb="clang/lib/Lex/Lexer.cpp"; | ||
local | local Mb="Nullability Issue"; | ||
local Nb="[clang] Implement objc_non_runtime_protocol to remove protocol metadata"; | |||
local Ob="Reland [clang] Check unsupported types in expressions"; | |||
local Pb="Value Conversion Issue"; | |||
local Qb="3dbcea8b957a"; | |||
local Rb=" \\[(?:\\-Werror,)?\\-Wsource\\-uses\\-openmp[^\\]]*\\]"; | |||
local Sb=" | local Sb="14f6bfcb52e7"; | ||
local Tb=" | local Tb="Deprecations"; | ||
local Ub=" | local Ub="clang/lib/Sema/SemaExprCXX.cpp"; | ||
local Vb=" | local Vb="property-attribute-mismatch"; | ||
local Wb=" | local Wb="non-gcc"; | ||
local Xb=" | local Xb="extra"; | ||
local Yb=" | local Yb="dangling"; | ||
local Zb=" | local Zb="function-multiversion"; | ||
local ac="clang/lib/AST/RecordLayoutBuilder.cpp"; | local ac="clang/lib/AST/RecordLayoutBuilder.cpp"; | ||
local bc="[ | local bc=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]"; | ||
local cc=" | local cc=" \\[(?:\\-Werror,)?\\-Wunused\\-value[^\\]]*\\]"; | ||
local dc="clang/lib/Lex/PPExpressions.cpp"; | local dc="clang/lib/Lex/PPExpressions.cpp"; | ||
local ec=" | local ec="tautological-compare"; | ||
local fc=" | local fc="clang/test/Sema/format-strings.c"; | ||
local gc=" | local gc="931fcd3ba011"; | ||
local hc=" | local hc="[WebAssembly] Improve clang diagnostics for wasm attributes"; | ||
local ic=" | local ic="xor-used-as-pow"; | ||
local jc="clang/lib/Lex/Preprocessor.cpp"; | local jc="c094e7dc4b3f"; | ||
local | local kc="clang/test/Sema/pragma-section.c"; | ||
local lc="clang/lib/Lex/Preprocessor.cpp"; | |||
local mc=" \\[(?:\\-Werror,)?\\-Wobjc\\-designated\\-initializers[^\\]]*\\]"; | |||
local nc=" | local nc="5a8987ca5113"; | ||
local oc=" | local oc="type-safety"; | ||
local pc=" | local pc="[SYCL] Add sycl_kernel attribute for accelerated code outlining"; | ||
local qc=" | local qc="Update tablegen diagnostic files to be in sync with the def files."; | ||
local rc=" | local rc="branch-protection"; | ||
local sc=" | local sc="clang/test/SemaObjC/attr-designated-init.m"; | ||
local tc=" | local tc="unknown-warning-option"; | ||
local uc=" | local uc="return-stack-address"; | ||
local vc=" | local vc="unreachable-code-aggressive"; | ||
local wc=" | local wc="c3b18967ed07"; | ||
local xc=" | local xc="documentation"; | ||
local yc=" | local yc="pointer-to-int-cast"; | ||
local zc="[clang] New __attribute__((__clang_arm_mve_alias))."; | local zc="[clang] New __attribute__((__clang_arm_mve_alias))."; | ||
local Ac=" | local Ac="7c11da0cfd33"; | ||
local Bc=" | local Bc="strncat-size"; | ||
local Cc=" | local Cc="clang/lib/Sema/SemaAvailability.cpp"; | ||
local Dc=" | local Dc=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-attributes[^\\]]*\\]"; | ||
local Ec="clang/lib/Lex/PPDirectives.cpp"; | |||
local | local Fc="varargs"; | ||
local Gc=" \\[(?:\\-Werror,)?\\- | local Gc="absolute-value"; | ||
local | local Hc="parentheses"; | ||
local | local Ic=" \\[(?:\\-Werror,)?\\-Wconsumed[^\\]]*\\]"; | ||
local | local Jc="padded"; | ||
local | local Kc="non-pod-varargs"; | ||
local | local Lc="[MS-ABI] Add support for #pragma section and related pragmas"; | ||
local | local Mc=" \\[(?:\\-Werror,)?\\-Wuninitialized[^\\]]*\\]"; | ||
local | local Nc="clang/lib/Frontend/CompilerInstance.cpp"; | ||
local | local Oc="reserved-identifier"; | ||
local Pc="tautological-constant-in-range-compare"; | |||
local Qc="clang/lib/Sema/SemaTemplate.cpp"; | |||
local Rc="class-varargs"; | |||
local | local Sc="pragma-pack"; | ||
local Tc="unreachable-code"; | |||
local Uc="clang/test/Sema/cast.c"; | |||
local Vc="cb08f4aa4467"; | |||
local Wc="Support warn_unused_result on typedefs"; | |||
local Xc="ignored-qualifiers"; | |||
local Yc=" \\[(?:\\-Werror,)?\\-Wunicode[^\\]]*\\]"; | |||
local Zc="clang/test/SemaCXX/warn-consumed-analysis.cpp"; | |||
local ad="openmp-target"; | |||
return { | return { | ||
["warn_module_config_mismatch"]={ | ["warn_module_config_mismatch"]={ | ||
[ | [g]="module file A cannot be loaded due to a configuration mismatch with the current compilation [-Wmodule-file-config-mismatch]", | ||
[c]= | [c]=Cb, | ||
[d]= | [d]=Hb, | ||
[ | [n]={"module-file-config-mismatch"}, | ||
[ | [o]="module-file-config-mismatch", | ||
[ | [e]="module file %0 cannot be loaded due to a configuration mismatch with the current compilation", | ||
[ | [f]=Ib, | ||
[ | [a]="module file (.*?) cannot be loaded due to a configuration mismatch with the current compilation", | ||
[ | [b]=" \\[[^\\]]*\\-Wmodule\\-file\\-config\\-mismatch[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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]={{ | [j]={{Nc,1729,"bool CompilerInstance::loadModuleFile(StringRef FileName) {\n bool ConfigMismatchIsRecoverable = getDiagnostics().getDiagnosticLevel(diag::warn_module_config_mismatch, SourceLocation()) <= DiagnosticsEngine::Warning;"},{Nc,1750,"bool CompilerInstance::loadModuleFile(StringRef FileName) {\n case ASTReader::ConfigurationMismatch:\n getDiagnostics().Report(SourceLocation(), diag::warn_module_config_mismatch) << FileName;"},{Nc,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;"}}, | ||
[p]={ | |||
["clang/test/Modules/prebuilt-implicit-modules.m"]={"error: module file /var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/build/tools/clang/test/Modules/Output/prebuilt-implicit-modules.m.tmp/module_a.pcm cannot be loaded due to a configuration mismatch with the current compilation [-Wmodule-file-config-mismatch]"} | |||
} | |||
}, | }, | ||
["warn_module_conflict"]={ | ["warn_module_conflict"]={ | ||
[ | [g]="module \'A\' conflicts with already-imported module \'B\': C [-Wmodule-conflict]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"module-conflict"}, | ||
[ | [o]="module-conflict", | ||
[ | [e]="module \'%0\' conflicts with already-imported module \'%1\': %2", | ||
[ | [f]=m, | ||
[ | [a]="module \'(.*?)\' conflicts with already\\-imported module \'(.*?)\'\\: (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmodule\\-conflict[^\\]]*\\]", | ||
[ | [h]=D, | ||
[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]={{ | [j]={{lc,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;"}}, | ||
[p]={ | |||
["clang/test/Modules/conflicts.m"]={"clang/test/Modules/conflicts.m:6:2: warning: module \'Conflicts.A\' conflicts with already-imported module \'Conflicts.B\': we just don\'t like B [-Wmodule-conflict]"} | |||
} | |||
}, | }, | ||
["warn_module_system_bit_conflict"]={ | ["warn_module_system_bit_conflict"]={ | ||
[ | [g]="module file \'A\' was validated as a system module and is now being imported as a non-system module; any difference in diagnostic options will be ignored [-Wmodule-conflict]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"module-conflict"}, | ||
[ | [o]="module-conflict", | ||
[ | [e]="module file \'%0\' was validated as a system module and is now being imported as a non-system module; any difference in diagnostic options will be ignored", | ||
[ | [f]=m, | ||
[ | [a]="module file \'(.*?)\' was validated as a system module and is now being imported as a non\\-system module; any difference in diagnostic options will be ignored", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmodule\\-conflict[^\\]]*\\]", | ||
[ | [h]="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",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;"}} | [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"]={ | ||
[ | [g]="... uses __DATE__ or __TIME__ [-Wpch-date-time]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"pch-date-time"}, | ||
[ | [o]="pch-date-time", | ||
[ | [e]="%select{precompiled header|module}0 uses __DATE__ or __TIME__", | ||
[ | [f]=m, | ||
[ | [a]="(?:precompiled header|module) uses __DATE__ or __TIME__", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpch\\-date\\-time[^\\]]*\\]", | ||
[ | [h]="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",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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/PCH/datetime.c"]={"warning: precompiled header uses __DATE__ or __TIME__ [-Wpch-date-time]"} | |||
} | |||
}, | }, | ||
["warn_mt_message"]={ | ["warn_mt_message"]={ | ||
[ | [g]="[rewriter] A", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="[rewriter] %0", | ||
[ | [f]=m, | ||
[ | [a]="\\[rewriter\\] (.*?)", | ||
[ | [b]=Q, | ||
[ | [h]=x, | ||
[i]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions"}, | [i]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions"}, | ||
[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\";"}} | [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"]={ | ||
[ | [g]="multi-character character constant [-Wmultichar]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,"multichar"}, | ||
[ | [o]="multichar", | ||
[ | [e]="multi-character character constant", | ||
[ | [f]=m, | ||
[ | [a]="multi\\-character character constant", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmultichar[^\\]]*\\]", | ||
[ | [h]=D, | ||
[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",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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/if_warning.c"]={"clang/test/Preprocessor/if_warning.c:32:5: warning: multi-character character constant [-Wmultichar]"} | |||
} | |||
}, | }, | ||
["warn_multiple_method_decl"]={ | ["warn_multiple_method_decl"]={ | ||
[ | [g]="multiple methods named A found [-Wobjc-multiple-method-names]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-multiple-method-names"}, | ||
[ | [o]="objc-multiple-method-names", | ||
[ | [e]="multiple methods named %0 found", | ||
[ | [f]=m, | ||
[ | [a]="multiple methods named (.*?) found", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-multiple\\-method\\-names[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{P,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/selector-overload.m"]={"clang/test/SemaObjC/selector-overload.m:47:3: warning: multiple methods named \'method:\' found [-Wobjc-multiple-method-names]"} | |||
} | |||
}, | }, | ||
["warn_multiple_selectors"]={ | ["warn_multiple_selectors"]={ | ||
[ | [g]="several methods with selector A of mismatched types are found for the @selector expression [-Wselector-type-mismatch]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"selector","selector-type-mismatch"}, | ||
[ | [o]="selector-type-mismatch", | ||
[ | [e]="several methods with selector %0 of mismatched types are found for the @selector expression", | ||
[ | [f]=m, | ||
[ | [a]="several methods with selector (.*?) of mismatched types are found for the @selector expression", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wselector\\-type\\-mismatch[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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,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()))"}} | [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()))"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:168:10: warning: several methods with selector \'directMismatch2\' of mismatched types are found for the @selector expression [-Wselector-type-mismatch]"} | |||
} | |||
}, | }, | ||
["warn_multiversion_duplicate_entries"]={ | ["warn_multiversion_duplicate_entries"]={ | ||
[ | [g]="CPU list contains duplicate entries; attribute ignored [-Wfunction-multiversion]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Zb}, | ||
[ | [o]=Zb, | ||
[ | [e]="CPU list contains duplicate entries; attribute ignored", | ||
[ | [f]=m, | ||
[ | [a]="CPU list contains duplicate entries; attribute ignored", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wfunction\\-multiversion[^\\]]*\\]", | ||
[ | [h]=x, | ||
[i]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning"}, | [i]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning"}, | ||
[j]={{ | [j]={{C,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-cpuspecific.c"]={"clang/test/Sema/attr-cpuspecific.c:56:20: warning: CPU list contains duplicate entries; attribute ignored [-Wfunction-multiversion]","clang/test/Sema/attr-cpuspecific.c:118:20: warning: CPU list contains duplicate entries; attribute ignored [-Wfunction-multiversion]"} | |||
} | |||
}, | }, | ||
["warn_namespace_member_extra_qualification"]={ | ["warn_namespace_member_extra_qualification"]={ | ||
[ | [g]="extra qualification on member A [-Wextra-qualification]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"extra-qualification"}, | ||
[ | [o]="extra-qualification", | ||
[ | [e]="extra qualification on member %0", | ||
[ | [f]=m, | ||
[ | [a]="extra qualification on member (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wextra\\-qualification[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/CXX/dcl.decl/dcl.meaning/p1-0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/p1-0x.cpp:118:26: warning: extra qualification on member \'f_in_inline\' [-Wextra-qualification]","clang/test/CXX/dcl.decl/dcl.meaning/p1-0x.cpp:123:26: warning: extra qualification on member \'v_in_inline\' [-Wextra-qualification]"} | |||
} | |||
}, | }, | ||
["warn_neon_vector_initializer_non_portable"]={ | ["warn_neon_vector_initializer_non_portable"]={ | ||
[ | [g]="vector initializers are not compatible with NEON intrinsics in big endian mode [-Wnonportable-vector-initialization]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"nonportable-vector-initialization"}, | ||
[ | [o]="nonportable-vector-initialization", | ||
[ | [e]="vector initializers are not compatible with NEON intrinsics in big endian mode", | ||
[ | [f]=m, | ||
[ | [a]="vector initializers are not compatible with NEON intrinsics in big endian mode", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnonportable\\-vector\\-initialization[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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,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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/Sema/big-endian-neon-initializers.c"]={"clang/test/Sema/big-endian-neon-initializers.c:8:15: warning: vector initializers are not compatible with NEON intrinsics in big endian mode [-Wnonportable-vector-initialization]","clang/test/Sema/big-endian-neon-initializers.c:9:15: warning: vector initializers are not compatible with NEON intrinsics in big endian mode [-Wnonportable-vector-initialization]","clang/test/Sema/big-endian-neon-initializers.c:10:15: warning: vector initializers are not compatible with NEON intrinsics in big endian mode [-Wnonportable-vector-initialization]","clang/test/Sema/big-endian-neon-initializers.c:11:17: warning: vector initializers are not compatible with NEON intrinsics in big endian mode [-Wnonportable-vector-initialization]"} | |||
} | |||
}, | }, | ||
["warn_nested_block_comment"]={ | ["warn_nested_block_comment"]={ | ||
[ | [g]="\'/*\' within block comment [-Wcomment]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,"comment","comments",v}, | ||
[ | [o]="comment", | ||
[ | [e]="\'/*\' within block comment", | ||
[ | [f]=m, | ||
[ | [a]="\'\\/\\*\' within block comment", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wcomment[^\\]]*\\]", | ||
[ | [h]=D, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{Lb,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);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/traditional-cpp.c"]={"clang/test/Preprocessor/traditional-cpp.c:12:15: warning: \'/*\' within block comment [-Wcomment]","clang/test/Preprocessor/traditional-cpp.c:13:25: warning: \'/*\' within block comment [-Wcomment]","clang/test/Preprocessor/traditional-cpp.c:87:20: warning: \'/*\' within block comment [-Wcomment]"} | |||
} | |||
}, | }, | ||
["warn_new_dangling_initializer_list"]={ | ["warn_new_dangling_initializer_list"]={ | ||
[ | [g]="array backing ... will be destroyed at the end of the full-expression [-Wdangling-initializer-list]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Yb,"dangling-initializer-list"}, | ||
[ | [o]="dangling-initializer-list", | ||
[ | [e]="array backing %select{initializer list subobject of the allocated object|the allocated initializer list}0 will be destroyed at the end of the full-expression", | ||
[ | [f]=m, | ||
[ | [a]="array backing (?:initializer list subobject of the allocated object|the allocated initializer list) will be destroyed at the end of the full\\-expression", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdangling\\-initializer\\-list[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"0a9969b36b16",1531786301,"Restructure checking for, and warning on, lifetime extension."}, | [i]={"0a9969b36b16",1531786301,"Restructure checking for, and warning on, lifetime extension."}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:152:33: warning: array backing the allocated initializer list will be destroyed at the end of the full-expression [-Wdangling-initializer-list]"} | |||
} | |||
}, | }, | ||
["warn_new_dangling_reference"]={ | ["warn_new_dangling_reference"]={ | ||
[ | [g]="temporary bound to reference member of allocated object will be destroyed at the end of the full-expression [-Wdangling-field]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Yb,"dangling-field"}, | ||
[ | [o]="dangling-field", | ||
[ | [e]="temporary bound to reference member of allocated object will be destroyed at the end of the full-expression", | ||
[ | [f]=m, | ||
[ | [a]="temporary bound to reference member of allocated object will be destroyed at the end of the full\\-expression", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdangling\\-field[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"0a9969b36b16",1531786301,"Restructure checking for, and warning on, lifetime extension."}, | [i]={"0a9969b36b16",1531786301,"Restructure checking for, and warning on, lifetime extension."}, | ||
[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;"}} | [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"]={ | ||
[ | [g]="auto property synthesis will not synthesize property A because it is \'readwrite\' but it will be synthesized \'readonly\' via another property [-Wobjc-property-synthesis]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-property-synthesis"}, | ||
[ | [o]="objc-property-synthesis", | ||
[ | [e]="auto property synthesis will not synthesize property %0 because it is \'readwrite\' but it will be synthesized \'readonly\' via another property", | ||
[ | [f]=m, | ||
[ | [a]="auto property synthesis will not synthesize property (.*?) because it is \'readwrite\' but it will be synthesized \'readonly\' via another property", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-synthesis[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{T,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();"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/default-synthesize-3.m"]={"clang/test/SemaObjC/default-synthesize-3.m:66:28: warning: auto property synthesis will not synthesize property \'isFoo\' because it is \'readwrite\' but it will be synthesized \'readonly\' via another property [-Wobjc-property-synthesis]"} | |||
} | |||
}, | }, | ||
["warn_no_autosynthesis_shared_ivar_property"]={ | ["warn_no_autosynthesis_shared_ivar_property"]={ | ||
[ | [g]="auto property synthesis will not synthesize property A because it cannot share an ivar with another synthesized property [-Wobjc-property-synthesis]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-property-synthesis"}, | ||
[ | [o]="objc-property-synthesis", | ||
[ | [e]="auto property synthesis will not synthesize property %0 because it cannot share an ivar with another synthesized property", | ||
[ | [f]=m, | ||
[ | [a]="auto property synthesis will not synthesize property (.*?) because it cannot share an ivar with another synthesized property", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-synthesis[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{T,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();"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/default-synthesize-3.m"]={"clang/test/SemaObjC/default-synthesize-3.m:67:16: warning: auto property synthesis will not synthesize property \'Property1\' because it cannot share an ivar with another synthesized property [-Wobjc-property-synthesis]"} | |||
} | |||
}, | }, | ||
["warn_no_constructor_for_refconst"]={ | ["warn_no_constructor_for_refconst"]={ | ||
[ | [g]="... A does not declare any constructor to initialize its non-modifiable members", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="%select{struct|interface|union|class|enum}0 %1 does not declare any constructor to initialize its non-modifiable members", | ||
[ | [f]=m, | ||
[ | [a]="(?:struct|interface|union|class|enum) (.*?) does not declare any constructor to initialize its non\\-modifiable members", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{ab,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;"}}, | ||
[p]={ | |||
["clang/test/SemaTemplate/instantiation-backtrace.cpp"]={"clang/test/SemaTemplate/instantiation-backtrace.cpp:35:28: warning: class \'ResultTy<int &>\' does not declare any constructor to initialize its non-modifiable members"} | |||
} | |||
}, | }, | ||
["warn_no_dynamic_cast_with_rtti_disabled"]={ | ["warn_no_dynamic_cast_with_rtti_disabled"]={ | ||
[ | [g]="dynamic_cast will not work since RTTI data is disabled by ... [-Wrtti]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"rtti"}, | ||
[ | [o]="rtti", | ||
[ | [e]="dynamic_cast will not work since RTTI data is disabled by %select{-fno-rtti-data|/GR-}0", | ||
[ | [f]=m, | ||
[ | [a]="dynamic_cast will not work since RTTI data is disabled by (?:\\-fno\\-rtti\\-data|\\/GR\\-)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wrtti[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Sb,1582847864,Nb}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/CodeGenCXX/microsoft-no-rtti-data.cpp"]={"clang/test/CodeGenCXX/microsoft-no-rtti-data.cpp:21:14: warning: dynamic_cast will not work since RTTI data is disabled by -fno-rtti-data [-Wrtti]"} | |||
} | |||
}, | }, | ||
["warn_no_newline_eof"]={ | ["warn_no_newline_eof"]={ | ||
[ | [g]="no newline at end of file [-Wnewline-eof]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"newline-eof"}, | ||
[ | [o]="newline-eof", | ||
[ | [e]="no newline at end of file", | ||
[ | [f]=m, | ||
[ | [a]="no newline at end of file", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnewline\\-eof[^\\]]*\\]", | ||
[ | [h]=D, | ||
[i]={"4c55d45b13e9",1377272521,"Respect -Wnewline-eof even in C++11 mode."}, | [i]={"4c55d45b13e9",1377272521,"Respect -Wnewline-eof even in C++11 mode."}, | ||
[j]={{ | [j]={{Lb,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;"}}, | ||
[p]={ | |||
["clang/test/Lexer/eof-number.c"]={"clang/test/Lexer/eof-number.c:9:6: warning: no newline at end of file [-Wnewline-eof]"} | |||
} | |||
}, | }, | ||
["warn_no_priv_submodule_use_toplevel"]={ | ["warn_no_priv_submodule_use_toplevel"]={ | ||
[ | [g]="no submodule named A in module \'B\'; using top level \'C\' [-Wprivate-module]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"private-module"}, | ||
[ | [o]="private-module", | ||
[ | [e]="no submodule named %0 in module \'%1\'; using top level \'%2\'", | ||
[ | [f]=m, | ||
[ | [a]="no submodule named (.*?) in module \'(.*?)\'; using top level \'(.*?)\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wprivate\\-module[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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]={{ | [j]={{Nc,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)) {"},{Nc,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);"}}, | ||
[p]={ | |||
["clang/test/Modules/implicit-map-dot-private.m"]={"clang/test/Modules/implicit-map-dot-private.m:19:11: warning: no submodule named \'Private\' in module \'A\'; using top level \'A_Private\' [-Wprivate-module]"} | |||
} | |||
}, | }, | ||
["warn_no_support_for_eval_method_source_on_m32"]={ | ["warn_no_support_for_eval_method_source_on_m32"]={ | ||
[ | [g]="Setting the floating point evaluation method to `source` on a target without SSE is not supported. [-Wpragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={z}, | ||
[ | [o]=z, | ||
[ | [e]="Setting the floating point evaluation method to `source` on a target without SSE is not supported.", | ||
[ | [f]=m, | ||
[ | [a]="Setting the floating point evaluation method to `source` on a target without SSE is not supported\\.", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpragmas[^\\]]*\\]", | ||
[ | [h]=B, | ||
[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",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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/Sema/x86_64-eval-method.c"]={"clang/test/Sema/x86_64-eval-method.c:13:1: warning: Setting the floating point evaluation method to `source` on a target without SSE is not supported. [-Wpragmas]"} | |||
} | |||
}, | }, | ||
["warn_no_typeid_with_rtti_disabled"]={ | ["warn_no_typeid_with_rtti_disabled"]={ | ||
[ | [g]="typeid will not work since RTTI data is disabled by ... [-Wrtti]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"rtti"}, | ||
[ | [o]="rtti", | ||
[ | [e]="typeid will not work since RTTI data is disabled by %select{-fno-rtti-data|/GR-}0", | ||
[ | [f]=m, | ||
[ | [a]="typeid will not work since RTTI data is disabled by (?:\\-fno\\-rtti\\-data|\\/GR\\-)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wrtti[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Sb,1582847864,Nb}, | ||
[j]={{ | [j]={{Ub,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);"}}, | ||
[p]={ | |||
["clang/test/CodeGenCXX/microsoft-no-rtti-data.cpp"]={"clang/test/CodeGenCXX/microsoft-no-rtti-data.cpp:20:28: warning: typeid will not work since RTTI data is disabled by -fno-rtti-data [-Wrtti]"} | |||
} | |||
}, | }, | ||
["warn_no_underlying_type_specified_for_enum_bitfield"]={ | ["warn_no_underlying_type_specified_for_enum_bitfield"]={ | ||
[ | [g]="enums in the Microsoft ABI are signed integers by default; consider giving the enum A an unsigned underlying type to make this code portable [-Wsigned-enum-bitfield]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"signed-enum-bitfield"}, | ||
[ | [o]="signed-enum-bitfield", | ||
[ | [e]="enums in the Microsoft ABI are signed integers by default; consider giving the enum %0 an unsigned underlying type to make this code portable", | ||
[ | [f]=m, | ||
[ | [a]="enums in the Microsoft ABI are signed integers by default; consider giving the enum (.*?) an unsigned underlying type to make this code portable", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wsigned\\-enum\\-bitfield[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-msvc-enum-bitfield.cpp"]={"clang/test/SemaCXX/warn-msvc-enum-bitfield.cpp:9:8: warning: enums in the Microsoft ABI are signed integers by default; consider giving the enum \'E\' an unsigned underlying type to make this code portable [-Wsigned-enum-bitfield]","clang/test/SemaCXX/warn-msvc-enum-bitfield.cpp:10:8: warning: enums in the Microsoft ABI are signed integers by default; consider giving the enum \'F\' an unsigned underlying type to make this code portable [-Wsigned-enum-bitfield]"} | |||
} | |||
}, | }, | ||
["warn_no_unlock"]={ | ["warn_no_unlock"]={ | ||
[ | [g]="A \'B\' is still held at the end of function [-Wthread-safety-analysis]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,tb}, | ||
[ | [o]=tb, | ||
[ | [e]="%0 \'%1\' is still held at the end of function", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) \'(.*?)\' is still held at the end of function", | ||
[ | [b]=bc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjCXX/warn-thread-safety-analysis.mm"]={"clang/test/SemaObjCXX/warn-thread-safety-analysis.mm:26:1: warning: mutex \'self->lock_\' is still held at the end of function [-Wthread-safety-analysis]"} | |||
} | |||
}, | }, | ||
["warn_nocf_check_attribute_ignored"]={ | ["warn_nocf_check_attribute_ignored"]={ | ||
[ | [g]="\'nocf_check\' attribute ignored; use -fcf-protection to enable the attribute [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="\'nocf_check\' attribute ignored; use -fcf-protection to enable the attribute", | ||
[ | [f]=m, | ||
[ | [a]="\'nocf_check\' attribute ignored; use \\-fcf\\-protection to enable the attribute", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{C,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);"},{R,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/nocf_check_attr_not_allowed.c"]={"clang/test/Sema/nocf_check_attr_not_allowed.c:5:21: warning: \'nocf_check\' attribute ignored; use -fcf-protection to enable the attribute [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_noderef_on_non_pointer_or_array"]={ | ["warn_noderef_on_non_pointer_or_array"]={ | ||
[ | [g]="\'noderef\' can only be used on an array or pointer type [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="\'noderef\' can only be used on an array or pointer type", | ||
[ | [f]=m, | ||
[ | [a]="\'noderef\' can only be used on an array or pointer type", | ||
[ | [b]=V, | ||
[ | [h]=x, | ||
[i]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute"}, | [i]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute"}, | ||
[j]={{ | [j]={{R,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);"},{R,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);"}}, | ||
[p]={ | |||
["clang/test/Frontend/noderef.cpp"]={"clang/test/Frontend/noderef.cpp:15:3: warning: \'noderef\' can only be used on an array or pointer type [-Wignored-attributes]","clang/test/Frontend/noderef.cpp:18:3: warning: \'noderef\' can only be used on an array or pointer type [-Wignored-attributes]","clang/test/Frontend/noderef.cpp:22:3: warning: \'noderef\' can only be used on an array or pointer type [-Wignored-attributes]","clang/test/Frontend/noderef.cpp:46:17: warning: \'noderef\' can only be used on an array or pointer type [-Wignored-attributes]","clang/test/Frontend/noderef.cpp:49:29: warning: \'noderef\' can only be used on an array or pointer type [-Wignored-attributes]","clang/test/Frontend/noderef.cpp:67:12: warning: \'noderef\' can only be used on an array or pointer type [-Wignored-attributes]","clang/test/Frontend/noderef.cpp:73:15: warning: \'noderef\' can only be used on an array or pointer type [-Wignored-attributes]","clang/test/Frontend/noderef.cpp:76:16: warning: \'noderef\' can only be used on an array or pointer type [-Wignored-attributes]","clang/test/Frontend/noderef.cpp:80:34: warning: \'noderef\' can only be used on an array or pointer type [-Wignored-attributes]","clang/test/Frontend/noderef.cpp:87:3: warning: \'noderef\' can only be used on an array or pointer type [-Wignored-attributes]","clang/test/Frontend/noderef.cpp:99:15: warning: \'noderef\' can only be used on an array or pointer type [-Wignored-attributes]","clang/test/Frontend/noderef.cpp:125:3: warning: \'noderef\' can only be used on an array or pointer type [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_noderef_to_dereferenceable_pointer"]={ | ["warn_noderef_to_dereferenceable_pointer"]={ | ||
[ | [g]="casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"noderef"}, | ||
[ | [o]="noderef", | ||
[ | [e]="casting to dereferenceable pointer removes \'noderef\' attribute", | ||
[ | [f]=m, | ||
[ | [a]="casting to dereferenceable pointer removes \'noderef\' attribute", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnoderef[^\\]]*\\]", | ||
[ | [h]=x, | ||
[i]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute"}, | [i]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute"}, | ||
[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);"},{ | [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);"},{A,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();"}}, | ||
[p]={ | |||
["clang/test/Frontend/noderef.cpp"]={"clang/test/Frontend/noderef.cpp:33:17: warning: casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]","clang/test/Frontend/noderef.cpp:34:15: warning: casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]","clang/test/Frontend/noderef.cpp:93:31: warning: casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]","clang/test/Frontend/noderef.cpp:138:12: warning: casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]","clang/test/Frontend/noderef.cpp:147:13: warning: casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]","clang/test/Frontend/noderef.cpp:148:13: warning: casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]","clang/test/Frontend/noderef.cpp:156:19: warning: casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]","clang/test/Frontend/noderef.cpp:160:10: warning: casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]","clang/test/Frontend/noderef.cpp:164:10: warning: casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]","clang/test/Frontend/noderef.cpp:168:10: warning: casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]","clang/test/Frontend/noderef.cpp:172:10: warning: casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]","clang/test/Frontend/noderef.cpp:176:10: warning: casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]","clang/test/Frontend/noderef.cpp:180:10: warning: casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]","clang/test/Frontend/noderef.cpp:184:10: warning: casting to dereferenceable pointer removes \'noderef\' attribute [-Wnoderef]"} | |||
} | |||
}, | }, | ||
["warn_non_aligned_allocation_function"]={ | ["warn_non_aligned_allocation_function"]={ | ||
[ | [g]="under -fcoro-aligned-allocation, the non-aligned allocation function for the promise type A has higher precedence than the global aligned allocation function [-Wcoro-non-aligned-allocation-function]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"coro-non-aligned-allocation-function","coroutine"}, | ||
[ | [o]="coro-non-aligned-allocation-function", | ||
[ | [e]="under -fcoro-aligned-allocation, the non-aligned allocation function for the promise type %0 has higher precedence than the global aligned allocation function", | ||
[ | [f]=m, | ||
[ | [a]="under \\-fcoro\\-aligned\\-allocation, the non\\-aligned allocation function for the promise type (.*?) has higher precedence than the global aligned allocation function", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wcoro\\-non\\-aligned\\-allocation\\-function[^\\]]*\\]", | ||
[ | [h]="Coroutines Issue", | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/coroutine-alloc-4.cpp"]={"clang/test/SemaCXX/coroutine-alloc-4.cpp:18:11: warning: under -fcoro-aligned-allocation, the non-aligned allocation function for the promise type \'f\' has higher precedence than the global aligned allocation function [-Wcoro-non-aligned-allocation-function]","clang/test/SemaCXX/coroutine-alloc-4.cpp:18:11: warning: under -fcoro-aligned-allocation, the non-aligned allocation function for the promise type \'f\' has higher precedence than the global aligned allocation function [-Wcoro-non-aligned-allocation-function]"} | |||
} | |||
}, | }, | ||
["warn_non_contravariant_overriding_param_types"]={ | ["warn_non_contravariant_overriding_param_types"]={ | ||
[ | [g]="conflicting parameter types in declaration of A: B vs C [-Woverriding-method-mismatch]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"overriding-method-mismatch"}, | ||
[ | [o]="overriding-method-mismatch", | ||
[ | [e]="conflicting parameter types in declaration of %0: %1 vs %2", | ||
[ | [f]=m, | ||
[ | [a]="conflicting parameter types in declaration of (.*?)\\: (.*?) vs (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Woverriding\\-method\\-mismatch[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"3c12dd7675cd",1312996590,"objective-c: Using existing infrastructure for finding "}, | [i]={"3c12dd7675cd",1312996590,"objective-c: Using existing infrastructure for finding "}, | ||
[j]={{ | [j]={{P,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"]={ | ||
[ | [g]="conflicting parameter types in implementation of A: B vs C [-Wmethod-signatures]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"method-signatures"}, | ||
[ | [o]="method-signatures", | ||
[ | [e]="conflicting parameter types in implementation of %0: %1 vs %2", | ||
[ | [f]=m, | ||
[ | [a]="conflicting parameter types in implementation of (.*?)\\: (.*?) vs (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmethod\\-signatures[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{P,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/method-def-1.m"]={"clang/test/SemaObjC/method-def-1.m:37:3: warning: conflicting parameter types in implementation of \'myMethod1:\': \'id<proto>\' vs \'id<NSObject>\' [-Wmethod-signatures]"} | |||
} | |||
}, | }, | ||
["warn_non_covariant_overriding_ret_types"]={ | ["warn_non_covariant_overriding_ret_types"]={ | ||
[ | [g]="conflicting return type in declaration of A: B vs C [-Woverriding-method-mismatch]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"overriding-method-mismatch"}, | ||
[ | [o]="overriding-method-mismatch", | ||
[ | [e]="conflicting return type in declaration of %0: %1 vs %2", | ||
[ | [f]=m, | ||
[ | [a]="conflicting return type in declaration of (.*?)\\: (.*?) vs (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Woverriding\\-method\\-mismatch[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"3c12dd7675cd",1312996590,"objective-c: Using existing infrastructure for finding "}, | [i]={"3c12dd7675cd",1312996590,"objective-c: Using existing infrastructure for finding "}, | ||
[j]={{ | [j]={{P,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"]={ | ||
[ | [g]="conflicting return type in implementation of A: B vs C [-Wmethod-signatures]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"method-signatures"}, | ||
[ | [o]="method-signatures", | ||
[ | [e]="conflicting return type in implementation of %0: %1 vs %2", | ||
[ | [f]=m, | ||
[ | [a]="conflicting return type in implementation of (.*?)\\: (.*?) vs (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmethod\\-signatures[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{P,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/method-typecheck-3.m"]={"clang/test/SemaObjC/method-typecheck-3.m:17:1: warning: conflicting return type in implementation of \'a\': \'B *\' vs \'A *\' [-Wmethod-signatures]"} | |||
} | |||
}, | }, | ||
["warn_non_literal_null_pointer"]={ | ["warn_non_literal_null_pointer"]={ | ||
[ | [g]="expression which evaluates to zero treated as a null pointer constant of type A [-Wnon-literal-null-conversion]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Fb,Wb,"non-literal-null-conversion"}, | ||
[ | [o]="non-literal-null-conversion", | ||
[ | [e]="expression which evaluates to zero treated as a null pointer constant of type %0", | ||
[ | [f]=m, | ||
[ | [a]="expression which evaluates to zero treated as a null pointer constant of type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnon\\-literal\\-null\\-conversion[^\\]]*\\]", | ||
[ | [h]=Pb, | ||
[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",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();"}} | [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();"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-null.c"]={"clang/test/Sema/warn-null.c:7:10: warning: expression which evaluates to zero treated as a null pointer constant of type \'int *\' [-Wnon-literal-null-conversion]","clang/test/Sema/warn-null.c:8:10: warning: expression which evaluates to zero treated as a null pointer constant of type \'int *\' [-Wnon-literal-null-conversion]","clang/test/Sema/warn-null.c:11:7: warning: expression which evaluates to zero treated as a null pointer constant of type \'int *\' [-Wnon-literal-null-conversion]","clang/test/Sema/warn-null.c:12:9: warning: expression which evaluates to zero treated as a null pointer constant of type \'int *\' [-Wnon-literal-null-conversion]","clang/test/Sema/warn-null.c:13:7: warning: expression which evaluates to zero treated as a null pointer constant of type \'int *\' [-Wnon-literal-null-conversion]"} | |||
} | |||
}, | }, | ||
["warn_non_modular_include_in_framework_module"]={ | ["warn_non_modular_include_in_framework_module"]={ | ||
[ | [g]="include of non-modular header inside framework module \'A\': \'B\' [-Wnon-modular-include-in-framework-module]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"incomplete-module","non-modular-include-in-framework-module","non-modular-include-in-module"}, | ||
[ | [o]="non-modular-include-in-framework-module", | ||
[ | [e]="include of non-modular header inside framework module \'%0\': \'%1\'", | ||
[ | [f]=m, | ||
[ | [a]="include of non\\-modular header inside framework module \'(.*?)\'\\: \'(.*?)\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnon\\-modular\\-include\\-in\\-framework\\-module[^\\]]*\\]", | ||
[ | [h]=D, | ||
[i]={"71e1a64f916e",1399326253,"Add -Wnon-modular-include* options"}, | [i]={"71e1a64f916e",1399326253,"Add -Wnon-modular-include* options"}, | ||
[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;"}} | [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"]={ | ||
[ | [g]="include of non-modular header inside module \'A\': \'B\' [-Wnon-modular-include-in-module]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"incomplete-module","non-modular-include-in-module"}, | ||
[ | [o]="non-modular-include-in-module", | ||
[ | [e]="include of non-modular header inside module \'%0\': \'%1\'", | ||
[ | [f]=m, | ||
[ | [a]="include of non\\-modular header inside module \'(.*?)\'\\: \'(.*?)\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnon\\-modular\\-include\\-in\\-module[^\\]]*\\]", | ||
[ | [h]=D, | ||
[i]={"71e1a64f916e",1399326253,"Add -Wnon-modular-include* options"}, | [i]={"71e1a64f916e",1399326253,"Add -Wnon-modular-include* options"}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/Modules/incomplete-module.m"]={"clang/test/Modules/Inputs/incomplete_mod.h:1:10: warning: include of non-modular header inside module \'incomplete_mod\': \'clang/test/Modules/Inputs/incomplete_mod_missing.h\' [-Wnon-modular-include-in-module]"} | |||
} | |||
}, | }, | ||
["warn_non_pod_vararg_with_format_string"]={ | ["warn_non_pod_vararg_with_format_string"]={ | ||
[ | [g]="cannot pass ... object of type A to variadic ...; expected type from format string was B [-Wnon-pod-varargs]", | ||
[c]= | [c]=Cb, | ||
[d]= | [d]=Hb, | ||
[ | [n]={Rc,Kc}, | ||
[ | [o]=Kc, | ||
[ | [e]="cannot pass %select{non-POD|non-trivial}0 object of type %1 to variadic %select{function|block|method|constructor}2; expected type from format string was %3", | ||
[ | [f]=Ib, | ||
[ | [a]="cannot pass (?:non\\-POD|non\\-trivial) object of type (.*?) to variadic (?:function|block|method|constructor); expected type from format string was (.*?)", | ||
[ | [b]=" \\[[^\\]]*\\-Wnon\\-pod\\-varargs[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/vararg-class.cpp"]={"clang/test/SemaCXX/vararg-class.cpp:35:11: error: cannot pass non-trivial object of type \'B\' to variadic function; expected type from format string was \'char *\' [-Wnon-pod-varargs]"} | |||
} | |||
}, | }, | ||
["warn_non_prototype_changes_behavior"]={ | ["warn_non_prototype_changes_behavior"]={ | ||
[ | [g]="a function ... without a prototype is deprecated in all versions of C ... [-Wdeprecated-non-prototype]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"deprecated-non-prototype","strict-prototypes"}, | ||
[ | [o]="deprecated-non-prototype", | ||
[ | [e]="a function %select{declaration|definition}0 without a prototype is deprecated in all versions of C %select{and is not supported in C2x|and is treated as a zero-parameter prototype in C2x, conflicting with a %select{previous|subsequent}2 %select{declaration|definition}3}1", | ||
[ | [f]=m, | ||
[ | [a]="a function (?:declaration|definition) without a prototype is deprecated in all versions of C (?:and is not supported in C2x|and is treated as a zero\\-parameter prototype in C2x, conflicting with a (?:previous|subsequent) (?:declaration|definition))", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-non\\-prototype[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Vc,1620530452,Wc}, | ||
[j]={{ | [j]={{H,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;"},{H,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;"},{H,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;"}}, | ||
[p]={ | |||
["clang/test/Parser/declarators.c"]={"clang/test/Parser/declarators.c:30:6: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype]","clang/test/Parser/declarators.c:34:6: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype]","clang/test/Parser/declarators.c:101:6: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype]","clang/test/Parser/declarators.c:103:6: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype]","clang/test/Parser/declarators.c:105:6: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype]"} | |||
} | |||
}, | }, | ||
["warn_non_virtual_dtor"]={ | ["warn_non_virtual_dtor"]={ | ||
[ | [g]="A has virtual functions but non-virtual destructor [-Wnon-virtual-dtor]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"effc++","non-virtual-dtor"}, | ||
[ | [o]="non-virtual-dtor", | ||
[ | [e]="%0 has virtual functions but non-virtual destructor", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) has virtual functions but non\\-virtual destructor", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnon\\-virtual\\-dtor[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{ab,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"]={ | ||
[ | [g]="comparison of nonnull ... \'A\' ...equal to a null pointer is \'...\' on first encounter [-Wtautological-pointer-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,"address",u,v,ec,"tautological-pointer-compare"}, | ||
[ | [o]="tautological-pointer-compare", | ||
[ | [e]="comparison of nonnull %select{function call|parameter}0 \'%1\' %select{not |}2equal to a null pointer is \'%select{true|false}2\' on first encounter", | ||
[ | [f]=m, | ||
[ | [a]="comparison of nonnull (?:function call|parameter) \'(.*?)\' (?:not |)equal to a null pointer is \'(?:true|false)\' on first encounter", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtautological\\-pointer\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"850269a47eed",1449612120,"[Sema] Add warning when comparing nonnull and null"}, | [i]={"850269a47eed",1449612120,"[Sema] Add warning when comparing nonnull and null"}, | ||
[j]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/nonnull.c"]={"clang/test/Sema/nonnull.c:96:8: warning: comparison of nonnull parameter \'pointer\' equal to a null pointer is \'false\' on first encounter [-Wtautological-pointer-compare]","clang/test/Sema/nonnull.c:108:8: warning: comparison of nonnull parameter \'pv\' equal to a null pointer is \'false\' on first encounter [-Wtautological-pointer-compare]","clang/test/Sema/nonnull.c:114:8: warning: comparison of nonnull parameter \'pointer\' equal to a null pointer is \'false\' on first encounter [-Wtautological-pointer-compare]","clang/test/Sema/nonnull.c:126:8: warning: comparison of nonnull parameter \'pv\' equal to a null pointer is \'false\' on first encounter [-Wtautological-pointer-compare]","clang/test/Sema/nonnull.c:164:7: warning: comparison of nonnull function call \'returns_nonnull_whee()\' equal to a null pointer is \'false\' on first encounter [-Wtautological-pointer-compare]","clang/test/Sema/nonnull.c:166:7: warning: comparison of nonnull function call \'returns_nonnull_whee()\' not equal to a null pointer is \'true\' on first encounter [-Wtautological-pointer-compare]"} | |||
} | |||
}, | }, | ||
["warn_noreturn_function_has_return_expr"]={ | ["warn_noreturn_function_has_return_expr"]={ | ||
[ | [g]="function A declared \'noreturn\' should not return [-Winvalid-noreturn]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"invalid-noreturn"}, | ||
[ | [o]="invalid-noreturn", | ||
[ | [e]="function %0 declared \'noreturn\' should not return", | ||
[ | [f]=m, | ||
[ | [a]="function (.*?) declared \'noreturn\' should not return", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Winvalid\\-noreturn[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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));"},{S,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-noreturn.c"]={"clang/test/Sema/attr-noreturn.c:20:3: warning: function \'f3\' declared \'noreturn\' should not return [-Winvalid-noreturn]","clang/test/Sema/attr-noreturn.c:27:3: error: function \'f4\' declared \'noreturn\' should not return [-Werror,-Winvalid-noreturn]"} | |||
} | |||
}, | }, | ||
["warn_not_a_doxygen_trailing_member_comment"]={ | ["warn_not_a_doxygen_trailing_member_comment"]={ | ||
[ | [g]="not a Doxygen trailing comment [-Wdocumentation]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={xc}, | ||
[ | [o]=xc, | ||
[ | [e]="not a Doxygen trailing comment", | ||
[ | [f]=m, | ||
[ | [a]="not a Doxygen trailing comment", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdocumentation[^\\]]*\\]", | ||
[ | [h]="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]={{ | [j]={{W,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-documentation-almost-trailing.c"]={"clang/test/Sema/warn-documentation-almost-trailing.c:8:10: warning: not a Doxygen trailing comment [-Wdocumentation]","clang/test/Sema/warn-documentation-almost-trailing.c:9:10: warning: not a Doxygen trailing comment [-Wdocumentation]"} | |||
} | |||
}, | }, | ||
["warn_not_compound_assign"]={ | ["warn_not_compound_assign"]={ | ||
[ | [g]="use of unary operator that may be intended as compound assignment (A=)", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="use of unary operator that may be intended as compound assignment (%0=)", | ||
[ | [f]=m, | ||
[ | [a]="use of unary operator that may be intended as compound assignment \\((.*?)\\=\\)", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[i]={ | [i]={nc,1237025389,qc}, | ||
[j]={{ | [j]={{A,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());"}}, | ||
[p]={ | |||
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:55:11: warning: use of unary operator that may be intended as compound assignment (+=)","clang/test/Sema/exprs.c:56:11: warning: use of unary operator that may be intended as compound assignment (-=)"} | |||
} | |||
}, | }, | ||
["warn_not_enough_argument"]={ | ["warn_not_enough_argument"]={ | ||
[ | [g]="not enough variable arguments in A declaration to fit a sentinel [-Wsentinel]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"sentinel"}, | ||
[ | [o]="sentinel", | ||
[ | [e]="not enough variable arguments in %0 declaration to fit a sentinel", | ||
[ | [f]=m, | ||
[ | [a]="not enough variable arguments in (.*?) declaration to fit a sentinel", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wsentinel[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/method-sentinel-attr.m"]={"clang/test/SemaObjC/method-sentinel-attr.m:38:6: warning: not enough variable arguments in \'foo7:\' declaration to fit a sentinel [-Wsentinel]","clang/test/SemaObjC/method-sentinel-attr.m:41:6: warning: not enough variable arguments in \'foo12:\' declaration to fit a sentinel [-Wsentinel]"} | |||
} | |||
}, | }, | ||
["warn_not_in_enum"]={ | ["warn_not_in_enum"]={ | ||
[ | [g]="case value not in enumerated type A [-Wswitch]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,"switch"}, | ||
[ | [o]="switch", | ||
[ | [e]="case value not in enumerated type %0", | ||
[ | [f]=m, | ||
[ | [a]="case value not in enumerated type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wswitch[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{S,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;"},{S,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;"},{S,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/enum-attr.cpp"]={"clang/test/SemaCXX/enum-attr.cpp:32:8: warning: case value not in enumerated type \'enum Enum\' [-Wswitch]","clang/test/SemaCXX/enum-attr.cpp:45:8: warning: case value not in enumerated type \'enum EnumClosed\' [-Wswitch]","clang/test/SemaCXX/enum-attr.cpp:72:8: warning: case value not in enumerated type \'enum EnumFlag\' [-Wswitch]","clang/test/SemaCXX/enum-attr.cpp:86:8: warning: case value not in enumerated type \'enum EnumFlagClosed\' [-Wswitch]"} | |||
} | |||
}, | }, | ||
["warn_not_in_enum_assignment"]={ | ["warn_not_in_enum_assignment"]={ | ||
[ | [g]="integer constant not in range of enumerated type A [-Wassign-enum]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"assign-enum"}, | ||
[ | [o]="assign-enum", | ||
[ | [e]="integer constant not in range of enumerated type %0", | ||
[ | [f]=m, | ||
[ | [a]="integer constant not in range of enumerated type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wassign\\-enum[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{S,1633,"void Sema::DiagnoseAssignmentEnum(QualType DstType, QualType SrcType, Expr *SrcExpr) {\n if (Diags.isIgnored(diag::warn_not_in_enum_assignment, SrcExpr->getExprLoc()))"},{S,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();"},{S,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-flag-enum.c"]={"clang/test/Sema/attr-flag-enum.c:49:7: warning: integer constant not in range of enumerated type \'enum flag\' [-Wassign-enum]","clang/test/Sema/attr-flag-enum.c:50:7: warning: integer constant not in range of enumerated type \'enum flag\' [-Wassign-enum]","clang/test/Sema/attr-flag-enum.c:55:7: warning: integer constant not in range of enumerated type \'enum flag\' [-Wassign-enum]","clang/test/Sema/attr-flag-enum.c:76:7: warning: integer constant not in range of enumerated type \'enum flag4\' [-Wassign-enum]"} | |||
} | |||
}, | }, | ||
["warn_not_xl_compatible"]={ | ["warn_not_xl_compatible"]={ | ||
[ | [g]="alignment of 16 bytes for a struct member is not binary compatible with IBM XL C/C++ for AIX 16.1.0 or older [-Waix-compat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"aix-compat"}, | ||
[ | [o]="aix-compat", | ||
[ | [e]="alignment of 16 bytes for a struct member is not binary compatible with IBM XL C/C++ for AIX 16.1.0 or older", | ||
[ | [f]=m, | ||
[ | [a]="alignment of 16 bytes for a struct member is not binary compatible with IBM XL C\\/C\\+\\+ for AIX 16\\.1\\.0 or older", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Waix\\-compat[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Qb,1615397021,Ob}, | ||
[j]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/aix-attr-align.c"]={"clang/test/Sema/aix-attr-align.c:15:7: warning: alignment of 16 bytes for a struct member is not binary compatible with IBM XL C/C++ for AIX 16.1.0 or older [-Waix-compat]"} | |||
} | |||
}, | }, | ||
["warn_nothrow_attribute_ignored"]={ | ["warn_nothrow_attribute_ignored"]={ | ||
[ | [g]="\'nothrow\' attribute conflicts with exception specification; attribute ignored [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="\'nothrow\' attribute conflicts with exception specification; attribute ignored", | ||
[ | [f]=m, | ||
[ | [a]="\'nothrow\' attribute conflicts with exception specification; attribute ignored", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[i]={"d02f4a1043c0",1559237514,"Add Attribute NoThrow as an Exception Specifier Type"}, | [i]={"d02f4a1043c0",1559237514,"Add Attribute NoThrow as an Exception Specifier Type"}, | ||
[j]={{ | [j]={{R,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/nothrow-vs-exception-specs.cpp"]={"clang/test/SemaCXX/nothrow-vs-exception-specs.cpp:45:16: warning: \'nothrow\' attribute conflicts with exception specification; attribute ignored [-Wignored-attributes]","clang/test/SemaCXX/nothrow-vs-exception-specs.cpp:51:12: warning: \'nothrow\' attribute conflicts with exception specification; attribute ignored [-Wignored-attributes]","clang/test/SemaCXX/nothrow-vs-exception-specs.cpp:55:12: warning: \'nothrow\' attribute conflicts with exception specification; attribute ignored [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_npot_ms_struct"]={ | ["warn_npot_ms_struct"]={ | ||
[ | [g]="ms_struct may not produce Microsoft-compatible layouts with fundamental data types with sizes that aren\'t a power of two [-Wincompatible-ms-struct]", | ||
[c]= | [c]=Cb, | ||
[d]= | [d]=Hb, | ||
[ | [n]={"incompatible-ms-struct"}, | ||
[ | [o]="incompatible-ms-struct", | ||
[ | [e]="ms_struct may not produce Microsoft-compatible layouts with fundamental data types with sizes that aren\'t a power of two", | ||
[ | [f]=Ib, | ||
[ | [a]="ms_struct may not produce Microsoft\\-compatible layouts with fundamental data types with sizes that aren\'t a power of two", | ||
[ | [b]=" \\[[^\\]]*\\-Wincompatible\\-ms\\-struct[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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,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);"}} | [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"]={ | ||
[ | [g]="A attribute only applies to ... parameters [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="%0 attribute only applies to %select{Objective-C object|pointer|pointer-to-CF-pointer|pointer/reference-to-OSObject-pointer}1 parameters", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) attribute only applies to (?:Objective\\-C object|pointer|pointer\\-to\\-CF\\-pointer|pointer\\/reference\\-to\\-OSObject\\-pointer) parameters", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{C,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,"},{C,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),"},{C,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,"},{C,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();"},{C,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();"},{C,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,"},{C,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,"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/attr-cf_returns.m"]={"clang/test/SemaObjC/attr-cf_returns.m:38:19: warning: \'cf_returns_retained\' attribute only applies to pointer-to-CF-pointer parameters [-Wignored-attributes]","clang/test/SemaObjC/attr-cf_returns.m:39:19: warning: \'cf_returns_retained\' attribute only applies to pointer-to-CF-pointer parameters [-Wignored-attributes]","clang/test/SemaObjC/attr-cf_returns.m:40:19: warning: \'cf_returns_retained\' attribute only applies to pointer-to-CF-pointer parameters [-Wignored-attributes]","clang/test/SemaObjC/attr-cf_returns.m:41:19: warning: \'cf_returns_retained\' attribute only applies to pointer-to-CF-pointer parameters [-Wignored-attributes]","clang/test/SemaObjC/attr-cf_returns.m:42:19: warning: \'cf_returns_retained\' attribute only applies to pointer-to-CF-pointer parameters [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_ns_attribute_wrong_return_type"]={ | ["warn_ns_attribute_wrong_return_type"]={ | ||
[ | [g]="A attribute only applies to ... that return ... [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="%0 attribute only applies to %select{functions|methods|properties}1 that return %select{an Objective-C object|a pointer|a non-retainable pointer}2", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) attribute only applies to (?:functions|methods|properties) that return (?:an Objective\\-C object|a pointer|a non\\-retainable pointer)", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{C,5952,"bool Sema::checkNSReturnsRetainedReturnType(SourceLocation Loc, QualType QT) {\n Diag(Loc, diag::warn_ns_attribute_wrong_return_type) << \"\'ns_returns_retained\'\" << 0 << 0;"},{C,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();"},{C,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/attr-cf_returns.m"]={"clang/test/SemaObjC/attr-cf_returns.m:18:1: warning: \'cf_returns_retained\' attribute only applies to functions that return a pointer [-Wignored-attributes]","clang/test/SemaObjC/attr-cf_returns.m:19:1: warning: \'cf_returns_retained\' attribute only applies to functions that return a pointer [-Wignored-attributes]","clang/test/SemaObjC/attr-cf_returns.m:25:1: warning: \'cf_returns_retained\' attribute only applies to methods that return a pointer [-Wignored-attributes]","clang/test/SemaObjC/attr-cf_returns.m:26:1: warning: \'cf_returns_retained\' attribute only applies to methods that return a pointer [-Wignored-attributes]","clang/test/SemaObjC/attr-cf_returns.m:31:1: warning: \'cf_returns_retained\' attribute only applies to properties that return a pointer [-Wignored-attributes]","clang/test/SemaObjC/attr-cf_returns.m:32:1: warning: \'cf_returns_retained\' attribute only applies to properties that return a pointer [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_nsconsumed_attribute_mismatch"]={ | ["warn_nsconsumed_attribute_mismatch"]={ | ||
[ | [g]="overriding method has mismatched ns_consumed attribute on its parameter [-Wnsconsumed-mismatch]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"nsconsumed-mismatch"}, | ||
[ | [o]="nsconsumed-mismatch", | ||
[ | [e]="overriding method has mismatched ns_consumed attribute on its parameter", | ||
[ | [f]=m, | ||
[ | [a]="overriding method has mismatched ns_consumed attribute on its parameter", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnsconsumed\\-mismatch[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{P,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/arc-nsconsumed-errors.m"]={"clang/test/SemaObjC/arc-nsconsumed-errors.m:29:44: warning: overriding method has mismatched ns_consumed attribute on its parameter [-Wnsconsumed-mismatch]"} | |||
} | |||
}, | }, | ||
["warn_nsdictionary_duplicate_key"]={ | ["warn_nsdictionary_duplicate_key"]={ | ||
[ | [g]="duplicate key in dictionary literal [-Wobjc-dictionary-duplicate-keys]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-dictionary-duplicate-keys"}, | ||
[ | [o]="objc-dictionary-duplicate-keys", | ||
[ | [e]="duplicate key in dictionary literal", | ||
[ | [f]=m, | ||
[ | [a]="duplicate key in dictionary literal", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-dictionary\\-duplicate\\-keys[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={gc,1576908663,hc}, | ||
[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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/dictionary-literal-duplicates.m"]={"clang/test/SemaObjC/dictionary-literal-duplicates.m:29:5: warning: duplicate key in dictionary literal [-Wobjc-dictionary-duplicate-keys]","clang/test/SemaObjC/dictionary-literal-duplicates.m:30:5: warning: duplicate key in dictionary literal [-Wobjc-dictionary-duplicate-keys]","clang/test/SemaObjC/dictionary-literal-duplicates.m:34:5: warning: duplicate key in dictionary literal [-Wobjc-dictionary-duplicate-keys]","clang/test/SemaObjC/dictionary-literal-duplicates.m:35:5: warning: duplicate key in dictionary literal [-Wobjc-dictionary-duplicate-keys]","clang/test/SemaObjC/dictionary-literal-duplicates.m:36:5: warning: duplicate key in dictionary literal [-Wobjc-dictionary-duplicate-keys]","clang/test/SemaObjC/dictionary-literal-duplicates.m:37:5: warning: duplicate key in dictionary literal [-Wobjc-dictionary-duplicate-keys]","clang/test/SemaObjC/dictionary-literal-duplicates.m:38:5: warning: duplicate key in dictionary literal [-Wobjc-dictionary-duplicate-keys]","clang/test/SemaObjC/dictionary-literal-duplicates.m:40:5: warning: duplicate key in dictionary literal [-Wobjc-dictionary-duplicate-keys]","clang/test/SemaObjC/dictionary-literal-duplicates.m:46:5: warning: duplicate key in dictionary literal [-Wobjc-dictionary-duplicate-keys]","clang/test/SemaObjC/dictionary-literal-duplicates.m:47:5: warning: duplicate key in dictionary literal [-Wobjc-dictionary-duplicate-keys]","clang/test/SemaObjC/dictionary-literal-duplicates.m:55:5: warning: duplicate key in dictionary literal [-Wobjc-dictionary-duplicate-keys]","clang/test/SemaObjC/dictionary-literal-duplicates.m:55:5: warning: duplicate key in dictionary literal [-Wobjc-dictionary-duplicate-keys]"} | |||
} | |||
}, | }, | ||
["warn_nsobject_attribute"]={ | ["warn_nsobject_attribute"]={ | ||
[ | [g]="\'NSObject\' attribute may be put on a typedef only; attribute is ignored [-WNSObject-attribute]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"NSObject-attribute"}, | ||
[ | [o]="NSObject-attribute", | ||
[ | [e]="\'NSObject\' attribute may be put on a typedef only; attribute is ignored", | ||
[ | [f]=m, | ||
[ | [a]="\'NSObject\' attribute may be put on a typedef only; attribute is ignored", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-WNSObject\\-attribute[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{C,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/nsobject-attribute.m"]={"clang/test/SemaObjC/nsobject-attribute.m:53:37: warning: \'NSObject\' attribute may be put on a typedef only; attribute is ignored [-WNSObject-attribute]","clang/test/SemaObjC/nsobject-attribute.m:59:37: warning: \'NSObject\' attribute may be put on a typedef only; attribute is ignored [-WNSObject-attribute]"} | |||
} | |||
}, | }, | ||
["warn_nsreturns_retained_attribute_mismatch"]={ | ["warn_nsreturns_retained_attribute_mismatch"]={ | ||
[ | [g]="overriding method has mismatched ns_returns_... attributes [-Wnsreturns-mismatch]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"nsreturns-mismatch"}, | ||
[ | [o]="nsreturns-mismatch", | ||
[ | [e]="overriding method has mismatched ns_returns_%select{not_retained|retained}0 attributes", | ||
[ | [f]=m, | ||
[ | [a]="overriding method has mismatched ns_returns_(?:not_retained|retained) attributes", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnsreturns\\-mismatch[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{P,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;"},{P,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;"}}, | ||
[p]={ | |||
["clang/test/ARCMT/objcmt-arc-cf-annotations.m"]={"clang/test/ARCMT/objcmt-arc-cf-annotations.m:1687:1: warning: overriding method has mismatched ns_returns_retained attributes [-Wnsreturns-mismatch]","clang/test/ARCMT/objcmt-arc-cf-annotations.m:1691:1: warning: overriding method has mismatched ns_returns_retained attributes [-Wnsreturns-mismatch]"} | |||
} | |||
}, | }, | ||
["warn_null_arg"]={ | ["warn_null_arg"]={ | ||
[ | [g]="null passed to a callee that requires a non-null argument [-Wnonnull]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v,"nonnull"}, | ||
[ | [o]="nonnull", | ||
[ | [e]="null passed to a callee that requires a non-null argument", | ||
[ | [f]=m, | ||
[ | [a]="null passed to a callee that requires a non\\-null argument", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnonnull[^\\]]*\\]", | ||
[ | [h]=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]={{ | [j]={{y,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());"},{A,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();"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/kindof.m"]={"clang/test/SemaObjC/kindof.m:374:19: warning: null passed to a callee that requires a non-null argument [-Wnonnull]","clang/test/SemaObjC/kindof.m:455:35: warning: null passed to a callee that requires a non-null argument [-Wnonnull]"} | |||
} | |||
}, | }, | ||
["warn_null_in_arithmetic_operation"]={ | ["warn_null_in_arithmetic_operation"]={ | ||
[ | [g]="use of NULL in arithmetic operation [-Wnull-arithmetic]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"null-arithmetic"}, | ||
[ | [o]="null-arithmetic", | ||
[ | [e]="use of NULL in arithmetic operation", | ||
[ | [f]=m, | ||
[ | [a]="use of NULL in arithmetic operation", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnull\\-arithmetic[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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());"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:14:16: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:14:24: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:15:16: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:15:24: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:16:16: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:16:24: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:18:16: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:18:24: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:19:16: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:19:25: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:20:16: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:20:25: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:21:16: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:21:24: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:23:16: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:23:24: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:24:16: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:24:24: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:25:16: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:25:24: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:29:16: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:29:26: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:37:16: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:37:24: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:38:16: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:38:28: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:41:12: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:42:12: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:43:12: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:45:12: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:46:12: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:47:12: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:48:12: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:50:12: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:51:12: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:52:12: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:54:5: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:55:5: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:56:5: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:58:5: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:59:5: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:60:5: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:61:5: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:63:5: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:64:5: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:65:5: warning: use of NULL in arithmetic operation [-Wnull-arithmetic]"} | |||
} | |||
}, | }, | ||
["warn_null_in_comparison_operation"]={ | ["warn_null_in_comparison_operation"]={ | ||
[ | [g]="comparison between NULL and non-pointer ... [-Wnull-arithmetic]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"null-arithmetic"}, | ||
[ | [o]="null-arithmetic", | ||
[ | [e]="comparison between NULL and non-pointer %select{(%1 and NULL)|(NULL and %1)}0", | ||
[ | [f]=m, | ||
[ | [a]="comparison between NULL and non\\-pointer (?:\\((.*?) and NULL\\)|\\(NULL and (.*?)\\))", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnull\\-arithmetic[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:67:9: warning: comparison between NULL and non-pointer (\'int\' and NULL) [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:67:21: warning: comparison between NULL and non-pointer (\'int\' and NULL) [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:68:12: warning: comparison between NULL and non-pointer (NULL and \'int\') [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:68:24: warning: comparison between NULL and non-pointer (NULL and \'int\') [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:69:9: warning: comparison between NULL and non-pointer (\'int\' and NULL) [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:69:22: warning: comparison between NULL and non-pointer (\'int\' and NULL) [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:70:12: warning: comparison between NULL and non-pointer (NULL and \'int\') [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:70:25: warning: comparison between NULL and non-pointer (NULL and \'int\') [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:71:9: warning: comparison between NULL and non-pointer (\'int\' and NULL) [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:71:22: warning: comparison between NULL and non-pointer (\'int\' and NULL) [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:72:12: warning: comparison between NULL and non-pointer (NULL and \'int\') [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:72:25: warning: comparison between NULL and non-pointer (NULL and \'int\') [-Wnull-arithmetic]","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:85:16: warning: comparison between NULL and non-pointer (NULL and \'int\') [-Wnull-arithmetic]"} | |||
} | |||
}, | }, | ||
["warn_null_pointer_compare"]={ | ["warn_null_pointer_compare"]={ | ||
[ | [g]="comparison of ... \'A\' ...equal to a null pointer is always ... [-Wtautological-pointer-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,"address",u,v,ec,"tautological-pointer-compare"}, | ||
[ | [o]="tautological-pointer-compare", | ||
[ | [e]="comparison of %select{address of|function|array}0 \'%1\' %select{not |}2equal to a null pointer is always %select{true|false}2", | ||
[ | [f]=m, | ||
[ | [a]="comparison of (?:address of|function|array) \'(.*?)\' (?:not |)equal to a null pointer is always (?:true|false)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtautological\\-pointer\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/conditional-expr.c"]={"clang/test/Sema/conditional-expr.c:89:15: warning: comparison of address of \'x\' not equal to a null pointer is always true [-Wtautological-pointer-compare]"} | |||
} | |||
}, | }, | ||
["warn_null_resettable_setter"]={ | ["warn_null_resettable_setter"]={ | ||
[ | [g]="synthesized setter A for null_resettable property B does not handle nil [-Wnullability]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"nullability"}, | ||
[ | [o]="nullability", | ||
[ | [e]="synthesized setter %0 for null_resettable property %1 does not handle nil", | ||
[ | [f]=m, | ||
[ | [a]="synthesized setter (.*?) for null_resettable property (.*?) does not handle nil", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]", | ||
[ | [h]=Mb, | ||
[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]={{ | [j]={{T,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();"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/nullability.m"]={"clang/test/SemaObjC/nullability.m:209:13: warning: synthesized setter \'setResettable3:\' for null_resettable property \'resettable3\' does not handle nil [-Wnullability]","clang/test/SemaObjC/nullability.m:199:1: warning: synthesized setter \'setResettable4:\' for null_resettable property \'resettable4\' does not handle nil [-Wnullability]"} | |||
} | |||
}, | }, | ||
["warn_null_ret"]={ | ["warn_null_ret"]={ | ||
[ | [g]="null returned from ... that requires a non-null return value [-Wnonnull]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v,"nonnull"}, | ||
[ | [o]="nonnull", | ||
[ | [e]="null returned from %select{function|method}0 that requires a non-null return value", | ||
[ | [f]=m, | ||
[ | [a]="null returned from (?:function|method) that requires a non\\-null return value", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnonnull[^\\]]*\\]", | ||
[ | [h]=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]={{ | [j]={{y,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();"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/nonnull.cpp"]={"clang/test/SemaCXX/nonnull.cpp:12:5: warning: null returned from function that requires a non-null return value [-Wnonnull]"} | |||
} | |||
}, | }, | ||
["warn_null_statement"]={ | ["warn_null_statement"]={ | ||
[ | [g]="empty expression statement has no effect; remove unnecessary \';\' to silence this warning [-Wextra-semi-stmt]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"extra-semi-stmt"}, | ||
[ | [o]="extra-semi-stmt", | ||
[ | [e]="empty expression statement has no effect; remove unnecessary \';\' to silence this warning", | ||
[ | [f]=m, | ||
[ | [a]="empty expression statement has no effect; remove unnecessary \';\' to silence this warning", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wextra\\-semi\\-stmt[^\\]]*\\]", | ||
[ | [h]=B, | ||
[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",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));"}} | [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));"}}, | ||
[p]={ | |||
["clang/test/Parser/extra-semi-resulting-in-nullstmt.cpp"]={"clang/test/Parser/extra-semi-resulting-in-nullstmt.cpp:16:3: warning: empty expression statement has no effect; remove unnecessary \';\' to silence this warning [-Wextra-semi-stmt]","clang/test/Parser/extra-semi-resulting-in-nullstmt.cpp:28:5: warning: empty expression statement has no effect; remove unnecessary \';\' to silence this warning [-Wextra-semi-stmt]","clang/test/Parser/extra-semi-resulting-in-nullstmt.cpp:31:5: warning: empty expression statement has no effect; remove unnecessary \';\' to silence this warning [-Wextra-semi-stmt]","clang/test/Parser/extra-semi-resulting-in-nullstmt.cpp:35:5: warning: empty expression statement has no effect; remove unnecessary \';\' to silence this warning [-Wextra-semi-stmt]","clang/test/Parser/extra-semi-resulting-in-nullstmt.cpp:46:18: warning: empty expression statement has no effect; remove unnecessary \';\' to silence this warning [-Wextra-semi-stmt]","clang/test/Parser/extra-semi-resulting-in-nullstmt.cpp:48:19: warning: empty expression statement has no effect; remove unnecessary \';\' to silence this warning [-Wextra-semi-stmt]"} | |||
} | |||
}, | }, | ||
["warn_nullability_declspec"]={ | ["warn_nullability_declspec"]={ | ||
[ | [g]="nullability specifier A cannot be applied to non-pointer type B; did you mean to apply the specifier to the ...? [-Wnullability-declspec]", | ||
[c]= | [c]=Cb, | ||
[d]= | [d]=Hb, | ||
[ | [n]={"nullability-declspec"}, | ||
[ | [o]="nullability-declspec", | ||
[ | [e]="nullability specifier %0 cannot be applied to non-pointer type %1; did you mean to apply the specifier to the %select{pointer|block pointer|member pointer|function pointer|member function pointer}2?", | ||
[ | [f]=Ib, | ||
[ | [a]="nullability specifier (.*?) cannot be applied to non\\-pointer type (.*?); did you mean to apply the specifier to the (?:pointer|block pointer|member pointer|function pointer|member function pointer)\\?", | ||
[ | [b]=" \\[[^\\]]*\\-Wnullability\\-declspec[^\\]]*\\]", | ||
[ | [h]=Mb, | ||
[i]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++."}, | [i]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++."}, | ||
[j]={{ | [j]={{R,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/nullability-declspec.cpp"]={"clang/test/SemaCXX/nullability-declspec.cpp:5:1: error: nullability specifier \'_Nullable\' cannot be applied to non-pointer type \'int\'; did you mean to apply the specifier to the pointer? [-Wnullability-declspec]","clang/test/SemaCXX/nullability-declspec.cpp:6:1: error: nullability specifier \'_Nullable\' cannot be applied to non-pointer type \'int\'; did you mean to apply the specifier to the function pointer? [-Wnullability-declspec]","clang/test/SemaCXX/nullability-declspec.cpp:7:1: error: nullability specifier \'_Nonnull\' cannot be applied to non-pointer type \'int\'; did you mean to apply the specifier to the block pointer? [-Wnullability-declspec]","clang/test/SemaCXX/nullability-declspec.cpp:8:1: error: nullability specifier \'_Nonnull\' cannot be applied to non-pointer type \'int\'; did you mean to apply the specifier to the member pointer? [-Wnullability-declspec]","clang/test/SemaCXX/nullability-declspec.cpp:9:1: error: nullability specifier \'_Nonnull\' cannot be applied to non-pointer type \'int\'; did you mean to apply the specifier to the member function pointer? [-Wnullability-declspec]"} | |||
} | |||
}, | }, | ||
["warn_nullability_duplicate"]={ | ["warn_nullability_duplicate"]={ | ||
[ | [g]="duplicate nullability specifier A [-Wnullability]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"nullability"}, | ||
[ | [o]="nullability", | ||
[ | [e]="duplicate nullability specifier %0", | ||
[ | [f]=m, | ||
[ | [a]="duplicate nullability specifier (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]", | ||
[ | [h]=Mb, | ||
[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",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());"},{ | [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());"},{R,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/nullability.m"]={"clang/test/SemaObjC/nullability.m:40:4: warning: duplicate nullability specifier \'nonnull\' [-Wnullability]","clang/test/SemaObjC/nullability.m:46:25: warning: duplicate nullability specifier \'nonnull\' [-Wnullability]","clang/test/SemaObjC/nullability.m:49:35: warning: duplicate nullability specifier \'nullable\' [-Wnullability]","clang/test/SemaObjC/nullability.m:57:25: warning: duplicate nullability specifier \'nonnull\' [-Wnullability]"} | |||
} | |||
}, | }, | ||
["warn_nullability_inferred_on_nested_type"]={ | ["warn_nullability_inferred_on_nested_type"]={ | ||
[ | [g]="inferring \'_Nonnull\' for pointer type within ... is deprecated [-Wnullability-inferred-on-nested-type]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"nullability-inferred-on-nested-type"}, | ||
[ | [o]="nullability-inferred-on-nested-type", | ||
[ | [e]="inferring \'_Nonnull\' for pointer type within %select{array|reference}0 is deprecated", | ||
[ | [f]=m, | ||
[ | [a]="inferring \'_Nonnull\' for pointer type within (?:array|reference) is deprecated", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnullability\\-inferred\\-on\\-nested\\-type[^\\]]*\\]", | ||
[ | [h]=Mb, | ||
[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]={{ | [j]={{R,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);"}}, | ||
[p]={ | |||
["clang/test/FixIt/nullability.mm"]={"clang/test/FixIt/nullability.mm:12:13: warning: inferring \'_Nonnull\' for pointer type within array is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:15:12: warning: inferring \'_Nonnull\' for pointer type within array is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:18:13: warning: inferring \'_Nonnull\' for pointer type within array is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:25:8: warning: inferring \'_Nonnull\' for pointer type within array is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:30:8: warning: inferring \'_Nonnull\' for pointer type within array is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:34:13: warning: inferring \'_Nonnull\' for pointer type within reference is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:37:13: warning: inferring \'_Nonnull\' for pointer type within reference is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:40:13: warning: inferring \'_Nonnull\' for pointer type within reference is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:43:13: warning: inferring \'_Nonnull\' for pointer type within reference is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:46:13: warning: inferring \'_Nonnull\' for pointer type within array is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:49:13: warning: inferring \'_Nonnull\' for pointer type within array is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:52:8: warning: inferring \'_Nonnull\' for pointer type within reference is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:54:8: warning: inferring \'_Nonnull\' for pointer type within reference is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:58:25: warning: inferring \'_Nonnull\' for pointer type within array is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:61:26: warning: inferring \'_Nonnull\' for pointer type within array is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:64:27: warning: inferring \'_Nonnull\' for pointer type within array is deprecated [-Wnullability-inferred-on-nested-type]","clang/test/FixIt/nullability.mm:67:28: warning: inferring \'_Nonnull\' for pointer type within array is deprecated [-Wnullability-inferred-on-nested-type]"} | |||
} | |||
}, | }, | ||
["warn_nullability_lost"]={ | ["warn_nullability_lost"]={ | ||
[ | [g]="implicit conversion from nullable pointer A to non-nullable pointer type B [-Wnullable-to-nonnull-conversion]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"nullable-to-nonnull-conversion"}, | ||
[ | [o]="nullable-to-nonnull-conversion", | ||
[ | [e]="implicit conversion from nullable pointer %0 to non-nullable pointer type %1", | ||
[ | [f]=m, | ||
[ | [a]="implicit conversion from nullable pointer (.*?) to non\\-nullable pointer type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnullable\\-to\\-nonnull\\-conversion[^\\]]*\\]", | ||
[ | [h]=Mb, | ||
[i]={"b4866e85e5ff",1434737599,"Diagnose unsafe uses of nil and __nonnull pointers."}, | [i]={"b4866e85e5ff",1434737599,"Diagnose unsafe uses of nil and __nonnull pointers."}, | ||
[j]={{ | [j]={{W,585,"void Sema::diagnoseNullableToNonnullConversion(QualType DstType, QualType SrcType, SourceLocation Loc) {\n Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/nullability.m"]={"clang/test/SemaObjC/nullability.m:252:7: warning: implicit conversion from nullable pointer \'NSFoo * _Nullable\' to non-nullable pointer type \'NSFoo * _Nonnull\' [-Wnullable-to-nonnull-conversion]","clang/test/SemaObjC/nullability.m:255:7: warning: implicit conversion from nullable pointer \'NSFoo * _Nullable\' to non-nullable pointer type \'NSFoo * _Nonnull\' [-Wnullable-to-nonnull-conversion]","clang/test/SemaObjC/nullability.m:256:7: warning: implicit conversion from nullable pointer \'NSFoo * _Nullable\' to non-nullable pointer type \'NSFoo * _Nonnull\' [-Wnullable-to-nonnull-conversion]","clang/test/SemaObjC/nullability.m:257:7: warning: implicit conversion from nullable pointer \'NSFoo * _Nullable\' to non-nullable pointer type \'NSFoo * _Nonnull\' [-Wnullable-to-nonnull-conversion]","clang/test/SemaObjC/nullability.m:258:7: warning: implicit conversion from nullable pointer \'NSFoo * _Nullable\' to non-nullable pointer type \'NSFoo * _Nonnull\' [-Wnullable-to-nonnull-conversion]","clang/test/SemaObjC/nullability.m:260:7: warning: implicit conversion from nullable pointer \'NSFoo * _Nullable\' to non-nullable pointer type \'NSFoo * _Nonnull\' [-Wnullable-to-nonnull-conversion]","clang/test/SemaObjC/nullability.m:264:7: warning: implicit conversion from nullable pointer \'NSFoo * _Nullable\' to non-nullable pointer type \'NSFoo * _Nonnull\' [-Wnullable-to-nonnull-conversion]","clang/test/SemaObjC/nullability.m:267:7: warning: implicit conversion from nullable pointer \'NSFoo * _Nullable\' to non-nullable pointer type \'NSFoo * _Nonnull\' [-Wnullable-to-nonnull-conversion]","clang/test/SemaObjC/nullability.m:268:7: warning: implicit conversion from nullable pointer \'NSFoo * _Nullable\' to non-nullable pointer type \'NSFoo * _Nonnull\' [-Wnullable-to-nonnull-conversion]","clang/test/SemaObjC/nullability.m:269:7: warning: implicit conversion from nullable pointer \'NSFoo * _Nullable\' to non-nullable pointer type \'NSFoo * _Nonnull\' [-Wnullable-to-nonnull-conversion]","clang/test/SemaObjC/nullability.m:270:7: warning: implicit conversion from nullable pointer \'NSFoo * _Nullable_result\' to non-nullable pointer type \'NSFoo * _Nonnull\' [-Wnullable-to-nonnull-conversion]"} | |||
} | |||
}, | }, | ||
["warn_nullability_missing"]={ | ["warn_nullability_missing"]={ | ||
[ | [g]="... is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"nullability-completeness"}, | ||
[ | [o]="nullability-completeness", | ||
[ | [e]="%select{pointer|block pointer|member pointer}0 is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)", | ||
[ | [f]=m, | ||
[ | [a]="(?:pointer|block pointer|member pointer) is missing a nullability type specifier \\(_Nonnull, _Nullable, or _Null_unspecified\\)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnullability\\-completeness[^\\]]*\\]", | ||
[ | [h]=Mb, | ||
[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]={{ | [j]={{R,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);"},{R,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:11:13: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:43:12: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:43:13: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:46:10: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:51:14: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:51:16: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:57:9: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:57:19: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:64:14: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:64:15: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:74:18: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:80:19: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:80:20: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:90:13: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:114:12: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:117:10: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:120:10: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:125:10: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:130:4: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]"} | |||
} | |||
}, | }, | ||
["warn_nullability_missing_array"]={ | ["warn_nullability_missing_array"]={ | ||
[ | [g]="array parameter is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness-on-arrays]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"nullability-completeness","nullability-completeness-on-arrays"}, | ||
[ | [o]="nullability-completeness-on-arrays", | ||
[ | [e]="array parameter is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)", | ||
[ | [f]=m, | ||
[ | [a]="array parameter is missing a nullability type specifier \\(_Nonnull, _Nullable, or _Null_unspecified\\)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnullability\\-completeness\\-on\\-arrays[^\\]]*\\]", | ||
[ | [h]=Mb, | ||
[i]={"f85a9b06b826",1478820506,"Add -Wnullability-completeness-on-arrays."}, | [i]={"f85a9b06b826",1478820506,"Add -Wnullability-completeness-on-arrays."}, | ||
[j]={{ | [j]={{R,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);"},{R,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;"}}, | ||
[p]={ | |||
["clang/test/FixIt/nullability.mm"]={"clang/test/FixIt/Inputs/nullability.h:3:26: warning: array parameter is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness-on-arrays]","clang/test/FixIt/Inputs/nullability.h:9:34: warning: array parameter is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness-on-arrays]","clang/test/FixIt/Inputs/nullability.h:15:34: warning: array parameter is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness-on-arrays]"} | |||
} | |||
}, | }, | ||
["warn_objc_boxing_invalid_utf8_string"]={ | ["warn_objc_boxing_invalid_utf8_string"]={ | ||
[ | [g]="string is ill-formed as UTF-8 and will become a null A when boxed [-Wobjc-boxing]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-boxing"}, | ||
[ | [o]="objc-boxing", | ||
[ | [e]="string is ill-formed as UTF-8 and will become a null %0 when boxed", | ||
[ | [f]=m, | ||
[ | [a]="string is ill\\-formed as UTF\\-8 and will become a null (.*?) when boxed", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-boxing[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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,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();"}} | [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();"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/transfer-boxed-string-nullability.m"]={"clang/test/SemaObjC/transfer-boxed-string-nullability.m:26:18: warning: string is ill-formed as UTF-8 and will become a null \'NSString *\' when boxed [-Wobjc-boxing]","clang/test/SemaObjC/transfer-boxed-string-nullability.m:27:18: warning: string is ill-formed as UTF-8 and will become a null \'NSString *\' when boxed [-Wobjc-boxing]"} | |||
} | |||
}, | }, | ||
["warn_objc_cdirective_format_string"]={ | ["warn_objc_cdirective_format_string"]={ | ||
[ | [g]="using A directive in ... which is being passed as a formatting argument to the formatting ... [-Wcstring-format-directive]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"cstring-format-directive"}, | ||
[ | [o]="cstring-format-directive", | ||
[ | [e]="using %0 directive in %select{NSString|CFString}1 which is being passed as a formatting argument to the formatting %select{method|CFfunction}2", | ||
[ | [f]=m, | ||
[ | [a]="using (.*?) directive in (?:NSString|CFString) which is being passed as a formatting argument to the formatting (?:method|CFfunction)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wcstring\\-format\\-directive[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/format-cstrings-warning.m"]={"clang/test/SemaObjC/format-cstrings-warning.m:33:24: warning: using %s directive in NSString which is being passed as a formatting argument to the formatting method [-Wcstring-format-directive]","clang/test/SemaObjC/format-cstrings-warning.m:34:41: warning: using %s directive in NSString which is being passed as a formatting argument to the formatting method [-Wcstring-format-directive]","clang/test/SemaObjC/format-cstrings-warning.m:35:25: warning: using %s directive in NSString which is being passed as a formatting argument to the formatting method [-Wcstring-format-directive]","clang/test/SemaObjC/format-cstrings-warning.m:36:25: warning: using %s directive in NSString which is being passed as a formatting argument to the formatting method [-Wcstring-format-directive]","clang/test/SemaObjC/format-cstrings-warning.m:37:39: warning: using %s directive in NSString which is being passed as a formatting argument to the formatting method [-Wcstring-format-directive]","clang/test/SemaObjC/format-cstrings-warning.m:63:64: warning: using %s directive in CFString which is being passed as a formatting argument to the formatting CFfunction [-Wcstring-format-directive]","clang/test/SemaObjC/format-cstrings-warning.m:64:82: warning: using %s directive in CFString which is being passed as a formatting argument to the formatting CFfunction [-Wcstring-format-directive]","clang/test/SemaObjC/format-cstrings-warning.m:74:11: warning: using %s directive in CFString which is being passed as a formatting argument to the formatting CFfunction [-Wcstring-format-directive]","clang/test/SemaObjC/format-cstrings-warning.m:76:43: warning: using %s directive in CFString which is being passed as a formatting argument to the formatting CFfunction [-Wcstring-format-directive]","clang/test/SemaObjC/format-cstrings-warning.m:77:15: warning: using %s directive in CFString which is being passed as a formatting argument to the formatting CFfunction [-Wcstring-format-directive]"} | |||
} | |||
}, | }, | ||
["warn_objc_circular_container"]={ | ["warn_objc_circular_container"]={ | ||
[ | [g]="adding A to B might cause circular dependency in container [-Wobjc-circular-container]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-circular-container"}, | ||
[ | [o]="objc-circular-container", | ||
[ | [e]="adding %0 to %1 might cause circular dependency in container", | ||
[ | [f]=m, | ||
[ | [a]="adding (.*?) to (.*?) might cause circular dependency in container", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-circular\\-container[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"e1d882c726b5",1425491752,"New ObjC warning: circular containers."}, | [i]={"e1d882c726b5",1425491752,"New ObjC warning: circular containers."}, | ||
[j]={{ | [j]={{y,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\'\");"},{y,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;"},{y,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/circular-container.m"]={"clang/test/SemaObjC/circular-container.m:57:3: warning: adding \'_array\' to \'_array\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:58:3: warning: adding \'_dictionary\' to \'_dictionary\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:59:3: warning: adding \'_set\' to \'_set\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:60:3: warning: adding \'_countedSet\' to \'_countedSet\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:61:3: warning: adding \'_orderedSet\' to \'_orderedSet\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:65:3: warning: adding \'a\' to \'a\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:69:3: warning: adding \'d\' to \'d\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:73:3: warning: adding \'s\' to \'s\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:77:3: warning: adding \'s\' to \'s\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:81:3: warning: adding \'s\' to \'s\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:87:3: warning: adding \'a\' to \'a\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:91:3: warning: adding \'d\' to \'d\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:95:3: warning: adding \'s\' to \'s\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:99:3: warning: adding \'s\' to \'s\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:103:3: warning: adding \'s\' to \'s\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:109:3: warning: adding \'a\' to \'a\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:110:3: warning: adding \'a\' to \'a\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:111:3: warning: adding \'a\' to \'a\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:112:3: warning: adding \'a\' to \'a\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:113:3: warning: adding \'a\' to \'a\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:119:3: warning: adding \'d\' to \'d\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:120:3: warning: adding \'d\' to \'d\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:121:3: warning: adding \'d\' to \'d\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:122:3: warning: adding \'d\' to \'d\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:128:3: warning: adding \'s\' to \'s\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:134:3: warning: adding \'s\' to \'s\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:140:3: warning: adding \'s\' to \'s\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:141:3: warning: adding \'s\' to \'s\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:142:3: warning: adding \'s\' to \'s\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:143:3: warning: adding \'s\' to \'s\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:144:3: warning: adding \'s\' to \'s\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:154:3: warning: adding \'self\' to \'super\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:156:3: warning: adding \'self\' to \'self\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:165:3: warning: adding \'self\' to \'super\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:167:3: warning: adding \'self\' to \'self\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:176:3: warning: adding \'self\' to \'super\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:178:3: warning: adding \'self\' to \'self\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:186:3: warning: adding \'a\' to \'a\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:187:3: warning: adding \'a\' to \'a\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:188:3: warning: adding \'a\' to \'a\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:189:3: warning: adding \'a\' to \'a\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:190:3: warning: adding \'a\' to \'a\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:196:3: warning: adding \'d\' to \'d\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:197:3: warning: adding \'d\' to \'d\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:198:3: warning: adding \'d\' to \'d\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:199:3: warning: adding \'d\' to \'d\' might cause circular dependency in container [-Wobjc-circular-container]","clang/test/SemaObjC/circular-container.m:205:3: warning: adding \'s\' to \'s\' might cause circular dependency in container [-Wobjc-circular-container]"} | |||
} | |||
}, | }, | ||
["warn_objc_collection_literal_element"]={ | ["warn_objc_collection_literal_element"]={ | ||
[ | [g]="object of type A is not compatible with ... B [-Wobjc-literal-conversion]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Fb,Wb,"objc-literal-conversion"}, | ||
[ | [o]="objc-literal-conversion", | ||
[ | [e]="object of type %0 is not compatible with %select{array element type|dictionary key type|dictionary value type}1 %2", | ||
[ | [f]=m, | ||
[ | [a]="object of type (.*?) is not compatible with (?:array element type|dictionary key type|dictionary value type) (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-literal\\-conversion[^\\]]*\\]", | ||
[ | [h]=Pb, | ||
[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]={{ | [j]={{y,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();"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/parameterized_classes_collection_literal.m"]={"clang/test/SemaObjC/parameterized_classes_collection_literal.m:39:36: warning: object of type \'NSNumber *\' is not compatible with array element type \'NSString *\' [-Wobjc-literal-conversion]","clang/test/SemaObjC/parameterized_classes_collection_literal.m:41:35: warning: object of type \'NSArray *\' is not compatible with array element type \'NSString *\' [-Wobjc-literal-conversion]","clang/test/SemaObjC/parameterized_classes_collection_literal.m:44:47: warning: object of type \'NSString *\' is not compatible with array element type \'NSArray<NSString *> *\' [-Wobjc-literal-conversion]","clang/test/SemaObjC/parameterized_classes_collection_literal.m:45:48: warning: object of type \'NSNumber *\' is not compatible with array element type \'NSString *\' [-Wobjc-literal-conversion]","clang/test/SemaObjC/parameterized_classes_collection_literal.m:51:5: warning: object of type \'NSNumber *\' is not compatible with dictionary key type \'NSString *\' [-Wobjc-literal-conversion]","clang/test/SemaObjC/parameterized_classes_collection_literal.m:52:16: warning: object of type \'NSString *\' is not compatible with dictionary value type \'NSNumber *\' [-Wobjc-literal-conversion]"} | |||
} | |||
}, | }, | ||
["warn_objc_designated_init_missing_super_call"]={ | ["warn_objc_designated_init_missing_super_call"]={ | ||
[ | [g]="designated initializer missing a \'super\' call to a designated initializer of the super class [-Wobjc-designated-initializers]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,zb}, | ||
[ | [o]=zb, | ||
[ | [e]="designated initializer missing a \'super\' call to a designated initializer of the super class", | ||
[ | [f]=m, | ||
[ | [a]="designated initializer missing a \'super\' call to a designated initializer of the super class", | ||
[ | [b]=mc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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);"}}, | ||
[p]={ | |||
[sc]={"clang/test/SemaObjC/attr-designated-init.m:64:1: warning: designated initializer missing a \'super\' call to a designated initializer of the super class [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:70:1: warning: designated initializer missing a \'super\' call to a designated initializer of the super class [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:73:1: warning: designated initializer missing a \'super\' call to a designated initializer of the super class [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:108:1: warning: designated initializer missing a \'super\' call to a designated initializer of the super class [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:119:1: warning: designated initializer missing a \'super\' call to a designated initializer of the super class [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:132:1: warning: designated initializer missing a \'super\' call to a designated initializer of the super class [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:187:1: warning: designated initializer missing a \'super\' call to a designated initializer of the super class [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:238:1: warning: designated initializer missing a \'super\' call to a designated initializer of the super class [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:294:1: warning: designated initializer missing a \'super\' call to a designated initializer of the super class [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:303:1: warning: designated initializer missing a \'super\' call to a designated initializer of the super class [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:410:1: warning: designated initializer missing a \'super\' call to a designated initializer of the super class [-Wobjc-designated-initializers]"} | |||
} | |||
}, | }, | ||
["warn_objc_designated_init_non_designated_init_call"]={ | ["warn_objc_designated_init_non_designated_init_call"]={ | ||
[ | [g]="designated initializer invoked a non-designated initializer [-Wobjc-designated-initializers]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,zb}, | ||
[ | [o]=zb, | ||
[ | [e]="designated initializer invoked a non-designated initializer", | ||
[ | [f]=m, | ||
[ | [a]="designated initializer invoked a non\\-designated initializer", | ||
[ | [b]=mc, | ||
[ | [h]=q, | ||
[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,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);"}} | [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);"}}, | ||
[p]={ | |||
[sc]={"clang/test/SemaObjC/attr-designated-init.m:71:17: warning: designated initializer invoked a non-designated initializer [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:109:17: warning: designated initializer invoked a non-designated initializer [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:295:18: warning: designated initializer invoked a non-designated initializer [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:304:18: warning: designated initializer invoked a non-designated initializer [-Wobjc-designated-initializers]"} | |||
} | |||
}, | }, | ||
["warn_objc_designated_init_non_super_designated_init_call"]={ | ["warn_objc_designated_init_non_super_designated_init_call"]={ | ||
[ | [g]="designated initializer should only invoke a designated initializer on \'super\' [-Wobjc-designated-initializers]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,zb}, | ||
[ | [o]=zb, | ||
[ | [e]="designated initializer should only invoke a designated initializer on \'super\'", | ||
[ | [f]=m, | ||
[ | [a]="designated initializer should only invoke a designated initializer on \'super\'", | ||
[ | [b]=mc, | ||
[ | [h]=q, | ||
[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,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);"}} | [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);"}}, | ||
[p]={ | |||
[sc]={"clang/test/SemaObjC/attr-designated-init.m:74:16: warning: designated initializer should only invoke a designated initializer on \'super\' [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:136:9: warning: designated initializer should only invoke a designated initializer on \'super\' [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:141:11: warning: designated initializer should only invoke a designated initializer on \'super\' [-Wobjc-designated-initializers]"} | |||
} | |||
}, | }, | ||
["warn_objc_direct_ignored"]={ | ["warn_objc_direct_ignored"]={ | ||
[ | [g]="A attribute isn\'t implemented by this Objective-C runtime [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="%0 attribute isn\'t implemented by this Objective-C runtime", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) attribute isn\'t implemented by this Objective\\-C runtime", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[i]={ | [i]={jc,1573050950,pc}, | ||
[j]={{ | [j]={{C,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;"},{C,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"]={ | ||
[ | [g]="direct attribute on property A ignored (not implemented by this Objective-C runtime) [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="direct attribute on property %0 ignored (not implemented by this Objective-C runtime)", | ||
[ | [f]=m, | ||
[ | [a]="direct attribute on property (.*?) ignored \\(not implemented by this Objective\\-C runtime\\)", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[i]={ | [i]={jc,1573050950,pc}, | ||
[j]={{ | [j]={{T,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"]={ | ||
[ | [g]="method override for the designated initializer of the superclass A not found [-Wobjc-designated-initializers]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,zb}, | ||
[ | [o]=zb, | ||
[ | [e]="method override for the designated initializer of the superclass %objcinstance0 not found", | ||
[ | [f]=m, | ||
[ | [a]="method override for the designated initializer of the superclass (.*?) not found", | ||
[ | [b]=mc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{T,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();"}}, | ||
[p]={ | |||
[sc]={"clang/test/SemaObjC/attr-designated-init.m:92:17: warning: method override for the designated initializer of the superclass \'-initB1\' not found [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:92:17: warning: method override for the designated initializer of the superclass \'-initB3\' not found [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:107:17: warning: method override for the designated initializer of the superclass \'-initS1\' not found [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:155:17: warning: method override for the designated initializer of the superclass \'-initB1\' not found [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:155:17: warning: method override for the designated initializer of the superclass \'-initB3\' not found [-Wobjc-designated-initializers]"} | |||
} | |||
}, | }, | ||
["warn_objc_invalid_bridge"]={ | ["warn_objc_invalid_bridge"]={ | ||
[ | [g]="A bridges to B, not C [-Wbridge-cast]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"bridge-cast"}, | ||
[ | [o]="bridge-cast", | ||
[ | [e]="%0 bridges to %1, not %2", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) bridges to (.*?), not (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wbridge\\-cast[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"f07183ce9402",1384566325,"ObjetiveC ARC. Start diagnosing invalid toll free bridging."}, | [i]={"f07183ce9402",1384566325,"ObjetiveC ARC. Start diagnosing invalid toll free bridging."}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:56:33: warning: \'CFErrorRef2\' (aka \'__CFErrorRef *\') bridges to NSError, not \'NSString\' [-Wbridge-cast]","clang/test/SemaObjCXX/objcbridge-static-cast.mm:63:31: warning: \'CFErrorRef2\' (aka \'__CFErrorRef *\') bridges to NSError, not \'MyError\' [-Wbridge-cast]","clang/test/SemaObjCXX/objcbridge-static-cast.mm:77:28: warning: \'CFErrorRef2\' (aka \'__CFErrorRef *\') bridges to NSError, not \'Class\' [-Wbridge-cast]","clang/test/SemaObjCXX/objcbridge-static-cast.mm:95:38: warning: \'CFErrorRef\' (aka \'__CFErrorRef *\') bridges to NSError, not \'id<P1,P2,P4>\' [-Wbridge-cast]","clang/test/SemaObjCXX/objcbridge-static-cast.mm:114:38: warning: \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') bridges to MyError, not \'id<P1,P2,P4>\' [-Wbridge-cast]"} | |||
} | |||
}, | }, | ||
["warn_objc_invalid_bridge_to_cf"]={ | ["warn_objc_invalid_bridge_to_cf"]={ | ||
[ | [g]="A cannot bridge to B [-Wbridge-cast]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"bridge-cast"}, | ||
[ | [o]="bridge-cast", | ||
[ | [e]="%0 cannot bridge to %1", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) cannot bridge to (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wbridge\\-cast[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"8a0210e535c5",1384629392,"ObjectiveC ARC. Validate toll free bridge casting"}, | [i]={"8a0210e535c5",1384629392,"ObjectiveC ARC. Validate toll free bridge casting"}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:73:33: warning: \'NSString\' cannot bridge to \'CFErrorRef\' (aka \'__CFErrorRef *\') [-Wbridge-cast]","clang/test/SemaObjCXX/objcbridge-static-cast.mm:81:33: warning: \'Class\' cannot bridge to \'CFErrorRef\' (aka \'__CFErrorRef *\') [-Wbridge-cast]"} | |||
} | |||
}, | }, | ||
["warn_objc_isa_assign"]={ | ["warn_objc_isa_assign"]={ | ||
[ | [g]="assignment to Objective-C\'s isa is deprecated in favor of object_setClass() [-Wdeprecated-objc-isa-usage]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"deprecated-objc-isa-usage"}, | ||
[ | [o]="deprecated-objc-isa-usage", | ||
[ | [e]="assignment to Objective-C\'s isa is deprecated in favor of object_setClass()", | ||
[ | [f]=m, | ||
[ | [a]="assignment to Objective\\-C\'s isa is deprecated in favor of object_setClass\\(\\)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-objc\\-isa\\-usage[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"84510744d965",1364419165,"Objective-C: Issue more precise warning when user"}, | [i]={"84510744d965",1364419165,"Objective-C: Issue more precise warning when user"}, | ||
[j]={{ | [j]={{A,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, \")\");"},{A,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);"},{A,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, \")\");"},{A,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/deprecated-objc-introspection.m"]={"clang/test/SemaObjC/deprecated-objc-introspection.m:88:8: warning: assignment to Objective-C\'s isa is deprecated in favor of object_setClass() [-Wdeprecated-objc-isa-usage]"} | |||
} | |||
}, | }, | ||
["warn_objc_isa_use"]={ | ["warn_objc_isa_use"]={ | ||
[ | [g]="direct access to Objective-C\'s isa is deprecated in favor of object_getClass() [-Wdeprecated-objc-isa-usage]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"deprecated-objc-isa-usage"}, | ||
[ | [o]="deprecated-objc-isa-usage", | ||
[ | [e]="direct access to Objective-C\'s isa is deprecated in favor of object_getClass()", | ||
[ | [f]=m, | ||
[ | [a]="direct access to Objective\\-C\'s isa is deprecated in favor of object_getClass\\(\\)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-objc\\-isa\\-usage[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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()), \")\");"},{A,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);"},{A,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()), \")\");"},{A,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/deprecated-objc-introspection.m"]={"clang/test/SemaObjC/deprecated-objc-introspection.m:29:9: warning: direct access to Objective-C\'s isa is deprecated in favor of object_getClass() [-Wdeprecated-objc-isa-usage]","clang/test/SemaObjC/deprecated-objc-introspection.m:30:7: warning: direct access to Objective-C\'s isa is deprecated in favor of object_getClass() [-Wdeprecated-objc-isa-usage]","clang/test/SemaObjC/deprecated-objc-introspection.m:81:14: warning: direct access to Objective-C\'s isa is deprecated in favor of object_getClass() [-Wdeprecated-objc-isa-usage]","clang/test/SemaObjC/deprecated-objc-introspection.m:82:14: warning: direct access to Objective-C\'s isa is deprecated in favor of object_getClass() [-Wdeprecated-objc-isa-usage]","clang/test/SemaObjC/deprecated-objc-introspection.m:83:14: warning: direct access to Objective-C\'s isa is deprecated in favor of object_getClass() [-Wdeprecated-objc-isa-usage]","clang/test/SemaObjC/deprecated-objc-introspection.m:84:14: warning: direct access to Objective-C\'s isa is deprecated in favor of object_getClass() [-Wdeprecated-objc-isa-usage]"} | |||
} | |||
}, | }, | ||
["warn_objc_literal_comparison"]={ | ["warn_objc_literal_comparison"]={ | ||
[ | [g]="direct comparison of ... has undefined behavior [-Wobjc-literal-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-literal-compare"}, | ||
[ | [o]="objc-literal-compare", | ||
[ | [e]="direct comparison of %select{an array literal|a dictionary literal|a numeric literal|a boxed expression|}0 has undefined behavior", | ||
[ | [f]=m, | ||
[ | [a]="direct comparison of (?:an array literal|a dictionary literal|a numeric literal|a boxed expression|) has undefined behavior", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-literal\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/objc-literal-comparison.m"]={"clang/test/SemaObjC/objc-literal-comparison.m:44:11: warning: direct comparison of an array literal has undefined behavior [-Wobjc-literal-compare]","clang/test/SemaObjC/objc-literal-comparison.m:45:11: warning: direct comparison of a dictionary literal has undefined behavior [-Wobjc-literal-compare]","clang/test/SemaObjC/objc-literal-comparison.m:46:11: warning: direct comparison of a numeric literal has undefined behavior [-Wobjc-literal-compare]","clang/test/SemaObjC/objc-literal-comparison.m:47:12: warning: direct comparison of a numeric literal has undefined behavior [-Wobjc-literal-compare]","clang/test/SemaObjC/objc-literal-comparison.m:48:19: warning: direct comparison of a numeric literal has undefined behavior [-Wobjc-literal-compare]","clang/test/SemaObjC/objc-literal-comparison.m:49:14: warning: direct comparison of a boxed expression has undefined behavior [-Wobjc-literal-compare]","clang/test/SemaObjC/objc-literal-comparison.m:82:11: warning: direct comparison of a numeric literal has undefined behavior [-Wobjc-literal-compare]","clang/test/SemaObjC/objc-literal-comparison.m:83:10: warning: direct comparison of a numeric literal has undefined behavior [-Wobjc-literal-compare]"} | |||
} | |||
}, | }, | ||
["warn_objc_missing_super_call"]={ | ["warn_objc_missing_super_call"]={ | ||
[ | [g]="method possibly missing a [super A] call [-Wobjc-missing-super-calls]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,"objc-missing-super-calls"}, | ||
[ | [o]="objc-missing-super-calls", | ||
[ | [e]="method possibly missing a [super %0] call", | ||
[ | [f]=m, | ||
[ | [a]="method possibly missing a \\[super (.*?)\\] call", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-missing\\-super\\-calls[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"b05417e1e136",1347295869,"objective-C: Improving diagnostocs for missing call to"}, | [i]={"b05417e1e136",1347295869,"objective-C: Improving diagnostocs for missing call to"}, | ||
[j]={{ | [j]={{H,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();"}}, | ||
[p]={ | |||
["clang/test/SemaObjCXX/warn-missing-super.mm"]={"clang/test/SemaObjCXX/warn-missing-super.mm:18:1: warning: method possibly missing a [super dealloc] call [-Wobjc-missing-super-calls]"} | |||
} | |||
}, | }, | ||
["warn_objc_pointer_cxx_catch_fragile"]={ | ["warn_objc_pointer_cxx_catch_fragile"]={ | ||
[ | [g]="cannot catch an exception thrown with @throw in C++ in the non-unified exception model [-Wobjc-nonunified-exceptions]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-nonunified-exceptions"}, | ||
[ | [o]="objc-nonunified-exceptions", | ||
[ | [e]="cannot catch an exception thrown with @throw in C++ in the non-unified exception model", | ||
[ | [f]=m, | ||
[ | [a]="cannot catch an exception thrown with @throw in C\\+\\+ in the non\\-unified exception model", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-nonunified\\-exceptions[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{ab,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjCXX/exceptions-fragile.mm"]={"clang/test/SemaObjCXX/exceptions-fragile.mm:9:27: warning: cannot catch an exception thrown with @throw in C++ in the non-unified exception model [-Wobjc-nonunified-exceptions]"} | |||
} | |||
}, | }, | ||
["warn_objc_pointer_masking"]={ | ["warn_objc_pointer_masking"]={ | ||
[ | [g]="bitmasking for introspection of Objective-C object pointers is strongly discouraged [-Wdeprecated-objc-pointer-introspection]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"deprecated-objc-pointer-introspection"}, | ||
[ | [o]="deprecated-objc-pointer-introspection", | ||
[ | [e]="bitmasking for introspection of Objective-C object pointers is strongly discouraged", | ||
[ | [f]=m, | ||
[ | [a]="bitmasking for introspection of Objective\\-C object pointers is strongly discouraged", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-objc\\-pointer\\-introspection[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/deprecated-objc-introspection.m"]={"clang/test/SemaObjC/deprecated-objc-introspection.m:95:28: warning: bitmasking for introspection of Objective-C object pointers is strongly discouraged [-Wdeprecated-objc-pointer-introspection]","clang/test/SemaObjC/deprecated-objc-introspection.m:96:15: warning: bitmasking for introspection of Objective-C object pointers is strongly discouraged [-Wdeprecated-objc-pointer-introspection]","clang/test/SemaObjC/deprecated-objc-introspection.m:99:15: warning: bitmasking for introspection of Objective-C object pointers is strongly discouraged [-Wdeprecated-objc-pointer-introspection-performSelector]"} | |||
} | |||
}, | }, | ||
["warn_objc_pointer_masking_performSelector"]={ | ["warn_objc_pointer_masking_performSelector"]={ | ||
[ | [g]="bitmasking for introspection of Objective-C object pointers is strongly discouraged [-Wdeprecated-objc-pointer-introspection-performSelector]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"deprecated-objc-pointer-introspection","deprecated-objc-pointer-introspection-performSelector"}, | ||
[ | [o]="deprecated-objc-pointer-introspection-performSelector", | ||
[ | [e]="bitmasking for introspection of Objective-C object pointers is strongly discouraged", | ||
[ | [f]=m, | ||
[ | [a]="bitmasking for introspection of Objective\\-C object pointers is strongly discouraged", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-objc\\-pointer\\-introspection\\-performSelector[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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"]={ | ||
[ | [g]="objc_precise_lifetime is not meaningful for ... objects", | ||
[c]= | [c]=Cb, | ||
[d]="Error", | [d]="Error", | ||
[ | [e]="objc_precise_lifetime is not meaningful for %select{__unsafe_unretained|__autoreleasing}0 objects", | ||
[ | [f]="(?:error|fatal error)\\: ", | ||
[ | [a]="objc_precise_lifetime is not meaningful for (?:__unsafe_unretained|__autoreleasing) objects", | ||
[ | [b]=x, | ||
[ | [h]=q, | ||
[i]={"31168b077c36",1308178962,"Automatic Reference Counting."}, | [i]={"31168b077c36",1308178962,"Automatic Reference Counting."}, | ||
[j]={{ | [j]={{C,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"]={ | ||
[ | [g]="\'assign\' property of object type may become a dangling reference; consider using \'unsafe_unretained\' [-Wobjc-property-assign-on-object-type]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"objc-property-assign-on-object-type"}, | ||
[ | [o]="objc-property-assign-on-object-type", | ||
[ | [e]="\'assign\' property of object type may become a dangling reference; consider using \'unsafe_unretained\'", | ||
[ | [f]=m, | ||
[ | [a]="\'assign\' property of object type may become a dangling reference; consider using \'unsafe_unretained\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-assign\\-on\\-object\\-type[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"52a503d4f333",1536174120,"Add -Wobjc-property-assign-on-object-type."}, | [i]={"52a503d4f333",1536174120,"Add -Wobjc-property-assign-on-object-type."}, | ||
[j]={{ | [j]={{T,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property-assign-on-object-type.m"]={"clang/test/SemaObjC/property-assign-on-object-type.m:7:1: warning: \'assign\' property of object type may become a dangling reference; consider using \'unsafe_unretained\' [-Wobjc-property-assign-on-object-type]"} | |||
} | |||
}, | }, | ||
["warn_objc_property_copy_missing_on_block"]={ | ["warn_objc_property_copy_missing_on_block"]={ | ||
[ | [g]="\'copy\' attribute must be specified for the block property when -fobjc-gc-only is specified", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="\'copy\' attribute must be specified for the block property when -fobjc-gc-only is specified", | ||
[ | [f]=m, | ||
[ | [a]="\'copy\' attribute must be specified for the block property when \\-fobjc\\-gc\\-only is specified", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{T,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/block-attr.m"]={"clang/test/SemaObjC/block-attr.m:6:1: warning: \'copy\' attribute must be specified for the block property when -fobjc-gc-only is specified"} | |||
} | |||
}, | }, | ||
["warn_objc_property_default_assign_on_object"]={ | ["warn_objc_property_default_assign_on_object"]={ | ||
[ | [g]="default property attribute \'assign\' not appropriate for object [-Wobjc-property-no-attribute]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-property-no-attribute"}, | ||
[ | [o]="objc-property-no-attribute", | ||
[ | [e]="default property attribute \'assign\' not appropriate for object", | ||
[ | [f]=m, | ||
[ | [a]="default property attribute \'assign\' not appropriate for object", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-no\\-attribute[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{T,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:9:1: warning: default property attribute \'assign\' not appropriate for object [-Wobjc-property-no-attribute]"} | |||
} | |||
}, | }, | ||
["warn_objc_property_no_assignment_attribute"]={ | ["warn_objc_property_no_assignment_attribute"]={ | ||
[ | [g]="no \'assign\', \'retain\', or \'copy\' attribute is specified - \'assign\' is assumed [-Wobjc-property-no-attribute]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-property-no-attribute"}, | ||
[ | [o]="objc-property-no-attribute", | ||
[ | [e]="no \'assign\', \'retain\', or \'copy\' attribute is specified - \'assign\' is assumed", | ||
[ | [f]=m, | ||
[ | [a]="no \'assign\', \'retain\', or \'copy\' attribute is specified \\- \'assign\' is assumed", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-no\\-attribute[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{T,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:9:1: warning: no \'assign\', \'retain\', or \'copy\' attribute is specified - \'assign\' is assumed [-Wobjc-property-no-attribute]"} | |||
} | |||
}, | }, | ||
["warn_objc_property_retain_of_block"]={ | ["warn_objc_property_retain_of_block"]={ | ||
[ | [g]="retain\'ed block property does not copy the block - use copy attribute instead [-Wobjc-noncopy-retain-block-property]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-noncopy-retain-block-property"}, | ||
[ | [o]="objc-noncopy-retain-block-property", | ||
[ | [e]="retain\'ed block property does not copy the block - use copy attribute instead", | ||
[ | [f]=m, | ||
[ | [a]="retain\'ed block property does not copy the block \\- use copy attribute instead", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-noncopy\\-retain\\-block\\-property[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{T,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/warn-retain-cycle.m"]={"clang/test/SemaObjC/warn-retain-cycle.m:36:1: warning: retain\'ed block property does not copy the block - use copy attribute instead [-Wobjc-noncopy-retain-block-property]"} | |||
} | |||
}, | }, | ||
["warn_objc_protocol_qualifier_missing_id"]={ | ["warn_objc_protocol_qualifier_missing_id"]={ | ||
[ | [g]="protocol has no object type specified; defaults to qualified \'id\'", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="protocol has no object type specified; defaults to qualified \'id\'", | ||
[ | [f]=m, | ||
[ | [a]="protocol has no object type specified; defaults to qualified \'id\'", | ||
[ | [b]=Q, | ||
[ | [h]=B, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/protocol-archane.m"]={"clang/test/SemaObjC/protocol-archane.m:11:8: warning: protocol has no object type specified; defaults to qualified \'id\'","clang/test/SemaObjC/protocol-archane.m:13:5: warning: protocol has no object type specified; defaults to qualified \'id\'","clang/test/SemaObjC/protocol-archane.m:40:20: warning: protocol has no object type specified; defaults to qualified \'id\'","clang/test/SemaObjC/protocol-archane.m:44:9: warning: protocol has no object type specified; defaults to qualified \'id\'"} | |||
} | |||
}, | }, | ||
["warn_objc_readonly_property_has_setter"]={ | ["warn_objc_readonly_property_has_setter"]={ | ||
[ | [g]="setter cannot be specified for a readonly property [-Wobjc-readonly-with-setter-property]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-readonly-with-setter-property"}, | ||
[ | [o]="objc-readonly-with-setter-property", | ||
[ | [e]="setter cannot be specified for a readonly property", | ||
[ | [f]=m, | ||
[ | [a]="setter cannot be specified for a readonly property", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-readonly\\-with\\-setter\\-property[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{T,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property-10.m"]={"clang/test/SemaObjC/property-10.m:46:1: warning: setter cannot be specified for a readonly property [-Wobjc-readonly-with-setter-property]"} | |||
} | |||
}, | }, | ||
["warn_objc_redundant_literal_use"]={ | ["warn_objc_redundant_literal_use"]={ | ||
[ | [g]="using A with a literal is redundant [-Wobjc-redundant-literal-use]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-cocoa-api","objc-redundant-api-use","objc-redundant-literal-use"}, | ||
[ | [o]="objc-redundant-literal-use", | ||
[ | [e]="using %0 with a literal is redundant", | ||
[ | [f]=m, | ||
[ | [a]="using (.*?) with a literal is redundant", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-redundant\\-literal\\-use[^\\]]*\\]", | ||
[ | [h]="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,2491,"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); }"}}, | ||
[p]={ | |||
["clang/test/ARCMT/objcmt-instancetype.m"]={"clang/test/ARCMT/objcmt-instancetype.m:107:21: warning: using \'stringWithString:\' with a literal is redundant [-Wobjc-redundant-literal-use]","clang/test/ARCMT/objcmt-instancetype.m:108:9: warning: using \'initWithString:\' with a literal is redundant [-Wobjc-redundant-literal-use]","clang/test/ARCMT/objcmt-instancetype.m:109:18: warning: using \'arrayWithArray:\' with a literal is redundant [-Wobjc-redundant-literal-use]","clang/test/ARCMT/objcmt-instancetype.m:110:24: warning: using \'dictionaryWithDictionary:\' with a literal is redundant [-Wobjc-redundant-literal-use]"} | |||
} | |||
}, | }, | ||
["warn_objc_redundant_qualified_class_type"]={ | ["warn_objc_redundant_qualified_class_type"]={ | ||
[ | [g]="parameterized class A already conforms to the protocols listed; did you forget a \'*\'? [-Wobjc-protocol-qualifiers]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-protocol-qualifiers"}, | ||
[ | [o]="objc-protocol-qualifiers", | ||
[ | [e]="parameterized class %0 already conforms to the protocols listed; did you forget a \'*\'?", | ||
[ | [f]=m, | ||
[ | [a]="parameterized class (.*?) already conforms to the protocols listed; did you forget a \'\\*\'\\?", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-protocol\\-qualifiers[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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]={{ | [j]={{P,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), \" *\");"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/parameterized_classes_subst.m"]={"clang/test/SemaObjC/parameterized_classes_subst.m:436:17: warning: parameterized class \'NSArray\' already conforms to the protocols listed; did you forget a \'*\'? [-Wobjc-protocol-qualifiers]"} | |||
} | |||
}, | }, | ||
["warn_objc_requires_super_protocol"]={ | ["warn_objc_requires_super_protocol"]={ | ||
[ | [g]="A attribute cannot be applied to ... [-Wrequires-super-attribute]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"requires-super-attribute"}, | ||
[ | [o]="requires-super-attribute", | ||
[ | [e]="%0 attribute cannot be applied to %select{methods in protocols|dealloc}1", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) attribute cannot be applied to (?:methods in protocols|dealloc)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wrequires\\-super\\-attribute[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{C,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;"},{C,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/super-dealloc-attribute.m"]={"clang/test/SemaObjC/super-dealloc-attribute.m:12:1: warning: \'objc_requires_super\' attribute cannot be applied to methods in protocols [-Wrequires-super-attribute]","clang/test/SemaObjC/super-dealloc-attribute.m:18:1: warning: \'objc_requires_super\' attribute cannot be applied to dealloc [-Wrequires-super-attribute]"} | |||
} | |||
}, | }, | ||
["warn_objc_root_class_missing"]={ | ["warn_objc_root_class_missing"]={ | ||
[ | [g]="class A defined without specifying a base class [-Wobjc-root-class]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-root-class"}, | ||
[ | [o]="objc-root-class", | ||
[ | [e]="class %0 defined without specifying a base class", | ||
[ | [f]=m, | ||
[ | [a]="class (.*?) defined without specifying a base class", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-root\\-class[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{P,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();"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/method-encoding-2.m"]={"clang/test/SemaObjC/method-encoding-2.m:4:12: warning: class \'Intf\' defined without specifying a base class [-Wobjc-root-class]"} | |||
} | |||
}, | }, | ||
["warn_objc_secondary_init_missing_init_call"]={ | ["warn_objc_secondary_init_missing_init_call"]={ | ||
[ | [g]="convenience initializer missing a \'self\' call to another initializer [-Wobjc-designated-initializers]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,zb}, | ||
[ | [o]=zb, | ||
[ | [e]="convenience initializer missing a \'self\' call to another initializer", | ||
[ | [f]=m, | ||
[ | [a]="convenience initializer missing a \'self\' call to another initializer", | ||
[ | [b]=mc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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);"}}, | ||
[p]={ | |||
[sc]={"clang/test/SemaObjC/attr-designated-init.m:32:1: warning: convenience initializer missing a \'self\' call to another initializer [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:48:1: warning: convenience initializer missing a \'self\' call to another initializer [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:160:1: warning: convenience initializer missing a \'self\' call to another initializer [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:176:1: warning: convenience initializer missing a \'self\' call to another initializer [-Wobjc-designated-initializers]"} | |||
} | |||
}, | }, | ||
["warn_objc_secondary_init_super_init_call"]={ | ["warn_objc_secondary_init_super_init_call"]={ | ||
[ | [g]="convenience initializer should not invoke an initializer on \'super\' [-Wobjc-designated-initializers]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,zb}, | ||
[ | [o]=zb, | ||
[ | [e]="convenience initializer should not invoke an initializer on \'super\'", | ||
[ | [f]=m, | ||
[ | [a]="convenience initializer should not invoke an initializer on \'super\'", | ||
[ | [b]=mc, | ||
[ | [h]=q, | ||
[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,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);"}} | [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);"}}, | ||
[p]={ | |||
[sc]={"clang/test/SemaObjC/attr-designated-init.m:161:17: warning: convenience initializer should not invoke an initializer on \'super\' [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:170:10: warning: convenience initializer should not invoke an initializer on \'super\' [-Wobjc-designated-initializers]","clang/test/SemaObjC/attr-designated-init.m:172:12: warning: convenience initializer should not invoke an initializer on \'super\' [-Wobjc-designated-initializers]"} | |||
} | |||
}, | }, | ||
["warn_objc_string_literal_comparison"]={ | ["warn_objc_string_literal_comparison"]={ | ||
[ | [g]="direct comparison of a string literal has undefined behavior [-Wobjc-string-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-literal-compare","objc-string-compare"}, | ||
[ | [o]="objc-string-compare", | ||
[ | [e]="direct comparison of a string literal has undefined behavior", | ||
[ | [f]=m, | ||
[ | [a]="direct comparison of a string literal has undefined behavior", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-string\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"ea70bf71547b",1342547204,"Add -Wobjc-string-compare under -Wobjc-literal-compare."}, | [i]={"ea70bf71547b",1342547204,"Add -Wobjc-string-compare under -Wobjc-literal-compare."}, | ||
[j]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/FixIt/fixit-nsstring-compare.m"]={"clang/test/FixIt/fixit-nsstring-compare.m:16:28: warning: direct comparison of a string literal has undefined behavior [-Wobjc-string-compare]"} | |||
} | |||
}, | }, | ||
["warn_objc_unsafe_perform_selector"]={ | ["warn_objc_unsafe_perform_selector"]={ | ||
[ | [g]="A is incompatible with selectors that return a ... type [-Wobjc-unsafe-perform-selector]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-unsafe-perform-selector"}, | ||
[ | [o]="objc-unsafe-perform-selector", | ||
[ | [e]="%0 is incompatible with selectors that return a %select{struct|union|vector}1 type", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) is incompatible with selectors that return a (?:struct|union|vector) type", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-unsafe\\-perform\\-selector[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"0e23c61c8755",1488815914,"[Sema][ObjC] Warn about \'performSelector\' calls with selectors"}, | [i]={"0e23c61c8755",1488815914,"[Sema][ObjC] Warn about \'performSelector\' calls with selectors"}, | ||
[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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/unsafe-perform-selector.m"]={"clang/test/SemaObjC/unsafe-perform-selector.m:58:6: warning: \'performSelector:\' is incompatible with selectors that return a struct type [-Wobjc-unsafe-perform-selector]","clang/test/SemaObjC/unsafe-perform-selector.m:59:6: warning: \'performSelectorInBackground:withObject:\' is incompatible with selectors that return a struct type [-Wobjc-unsafe-perform-selector]","clang/test/SemaObjC/unsafe-perform-selector.m:60:6: warning: \'performSelector:\' is incompatible with selectors that return a union type [-Wobjc-unsafe-perform-selector]","clang/test/SemaObjC/unsafe-perform-selector.m:61:6: warning: \'performSelectorOnMainThread:\' is incompatible with selectors that return a struct type [-Wobjc-unsafe-perform-selector]","clang/test/SemaObjC/unsafe-perform-selector.m:62:6: warning: \'performSelector:\' is incompatible with selectors that return a struct type [-Wobjc-unsafe-perform-selector]","clang/test/SemaObjC/unsafe-perform-selector.m:90:9: warning: \'performSelector:\' is incompatible with selectors that return a struct type [-Wobjc-unsafe-perform-selector]","clang/test/SemaObjC/unsafe-perform-selector.m:91:9: warning: \'performSelector:\' is incompatible with selectors that return a struct type [-Wobjc-unsafe-perform-selector]","clang/test/SemaObjC/unsafe-perform-selector.m:95:10: warning: \'performSelector:\' is incompatible with selectors that return a struct type [-Wobjc-unsafe-perform-selector]","clang/test/SemaObjC/unsafe-perform-selector.m:96:10: warning: \'performSelectorInBackground:withObject:\' is incompatible with selectors that return a union type [-Wobjc-unsafe-perform-selector]","clang/test/SemaObjC/unsafe-perform-selector.m:106:9: warning: \'performSelector:\' is incompatible with selectors that return a struct type [-Wobjc-unsafe-perform-selector]","clang/test/SemaObjC/unsafe-perform-selector.m:110:10: warning: \'performSelector:\' is incompatible with selectors that return a struct type [-Wobjc-unsafe-perform-selector]","clang/test/SemaObjC/unsafe-perform-selector.m:119:9: warning: \'performSelectorOnMainThread:onThread:withObject:waitUntilDone:modes:\' is incompatible with selectors that return a struct type [-Wobjc-unsafe-perform-selector]","clang/test/SemaObjC/unsafe-perform-selector.m:123:9: warning: \'performSelector:\' is incompatible with selectors that return a vector type [-Wobjc-unsafe-perform-selector]","clang/test/SemaObjC/unsafe-perform-selector.m:124:9: warning: \'performSelector:\' is incompatible with selectors that return a vector type [-Wobjc-unsafe-perform-selector]"} | |||
} | |||
}, | }, | ||
["warn_odr_different_num_template_parameters"]={ | ["warn_odr_different_num_template_parameters"]={ | ||
[ | [g]="template parameter lists have a different number of parameters (A vs B) [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="template parameter lists have a different number of parameters (%0 vs %1)", | ||
[ | [f]=m, | ||
[ | [a]="template parameter lists have a different number of parameters \\((.*?) vs (.*?)\\)", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{gb,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"]={ | ||
[ | [g]="template parameter has different kinds in different translation units [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="template parameter has different kinds in different translation units", | ||
[ | [f]=m, | ||
[ | [a]="template parameter has different kinds in different translation units", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{gb,2242,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_different_template_parameter_kind:\n return diag::warn_odr_different_template_parameter_kind;"}}, | ||
[p]={ | |||
["clang/test/ASTMerge/class-template/test.cpp"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/class-template/Inputs/class-template1.cpp:12:14: warning: template parameter has different kinds in different translation units [-Wodr]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/class-template/Inputs/class-template1.cpp:21:18: warning: template parameter has different kinds in different translation units [-Wodr]"} | |||
} | |||
}, | }, | ||
["warn_odr_field_type_inconsistent"]={ | ["warn_odr_field_type_inconsistent"]={ | ||
[ | [g]="field A declared with incompatible types in different translation units (B vs. C) [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="field %0 declared with incompatible types in different translation units (%1 vs. %2)", | ||
[ | [f]=m, | ||
[ | [a]="field (.*?) declared with incompatible types in different translation units \\((.*?) vs\\. (.*?)\\)", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{ub,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();"},{ub,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();"},{gb,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"]={ | ||
[ | [g]="external function A declared with incompatible types in different translation units (B vs. C) [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="external function %0 declared with incompatible types in different translation units (%1 vs. %2)", | ||
[ | [f]=m, | ||
[ | [a]="external function (.*?) declared with incompatible types in different translation units \\((.*?) vs\\. (.*?)\\)", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{ub,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();"},{gb,2216,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_function_type_inconsistent:\n return diag::warn_odr_function_type_inconsistent;"}}, | ||
[p]={ | |||
["clang/test/ASTMerge/function/test.c"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/function/Inputs/function2.c:3:6: warning: external function \'f1\' declared with incompatible types in different translation units (\'void (Int, double)\' (aka \'void (int, double)\') vs. \'void (int, float)\') [-Wodr]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/function/Inputs/function2.c:5:6: warning: external function \'f3\' declared with incompatible types in different translation units (\'void (int)\' vs. \'void (void)\') [-Wodr]"} | |||
} | |||
}, | }, | ||
["warn_odr_ivar_type_inconsistent"]={ | ["warn_odr_ivar_type_inconsistent"]={ | ||
[ | [g]="instance variable A declared with incompatible types in different translation units (B vs. C) [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="instance variable %0 declared with incompatible types in different translation units (%1 vs. %2)", | ||
[ | [f]=m, | ||
[ | [a]="instance variable (.*?) declared with incompatible types in different translation units \\((.*?) vs\\. (.*?)\\)", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{ub,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();"},{gb,2222,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_ivar_type_inconsistent:\n return diag::warn_odr_ivar_type_inconsistent;"}}, | ||
[p]={ | |||
["clang/test/ASTMerge/interface/test.m"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/interface/Inputs/interface2.m:16:9: warning: instance variable \'ivar2\' declared with incompatible types in different translation units (\'float\' vs. \'int\') [-Wodr]"} | |||
} | |||
}, | }, | ||
["warn_odr_non_type_parameter_type_inconsistent"]={ | ["warn_odr_non_type_parameter_type_inconsistent"]={ | ||
[ | [g]="non-type template parameter declared with incompatible types in different translation units (A vs. B) [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="non-type template parameter declared with incompatible types in different translation units (%0 vs. %1)", | ||
[ | [f]=m, | ||
[ | [a]="non\\-type template parameter declared with incompatible types in different translation units \\((.*?) vs\\. (.*?)\\)", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{gb,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;"}}, | ||
[p]={ | |||
["clang/test/ASTMerge/class-template/test.cpp"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/class-template/Inputs/class-template1.cpp:9:14: warning: non-type template parameter declared with incompatible types in different translation units (\'int\' vs. \'long\') [-Wodr]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/class-template/Inputs/class-template1.cpp:18:23: warning: non-type template parameter declared with incompatible types in different translation units (\'long\' vs. \'int\') [-Wodr]"} | |||
} | |||
}, | }, | ||
["warn_odr_objc_method_num_params_inconsistent"]={ | ["warn_odr_objc_method_num_params_inconsistent"]={ | ||
[ | [g]="... method A has a different number of parameters in different translation units (B vs. C) [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="%select{class|instance}0 method %1 has a different number of parameters in different translation units (%2 vs. %3)", | ||
[ | [f]=m, | ||
[ | [a]="(?:class|instance) method (.*?) has a different number of parameters in different translation units \\((.*?) vs\\. (.*?)\\)", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{ub,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();"},{gb,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"]={ | ||
[ | [g]="... method A has a parameter with a different types in different translation units (B vs. C) [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="%select{class|instance}0 method %1 has a parameter with a different types in different translation units (%2 vs. %3)", | ||
[ | [f]=m, | ||
[ | [a]="(?:class|instance) method (.*?) has a parameter with a different types in different translation units \\((.*?) vs\\. (.*?)\\)", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{ub,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();"},{gb,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;"}}, | ||
[p]={ | |||
["clang/test/ASTMerge/interface/test.m"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/interface/Inputs/interface2.m:39:19: warning: class method \'bar:\' has a parameter with a different types in different translation units (\'float\' vs. \'int\') [-Wodr]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/interface/Inputs/interface2.m:57:20: warning: instance method \'bar:\' has a parameter with a different types in different translation units (\'double\' vs. \'float\') [-Wodr]"} | |||
} | |||
}, | }, | ||
["warn_odr_objc_method_result_type_inconsistent"]={ | ["warn_odr_objc_method_result_type_inconsistent"]={ | ||
[ | [g]="... method A has incompatible result types in different translation units (B vs. C) [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="%select{class|instance}0 method %1 has incompatible result types in different translation units (%2 vs. %3)", | ||
[ | [f]=m, | ||
[ | [a]="(?:class|instance) method (.*?) has incompatible result types in different translation units \\((.*?) vs\\. (.*?)\\)", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{ub,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();"},{gb,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;"}}, | ||
[p]={ | |||
["clang/test/ASTMerge/property/test.m"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/property/Inputs/property2.m:12:26: warning: instance method \'Prop1\' has incompatible result types in different translation units (\'int\' vs. \'float\') [-Wodr]"} | |||
} | |||
}, | }, | ||
["warn_odr_objc_method_variadic_inconsistent"]={ | ["warn_odr_objc_method_variadic_inconsistent"]={ | ||
[ | [g]="... method A is variadic in one translation unit and not variadic in another [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="%select{class|instance}0 method %1 is variadic in one translation unit and not variadic in another", | ||
[ | [f]=m, | ||
[ | [a]="(?:class|instance) method (.*?) is variadic in one translation unit and not variadic in another", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{ub,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;"},{gb,2232,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_objc_method_variadic_inconsistent:\n return diag::warn_odr_objc_method_variadic_inconsistent;"}}, | ||
[p]={ | |||
["clang/test/ASTMerge/interface/test.m"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/interface/Inputs/interface2.m:45:1: warning: class method \'bar:\' is variadic in one translation unit and not variadic in another [-Wodr]"} | |||
} | |||
}, | }, | ||
["warn_odr_objc_property_impl_kind_inconsistent"]={ | ["warn_odr_objc_property_impl_kind_inconsistent"]={ | ||
[ | [g]="property A is implemented with ... in one translation but ... in another translation unit [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="property %0 is implemented with %select{@synthesize|@dynamic}1 in one translation but %select{@dynamic|@synthesize}1 in another translation unit", | ||
[ | [f]=m, | ||
[ | [a]="property (.*?) is implemented with (?:@synthesize|@dynamic) in one translation but (?:@dynamic|@synthesize) in another translation unit", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{ub,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);"},{gb,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;"}}, | ||
[p]={ | |||
["clang/test/ASTMerge/property/test.m"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/property/Inputs/property1.m:29:10: warning: property \'Prop3\' is implemented with @dynamic in one translation but @synthesize in another translation unit [-Wodr]"} | |||
} | |||
}, | }, | ||
["warn_odr_objc_property_type_inconsistent"]={ | ["warn_odr_objc_property_type_inconsistent"]={ | ||
[ | [g]="property A declared with incompatible types in different translation units (B vs. C) [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="property %0 declared with incompatible types in different translation units (%1 vs. %2)", | ||
[ | [f]=m, | ||
[ | [a]="property (.*?) declared with incompatible types in different translation units \\((.*?) vs\\. (.*?)\\)", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{ub,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();"},{gb,2234,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_objc_property_type_inconsistent:\n return diag::warn_odr_objc_property_type_inconsistent;"}}, | ||
[p]={ | |||
["clang/test/ASTMerge/property/test.m"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/property/Inputs/property2.m:12:26: warning: property \'Prop1\' declared with incompatible types in different translation units (\'int\' vs. \'float\') [-Wodr]"} | |||
} | |||
}, | }, | ||
["warn_odr_objc_superclass_inconsistent"]={ | ["warn_odr_objc_superclass_inconsistent"]={ | ||
[ | [g]="class A has incompatible superclasses [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="class %0 has incompatible superclasses", | ||
[ | [f]=m, | ||
[ | [a]="class (.*?) has incompatible superclasses", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{ub,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();"},{ub,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();"},{gb,2224,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_objc_superclass_inconsistent:\n return diag::warn_odr_objc_superclass_inconsistent;"}}, | ||
[p]={ | |||
["clang/test/ASTMerge/interface/test.m"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/interface/Inputs/interface1.m:21:12: warning: class \'I4\' has incompatible superclasses [-Wodr]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/interface/Inputs/interface1.m:100:17: warning: class \'I15\' has incompatible superclasses [-Wodr]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/interface/Inputs/interface1.m:100:17: warning: class \'I15\' has incompatible superclasses [-Wodr]"} | |||
} | |||
}, | }, | ||
["warn_odr_objc_synthesize_ivar_inconsistent"]={ | ["warn_odr_objc_synthesize_ivar_inconsistent"]={ | ||
[ | [g]="property A is synthesized to different ivars in different translation units (B vs. C) [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="property %0 is synthesized to different ivars in different translation units (%1 vs. %2)", | ||
[ | [f]=m, | ||
[ | [a]="property (.*?) is synthesized to different ivars in different translation units \\((.*?) vs\\. (.*?)\\)", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{ub,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();"},{gb,2238,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_objc_synthesize_ivar_inconsistent:\n return diag::warn_odr_objc_synthesize_ivar_inconsistent;"}}, | ||
[p]={ | |||
["clang/test/ASTMerge/property/test.m"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/property/Inputs/property1.m:28:21: warning: property \'Prop2\' is synthesized to different ivars in different translation units (\'ivar3\' vs. \'ivar2\') [-Wodr]"} | |||
} | |||
}, | }, | ||
["warn_odr_parameter_pack_non_pack"]={ | ["warn_odr_parameter_pack_non_pack"]={ | ||
[ | [g]="parameter kind mismatch; parameter is ... parameter pack [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="parameter kind mismatch; parameter is %select{not a|a}0 parameter pack", | ||
[ | [f]=m, | ||
[ | [a]="parameter kind mismatch; parameter is (?:not a|a) parameter pack", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{gb,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"]={ | ||
[ | [g]="type A has incompatible definitions in different translation units [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="type %0 has incompatible definitions in different translation units", | ||
[ | [f]=m, | ||
[ | [a]="type (.*?) has incompatible definitions in different translation units", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[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]={{ | [j]={{gb,2218,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_tag_type_inconsistent:\n return diag::warn_odr_tag_type_inconsistent;"}}, | ||
[p]={ | |||
["clang/test/ASTMerge/struct/test.c"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:13:8: warning: type \'struct S1\' has incompatible definitions in different translation units [-Wodr]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:21:8: warning: type \'struct S2\' has incompatible definitions in different translation units [-Wodr]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:24:8: warning: type \'struct S3\' has incompatible definitions in different translation units [-Wodr]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:27:8: warning: type \'struct S4\' has incompatible definitions in different translation units [-Wodr]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:56:10: warning: type \'struct DeeperError\' has incompatible definitions in different translation units [-Wodr]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:54:8: warning: type \'struct DeepError\' has incompatible definitions in different translation units [-Wodr]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:74:9: warning: type \'S13\' has incompatible definitions in different translation units [-Wodr]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:130:7: warning: type \'struct DeepUnnamedError::(unnamed at /var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:130:7)\' has incompatible definitions in different translation units [-Wodr]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:129:5: warning: type \'union DeepUnnamedError::(unnamed at /var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:129:5)\' has incompatible definitions in different translation units [-Wodr]"} | |||
} | |||
}, | }, | ||
["warn_odr_variable_multiple_def"]={ | ["warn_odr_variable_multiple_def"]={ | ||
[ | [g]="external variable A defined in multiple translation units [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="external variable %0 defined in multiple translation units", | ||
[ | [f]=m, | ||
[ | [a]="external variable (.*?) defined in multiple translation units", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{gb,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"]={ | ||
[ | [g]="external variable A declared with incompatible types in different translation units (B vs. C) [-Wodr]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={K}, | ||
[ | [o]=K, | ||
[ | [e]="external variable %0 declared with incompatible types in different translation units (%1 vs. %2)", | ||
[ | [f]=m, | ||
[ | [a]="external variable (.*?) declared with incompatible types in different translation units \\((.*?) vs\\. (.*?)\\)", | ||
[ | [b]=hb, | ||
[ | [h]=x, | ||
[i]={ | [i]={lb,1554130013,kb}, | ||
[j]={{ | [j]={{ub,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();"},{gb,2212,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n case diag::err_odr_variable_type_inconsistent:\n return diag::warn_odr_variable_type_inconsistent;"}}, | ||
[p]={ | |||
["clang/test/ASTMerge/namespace/test.cpp"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/namespace/Inputs/namespace2.cpp:16:17: warning: external variable \'z\' declared with incompatible types in different translation units (\'double\' vs. \'float\') [-Wodr]"} | |||
} | |||
}, | }, | ||
["warn_old_implicitly_unsigned_long"]={ | ["warn_old_implicitly_unsigned_long"]={ | ||
[ | [g]="integer literal is too large to be represented in type \'long\', interpreting as \'unsigned long\' per C89; this literal will ... in C99 onwards [-Wc99-compat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"c99-compat"}, | ||
[ | [o]="c99-compat", | ||
[ | [e]="integer literal is too large to be represented in type \'long\', interpreting as \'unsigned long\' per C89; this literal will %select{have type \'long long\'|be ill-formed}0 in C99 onwards", | ||
[ | [f]=m, | ||
[ | [a]="integer literal is too large to be represented in type \'long\', interpreting as \'unsigned long\' per C89; this literal will (?:have type \'long long\'|be ill\\-formed) in C99 onwards", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc99\\-compat[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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]={{ | [j]={{A,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/PR16678.c"]={"clang/test/Sema/PR16678.c:74:19: warning: integer literal is too large to be represented in type \'long\', interpreting as \'unsigned long\' per C89; this literal will be ill-formed in C99 onwards [-Wc99-compat]","clang/test/Sema/PR16678.c:75:19: warning: integer literal is too large to be represented in type \'long\', interpreting as \'unsigned long\' per C89; this literal will be ill-formed in C99 onwards [-Wc99-compat]","clang/test/Sema/PR16678.c:76:19: warning: integer literal is too large to be represented in type \'long\', interpreting as \'unsigned long\' per C89; this literal will be ill-formed in C99 onwards [-Wc99-compat]"} | |||
} | |||
}, | }, | ||
["warn_old_implicitly_unsigned_long_cxx"]={ | ["warn_old_implicitly_unsigned_long_cxx"]={ | ||
[ | [g]="integer literal is too large to be represented in type \'long\', interpreting as \'unsigned long\' per C++98; this literal will ... in C++11 onwards [-Wc++11-compat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"c++0x-compat","c++11-compat","c++11-compat-pedantic"}, | ||
[ | [o]="c++11-compat", | ||
[ | [e]="integer literal is too large to be represented in type \'long\', interpreting as \'unsigned long\' per C++98; this literal will %select{have type \'long long\'|be ill-formed}0 in C++11 onwards", | ||
[ | [f]=m, | ||
[ | [a]="integer literal is too large to be represented in type \'long\', interpreting as \'unsigned long\' per C\\+\\+98; this literal will (?:have type \'long long\'|be ill\\-formed) in C\\+\\+11 onwards", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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]={{ | [j]={{A,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/PR16678.c"]={"clang/test/Sema/PR16678.c:75:19: warning: integer literal is too large to be represented in type \'long\', interpreting as \'unsigned long\' per C++98; this literal will be ill-formed in C++11 onwards [-Wc++11-compat]","clang/test/Sema/PR16678.c:76:19: warning: integer literal is too large to be represented in type \'long\', interpreting as \'unsigned long\' per C++98; this literal will be ill-formed in C++11 onwards [-Wc++11-compat]"} | |||
} | |||
}, | }, | ||
["warn_old_style_cast"]={ | ["warn_old_style_cast"]={ | ||
[ | [g]="use of old-style cast [-Wold-style-cast]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"old-style-cast"}, | ||
[ | [o]="old-style-cast", | ||
[ | [e]="use of old-style cast", | ||
[ | [f]=m, | ||
[ | [a]="use of old\\-style cast", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wold\\-style\\-cast[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"c7c1ebe66049",1385522297,"Implement -Wold-style-cast"}, | [i]={"c7c1ebe66049",1385522297,"Implement -Wold-style-cast"}, | ||
[j]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/old-style-cast.cpp"]={"clang/test/SemaCXX/old-style-cast.cpp:4:12: warning: use of old-style cast [-Wold-style-cast]","clang/test/SemaCXX/old-style-cast.cpp:5:3: warning: use of old-style cast [-Wold-style-cast]","clang/test/SemaCXX/old-style-cast.cpp:6:3: warning: use of old-style cast [-Wold-style-cast]"} | |||
} | |||
}, | }, | ||
["warn_omp51_compat_attributes"]={ | ["warn_omp51_compat_attributes"]={ | ||
[ | [g]="specifying OpenMP directives with [[]] is incompatible with OpenMP standards before OpenMP 5.1 [-Wpre-openmp-51-compat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"pre-openmp-51-compat"}, | ||
[ | [o]="pre-openmp-51-compat", | ||
[ | [e]="specifying OpenMP directives with [[]] is incompatible with OpenMP standards before OpenMP 5.1", | ||
[ | [f]=m, | ||
[ | [a]="specifying OpenMP directives with \\[\\[\\]\\] is incompatible with OpenMP standards before OpenMP 5\\.1", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpre\\-openmp\\-51\\-compat[^\\]]*\\]", | ||
[ | [h]=B, | ||
[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",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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/OpenMP/openmp_attribute_compat.cpp"]={"clang/test/OpenMP/openmp_attribute_compat.cpp:17:8: warning: specifying OpenMP directives with [[]] is incompatible with OpenMP standards before OpenMP 5.1 [-Wpre-openmp-51-compat]"} | |||
} | |||
}, | }, | ||
["warn_omp_alignment_not_power_of_two"]={ | ["warn_omp_alignment_not_power_of_two"]={ | ||
[ | [g]="aligned clause will be ignored because the requested alignment is not a power of 2 [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="aligned clause will be ignored because the requested alignment is not a power of 2", | ||
[ | [f]=m, | ||
[ | [a]="aligned clause will be ignored because the requested alignment is not a power of 2", | ||
[ | [b]=eb, | ||
[ | [h]=pb, | ||
[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]={{ | [j]={{mb,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();"}}, | ||
[p]={ | |||
["clang/test/OpenMP/align_clause_messages.cpp"]={"clang/test/OpenMP/align_clause_messages.cpp:41:31: warning: aligned clause will be ignored because the requested alignment is not a power of 2 [-Wopenmp-clauses]","clang/test/OpenMP/align_clause_messages.cpp:51:33: warning: aligned clause will be ignored because the requested alignment is not a power of 2 [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_allocate_thread_on_task_target_directive"]={ | ["warn_omp_allocate_thread_on_task_target_directive"]={ | ||
[ | [g]="allocator with the \'thread\' trait access has unspecified behavior on \'A\' directive [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="allocator with the \'thread\' trait access has unspecified behavior on \'%0\' directive", | ||
[ | [f]=m, | ||
[ | [a]="allocator with the \'thread\' trait access has unspecified behavior on \'(.*?)\' directive", | ||
[ | [b]=eb, | ||
[ | [h]=pb, | ||
[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]={{ | [j]={{mb,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());"}}, | ||
[p]={ | |||
["clang/test/OpenMP/target_teams_private_messages.cpp"]={"clang/test/OpenMP/target_teams_private_messages.cpp:112:89: warning: allocator with the \'thread\' trait access has unspecified behavior on \'target teams\' directive [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_ctx_incompatible_property_for_selector"]={ | ["warn_omp_ctx_incompatible_property_for_selector"]={ | ||
[ | [g]="the context property \'A\' is not valid for the context selector \'B\' and the context set \'C\'; property ignored [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="the context property \'%0\' is not valid for the context selector \'%1\' and the context set \'%2\'; property ignored", | ||
[ | [f]=m, | ||
[ | [a]="the context property \'(.*?)\' is not valid for the context selector \'(.*?)\' and the context set \'(.*?)\'; property ignored", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[i]={Eb,1576809732, | [i]={Eb,1576809732,Gb}, | ||
[j]={{ | [j]={{L,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"]={ | ||
[ | [g]="the context selector \'A\' in the context set \'B\' cannot have a score (\'C\'); score ignored [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="the context selector \'%0\' in the context set \'%1\' cannot have a score (\'%2\'); score ignored", | ||
[ | [f]=m, | ||
[ | [a]="the context selector \'(.*?)\' in the context set \'(.*?)\' cannot have a score \\(\'(.*?)\'\\); score ignored", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[i]={Eb,1576809732, | [i]={Eb,1576809732,Gb}, | ||
[j]={{ | [j]={{L,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();"},{L,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>\";"}}, | ||
[p]={ | |||
[Kb]={"clang/test/OpenMP/declare_variant_messages.c:49:53: warning: the context selector \'kind\' in the context set \'device\' cannot have a score (\'5\'); score ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:48:53: warning: the context selector \'kind\' in the context set \'device\' cannot have a score (\'5\'); score ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:47:53: warning: the context selector \'kind\' in the context set \'device\' cannot have a score (\'foo()\'); score ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:46:53: warning: the context selector \'kind\' in the context set \'device\' cannot have a score (\'2\'); score ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:45:55: warning: the context selector \'kind\' in the context set \'device\' cannot have a score (\'<recovery-expr>()\'); score ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:44:53: warning: the context selector \'kind\' in the context set \'device\' cannot have a score (\'<invalid>\'); score ignored [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_ctx_incompatible_selector_for_set"]={ | ["warn_omp_ctx_incompatible_selector_for_set"]={ | ||
[ | [g]="the context selector \'A\' is not valid for the context set \'B\'; selector ignored [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="the context selector \'%0\' is not valid for the context set \'%1\'; selector ignored", | ||
[ | [f]=m, | ||
[ | [a]="the context selector \'(.*?)\' is not valid for the context set \'(.*?)\'; selector ignored", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[i]={Eb,1576809732, | [i]={Eb,1576809732,Gb}, | ||
[j]={{ | [j]={{L,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);"}}, | ||
[p]={ | |||
[Kb]={"clang/test/OpenMP/declare_variant_messages.c:49:72: warning: the context selector \'vendor\' is not valid for the context set \'device\'; selector ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:39:79: warning: the context selector \'kind\' is not valid for the context set \'implementation\'; selector ignored [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_ctx_selector_without_properties"]={ | ["warn_omp_ctx_selector_without_properties"]={ | ||
[ | [g]="the context selector \'A\' in context set \'B\' requires a context property defined in parentheses; selector ignored [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="the context selector \'%0\' in context set \'%1\' requires a context property defined in parentheses; selector ignored", | ||
[ | [f]=m, | ||
[ | [a]="the context selector \'(.*?)\' in context set \'(.*?)\' requires a context property defined in parentheses; selector ignored", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[i]={Eb,1576809732, | [i]={Eb,1576809732,Gb}, | ||
[j]={{ | [j]={{L,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);"}}, | ||
[p]={ | |||
[Kb]={"clang/test/OpenMP/declare_variant_messages.c:41:48: warning: the context selector \'kind\' in context set \'device\' requires a context property defined in parentheses; selector ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:31:56: warning: the context selector \'vendor\' in context set \'implementation\' requires a context property defined in parentheses; selector ignored [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_declare_target_after_first_use"]={ | ["warn_omp_declare_target_after_first_use"]={ | ||
[ | [g]="declaration marked as declare target after first use, it may lead to incorrect results [-Wopenmp-target]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,ad}, | ||
[ | [o]=ad, | ||
[ | [e]="declaration marked as declare target after first use, it may lead to incorrect results", | ||
[ | [f]=m, | ||
[ | [a]="declaration marked as declare target after first use, it may lead to incorrect results", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wopenmp\\-target[^\\]]*\\]", | ||
[ | [h]=pb, | ||
[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]={{ | [j]={{mb,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);"}}, | ||
[p]={ | |||
["clang/test/OpenMP/declare_target_messages.cpp"]={"clang/test/OpenMP/declare_target_messages.cpp:76:28: warning: declaration marked as declare target after first use, it may lead to incorrect results [-Wopenmp-target]"} | |||
} | |||
}, | }, | ||
["warn_omp_declare_variant_after_emitted"]={ | ["warn_omp_declare_variant_after_emitted"]={ | ||
[ | [g]="\'#pragma omp declare variant\' cannot be applied to the function that was defined already; the original function might be used [-Wsource-uses-openmp]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,nb}, | ||
[ | [o]=nb, | ||
[ | [e]="\'#pragma omp declare variant\' cannot be applied to the function that was defined already; the original function might be used", | ||
[ | [f]=m, | ||
[ | [a]="\'\\#pragma omp declare variant\' cannot be applied to the function that was defined already; the original function might be used", | ||
[ | [b]=Rb, | ||
[ | [h]=pb, | ||
[i]={ | [i]={Ac,1567434909,zc}, | ||
[j]={{ | [j]={{mb,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();"}}, | ||
[p]={ | |||
[Kb]={"clang/test/OpenMP/declare_variant_messages.c:133:1: warning: \'#pragma omp declare variant\' cannot be applied to the function that was defined already; the original function might be used [-Wsource-uses-openmp]"} | |||
} | |||
}, | }, | ||
["warn_omp_declare_variant_after_used"]={ | ["warn_omp_declare_variant_after_used"]={ | ||
[ | [g]="\'#pragma omp declare variant\' cannot be applied for function after first usage; the original function might be used [-Wsource-uses-openmp]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,nb}, | ||
[ | [o]=nb, | ||
[ | [e]="\'#pragma omp declare variant\' cannot be applied for function after first usage; the original function might be used", | ||
[ | [f]=m, | ||
[ | [a]="\'\\#pragma omp declare variant\' cannot be applied for function after first usage; the original function might be used", | ||
[ | [b]=Rb, | ||
[ | [h]=pb, | ||
[i]={ | [i]={Ac,1567434909,zc}, | ||
[j]={{ | [j]={{mb,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();"}}, | ||
[p]={ | |||
[Kb]={"clang/test/OpenMP/declare_variant_messages.c:127:1: warning: \'#pragma omp declare variant\' cannot be applied for function after first usage; the original function might be used [-Wsource-uses-openmp]"} | |||
} | |||
}, | }, | ||
["warn_omp_declare_variant_ctx_mutiple_use"]={ | ["warn_omp_declare_variant_ctx_mutiple_use"]={ | ||
[ | [g]="the context ... \'A\' was used already in the same \'omp declare variant\' directive; ... ignored [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="the context %select{set|selector|property}0 \'%1\' was used already in the same \'omp declare variant\' directive; %select{set|selector|property}0 ignored", | ||
[ | [f]=m, | ||
[ | [a]="the context (?:set|selector|property) \'(.*?)\' was used already in the same \'omp declare variant\' directive; (?:set|selector|property) ignored", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[i]={Eb,1576809732, | [i]={Eb,1576809732,Gb}, | ||
[j]={{ | [j]={{L,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;"}}, | ||
[p]={ | |||
["clang/test/AST/ast-dump-openmp-declare-variant-extensions-messages.c"]={"clang/test/AST/ast-dump-openmp-declare-variant-extensions-messages.c:9:79: warning: the context property \'match_none\' was used already in the same \'omp declare variant\' directive; property ignored [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_declare_variant_ctx_not_a_property"]={ | ["warn_omp_declare_variant_ctx_not_a_property"]={ | ||
[ | [g]="\'A\' is not a valid context property for the context selector \'B\' and the context set \'C\'; property ignored [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="\'%0\' is not a valid context property for the context selector \'%1\' and the context set \'%2\'; property ignored", | ||
[ | [f]=m, | ||
[ | [a]="\'(.*?)\' is not a valid context property for the context selector \'(.*?)\' and the context set \'(.*?)\'; property ignored", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[i]={Eb,1576809732, | [i]={Eb,1576809732,Gb}, | ||
[j]={{ | [j]={{L,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);"}}, | ||
[p]={ | |||
[Kb]={"clang/test/OpenMP/declare_variant_messages.c:50:66: warning: \'aaa\' is not a valid context property for the context selector \'extension\' and the context set \'implementation\'; property ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:47:66: warning: \'ibm\' is not a valid context property for the context selector \'kind\' and the context set \'device\'; property ignored [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_declare_variant_ctx_not_a_selector"]={ | ["warn_omp_declare_variant_ctx_not_a_selector"]={ | ||
[ | [g]="\'A\' is not a valid context selector for the context set \'B\'; selector ignored [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="\'%0\' is not a valid context selector for the context set \'%1\'; selector ignored", | ||
[ | [f]=m, | ||
[ | [a]="\'(.*?)\' is not a valid context selector for the context set \'(.*?)\'; selector ignored", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[i]={Eb,1576809732, | [i]={Eb,1576809732,Gb}, | ||
[j]={{ | [j]={{L,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);"}}, | ||
[p]={ | |||
[Kb]={"clang/test/OpenMP/declare_variant_messages.c:40:48: warning: \'xxx\' is not a valid context selector for the context set \'device\'; selector ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:30:56: warning: \'xxx\' is not a valid context selector for the context set \'implementation\'; selector ignored [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_declare_variant_ctx_not_a_set"]={ | ["warn_omp_declare_variant_ctx_not_a_set"]={ | ||
[ | [g]="\'A\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="\'%0\' is not a valid context set in a `declare variant`; set ignored", | ||
[ | [f]=m, | ||
[ | [a]="\'(.*?)\' is not a valid context set in a `declare variant`; set ignored", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[i]={Eb,1576809732, | [i]={Eb,1576809732,Gb}, | ||
[j]={{ | [j]={{L,1251,"void Parser::parseOMPTraitSetKind(OMPTraitSet &TISet, llvm::StringMap<SourceLocation> &Seen) {\n Diag(NameLoc, diag::warn_omp_declare_variant_ctx_not_a_set) << Name;"}}, | ||
[p]={ | |||
[Kb]={"clang/test/OpenMP/declare_variant_messages.c:29:40: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:28:40: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:27:40: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:26:40: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:25:40: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:24:40: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:23:40: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:22:40: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:21:40: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:67:40: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:70:40: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:94:40: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:98:45: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:103:43: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:108:45: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:127:54: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:129:54: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:133:54: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:139:52: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:144:53: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]","clang/test/OpenMP/declare_variant_messages.c:176:51: warning: \'xxx\' is not a valid context set in a `declare variant`; set ignored [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_declare_variant_expected"]={ | ["warn_omp_declare_variant_expected"]={ | ||
[ | [g]="expected \'A\' after the B; \'C\' assumed [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="expected \'%0\' after the %1; \'%0\' assumed", | ||
[ | [f]=m, | ||
[ | [a]="expected \'(.*?)\' after the (.*?); \'(.*?)\' assumed", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[i]={Eb,1576809732, | [i]={Eb,1576809732,Gb}, | ||
[j]={{ | [j]={{L,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) << \"\':\'\""},{L,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();"},{L,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();"},{L,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();"}}, | ||
[p]={ | |||
["clang/test/OpenMP/metadirective_messages.cpp"]={"clang/test/OpenMP/metadirective_messages.cpp:10:38: warning: expected \'=\' after the context set name \"device\"; \'=\' assumed [-Wopenmp-clauses]","clang/test/OpenMP/metadirective_messages.cpp:12:38: warning: expected \'=\' after the context set name \"device\"; \'=\' assumed [-Wopenmp-clauses]","clang/test/OpenMP/metadirective_messages.cpp:14:38: warning: expected \'=\' after the context set name \"device\"; \'=\' assumed [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_declare_variant_marked_as_declare_variant"]={ | ["warn_omp_declare_variant_marked_as_declare_variant"]={ | ||
[ | [g]="variant function in \'#pragma omp declare variant\' is itself marked as \'#pragma omp declare variant\' [-Wsource-uses-openmp]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,nb}, | ||
[ | [o]=nb, | ||
[ | [e]="variant function in \'#pragma omp declare variant\' is itself marked as \'#pragma omp declare variant\'", | ||
[ | [f]=m, | ||
[ | [a]="variant function in \'\\#pragma omp declare variant\' is itself marked as \'\\#pragma omp declare variant\'", | ||
[ | [b]=Rb, | ||
[ | [h]=pb, | ||
[i]={ | [i]={Ac,1567434909,zc}, | ||
[j]={{ | [j]={{mb,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();"}}, | ||
[p]={ | |||
[Kb]={"clang/test/OpenMP/declare_variant_messages.c:176:29: warning: variant function in \'#pragma omp declare variant\' is itself marked as \'#pragma omp declare variant\' [-Wsource-uses-openmp]"} | |||
} | |||
}, | }, | ||
["warn_omp_declare_variant_score_not_constant"]={ | ["warn_omp_declare_variant_score_not_constant"]={ | ||
[ | [g]="score expressions in the OpenMP context selector need to be constant; A is not and will be ignored [-Wsource-uses-openmp]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,nb}, | ||
[ | [o]=nb, | ||
[ | [e]="score expressions in the OpenMP context selector need to be constant; %0 is not and will be ignored", | ||
[ | [f]=m, | ||
[ | [a]="score expressions in the OpenMP context selector need to be constant; (.*?) is not and will be ignored", | ||
[ | [b]=Rb, | ||
[ | [h]=pb, | ||
[i]={Eb,1576809732, | [i]={Eb,1576809732,Gb}, | ||
[j]={{ | [j]={{mb,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;"}}, | ||
[p]={ | |||
[Kb]={"clang/test/OpenMP/declare_variant_messages.c:37:69: warning: score expressions in the OpenMP context selector need to be constant; foo() is not and will be ignored [-Wsource-uses-openmp]","clang/test/OpenMP/declare_variant_messages.c:54:71: warning: score expressions in the OpenMP context selector need to be constant; foo() is not and will be ignored [-Wsource-uses-openmp]","clang/test/OpenMP/declare_variant_messages.c:53:71: warning: score expressions in the OpenMP context selector need to be constant; foo is not and will be ignored [-Wsource-uses-openmp]"} | |||
} | |||
}, | }, | ||
["warn_omp_declare_variant_string_literal_or_identifier"]={ | ["warn_omp_declare_variant_string_literal_or_identifier"]={ | ||
[ | [g]="expected identifier or string literal describing a context ...; ... skipped [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="expected identifier or string literal describing a context %select{set|selector|property}0; %select{set|selector|property}0 skipped", | ||
[ | [f]=m, | ||
[ | [a]="expected identifier or string literal describing a context (?:set|selector|property); (?:set|selector|property) skipped", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[i]={Eb,1576809732, | [i]={Eb,1576809732,Gb}, | ||
[j]={{ | [j]={{L,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;"}}, | ||
[p]={ | |||
["clang/test/OpenMP/metadirective_messages.cpp"]={"clang/test/OpenMP/metadirective_messages.cpp:8:32: warning: expected identifier or string literal describing a context set; set skipped [-Wopenmp-clauses]","clang/test/OpenMP/metadirective_messages.cpp:10:39: warning: expected identifier or string literal describing a context selector; selector skipped [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_depend_in_ordered_deprecated"]={ | ["warn_omp_depend_in_ordered_deprecated"]={ | ||
[ | [g]="\'depend\' clause for \'ordered\' is deprecated; use \'doacross\' instead [-Wdeprecated]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={yb}, | ||
[ | [o]=yb, | ||
[ | [e]="\'depend\' clause for \'ordered\' is deprecated; use \'doacross\' instead", | ||
[ | [f]=m, | ||
[ | [a]="\'depend\' clause for \'ordered\' is deprecated; use \'doacross\' instead", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]", | ||
[ | [h]=Tb, | ||
[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]={{ | [j]={{L,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);"}}, | ||
[p]={ | |||
["clang/test/OpenMP/ordered_messages.cpp"]={"clang/test/OpenMP/ordered_messages.cpp:405:21: warning: \'depend\' clause for \'ordered\' is deprecated; use \'doacross\' instead [-Wdeprecated]"} | |||
} | |||
}, | }, | ||
["warn_omp_extra_tokens_at_eol"]={ | ["warn_omp_extra_tokens_at_eol"]={ | ||
[ | [g]="extra tokens at the end of \'#pragma omp A\' are ignored [-Wextra-tokens]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"endif-labels","extra-tokens"}, | ||
[ | [o]="extra-tokens", | ||
[ | [e]="extra tokens at the end of \'#pragma omp %0\' are ignored", | ||
[ | [f]=m, | ||
[ | [a]="extra tokens at the end of \'\\#pragma omp (.*?)\' are ignored", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wextra\\-tokens[^\\]]*\\]", | ||
[ | [h]=B, | ||
[i]={"a769e07232d2",1363934075,"OpenMP threadprivate directive parsing and semantic analysis"}, | [i]={"a769e07232d2",1363934075,"OpenMP threadprivate directive parsing and semantic analysis"}, | ||
[j]={{ | [j]={{L,1968,"void Parser::skipUntilPragmaOpenMPEnd(OpenMPDirectiveKind DKind) {\n Diag(Tok, diag::warn_omp_extra_tokens_at_eol) << getOpenMPDirectiveName(DKind);"}}, | ||
[p]={ | |||
["clang/test/OpenMP/unroll_messages.cpp"]={"clang/test/OpenMP/unroll_messages.cpp:21:22: warning: extra tokens at the end of \'#pragma omp unroll\' are ignored [-Wextra-tokens]"} | |||
} | |||
}, | }, | ||
["warn_omp_linear_step_zero"]={ | ["warn_omp_linear_step_zero"]={ | ||
[ | [g]="zero linear step (A ...should probably be const) [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="zero linear step (%0 %select{|and other variables in clause }1should probably be const)", | ||
[ | [f]=m, | ||
[ | [a]="zero linear step \\((.*?) (?:|and other variables in clause )should probably be const\\)", | ||
[ | [b]=eb, | ||
[ | [h]=pb, | ||
[i]={"8dba66412b0a",1398172182,"[OPENMP] parsing \'linear\' clause (for directive \'omp simd\')"}, | [i]={"8dba66412b0a",1398172182,"[OPENMP] parsing \'linear\' clause (for directive \'omp simd\')"}, | ||
[j]={{ | [j]={{mb,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);"}}, | ||
[p]={ | |||
["clang/test/OpenMP/for_simd_linear_messages.cpp"]={"clang/test/OpenMP/for_simd_linear_messages.cpp:74:36: warning: zero linear step (ind2 should probably be const) [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_loop_64_bit_var"]={ | ["warn_omp_loop_64_bit_var"]={ | ||
[ | [g]="OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed [-Wopenmp-loop-form]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,"openmp-loop-form"}, | ||
[ | [o]="openmp-loop-form", | ||
[ | [e]="OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed", | ||
[ | [f]=m, | ||
[ | [a]="OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wopenmp\\-loop\\-form[^\\]]*\\]", | ||
[ | [h]=pb, | ||
[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]={{ | [j]={{mb,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;"}}, | ||
[p]={ | |||
["clang/test/OpenMP/taskloop_misc_messages.c"]={"clang/test/OpenMP/taskloop_misc_messages.c:378:3: warning: OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed [-Wopenmp-loop-form]"} | |||
} | |||
}, | }, | ||
["warn_omp_minus_in_reduction_deprecated"]={ | ["warn_omp_minus_in_reduction_deprecated"]={ | ||
[ | [g]="minus(-) operator for reductions is deprecated; use + or user defined reduction instead [-Wdeprecated]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={yb}, | ||
[ | [o]=yb, | ||
[ | [e]="minus(-) operator for reductions is deprecated; use + or user defined reduction instead", | ||
[ | [f]=m, | ||
[ | [a]="minus\\(\\-\\) operator for reductions is deprecated; use \\+ or user defined reduction instead", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]", | ||
[ | [h]=Tb, | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[j]={{ | [j]={{mb,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);"}}, | ||
[p]={ | |||
["clang/test/OpenMP/taskloop_reduction_messages_attr.cpp"]={"clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:158:39: warning: minus(-) operator for reductions is deprecated; use + or user defined reduction instead [-Wdeprecated]","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:260:39: warning: minus(-) operator for reductions is deprecated; use + or user defined reduction instead [-Wdeprecated]","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:158:39: warning: minus(-) operator for reductions is deprecated; use + or user defined reduction instead [-Wdeprecated]","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:158:39: warning: minus(-) operator for reductions is deprecated; use + or user defined reduction instead [-Wdeprecated]"} | |||
} | |||
}, | }, | ||
["warn_omp_more_one_device_type_clause"]={ | ["warn_omp_more_one_device_type_clause"]={ | ||
[ | [g]="more than one \'device_type\' clause is specified [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="more than one \'device_type\' clause is specified", | ||
[ | [f]=m, | ||
[ | [a]="more than one \'device_type\' clause is specified", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{L,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);"}}, | ||
[p]={ | |||
["clang/test/OpenMP/declare_target_messages.cpp"]={"clang/test/OpenMP/declare_target_messages.cpp:37:51: warning: more than one \'device_type\' clause is specified [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_more_one_interop_type"]={ | ["warn_omp_more_one_interop_type"]={ | ||
[ | [g]="interop type \'A\' cannot be specified more than once [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="interop type \'%0\' cannot be specified more than once", | ||
[ | [f]=m, | ||
[ | [a]="interop type \'(.*?)\' cannot be specified more than once", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{L,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\";"},{L,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\";"}}, | ||
[p]={ | |||
["clang/test/OpenMP/interop_messages.cpp"]={"clang/test/OpenMP/interop_messages.cpp:87:46: warning: interop type \'target\' cannot be specified more than once [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_more_one_omp_all_memory"]={ | ["warn_omp_more_one_omp_all_memory"]={ | ||
[ | [g]="reserved locator \'omp_all_memory\' cannot be specified more than once [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="reserved locator \'omp_all_memory\' cannot be specified more than once", | ||
[ | [f]=m, | ||
[ | [a]="reserved locator \'omp_all_memory\' cannot be specified more than once", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{L,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);"}}, | ||
[p]={ | |||
["clang/test/OpenMP/task_depend_messages.cpp"]={"clang/test/OpenMP/task_depend_messages.cpp:89:52: warning: reserved locator \'omp_all_memory\' cannot be specified more than once [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_nesting_simd"]={ | ["warn_omp_nesting_simd"]={ | ||
[ | [g]="OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,nb}, | ||
[ | [o]=nb, | ||
[ | [e]="OpenMP only allows an ordered construct with the simd clause nested in a simd construct", | ||
[ | [f]=m, | ||
[ | [a]="OpenMP only allows an ordered construct with the simd clause nested in a simd construct", | ||
[ | [b]=Rb, | ||
[ | [h]=pb, | ||
[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]={{ | [j]={{mb,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);"}}, | ||
[p]={ | |||
["clang/test/OpenMP/nesting_of_regions.cpp"]={"clang/test/OpenMP/nesting_of_regions.cpp:250:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:803:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:2841:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:6735:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:7054:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:7847:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:8136:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:9432:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:9680:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:10135:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:10635:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:12554:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:15561:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:15880:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:16191:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:16726:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:17015:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:18311:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]","clang/test/OpenMP/nesting_of_regions.cpp:18559:1: warning: OpenMP only allows an ordered construct with the simd clause nested in a simd construct [-Wsource-uses-openmp]"} | |||
} | |||
}, | }, | ||
["warn_omp_non_trivial_type_mapped"]={ | ["warn_omp_non_trivial_type_mapped"]={ | ||
[ | [g]="Type A is not trivially copyable and not guaranteed to be mapped correctly [-Wopenmp-mapping]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,O,"openmp-mapping",ad}, | ||
[ | [o]="openmp-mapping", | ||
[ | [e]="Type %0 is not trivially copyable and not guaranteed to be mapped correctly", | ||
[ | [f]=m, | ||
[ | [a]="Type (.*?) is not trivially copyable and not guaranteed to be mapped correctly", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wopenmp\\-mapping[^\\]]*\\]", | ||
[ | [h]=pb, | ||
[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]={{ | [j]={{mb,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;"}}, | ||
[p]={ | |||
["clang/test/OpenMP/target_teams_distribute_firstprivate_messages.cpp"]={"clang/test/OpenMP/target_teams_distribute_firstprivate_messages.cpp:122:43: warning: Type \'const S3[5]\' is not trivially copyable and not guaranteed to be mapped correctly [-Wopenmp-mapping]"} | |||
} | |||
}, | }, | ||
["warn_omp_not_in_target_context"]={ | ["warn_omp_not_in_target_context"]={ | ||
[ | [g]="declaration is not declared in any declare target region [-Wopenmp-target]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,ad}, | ||
[ | [o]=ad, | ||
[ | [e]="declaration is not declared in any declare target region", | ||
[ | [f]=m, | ||
[ | [a]="declaration is not declared in any declare target region", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wopenmp\\-target[^\\]]*\\]", | ||
[ | [h]=pb, | ||
[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]={{ | [j]={{mb,23133,"static void checkDeclInTargetContext(SourceLocation SL, SourceRange SR, Sema &SemaRef, Decl *D) {\n SemaRef.Diag(VD->getLocation(), diag::warn_omp_not_in_target_context);"}}, | ||
[p]={ | |||
["clang/test/OpenMP/nvptx_target_exceptions_messages.cpp"]={"clang/test/OpenMP/nvptx_target_exceptions_messages.cpp:92:7: warning: declaration is not declared in any declare target region [-Wopenmp-target]"} | |||
} | |||
}, | }, | ||
["warn_omp_section_is_char"]={ | ["warn_omp_section_is_char"]={ | ||
[ | [g]="array section ... is of type \'char\' [-Wchar-subscripts]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,"char-subscripts",v}, | ||
[ | [o]="char-subscripts", | ||
[ | [e]="array section %select{lower bound|length}0 is of type \'char\'", | ||
[ | [f]=m, | ||
[ | [a]="array section (?:lower bound|length) is of type \'char\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wchar\\-subscripts[^\\]]*\\]", | ||
[ | [h]=pb, | ||
[i]={"1a3320e4639c",1440512644,"[OPENMP 4.0] Initial support for array sections."}, | [i]={"1a3320e4639c",1440512644,"[OPENMP 4.0] Initial support for array sections."}, | ||
[j]={{ | [j]={{A,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();"},{A,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();"},{A,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"]={ | ||
[ | [g]="valid A clauses start with B; ... will be ignored [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="valid %0 clauses start with %1; %select{token|tokens}2 will be ignored", | ||
[ | [f]=m, | ||
[ | [a]="valid (.*?) clauses start with (.*?); (?:token|tokens) will be ignored", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{L,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;"}}, | ||
[p]={ | |||
["clang/test/OpenMP/assumes_messages_attr.c"]={"clang/test/OpenMP/assumes_messages_attr.c:9:26: warning: valid assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; token will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:10:32: warning: valid begin assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; token will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:13:32: warning: valid begin assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; tokens will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:14:26: warning: valid assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; tokens will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:21:26: warning: valid assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; token will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:21:43: warning: valid assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; token will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:22:32: warning: valid begin assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; token will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:22:49: warning: valid begin assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; token will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:25:32: warning: valid begin assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; tokens will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:25:60: warning: valid begin assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; tokens will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:26:26: warning: valid assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; tokens will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:26:54: warning: valid assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; tokens will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:29:36: warning: valid assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; token will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:30:42: warning: valid begin assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; token will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:45:26: warning: valid assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; token will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:46:32: warning: valid begin assumes clauses start with \'ext_\', \'absent\', \'contains\', \'holds\', \'no_openmp\', \'no_openmp_routines\', \'no_parallelism\'; token will be ignored [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_unknown_assumption_clause_without_args"]={ | ["warn_omp_unknown_assumption_clause_without_args"]={ | ||
[ | [g]="A clause should not be followed by arguments; tokens will be ignored [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="%0 clause should not be followed by arguments; tokens will be ignored", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) clause should not be followed by arguments; tokens will be ignored", | ||
[ | [b]=eb, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{L,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;"}}, | ||
[p]={ | |||
["clang/test/OpenMP/assumes_messages_attr.c"]={"clang/test/OpenMP/assumes_messages_attr.c:17:35: warning: \'no_openmp\' clause should not be followed by arguments; tokens will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:18:41: warning: \'no_openmp\' clause should not be followed by arguments; tokens will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:49:33: warning: \'ext_123\' clause should not be followed by arguments; tokens will be ignored [-Wopenmp-clauses]","clang/test/OpenMP/assumes_messages_attr.c:50:39: warning: \'ext_123\' clause should not be followed by arguments; tokens will be ignored [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_omp_unterminated_declare_target"]={ | ["warn_omp_unterminated_declare_target"]={ | ||
[ | [g]="expected \'#pragma omp end declare target\' at end of file to match \'#pragma omp A\' [-Wsource-uses-openmp]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,nb}, | ||
[ | [o]=nb, | ||
[ | [e]="expected \'#pragma omp end declare target\' at end of file to match \'#pragma omp %0\'", | ||
[ | [f]=m, | ||
[ | [a]="expected \'\\#pragma omp end declare target\' at end of file to match \'\\#pragma omp (.*?)\'", | ||
[ | [b]=Rb, | ||
[ | [h]=pb, | ||
[i]={ | [i]={Vc,1620530452,Wc}, | ||
[j]={{ | [j]={{mb,23012,"void Sema::DiagnoseUnterminatedOpenMPDeclareTarget() {\n Diag(DTCI.Loc, diag::warn_omp_unterminated_declare_target) << getOpenMPDirectiveName(DTCI.Kind);"}}, | ||
[p]={ | |||
["clang/test/OpenMP/declare_target_messages.cpp"]={"clang/test/OpenMP/declare_target_messages.cpp:279:27: warning: expected \'#pragma omp end declare target\' at end of file to match \'#pragma omp begin declare target\' [-Wsource-uses-openmp]"} | |||
} | |||
}, | }, | ||
["warn_omp_used_different_allocator"]={ | ["warn_omp_used_different_allocator"]={ | ||
[ | [g]="allocate directive specifies ... allocator while previously used ... [-Wopenmp-clauses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,J}, | ||
[ | [o]=J, | ||
[ | [e]="allocate directive specifies %select{default|\'%1\'}0 allocator while previously used %select{default|\'%3\'}2", | ||
[ | [f]=m, | ||
[ | [a]="allocate directive specifies (?:default|\'(.*?)\') allocator while previously used (?:default|\'(.*?)\')", | ||
[ | [b]=eb, | ||
[ | [h]=pb, | ||
[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]={{ | [j]={{mb,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;"}}, | ||
[p]={ | |||
["clang/test/OpenMP/allocate_allocator_messages.cpp"]={"clang/test/OpenMP/allocate_allocator_messages.cpp:34:35: warning: allocate directive specifies \'omp_thread_mem_alloc\' allocator while previously used default [-Wopenmp-clauses]","clang/test/OpenMP/allocate_allocator_messages.cpp:43:22: warning: allocate directive specifies default allocator while previously used \'omp_thread_mem_alloc\' [-Wopenmp-clauses]","clang/test/OpenMP/allocate_allocator_messages.cpp:47:35: warning: allocate directive specifies \'omp_high_bw_mem_alloc\' allocator while previously used \'omp_thread_mem_alloc\' [-Wopenmp-clauses]"} | |||
} | |||
}, | }, | ||
["warn_on_superclass_use"]={ | ["warn_on_superclass_use"]={ | ||
[ | [g]="class implementation may not have super class", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="class implementation may not have super class", | ||
[ | [f]=m, | ||
[ | [a]="class implementation may not have super class", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[i]={"34e3cef4836d",1266613134,"Start supporting declaration of ivars in @implementation"}, | [i]={"34e3cef4836d",1266613134,"Start supporting declaration of ivars in @implementation"}, | ||
[j]={{ | [j]={{P,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/ivar-in-implementations.m"]={"clang/test/SemaObjC/ivar-in-implementations.m:12:17: warning: class implementation may not have super class"} | |||
} | |||
}, | }, | ||
["warn_opencl_attr_deprecated_ignored"]={ | ["warn_opencl_attr_deprecated_ignored"]={ | ||
[ | [g]="A attribute is deprecated and ignored in B [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="%0 attribute is deprecated and ignored in %1", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) attribute is deprecated and ignored in (.*?)", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[i]={"c4bb5df4ab28",1459422442,"[OpenCL] Added nosvm attribute for OpenCL v2.0."}, | [i]={"c4bb5df4ab28",1459422442,"[OpenCL] Added nosvm attribute for OpenCL v2.0."}, | ||
[j]={{ | [j]={{C,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();"}}, | ||
[p]={ | |||
["clang/test/SemaOpenCL/nosvm.cl"]={"clang/test/SemaOpenCL/nosvm.cl:7:30: warning: \'nosvm\' attribute is deprecated and ignored in C++ for OpenCL version 1.0 [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_opencl_generic_address_space_arg"]={ | ["warn_opencl_generic_address_space_arg"]={ | ||
[ | [g]="passing non-generic address space pointer to A may cause dynamic conversion affecting performance [-Wconversion]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Fb,Wb}, | ||
[ | [o]=Fb, | ||
[ | [e]="passing non-generic address space pointer to %0 may cause dynamic conversion affecting performance", | ||
[ | [f]=m, | ||
[ | [a]="passing non\\-generic address space pointer to (.*?) may cause dynamic conversion affecting performance", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wconversion[^\\]]*\\]", | ||
[ | [h]=Pb, | ||
[i]={"1076cc2ffae3",1537438047,"[OpenCL] Diagnose redundant address space conversion"}, | [i]={"1076cc2ffae3",1537438047,"[OpenCL] Diagnose redundant address space conversion"}, | ||
[j]={{ | [j]={{y,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();"}}, | ||
[p]={ | |||
["clang/test/SemaOpenCL/to_addr_builtin.cl"]={"clang/test/SemaOpenCL/to_addr_builtin.cl:44:19: warning: passing non-generic address space pointer to to_global may cause dynamic conversion affecting performance [-Wconversion]","clang/test/SemaOpenCL/to_addr_builtin.cl:52:20: warning: passing non-generic address space pointer to to_private may cause dynamic conversion affecting performance [-Wconversion]","clang/test/SemaOpenCL/to_addr_builtin.cl:60:18: warning: passing non-generic address space pointer to to_local may cause dynamic conversion affecting performance [-Wconversion]","clang/test/SemaOpenCL/to_addr_builtin.cl:67:20: warning: passing non-generic address space pointer to to_global may cause dynamic conversion affecting performance [-Wconversion]","clang/test/SemaOpenCL/to_addr_builtin.cl:75:21: warning: passing non-generic address space pointer to to_private may cause dynamic conversion affecting performance [-Wconversion]","clang/test/SemaOpenCL/to_addr_builtin.cl:83:19: warning: passing non-generic address space pointer to to_local may cause dynamic conversion affecting performance [-Wconversion]","clang/test/SemaOpenCL/to_addr_builtin.cl:91:20: warning: passing non-generic address space pointer to to_global may cause dynamic conversion affecting performance [-Wconversion]","clang/test/SemaOpenCL/to_addr_builtin.cl:98:21: warning: passing non-generic address space pointer to to_private may cause dynamic conversion affecting performance [-Wconversion]","clang/test/SemaOpenCL/to_addr_builtin.cl:106:19: warning: passing non-generic address space pointer to to_local may cause dynamic conversion affecting performance [-Wconversion]","clang/test/SemaOpenCL/to_addr_builtin.cl:114:35: warning: passing non-generic address space pointer to to_global may cause dynamic conversion affecting performance [-Wconversion]","clang/test/SemaOpenCL/to_addr_builtin.cl:122:29: warning: passing non-generic address space pointer to to_global may cause dynamic conversion affecting performance [-Wconversion]"} | |||
} | |||
}, | }, | ||
["warn_opencl_unsupported_core_feature"]={ | ["warn_opencl_unsupported_core_feature"]={ | ||
[ | [g]="A is a core feature in ... version B but not supported on this target [-Wpedantic-core-features]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"pedantic-core-features"}, | ||
[ | [o]="pedantic-core-features", | ||
[ | [e]="%0 is a core feature in %select{OpenCL C|C++ for OpenCL}1 version %2 but not supported on this target", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) is a core feature in (?:OpenCL C|C\\+\\+ for OpenCL) version (.*?) but not supported on this target", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpedantic\\-core\\-features[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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",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();"}} | [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();"}}, | ||
[p]={ | |||
["clang/test/Misc/r600.unsupported_core.cl"]={"warning: cl_khr_byte_addressable_store is a core feature in OpenCL C version 2.0 but not supported on this target [-Wpedantic-core-features]","warning: cl_khr_global_int32_base_atomics is a core feature in OpenCL C version 2.0 but not supported on this target [-Wpedantic-core-features]","warning: cl_khr_global_int32_extended_atomics is a core feature in OpenCL C version 2.0 but not supported on this target [-Wpedantic-core-features]","warning: cl_khr_local_int32_base_atomics is a core feature in OpenCL C version 2.0 but not supported on this target [-Wpedantic-core-features]","warning: cl_khr_local_int32_extended_atomics is a core feature in OpenCL C version 2.0 but not supported on this target [-Wpedantic-core-features]","warning: cl_khr_3d_image_writes is a core feature in OpenCL C version 2.0 but not supported on this target [-Wpedantic-core-features]"} | |||
} | |||
}, | }, | ||
["warn_operator_new_returns_null"]={ | ["warn_operator_new_returns_null"]={ | ||
[ | [g]="A should not return a null pointer unless it is declared \'throw()\'... [-Wnew-returns-null]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"new-returns-null"}, | ||
[ | [o]="new-returns-null", | ||
[ | [e]="%0 should not return a null pointer unless it is declared \'throw()\'%select{| or \'noexcept\'}1", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) should not return a null pointer unless it is declared \'throw\\(\\)\'(?:| or \'noexcept\')", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnew\\-returns\\-null[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-new-overaligned.cpp"]={"clang/test/SemaCXX/warn-new-overaligned.cpp:46:5: warning: \'operator new\' should not return a null pointer unless it is declared \'throw()\' or \'noexcept\' [-Wnew-returns-null]","clang/test/SemaCXX/warn-new-overaligned.cpp:68:5: warning: \'operator new[]\' should not return a null pointer unless it is declared \'throw()\' or \'noexcept\' [-Wnew-returns-null]"} | |||
} | |||
}, | }, | ||
["warn_option_invalid_ocl_version"]={ | ["warn_option_invalid_ocl_version"]={ | ||
[ | [g]="A does not support the option \'B\' [-Wdeprecated]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={yb}, | ||
[ | [o]=yb, | ||
[ | [e]="%0 does not support the option \'%1\'", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) does not support the option \'(.*?)\'", | ||
[ | [b]=x, | ||
[ | [h]=Tb, | ||
[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",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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/CodeGenOpenCL/cl-strict-aliasing.cl"]={"warning: OpenCL C version 1.2 does not support the option \'-cl-strict-aliasing\'"} | |||
} | |||
}, | }, | ||
["warn_os_log_format_narg"]={ | ["warn_os_log_format_narg"]={ | ||
[ | [g]="os_log() \'%n\' format specifier is not allowed", | ||
[c]= | [c]=Cb, | ||
[d]="Error", | [d]="Error", | ||
[ | [e]="os_log() \'%%n\' format specifier is not allowed", | ||
[ | [f]="(?:error|fatal error)\\: ", | ||
[ | [a]="os_log\\(\\) \'%n\' format specifier is not allowed", | ||
[ | [b]=x, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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()),"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/format-strings-oslog.m"]={"clang/test/SemaObjC/format-strings-oslog.m:22:34: error: os_log() \'%n\' format specifier is not allowed"} | |||
} | |||
}, | }, | ||
["warn_out_of_range_compare"]={ | ["warn_out_of_range_compare"]={ | ||
[ | [g]="result of comparison of ... with ... is always A [-Wtautological-constant-out-of-range-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,ec,"tautological-constant-compare","tautological-constant-out-of-range-compare"}, | ||
[ | [o]="tautological-constant-out-of-range-compare", | ||
[ | [e]="result of comparison of %select{constant %0|true|false}1 with %select{expression of type %2|boolean expression}3 is always %4", | ||
[ | [f]=m, | ||
[ | [a]="result of comparison of (?:constant (.*?)|true|false) with (?:expression of type (.*?)|boolean expression) is always (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtautological\\-constant\\-out\\-of\\-range\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"2f4e33aba231",1348169801,"Improvements to my patch in r164143 per"}, | [i]={"2f4e33aba231",1348169801,"Improvements to my patch in r164143 per"}, | ||
[j]={{ | [j]={{y,13737,"static int classifyConstantValue(Expr *Constant) {\n // diag::warn_out_of_range_compare and diag::warn_tautological_bool_compare."},{y,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());"}}, | ||
[p]={ | |||
["clang/test/Sema/outof-range-constant-compare.c"]={"clang/test/Sema/outof-range-constant-compare.c:10:11: warning: result of comparison of constant 1311768465173141112 with expression of type \'int\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:12:11: warning: result of comparison of constant 1311768465173141112 with expression of type \'int\' is always true [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:14:11: warning: result of comparison of constant 1311768465173141112 with expression of type \'int\' is always true [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:16:11: warning: result of comparison of constant 1311768465173141112 with expression of type \'int\' is always true [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:18:11: warning: result of comparison of constant 1311768465173141112 with expression of type \'int\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:20:11: warning: result of comparison of constant 1311768465173141112 with expression of type \'int\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:23:29: warning: result of comparison of constant 1311768465173141112 with expression of type \'int\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:25:29: warning: result of comparison of constant 1311768465173141112 with expression of type \'int\' is always true [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:27:29: warning: result of comparison of constant 1311768465173141112 with expression of type \'int\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:29:29: warning: result of comparison of constant 1311768465173141112 with expression of type \'int\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:31:29: warning: result of comparison of constant 1311768465173141112 with expression of type \'int\' is always true [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:33:29: warning: result of comparison of constant 1311768465173141112 with expression of type \'int\' is always true [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:35:11: warning: result of comparison of constant 1311768465173141112 with expression of type \'int\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:37:11: warning: result of comparison of constant -1311768465173141112 with expression of type \'int\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:39:11: warning: result of comparison of constant -1311768465173141112 with expression of type \'int\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:41:11: warning: result of comparison of constant -1311768465173141112 with expression of type \'int\' is always true [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:43:11: warning: result of comparison of constant -1311768465173141112 with expression of type \'int\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:45:11: warning: result of comparison of constant -1311768465173141112 with expression of type \'int\' is always true [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:53:11: warning: result of comparison of constant 1311768465173141112 with expression of type \'short\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:55:11: warning: result of comparison of constant 1311768465173141112 with expression of type \'short\' is always true [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:57:11: warning: result of comparison of constant 1311768465173141112 with expression of type \'short\' is always true [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:59:11: warning: result of comparison of constant 1311768465173141112 with expression of type \'short\' is always true [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:61:11: warning: result of comparison of constant 1311768465173141112 with expression of type \'short\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:63:11: warning: result of comparison of constant 1311768465173141112 with expression of type \'short\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:66:29: warning: result of comparison of constant 1311768465173141112 with expression of type \'short\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:68:29: warning: result of comparison of constant 1311768465173141112 with expression of type \'short\' is always true [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:70:29: warning: result of comparison of constant 1311768465173141112 with expression of type \'short\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:72:29: warning: result of comparison of constant 1311768465173141112 with expression of type \'short\' is always false [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:74:29: warning: result of comparison of constant 1311768465173141112 with expression of type \'short\' is always true [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:76:29: warning: result of comparison of constant 1311768465173141112 with expression of type \'short\' is always true [-Wtautological-constant-out-of-range-compare]","clang/test/Sema/outof-range-constant-compare.c:113:11: warning: result of comparison of constant 1311768465173141112 with expression of type \'enum E\' is always false [-Wtautological-constant-out-of-range-compare]"} | |||
} | |||
}, | }, | ||
["warn_overaligned_type"]={ | ["warn_overaligned_type"]={ | ||
[ | [g]="type A requires B bytes of alignment and the default allocator only guarantees C bytes [-Wover-aligned]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"over-aligned"}, | ||
[ | [o]="over-aligned", | ||
[ | [e]="type %0 requires %1 bytes of alignment and the default allocator only guarantees %2 bytes", | ||
[ | [f]=m, | ||
[ | [a]="type (.*?) requires (.*?) bytes of alignment and the default allocator only guarantees (.*?) bytes", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wover\\-aligned[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{Ub,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());"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-new-overaligned.cpp"]={"clang/test/SemaCXX/warn-new-overaligned.cpp:16:3: warning: type \'Test\' requires 256 bytes of alignment and the default allocator only guarantees 16 bytes [-Wover-aligned]","clang/test/SemaCXX/warn-new-overaligned.cpp:17:3: warning: type \'Test\' requires 256 bytes of alignment and the default allocator only guarantees 16 bytes [-Wover-aligned]","clang/test/SemaCXX/warn-new-overaligned.cpp:33:3: warning: type \'Test\' requires 256 bytes of alignment and the default allocator only guarantees 16 bytes [-Wover-aligned]","clang/test/SemaCXX/warn-new-overaligned.cpp:34:3: warning: type \'Test\' requires 256 bytes of alignment and the default allocator only guarantees 16 bytes [-Wover-aligned]","clang/test/SemaCXX/warn-new-overaligned.cpp:56:3: warning: type \'Test\' requires 256 bytes of alignment and the default allocator only guarantees 16 bytes [-Wover-aligned]","clang/test/SemaCXX/warn-new-overaligned.cpp:77:3: warning: type \'Test\' requires 256 bytes of alignment and the default allocator only guarantees 16 bytes [-Wover-aligned]"} | |||
} | |||
}, | }, | ||
["warn_overloaded_shift_in_comparison"]={ | ["warn_overloaded_shift_in_comparison"]={ | ||
[ | [g]="overloaded operator ... has higher precedence than comparison operator [-Woverloaded-shift-op-parentheses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,"overloaded-shift-op-parentheses",Hc}, | ||
[ | [o]="overloaded-shift-op-parentheses", | ||
[ | [e]="overloaded operator %select{>>|<<}0 has higher precedence than comparison operator", | ||
[ | [f]=m, | ||
[ | [a]="overloaded operator (?:\\>\\>|\\<\\<) has higher precedence than comparison operator", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Woverloaded\\-shift\\-op\\-parentheses[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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);"}}, | ||
[p]={ | |||
["clang/test/Parser/cxx2a-spaceship.cpp"]={"clang/test/Parser/cxx2a-spaceship.cpp:13:21: warning: overloaded operator << has higher precedence than comparison operator [-Woverloaded-shift-op-parentheses]","clang/test/Parser/cxx2a-spaceship.cpp:17:21: warning: overloaded operator << has higher precedence than comparison operator [-Woverloaded-shift-op-parentheses]"} | |||
} | |||
}, | }, | ||
["warn_overloaded_virtual"]={ | ["warn_overloaded_virtual"]={ | ||
[ | [g]="A hides overloaded virtual ... [-Woverloaded-virtual]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,"overloaded-virtual"}, | ||
[ | [o]="overloaded-virtual", | ||
[ | [e]="%q0 hides overloaded virtual %select{function|functions}1", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) hides overloaded virtual (?:function|functions)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Woverloaded\\-virtual[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"7272d9cf36cd",1296756075,"Implement -Woverloaded-virtual."}, | [i]={"7272d9cf36cd",1296756075,"Implement -Woverloaded-virtual."}, | ||
[j]={{ | [j]={{ab,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()))"},{ab,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-overloaded-virtual.cpp"]={"clang/test/SemaCXX/warn-overloaded-virtual.cpp:9:8: warning: \'S1::foo\' hides overloaded virtual functions [-Woverloaded-virtual]","clang/test/SemaCXX/warn-overloaded-virtual.cpp:21:17: warning: \'MS1::foo\' hides overloaded virtual functions [-Woverloaded-virtual]","clang/test/SemaCXX/warn-overloaded-virtual.cpp:137:17: warning: \'(anonymous namespace)::B::foo\' hides overloaded virtual functions [-Woverloaded-virtual]"} | |||
} | |||
}, | }, | ||
["warn_overriding_method_missing_noescape"]={ | ["warn_overriding_method_missing_noescape"]={ | ||
[ | [g]="parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"missing-noescape"}, | ||
[ | [o]="missing-noescape", | ||
[ | [e]="parameter of overriding method should be annotated with __attribute__((noescape))", | ||
[ | [f]=m, | ||
[ | [a]="parameter of overriding method should be annotated with __attribute__\\(\\(noescape\\)\\)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmissing\\-noescape[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"fc587e6a5707",1505888571,"Add support for attribute \'noescape\'."}, | [i]={"fc587e6a5707",1505888571,"Add support for attribute \'noescape\'."}, | ||
[j]={{ | [j]={{ab,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);"},{P,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjCXX/noescape.mm"]={"clang/test/SemaObjCXX/noescape.mm:42:16: warning: parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]","clang/test/SemaObjCXX/noescape.mm:69:19: warning: parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]","clang/test/SemaObjCXX/noescape.mm:123:19: warning: parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]","clang/test/SemaObjCXX/noescape.mm:133:19: warning: parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]"} | |||
} | |||
}, | }, | ||
["warn_padded_struct_anon_field"]={ | ["warn_padded_struct_anon_field"]={ | ||
[ | [g]="padding ... A with B ...C to align anonymous bit-field [-Wpadded]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Jc}, | ||
[ | [o]=Jc, | ||
[ | [e]="padding %select{struct|interface|class}0 %1 with %2 %select{byte|bit}3%s2 to align anonymous bit-field", | ||
[ | [f]=m, | ||
[ | [a]="padding (?:struct|interface|class) (.*?) with (.*?) (?:byte|bit)(.*?) to align anonymous bit\\-field", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpadded[^\\]]*\\]", | ||
[ | [h]=x, | ||
[i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | [i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | ||
[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)"}} | [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"]={ | ||
[ | [g]="padding ... A with B ...C to align D [-Wpadded]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Jc}, | ||
[ | [o]=Jc, | ||
[ | [e]="padding %select{struct|interface|class}0 %1 with %2 %select{byte|bit}3%s2 to align %4", | ||
[ | [f]=m, | ||
[ | [a]="padding (?:struct|interface|class) (.*?) with (.*?) (?:byte|bit)(.*?) to align (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpadded[^\\]]*\\]", | ||
[ | [h]=x, | ||
[i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | [i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | ||
[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)"}} | [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)"}}, | ||
[p]={ | |||
["clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp"]={"clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:11:9: warning: padding struct \'S1\' with 1 byte to align \'s\' [-Wpadded]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:12:8: warning: padding struct \'S1\' with 4 bytes to align \'l\' [-Wpadded]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:35:5: warning: padding struct \'S5\' with 3 bytes to align \'u\' [-Wpadded]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:52:7: warning: padding struct \'S8\' with 3 bytes to align \'i\' [-Wpadded]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:73:8: warning: padding struct \'S12\' with 7 bits to align \'c\' [-Wpadded]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:147:17: warning: padding struct \'S26\' with 7 bits to align \'b\' [-Wpadded]"} | |||
} | |||
}, | }, | ||
["warn_padded_struct_size"]={ | ["warn_padded_struct_size"]={ | ||
[ | [g]="padding size of A with B ...C to alignment boundary [-Wpadded]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Jc}, | ||
[ | [o]=Jc, | ||
[ | [e]="padding size of %0 with %1 %select{byte|bit}2%s1 to alignment boundary", | ||
[ | [f]=m, | ||
[ | [a]="padding size of (.*?) with (.*?) (?:byte|bit)(.*?) to alignment boundary", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpadded[^\\]]*\\]", | ||
[ | [h]=x, | ||
[i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | [i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | ||
[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)"}} | [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)"}}, | ||
[p]={ | |||
["clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp"]={"clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:15:8: warning: padding size of \'S2\' with 3 bytes to alignment boundary [-Wpadded]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:38:8: warning: padding size of \'S6\' with 30 bits to alignment boundary [-Wpadded]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:42:8: warning: padding size of \'S7\' with 7 bytes to alignment boundary [-Wpadded]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:76:8: warning: padding size of \'S13\' with 6 bits to alignment boundary [-Wpadded]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:90:8: warning: padding size of \'S16\' with 2 bytes to alignment boundary [-Wpadded]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:99:8: warning: padding size of \'S18\' with 2 bytes to alignment boundary [-Wpadded]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:114:8: warning: padding size of \'S21\' with 4 bits to alignment boundary [-Wpadded]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:124:8: warning: padding size of \'S23\' with 4 bits to alignment boundary [-Wpadded]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:140:8: warning: padding size of \'S25\' with 7 bits to alignment boundary [-Wpadded]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:150:8: warning: padding size of \'S27\' with 7 bits to alignment boundary [-Wpadded]"} | |||
} | |||
}, | }, | ||
["warn_param_mismatched_alignment"]={ | ["warn_param_mismatched_alignment"]={ | ||
[ | [g]="passing A-byte aligned argument to B-byte aligned parameter C... may result in an unaligned pointer access [-Walign-mismatch]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"align-mismatch"}, | ||
[ | [o]="align-mismatch", | ||
[ | [e]="passing %0-byte aligned argument to %1-byte aligned parameter %2%select{| of %4}3 may result in an unaligned pointer access", | ||
[ | [f]=m, | ||
[ | [a]="passing (.*?)\\-byte aligned argument to (.*?)\\-byte aligned parameter (.*?)(?:| of (.*?)) may result in an unaligned pointer access", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Walign\\-mismatch[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/aix-attr-aligned-vector-warn.c"]={"clang/test/Sema/aix-attr-aligned-vector-warn.c:14:17: warning: passing 8-byte aligned argument to 16-byte aligned parameter 1 of \'escape\' may result in an unaligned pointer access [-Walign-mismatch]"} | |||
} | |||
}, | }, | ||
["warn_param_return_typestate_mismatch"]={ | ["warn_param_return_typestate_mismatch"]={ | ||
[ | [g]="parameter \'A\' not in expected state when the function returns: expected \'B\', observed \'C\' [-Wconsumed]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Bb}, | ||
[ | [o]=Bb, | ||
[ | [e]="parameter \'%0\' not in expected state when the function returns: expected \'%1\', observed \'%2\'", | ||
[ | [f]=m, | ||
[ | [a]="parameter \'(.*?)\' not in expected state when the function returns\\: expected \'(.*?)\', observed \'(.*?)\'", | ||
[ | [b]=Ic, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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);"}}, | ||
[p]={ | |||
[Zc]={"clang/test/SemaCXX/warn-consumed-analysis.cpp:425:6: warning: parameter \'Param\' not in expected state when the function returns: expected \'unconsumed\', observed \'consumed\' [-Wconsumed]","clang/test/SemaCXX/warn-consumed-analysis.cpp:429:5: warning: parameter \'Param\' not in expected state when the function returns: expected \'unconsumed\', observed \'consumed\' [-Wconsumed]"} | |||
} | |||
}, | }, | ||
["warn_param_typestate_mismatch"]={ | ["warn_param_typestate_mismatch"]={ | ||
[ | [g]="argument not in expected state; expected \'A\', observed \'B\' [-Wconsumed]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Bb}, | ||
[ | [o]=Bb, | ||
[ | [e]="argument not in expected state; expected \'%0\', observed \'%1\'", | ||
[ | [f]=m, | ||
[ | [a]="argument not in expected state; expected \'(.*?)\', observed \'(.*?)\'", | ||
[ | [b]=Ic, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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);"}}, | ||
[p]={ | |||
[Zc]={"clang/test/SemaCXX/warn-consumed-analysis.cpp:458:34: warning: argument not in expected state; expected \'consumed\', observed \'unconsumed\' [-Wconsumed]","clang/test/SemaCXX/warn-consumed-analysis.cpp:476:15: warning: argument not in expected state; expected \'unconsumed\', observed \'consumed\' [-Wconsumed]","clang/test/SemaCXX/warn-consumed-analysis.cpp:477:32: warning: argument not in expected state; expected \'unconsumed\', observed \'consumed\' [-Wconsumed]","clang/test/SemaCXX/warn-consumed-analysis.cpp:479:22: warning: argument not in expected state; expected \'unconsumed\', observed \'consumed\' [-Wconsumed]","clang/test/SemaCXX/warn-consumed-analysis.cpp:480:9: warning: argument not in expected state; expected \'unconsumed\', observed \'consumed\' [-Wconsumed]","clang/test/SemaCXX/warn-consumed-analysis.cpp:481:9: warning: argument not in expected state; expected \'unconsumed\', observed \'consumed\' [-Wconsumed]"} | |||
} | |||
}, | }, | ||
["warn_parameter_size"]={ | ["warn_parameter_size"]={ | ||
[ | [g]="A is a large (B bytes) pass-by-value argument; pass it by reference instead ? [-Wlarge-by-value-copy]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"large-by-value-copy"}, | ||
[ | [o]="large-by-value-copy", | ||
[ | [e]="%0 is a large (%1 bytes) pass-by-value argument; pass it by reference instead ?", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) is a large \\((.*?) bytes\\) pass\\-by\\-value argument; pass it by reference instead \\?", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wlarge\\-by\\-value\\-copy[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-large-by-value-copy.cpp"]={"clang/test/SemaCXX/warn-large-by-value-copy.cpp:16:16: warning: \'s\' is a large (101 bytes) pass-by-value argument; pass it by reference instead ? [-Wlarge-by-value-copy]","clang/test/SemaCXX/warn-large-by-value-copy.cpp:19:29: warning: \'\' is a large (101 bytes) pass-by-value argument; pass it by reference instead ? [-Wlarge-by-value-copy]","clang/test/SemaCXX/warn-large-by-value-copy.cpp:24:35: warning: \'\' is a large (101 bytes) pass-by-value argument; pass it by reference instead ? [-Wlarge-by-value-copy]","clang/test/SemaCXX/warn-large-by-value-copy.cpp:43:18: warning: \'ts\' is a large (300 bytes) pass-by-value argument; pass it by reference instead ? [-Wlarge-by-value-copy]"} | |||
} | |||
}, | }, | ||
["warn_parens_disambiguated_as_function_declaration"]={ | ["warn_parens_disambiguated_as_function_declaration"]={ | ||
[ | [g]="parentheses were disambiguated as a function declaration [-Wvexing-parse]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"vexing-parse"}, | ||
[ | [o]="vexing-parse", | ||
[ | [e]="parentheses were disambiguated as a function declaration", | ||
[ | [f]=m, | ||
[ | [a]="parentheses were disambiguated as a function declaration", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wvexing\\-parse[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{R,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:16:6: warning: parentheses were disambiguated as a function declaration [-Wvexing-parse]","clang/test/SemaCXX/dcl_ambig_res.cpp:18:7: warning: parentheses were disambiguated as a function declaration [-Wvexing-parse]","clang/test/SemaCXX/dcl_ambig_res.cpp:73:8: warning: parentheses were disambiguated as a function declaration [-Wvexing-parse]"} | |||
} | |||
}, | }, | ||
["warn_parens_disambiguated_as_variable_declaration"]={ | ["warn_parens_disambiguated_as_variable_declaration"]={ | ||
[ | [g]="parentheses were disambiguated as redundant parentheses around declaration of variable named A [-Wvexing-parse]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"vexing-parse"}, | ||
[ | [o]="vexing-parse", | ||
[ | [e]="parentheses were disambiguated as redundant parentheses around declaration of variable named %0", | ||
[ | [f]=m, | ||
[ | [a]="parentheses were disambiguated as redundant parentheses around declaration of variable named (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wvexing\\-parse[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{R,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();"}}, | ||
[p]={ | |||
["clang/test/Parser/cxx0x-condition.cpp"]={"clang/test/Parser/cxx0x-condition.cpp:17:8: warning: parentheses were disambiguated as redundant parentheses around declaration of variable named \'a\' [-Wvexing-parse]","clang/test/Parser/cxx0x-condition.cpp:21:8: warning: parentheses were disambiguated as redundant parentheses around declaration of variable named \'n\' [-Wvexing-parse]"} | |||
} | |||
}, | }, | ||
["warn_pass_class_arg_to_vararg"]={ | ["warn_pass_class_arg_to_vararg"]={ | ||
[ | [g]="passing object of class type A through variadic ...... [-Wclass-varargs]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Rc}, | ||
[ | [o]=Rc, | ||
[ | [e]="passing object of class type %0 through variadic %select{function|block|method|constructor}1%select{|; did you mean to call \'%3\'?}2", | ||
[ | [f]=m, | ||
[ | [a]="passing object of class type (.*?) through variadic (?:function|block|method|constructor)(?:|; did you mean to call \'(.*?)\'\\?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wclass\\-varargs[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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()\");"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/vararg-class.cpp"]={"clang/test/SemaCXX/vararg-class.cpp:15:5: warning: passing object of class type \'A\' through variadic function [-Wclass-varargs]","clang/test/SemaCXX/vararg-class.cpp:17:5: warning: passing object of class type \'C\' through variadic function; did you mean to call \'.c_str()\'? [-Wclass-varargs]","clang/test/SemaCXX/vararg-class.cpp:18:5: warning: passing object of class type \'D\' through variadic function; did you mean to call \'.c_str()\'? [-Wclass-varargs]","clang/test/SemaCXX/vararg-class.cpp:19:5: warning: passing object of class type \'E\' through variadic function [-Wclass-varargs]","clang/test/SemaCXX/vararg-class.cpp:20:5: warning: passing object of class type \'F\' through variadic function; did you mean to call \'.c_str()\'? [-Wclass-varargs]"} | |||
} | |||
}, | }, | ||
["warn_pessimizing_move_on_initialization"]={ | ["warn_pessimizing_move_on_initialization"]={ | ||
[ | [g]="moving a temporary object prevents copy elision [-Wpessimizing-move]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,"move","pessimizing-move"}, | ||
[ | [o]="pessimizing-move", | ||
[ | [e]="moving a temporary object prevents copy elision", | ||
[ | [f]=m, | ||
[ | [a]="moving a temporary object prevents copy elision", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpessimizing\\-move[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."}, | [i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-pessmizing-move.cpp"]={"clang/test/SemaCXX/warn-pessmizing-move.cpp:62:10: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:67:10: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:89:10: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:94:10: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:105:9: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:110:9: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:121:10: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:127:8: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:133:10: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:139:8: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:147:10: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:152:10: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:157:11: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:162:11: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]"} | |||
} | |||
}, | }, | ||
["warn_pessimizing_move_on_return"]={ | ["warn_pessimizing_move_on_return"]={ | ||
[ | [g]="moving a local object in a return statement prevents copy elision [-Wpessimizing-move]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,"move","pessimizing-move"}, | ||
[ | [o]="pessimizing-move", | ||
[ | [e]="moving a local object in a return statement prevents copy elision", | ||
[ | [f]=m, | ||
[ | [a]="moving a local object in a return statement prevents copy elision", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpessimizing\\-move[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."}, | [i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-pessmizing-move.cpp"]={"clang/test/SemaCXX/warn-pessmizing-move.cpp:35:10: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:54:10: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:168:10: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:173:10: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:178:11: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:183:11: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:197:10: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:202:10: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:207:10: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:221:1: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:230:3: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]","clang/test/SemaCXX/warn-pessmizing-move.cpp:243:12: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]"} | |||
} | |||
}, | }, | ||
["warn_pointer_abs"]={ | ["warn_pointer_abs"]={ | ||
[ | [g]="taking the absolute value of ... type A is suspicious [-Wabsolute-value]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Gc}, | ||
[ | [o]=Gc, | ||
[ | [e]="taking the absolute value of %select{pointer|function|array}0 type %1 is suspicious", | ||
[ | [f]=m, | ||
[ | [a]="taking the absolute value of (?:pointer|function|array) type (.*?) is suspicious", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wabsolute\\-value[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-absolute-value.c"]={"clang/test/Sema/warn-absolute-value.c:784:10: warning: taking the absolute value of array type \'long long[1]\' is suspicious [-Wabsolute-value]","clang/test/Sema/warn-absolute-value.c:788:10: warning: taking the absolute value of pointer type \'long long (*)(void)\' is suspicious [-Wabsolute-value]","clang/test/Sema/warn-absolute-value.c:792:10: warning: taking the absolute value of pointer type \'void *\' is suspicious [-Wabsolute-value]","clang/test/Sema/warn-absolute-value.c:796:10: warning: taking the absolute value of function type \'long long (void)\' is suspicious [-Wabsolute-value]"} | |||
} | |||
}, | }, | ||
["warn_pointer_arith_null_ptr"]={ | ["warn_pointer_arith_null_ptr"]={ | ||
[ | [g]="performing pointer arithmetic on a null pointer has undefined behavior... [-Wnull-pointer-arithmetic]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={x,t,Xb,"null-pointer-arithmetic"}, | ||
[ | [o]="null-pointer-arithmetic", | ||
[ | [e]="performing pointer arithmetic on a null pointer has undefined behavior%select{| if the offset is nonzero}0", | ||
[ | [f]=m, | ||
[ | [a]="performing pointer arithmetic on a null pointer has undefined behavior(?:| if the offset is nonzero)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnull\\-pointer\\-arithmetic[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/nullptr-arithmetic.cpp"]={"clang/test/SemaCXX/nullptr-arithmetic.cpp:16:16: warning: performing pointer arithmetic on a null pointer has undefined behavior if the offset is nonzero [-Wnull-pointer-arithmetic]","clang/test/SemaCXX/nullptr-arithmetic.cpp:17:15: warning: performing pointer arithmetic on a null pointer has undefined behavior if the offset is nonzero [-Wnull-pointer-arithmetic]"} | |||
} | |||
}, | }, | ||
["warn_pointer_compare"]={ | ["warn_pointer_compare"]={ | ||
[ | [g]="comparing a pointer to a null character constant; did you mean to compare to ...? [-Wpointer-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"pointer-compare"}, | ||
[ | [o]="pointer-compare", | ||
[ | [e]="comparing a pointer to a null character constant; did you mean to compare to %select{NULL|(void *)0}0?", | ||
[ | [f]=m, | ||
[ | [a]="comparing a pointer to a null character constant; did you mean to compare to (?:NULL|\\(void \\*\\)0)\\?", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpointer\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"f708f0a2430f",1565043340,"[Sema] Add -Wpointer-compare"}, | [i]={"f708f0a2430f",1565043340,"[Sema] Add -Wpointer-compare"}, | ||
[j]={{ | [j]={{A,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\");"},{A,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\");"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-nullchar-nullptr.c"]={"clang/test/Sema/warn-nullchar-nullptr.c:4:15: warning: comparing a pointer to a null character constant; did you mean to compare to (void *)0? [-Wpointer-compare]","clang/test/Sema/warn-nullchar-nullptr.c:8:10: warning: comparing a pointer to a null character constant; did you mean to compare to (void *)0? [-Wpointer-compare]","clang/test/Sema/warn-nullchar-nullptr.c:12:15: warning: comparing a pointer to a null character constant; did you mean to compare to (void *)0? [-Wpointer-compare]","clang/test/Sema/warn-nullchar-nullptr.c:16:15: warning: comparing a pointer to a null character constant; did you mean to compare to (void *)0? [-Wpointer-compare]","clang/test/Sema/warn-nullchar-nullptr.c:20:15: warning: comparing a pointer to a null character constant; did you mean to compare to (void *)0? [-Wpointer-compare]","clang/test/Sema/warn-nullchar-nullptr.c:24:15: warning: comparing a pointer to a null character constant; did you mean to compare to (void *)0? [-Wpointer-compare]","clang/test/Sema/warn-nullchar-nullptr.c:29:15: warning: comparing a pointer to a null character constant; did you mean to compare to (void *)0? [-Wpointer-compare]","clang/test/Sema/warn-nullchar-nullptr.c:34:15: warning: comparing a pointer to a null character constant; did you mean to compare to (void *)0? [-Wpointer-compare]","clang/test/Sema/warn-nullchar-nullptr.c:39:15: warning: comparing a pointer to a null character constant; did you mean to compare to NULL? [-Wpointer-compare]","clang/test/Sema/warn-nullchar-nullptr.c:44:15: warning: comparing a pointer to a null character constant; did you mean to compare to NULL? [-Wpointer-compare]"} | |||
} | |||
}, | }, | ||
["warn_pointer_indirection_from_incompatible_type"]={ | ["warn_pointer_indirection_from_incompatible_type"]={ | ||
[ | [g]="dereference of type A that was reinterpret_cast from type B has undefined behavior [-Wundefined-reinterpret-cast]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"undefined-reinterpret-cast"}, | ||
[ | [o]="undefined-reinterpret-cast", | ||
[ | [e]="dereference of type %1 that was reinterpret_cast from type %0 has undefined behavior", | ||
[ | [f]=m, | ||
[ | [a]="dereference of type (.*?) that was reinterpret_cast from type (.*?) has undefined behavior", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wundefined\\-reinterpret\\-cast[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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,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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/reinterpret-cast.cpp"]={"clang/test/SemaCXX/reinterpret-cast.cpp:163:10: warning: dereference of type \'double *\' that was reinterpret_cast from type \'long *\' has undefined behavior [-Wundefined-reinterpret-cast]","clang/test/SemaCXX/reinterpret-cast.cpp:165:10: warning: dereference of type \'double *\' that was reinterpret_cast from type \'float *\' has undefined behavior [-Wundefined-reinterpret-cast]","clang/test/SemaCXX/reinterpret-cast.cpp:167:10: warning: dereference of type \'float *\' that was reinterpret_cast from type \'long *\' has undefined behavior [-Wundefined-reinterpret-cast]","clang/test/SemaCXX/reinterpret-cast.cpp:169:10: warning: dereference of type \'float *\' that was reinterpret_cast from type \'double *\' has undefined behavior [-Wundefined-reinterpret-cast]"} | |||
} | |||
}, | }, | ||
["warn_pointer_sub_null_ptr"]={ | ["warn_pointer_sub_null_ptr"]={ | ||
[ | [g]="performing pointer subtraction with a null pointer ... undefined behavior [-Wnull-pointer-subtraction]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={x,t,Xb,"null-pointer-subtraction"}, | ||
[ | [o]="null-pointer-subtraction", | ||
[ | [e]="performing pointer subtraction with a null pointer %select{has|may have}0 undefined behavior", | ||
[ | [f]=m, | ||
[ | [a]="performing pointer subtraction with a null pointer (?:has|may have) undefined behavior", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnull\\-pointer\\-subtraction[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Qb,1615397021,Ob}, | ||
[j]={{ | [j]={{A,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());"}}, | ||
[p]={ | |||
["clang/test/Sema/pointer-subtraction.c"]={"clang/test/Sema/pointer-subtraction.c:10:26: warning: performing pointer subtraction with a null pointer has undefined behavior [-Wnull-pointer-subtraction]","clang/test/Sema/pointer-subtraction.c:11:18: warning: performing pointer subtraction with a null pointer has undefined behavior [-Wnull-pointer-subtraction]","clang/test/Sema/pointer-subtraction.c:12:26: warning: performing pointer subtraction with a null pointer has undefined behavior [-Wnull-pointer-subtraction]","clang/test/Sema/pointer-subtraction.c:12:26: warning: performing pointer subtraction with a null pointer has undefined behavior [-Wnull-pointer-subtraction]","clang/test/Sema/pointer-subtraction.c:15:28: warning: performing pointer subtraction with a null pointer has undefined behavior [-Wnull-pointer-subtraction]","clang/test/Sema/pointer-subtraction.c:22:28: warning: performing pointer subtraction with a null pointer has undefined behavior [-Wnull-pointer-subtraction]","clang/test/Sema/pointer-subtraction.c:27:3: warning: performing pointer subtraction with a null pointer has undefined behavior [-Wnull-pointer-subtraction]"} | |||
} | |||
}, | }, | ||
["warn_pointer_to_enum_cast"]={ | ["warn_pointer_to_enum_cast"]={ | ||
[ | [g]="cast to smaller integer type A from B [-Wpointer-to-enum-cast]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"pointer-to-enum-cast",yc}, | ||
[ | [o]="pointer-to-enum-cast", | ||
[ | [e]="cast to smaller integer type %1 from %0", | ||
[ | [f]=m, | ||
[ | [a]="cast to smaller integer type (.*?) from (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpointer\\-to\\-enum\\-cast[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={gc,1576908663,hc}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
[Uc]={"clang/test/Sema/cast.c:205:9: warning: cast to smaller integer type \'X\' from \'CharPtr\' (aka \'char *\') [-Wpointer-to-enum-cast]","clang/test/Sema/cast.c:210:9: warning: cast to smaller integer type \'X\' from \'CharPtr\' (aka \'char *\') [-Wpointer-to-enum-cast]"} | |||
} | |||
}, | }, | ||
["warn_pointer_to_int_cast"]={ | ["warn_pointer_to_int_cast"]={ | ||
[ | [g]="cast to smaller integer type A from B [-Wpointer-to-int-cast]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={yc}, | ||
[ | [o]=yc, | ||
[ | [e]="cast to smaller integer type %1 from %0", | ||
[ | [f]=m, | ||
[ | [a]="cast to smaller integer type (.*?) from (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpointer\\-to\\-int\\-cast[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={gc,1576908663,hc}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
[Uc]={"clang/test/Sema/cast.c:173:10: warning: cast to smaller integer type \'Int\' (aka \'int\') from \'CharPtr\' (aka \'char *\') [-Wpointer-to-int-cast]","clang/test/Sema/cast.c:181:9: warning: cast to smaller integer type \'Int\' (aka \'int\') from \'CharPtr\' (aka \'char *\') [-Wpointer-to-int-cast]"} | |||
} | |||
}, | }, | ||
["warn_poison_system_directories"]={ | ["warn_poison_system_directories"]={ | ||
[ | [g]="include location \'A\' is unsafe for cross-compilation [-Wpoison-system-directories]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"poison-system-directories"}, | ||
[ | [o]="poison-system-directories", | ||
[ | [e]="include location \'%0\' is unsafe for cross-compilation", | ||
[ | [f]=m, | ||
[ | [a]="include location \'(.*?)\' is unsafe for cross\\-compilation", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpoison\\-system\\-directories[^\\]]*\\]", | ||
[ | [h]=x, | ||
[i]={"39f50da2a357",1568041174,"Support -fstack-clash-protection for x86"}, | [i]={"39f50da2a357",1568041174,"Support -fstack-clash-protection for x86"}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/Frontend/warning-poison-system-directories.c"]={"warning: include location \'/usr/include\' is unsafe for cross-compilation [-Wpoison-system-directories]"} | |||
} | |||
}, | }, | ||
["warn_potentially_direct_selector_expression"]={ | ["warn_potentially_direct_selector_expression"]={ | ||
[ | [g]="@selector expression formed with potentially direct selector A [-Wpotentially-direct-selector]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"potentially-direct-selector","strict-potentially-direct-selector"}, | ||
[ | [o]="potentially-direct-selector", | ||
[ | [e]="@selector expression formed with potentially direct selector %0", | ||
[ | [f]=m, | ||
[ | [a]="@selector expression formed with potentially direct selector (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpotentially\\-direct\\-selector[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Sb,1582847864,Nb}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/potentially-direct-selector.m"]={"clang/test/SemaObjC/potentially-direct-selector.m:68:9: warning: @selector expression formed with potentially direct selector \'inBase\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:69:9: warning: @selector expression formed with potentially direct selector \'inBaseImpl\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:70:9: warning: @selector expression formed with potentially direct selector \'inBaseCat\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:71:9: warning: @selector expression formed with potentially direct selector \'inBaseCatImpl\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:72:9: warning: @selector expression formed with potentially direct selector \'inDerived\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:73:9: warning: @selector expression formed with potentially direct selector \'inDerivedImpl\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:74:9: warning: @selector expression formed with potentially direct selector \'inDerivedCat\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:75:9: warning: @selector expression formed with potentially direct selector \'inDerivedCatImpl\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:76:9: warning: @selector expression formed with potentially direct selector \'inDerivedClass\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:77:9: warning: @selector expression formed with potentially direct selector \'inBaseClass\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:78:9: warning: @selector expression formed with potentially direct selector \'inDerivedCatClass\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:99:9: warning: @selector expression formed with potentially direct selector \'inBase\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:100:9: warning: @selector expression formed with potentially direct selector \'inBaseImpl\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:101:9: warning: @selector expression formed with potentially direct selector \'inBaseCat\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:102:9: warning: @selector expression formed with potentially direct selector \'inBaseCatImpl\' [-Wpotentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:108:9: warning: @selector expression formed with potentially direct selector \'inBaseClass\' [-Wpotentially-direct-selector]"} | |||
} | |||
}, | }, | ||
["warn_pp_ambiguous_macro"]={ | ["warn_pp_ambiguous_macro"]={ | ||
[ | [g]="ambiguous expansion of macro A [-Wambiguous-macro]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"ambiguous-macro"}, | ||
[ | [o]="ambiguous-macro", | ||
[ | [e]="ambiguous expansion of macro %0", | ||
[ | [f]=m, | ||
[ | [a]="ambiguous expansion of macro (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wambiguous\\-macro[^\\]]*\\]", | ||
[ | [h]=D, | ||
[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",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();"}} | [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();"}}, | ||
[p]={ | |||
["clang/test/Modules/macros2.c"]={"clang/test/Modules/macros2.c:14:1: warning: ambiguous expansion of macro \'TOP_OTHER_DEF_RIGHT_UNDEF\' [-Wambiguous-macro]","clang/test/Modules/macros2.c:37:3: warning: ambiguous expansion of macro \'LEFT_RIGHT_DIFFERENT\' [-Wambiguous-macro]","clang/test/Modules/macros2.c:40:3: warning: ambiguous expansion of macro \'LEFT_RIGHT_DIFFERENT2\' [-Wambiguous-macro]","clang/test/Modules/macros2.c:71:10: warning: ambiguous expansion of macro \'TOP_OTHER_REDEF1\' [-Wambiguous-macro]"} | |||
} | |||
}, | }, | ||
["warn_pp_convert_to_positive"]={ | ["warn_pp_convert_to_positive"]={ | ||
[ | [g]="... side of operator converted from negative value to unsigned: A", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="%select{left|right}0 side of operator converted from negative value to unsigned: %1", | ||
[ | [f]=m, | ||
[ | [a]="(?:left|right) side of operator converted from negative value to unsigned\\: (.*?)", | ||
[ | [b]=Q, | ||
[ | [h]=D, | ||
[i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC"}, | [i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC"}, | ||
[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();"}} | [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();"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/overflow.c"]={"clang/test/Preprocessor/overflow.c:24:23: warning: right side of operator converted from negative value to unsigned: -1 to 18446744073709551615"} | |||
} | |||
}, | }, | ||
["warn_pp_date_time"]={ | ["warn_pp_date_time"]={ | ||
[ | [g]="expansion of date or time macro is not reproducible [-Wdate-time]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"date-time"}, | ||
[ | [o]="date-time", | ||
[ | [e]="expansion of date or time macro is not reproducible", | ||
[ | [f]=m, | ||
[ | [a]="expansion of date or time macro is not reproducible", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdate\\-time[^\\]]*\\]", | ||
[ | [h]=D, | ||
[i]={"4f43e554081e",1402380531,"Implement -Wdate-time preprocessor warning"}, | [i]={"4f43e554081e",1402380531,"Implement -Wdate-time preprocessor warning"}, | ||
[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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/SOURCE_DATE_EPOCH.c"]={"clang/test/Preprocessor/SOURCE_DATE_EPOCH.c:30:21: warning: expansion of date or time macro is not reproducible [-Wdate-time]","clang/test/Preprocessor/SOURCE_DATE_EPOCH.c:31:21: warning: expansion of date or time macro is not reproducible [-Wdate-time]","clang/test/Preprocessor/SOURCE_DATE_EPOCH.c:32:26: warning: expansion of date or time macro is not reproducible [-Wdate-time]"} | |||
} | |||
}, | }, | ||
["warn_pp_expr_overflow"]={ | ["warn_pp_expr_overflow"]={ | ||
[ | [g]="integer overflow in preprocessor expression", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="integer overflow in preprocessor expression", | ||
[ | [f]=m, | ||
[ | [a]="integer overflow in preprocessor expression", | ||
[ | [b]=Q, | ||
[ | [h]=D, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[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();"}} | [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();"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/overflow.c"]={"clang/test/Preprocessor/overflow.c:4:23: warning: integer overflow in preprocessor expression","clang/test/Preprocessor/overflow.c:12:23: warning: integer overflow in preprocessor expression","clang/test/Preprocessor/overflow.c:20:23: warning: integer overflow in preprocessor expression"} | |||
} | |||
}, | }, | ||
["warn_pp_hdrstop_filename_ignored"]={ | ["warn_pp_hdrstop_filename_ignored"]={ | ||
[ | [g]="#pragma hdrstop filename not supported, /Fp can be used to specify precompiled header filename [-Wclang-cl-pch]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"clang-cl-pch"}, | ||
[ | [o]="clang-cl-pch", | ||
[ | [e]="#pragma hdrstop filename not supported, /Fp can be used to specify precompiled header filename", | ||
[ | [f]=m, | ||
[ | [a]="\\#pragma hdrstop filename not supported, \\/Fp can be used to specify precompiled header filename", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wclang\\-cl\\-pch[^\\]]*\\]", | ||
[ | [h]=D, | ||
[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]={{ | [j]={{I,885,"void Preprocessor::HandlePragmaHdrstop(Token &Tok) {\n if (Tok.is(tok::l_paren)) {\n Diag(Tok.getLocation(), diag::warn_pp_hdrstop_filename_ignored);"}}, | ||
[p]={ | |||
["clang/test/PCH/pch-hdrstop-warn.cpp"]={"clang/test/PCH/pch-hdrstop-warn.cpp:10:16: warning: #pragma hdrstop filename not supported, /Fp can be used to specify precompiled header filename [-Wclang-cl-pch]"} | |||
} | |||
}, | }, | ||
["warn_pp_invalid_directive"]={ | ["warn_pp_invalid_directive"]={ | ||
[ | [g]="invalid preprocessing directive... [-Wunknown-directives]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unknown-directives"}, | ||
[ | [o]="unknown-directives", | ||
[ | [e]="invalid preprocessing directive%select{|, did you mean \'#%1\'?}0", | ||
[ | [f]=m, | ||
[ | [a]="invalid preprocessing directive(?:|, did you mean \'\\#(.*?)\'\\?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunknown\\-directives[^\\]]*\\]", | ||
[ | [h]=D, | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[j]={{ | [j]={{Ec,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;"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/suggest-typoed-directive.c"]={"clang/test/Preprocessor/suggest-typoed-directive.c:18:2: warning: invalid preprocessing directive, did you mean \'#if\'? [-Wunknown-directives]","clang/test/Preprocessor/suggest-typoed-directive.c:19:2: warning: invalid preprocessing directive, did you mean \'#if\'? [-Wunknown-directives]","clang/test/Preprocessor/suggest-typoed-directive.c:20:2: warning: invalid preprocessing directive, did you mean \'#ifdef\'? [-Wunknown-directives]","clang/test/Preprocessor/suggest-typoed-directive.c:21:3: warning: invalid preprocessing directive, did you mean \'#elif\'? [-Wunknown-directives]","clang/test/Preprocessor/suggest-typoed-directive.c:22:4: warning: invalid preprocessing directive, did you mean \'#elif\'? [-Wunknown-directives]","clang/test/Preprocessor/suggest-typoed-directive.c:23:2: warning: invalid preprocessing directive, did you mean \'#elif\'? [-Wunknown-directives]","clang/test/Preprocessor/suggest-typoed-directive.c:24:2: warning: invalid preprocessing directive, did you mean \'#elifdef\'? [-Wunknown-directives]","clang/test/Preprocessor/suggest-typoed-directive.c:25:2: warning: invalid preprocessing directive, did you mean \'#elifdef\'? [-Wunknown-directives]","clang/test/Preprocessor/suggest-typoed-directive.c:26:2: warning: invalid preprocessing directive, did you mean \'#elifndef\'? [-Wunknown-directives]","clang/test/Preprocessor/suggest-typoed-directive.c:27:2: warning: invalid preprocessing directive, did you mean \'#else\'? [-Wunknown-directives]","clang/test/Preprocessor/suggest-typoed-directive.c:28:2: warning: invalid preprocessing directive, did you mean \'#endif\'? [-Wunknown-directives]"} | |||
} | |||
}, | }, | ||
["warn_pp_line_decimal"]={ | ["warn_pp_line_decimal"]={ | ||
[ | [g]="... directive interprets number as decimal, not octal", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="%select{#line|GNU line marker}0 directive interprets number as decimal, not octal", | ||
[ | [f]=m, | ||
[ | [a]="(?:\\#line|GNU line marker) directive interprets number as decimal, not octal", | ||
[ | [b]=Q, | ||
[ | [h]=D, | ||
[i]={"ca556cb3e365",1240011469,"implement PR3940: #line numbers not fully checked"}, | [i]={"ca556cb3e365",1240011469,"implement PR3940: #line numbers not fully checked"}, | ||
[j]={{ | [j]={{Ec,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;"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/line-directive.c"]={"foo.c:10:7: warning: #line directive interprets number as decimal, not octal","foo.c:12:3: warning: GNU line marker directive interprets number as decimal, not octal"} | |||
} | |||
}, | }, | ||
["warn_pp_macro_def_mismatch_with_pch"]={ | ["warn_pp_macro_def_mismatch_with_pch"]={ | ||
[ | [g]="definition of macro A does not match definition in precompiled header [-Wclang-cl-pch]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"clang-cl-pch"}, | ||
[ | [o]="clang-cl-pch", | ||
[ | [e]="definition of macro %0 does not match definition in precompiled header", | ||
[ | [f]=m, | ||
[ | [a]="definition of macro (.*?) does not match definition in precompiled header", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wclang\\-cl\\-pch[^\\]]*\\]", | ||
[ | [h]=D, | ||
[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]={{ | [j]={{Ec,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"]={ | ||
[ | [g]="keyword is hidden by macro definition [-Wkeyword-macro]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"keyword-macro","pedantic"}, | ||
[ | [o]="keyword-macro", | ||
[ | [e]="keyword is hidden by macro definition", | ||
[ | [f]=m, | ||
[ | [a]="keyword is hidden by macro definition", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wkeyword\\-macro[^\\]]*\\]", | ||
[ | [h]=D, | ||
[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]={{ | [j]={{Ec,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);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/macro-reserved.c"]={"clang/test/Preprocessor/macro-reserved.c:3:9: warning: keyword is hidden by macro definition [-Wkeyword-macro]","clang/test/Preprocessor/macro-reserved.c:44:9: warning: keyword is hidden by macro definition [-Wkeyword-macro]","clang/test/Preprocessor/macro-reserved.c:46:9: warning: keyword is hidden by macro definition [-Wkeyword-macro]","clang/test/Preprocessor/macro-reserved.c:48:9: warning: keyword is hidden by macro definition [-Wkeyword-macro]","clang/test/Preprocessor/macro-reserved.c:50:9: warning: keyword is hidden by macro definition [-Wkeyword-macro]","clang/test/Preprocessor/macro-reserved.c:53:9: warning: keyword is hidden by macro definition [-Wkeyword-macro]","clang/test/Preprocessor/macro-reserved.c:55:9: warning: keyword is hidden by macro definition [-Wkeyword-macro]","clang/test/Preprocessor/macro-reserved.c:60:9: warning: keyword is hidden by macro definition [-Wkeyword-macro]"} | |||
} | |||
}, | }, | ||
["warn_pp_macro_is_reserved_id"]={ | ["warn_pp_macro_is_reserved_id"]={ | ||
[ | [g]="macro name is a reserved identifier [-Wreserved-macro-identifier]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"reserved-id-macro",Oc,"reserved-macro-identifier"}, | ||
[ | [o]="reserved-macro-identifier", | ||
[ | [e]="macro name is a reserved identifier", | ||
[ | [f]=m, | ||
[ | [a]="macro name is a reserved identifier", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wreserved\\-macro\\-identifier[^\\]]*\\]", | ||
[ | [h]=D, | ||
[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]={{ | [j]={{Ec,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);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/macro-reserved.c"]={"clang/test/Preprocessor/macro-reserved.c:62:9: warning: macro name is a reserved identifier [-Wreserved-macro-identifier]","clang/test/Preprocessor/macro-reserved.c:63:9: warning: macro name is a reserved identifier [-Wreserved-macro-identifier]","clang/test/Preprocessor/macro-reserved.c:64:9: warning: macro name is a reserved identifier [-Wreserved-macro-identifier]","clang/test/Preprocessor/macro-reserved.c:69:8: warning: macro name is a reserved identifier [-Wreserved-macro-identifier]","clang/test/Preprocessor/macro-reserved.c:70:8: warning: macro name is a reserved identifier [-Wreserved-macro-identifier]"} | |||
} | |||
}, | }, | ||
["warn_pp_objc_macro_redef_ignored"]={ | ["warn_pp_objc_macro_redef_ignored"]={ | ||
[ | [g]="ignoring redefinition of Objective-C qualifier macro [-Wobjc-macro-redefinition]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-macro-redefinition"}, | ||
[ | [o]="objc-macro-redefinition", | ||
[ | [e]="ignoring redefinition of Objective-C qualifier macro", | ||
[ | [f]=m, | ||
[ | [a]="ignoring redefinition of Objective\\-C qualifier macro", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-macro\\-redefinition[^\\]]*\\]", | ||
[ | [h]=D, | ||
[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]={{ | [j]={{Ec,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);"}}, | ||
[p]={ | |||
["clang/test/Lexer/objc_macros.m"]={"clang/test/Lexer/objc_macros.m:3:9: warning: ignoring redefinition of Objective-C qualifier macro [-Wobjc-macro-redefinition]","clang/test/Lexer/objc_macros.m:5:9: warning: ignoring redefinition of Objective-C qualifier macro [-Wobjc-macro-redefinition]","clang/test/Lexer/objc_macros.m:7:9: warning: ignoring redefinition of Objective-C qualifier macro [-Wobjc-macro-redefinition]","clang/test/Lexer/objc_macros.m:3:9: warning: ignoring redefinition of Objective-C qualifier macro [-Wobjc-macro-redefinition]","clang/test/Lexer/objc_macros.m:5:9: warning: ignoring redefinition of Objective-C qualifier macro [-Wobjc-macro-redefinition]","clang/test/Lexer/objc_macros.m:7:9: warning: ignoring redefinition of Objective-C qualifier macro [-Wobjc-macro-redefinition]"} | |||
} | |||
}, | }, | ||
["warn_pp_undef_identifier"]={ | ["warn_pp_undef_identifier"]={ | ||
[ | [g]="A is not defined, evaluates to 0 [-Wundef]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"undef"}, | ||
[ | [o]="undef", | ||
[ | [e]="%0 is not defined, evaluates to 0", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) is not defined, evaluates to 0", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wundef[^\\]]*\\]", | ||
[ | [h]=D, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[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())) {"}} | [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())) {"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/if_warning.c"]={"clang/test/Preprocessor/if_warning.c:5:5: error: \'foo\' is not defined, evaluates to 0 [-Werror,-Wundef]"} | |||
} | |||
}, | }, | ||
["warn_pp_undef_prefix"]={ | ["warn_pp_undef_prefix"]={ | ||
[ | [g]="A is not defined, evaluates to 0 [-Wundef-prefix]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"undef-prefix"}, | ||
[ | [o]="undef-prefix", | ||
[ | [e]="%0 is not defined, evaluates to 0", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) is not defined, evaluates to 0", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wundef\\-prefix[^\\]]*\\]", | ||
[ | [h]=D, | ||
[i]={"89a0c4066b0e",1593534486,"[clang][diagnostics] Add \'-Wundef-prefix\' warning option"}, | [i]={"89a0c4066b0e",1593534486,"[clang][diagnostics] Add \'-Wundef-prefix\' warning option"}, | ||
[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;"}} | [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"]={ | ||
[ | [g]="expected \'=\' following \'#pragma ...\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected \'=\' following \'#pragma %select{align|options align}0\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="expected \'\\=\' following \'\\#pragma (?:align|options align)\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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;"}}, | ||
[p]={ | |||
["clang/test/Parser/pragma-options.c"]={"clang/test/Parser/pragma-options.c:4:96: warning: expected \'=\' following \'#pragma options align\' - ignored [-Wignored-pragmas]","clang/test/Parser/pragma-options.c:14:80: warning: expected \'=\' following \'#pragma align\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_align_invalid_option"]={ | ["warn_pragma_align_invalid_option"]={ | ||
[ | [g]="invalid alignment option in \'#pragma ...\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="invalid alignment option in \'#pragma %select{align|options align}0\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="invalid alignment option in \'\\#pragma (?:align|options align)\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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;"}}, | ||
[p]={ | |||
["clang/test/Parser/pragma-options.c"]={"clang/test/Parser/pragma-options.c:6:104: warning: invalid alignment option in \'#pragma options align\' - ignored [-Wignored-pragmas]","clang/test/Parser/pragma-options.c:16:88: warning: invalid alignment option in \'#pragma align\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_align_not_xl_compatible"]={ | ["warn_pragma_align_not_xl_compatible"]={ | ||
[ | [g]="#pragma align(packed) may not be compatible with objects generated with AIX XL C/C++ [-Waix-compat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"aix-compat"}, | ||
[ | [o]="aix-compat", | ||
[ | [e]="#pragma align(packed) may not be compatible with objects generated with AIX XL C/C++", | ||
[ | [f]=m, | ||
[ | [a]="\\#pragma align\\(packed\\) may not be compatible with objects generated with AIX XL C\\/C\\+\\+", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Waix\\-compat[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Qb,1615397021,Ob}, | ||
[j]={{ | [j]={{H,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/aix-pragma-align-packed-warn.c"]={"clang/test/Sema/aix-pragma-align-packed-warn.c:5:10: warning: #pragma align(packed) may not be compatible with objects generated with AIX XL C/C++ [-Waix-compat]","clang/test/Sema/aix-pragma-align-packed-warn.c:11:10: warning: #pragma align(packed) may not be compatible with objects generated with AIX XL C/C++ [-Waix-compat]"} | |||
} | |||
}, | }, | ||
["warn_pragma_attribute_unused"]={ | ["warn_pragma_attribute_unused"]={ | ||
[ | [g]="unused attribute A in \'#pragma clang attribute push\' region [-Wpragma-clang-attribute]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"pragma-clang-attribute",z}, | ||
[ | [o]="pragma-clang-attribute", | ||
[ | [e]="unused attribute %0 in \'#pragma clang attribute push\' region", | ||
[ | [f]=m, | ||
[ | [a]="unused attribute (.*?) in \'\\#pragma clang attribute push\' region", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpragma\\-clang\\-attribute[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"}, | [i]={"0a849f47d2f7",1492508507,"Add #pragma clang attribute"}, | ||
[j]={{ | [j]={{jb,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:6:46: warning: unused attribute \'annotate\' in \'#pragma clang attribute push\' region [-Wpragma-clang-attribute]"} | |||
} | |||
}, | }, | ||
["warn_pragma_comment_ignored"]={ | ["warn_pragma_comment_ignored"]={ | ||
[ | [g]="\'#pragma comment A\' ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="\'#pragma comment %0\' ignored", | ||
[ | [f]=m, | ||
[ | [a]="\'\\#pragma comment (.*?)\' ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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();"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/pragma-comment-elf.c"]={"clang/test/Preprocessor/pragma-comment-elf.c:12:17: warning: \'#pragma comment linker\' ignored [-Wignored-pragmas]","clang/test/Preprocessor/pragma-comment-elf.c:13:17: warning: \'#pragma comment linker\' ignored [-Wignored-pragmas]","clang/test/Preprocessor/pragma-comment-elf.c:14:18: warning: \'#pragma comment linker\' ignored [-Wignored-pragmas]","clang/test/Preprocessor/pragma-comment-elf.c:16:17: warning: \'#pragma comment user\' ignored [-Wignored-pragmas]","clang/test/Preprocessor/pragma-comment-elf.c:17:17: warning: \'#pragma comment user\' ignored [-Wignored-pragmas]","clang/test/Preprocessor/pragma-comment-elf.c:18:18: warning: \'#pragma comment user\' ignored [-Wignored-pragmas]","clang/test/Preprocessor/pragma-comment-elf.c:20:17: warning: \'#pragma comment compiler\' ignored [-Wignored-pragmas]","clang/test/Preprocessor/pragma-comment-elf.c:21:17: warning: \'#pragma comment compiler\' ignored [-Wignored-pragmas]","clang/test/Preprocessor/pragma-comment-elf.c:22:18: warning: \'#pragma comment compiler\' ignored [-Wignored-pragmas]","clang/test/Preprocessor/pragma-comment-elf.c:24:17: warning: \'#pragma comment exestr\' ignored [-Wignored-pragmas]","clang/test/Preprocessor/pragma-comment-elf.c:25:17: warning: \'#pragma comment exestr\' ignored [-Wignored-pragmas]","clang/test/Preprocessor/pragma-comment-elf.c:26:18: warning: \'#pragma comment exestr\' ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_debug_dependent_argument"]={ | ["warn_pragma_debug_dependent_argument"]={ | ||
[ | [g]="...-dependent expression passed as an argument to debug command [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="%select{value|type}0-dependent expression passed as an argument to debug command", | ||
[ | [f]=m, | ||
[ | [a]="(?:value|type)\\-dependent expression passed as an argument to debug command", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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());"}}, | ||
[p]={ | |||
["clang/test/AST/ast-dump-lookups.cpp"]={"clang/test/AST/ast-dump-lookups.cpp:79:28: warning: type-dependent expression passed as an argument to debug command [-Wignored-pragmas]","clang/test/AST/ast-dump-lookups.cpp:80:28: warning: value-dependent expression passed as an argument to debug command [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_debug_missing_argument"]={ | ["warn_pragma_debug_missing_argument"]={ | ||
[ | [g]="missing argument to debug command \'A\' [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="missing argument to debug command \'%0\'", | ||
[ | [f]=m, | ||
[ | [a]="missing argument to debug command \'(.*?)\'", | ||
[ | [b]=F, | ||
[ | [h]=D, | ||
[i]={"ba3a4f917f2d",1452635966,"Improve AST dumping:"}, | [i]={"ba3a4f917f2d",1452635966,"Improve AST dumping:"}, | ||
[j]={{ | [j]={{I,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();"},{I,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();"},{I,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();"},{s,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"]={ | ||
[ | [g]="missing debug command [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="missing debug command", | ||
[ | [f]=m, | ||
[ | [a]="missing debug command", | ||
[ | [b]=F, | ||
[ | [h]=D, | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[j]={{ | [j]={{I,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"]={ | ||
[ | [g]="unexpected argument to debug command [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="unexpected argument to debug command", | ||
[ | [f]=m, | ||
[ | [a]="unexpected argument to debug command", | ||
[ | [b]=F, | ||
[ | [h]=D, | ||
[i]={"31f4859c3e4d",1667168400,"[Clang] Allow additional mathematical symbols in identifiers."}, | [i]={"31f4859c3e4d",1667168400,"[Clang] Allow additional mathematical symbols in identifiers."}, | ||
[j]={{ | [j]={{I,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);"},{s,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"]={ | ||
[ | [g]="unexpected debug command \'A\' [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="unexpected debug command \'%0\'", | ||
[ | [f]=m, | ||
[ | [a]="unexpected debug command \'(.*?)\'", | ||
[ | [b]=F, | ||
[ | [h]=D, | ||
[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]={{ | [j]={{I,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();"},{I,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"]={ | ||
[ | [g]="unknown module \'A\' [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="unknown module \'%0\'", | ||
[ | [f]=m, | ||
[ | [a]="unknown module \'(.*?)\'", | ||
[ | [b]=F, | ||
[ | [h]=D, | ||
[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]={{ | [j]={{I,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"]={ | ||
[ | [g]="macro A has been marked as deprecated... [-Wdeprecated-pragma]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={yb,"deprecated-pragma","pedantic-macros"}, | ||
[ | [o]="deprecated-pragma", | ||
[ | [e]="macro %0 has been marked as deprecated%select{|: %2}1", | ||
[ | [f]=m, | ||
[ | [a]="macro (.*?) has been marked as deprecated(?:|\\: (.*?))", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-pragma[^\\]]*\\]", | ||
[ | [h]=Tb, | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[j]={{ | [j]={{lc,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;"},{lc,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;"}}, | ||
[p]={ | |||
["clang/test/Lexer/deprecate-macro.c"]={"clang/test/Lexer/deprecate-macro.c:17:5: warning: macro \'bar\' has been marked as deprecated: bar is deprecated use 1 [-Wdeprecated-pragma]","clang/test/Lexer/deprecate-macro.c:35:5: warning: macro \'foo\' has been marked as deprecated [-Wdeprecated-pragma]","clang/test/Lexer/deprecate-macro.c:39:13: warning: macro \'foo\' has been marked as deprecated [-Wdeprecated-pragma]","clang/test/Lexer/deprecate-macro.c:43:8: warning: macro \'foo\' has been marked as deprecated [-Wdeprecated-pragma]","clang/test/Lexer/deprecate-macro.c:47:9: warning: macro \'foo\' has been marked as deprecated [-Wdeprecated-pragma]","clang/test/Lexer/deprecate-macro.c:55:10: warning: macro \'foo\' has been marked as deprecated [-Wdeprecated-pragma]","clang/test/Lexer/deprecate-macro.c:73:7: warning: macro \'foo\' has been marked as deprecated [-Wdeprecated-pragma]","clang/test/Lexer/deprecate-macro.c:80:10: warning: macro \'foo\' has been marked as deprecated [-Wdeprecated-pragma]","clang/test/Lexer/deprecate-macro.c:87:11: warning: macro \'foo\' has been marked as deprecated [-Wdeprecated-pragma]"} | |||
} | |||
}, | }, | ||
["warn_pragma_diagnostic_cannot_pop"]={ | ["warn_pragma_diagnostic_cannot_pop"]={ | ||
[ | [g]="pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="pragma diagnostic pop could not pop, no matching push", | ||
[ | [f]=m, | ||
[ | [a]="pragma diagnostic pop could not pop, no matching push", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[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]={{ | [j]={{I,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);"},{I,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);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/pushable-diagnostics.c"]={"clang/test/Preprocessor/pushable-diagnostics.c:3:106: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas]","clang/test/Preprocessor/pushable-diagnostics.c:17:106: warning: pragma diagnostic pop could not pop, no matching push [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_diagnostic_invalid"]={ | ["warn_pragma_diagnostic_invalid"]={ | ||
[ | [g]="pragma diagnostic expected \'error\', \'warning\', \'ignored\', \'fatal\', \'push\', or \'pop\' [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="pragma diagnostic expected \'error\', \'warning\', \'ignored\', \'fatal\', \'push\', or \'pop\'", | ||
[ | [f]=m, | ||
[ | [a]="pragma diagnostic expected \'error\', \'warning\', \'ignored\', \'fatal\', \'push\', or \'pop\'", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[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]={{ | [j]={{I,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);"},{I,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);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/pushable-diagnostics.c"]={"clang/test/Preprocessor/pushable-diagnostics.c:5:138: warning: pragma diagnostic expected \'error\', \'warning\', \'ignored\', \'fatal\', \'push\', or \'pop\' [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_diagnostic_invalid_option"]={ | ["warn_pragma_diagnostic_invalid_option"]={ | ||
[ | [g]="pragma diagnostic expected option name (e.g. \"-Wundef\") [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="pragma diagnostic expected option name (e.g. \"-Wundef\")", | ||
[ | [f]=m, | ||
[ | [a]="pragma diagnostic expected option name \\(e\\.g\\. \"\\-Wundef\"\\)", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[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]={{ | [j]={{I,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);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/pragma_diagnostic.c"]={"clang/test/Preprocessor/pragma_diagnostic.c:30:30: warning: pragma diagnostic expected option name (e.g. \"-Wundef\") [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_diagnostic_invalid_token"]={ | ["warn_pragma_diagnostic_invalid_token"]={ | ||
[ | [g]="unexpected token in pragma diagnostic [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="unexpected token in pragma diagnostic", | ||
[ | [f]=m, | ||
[ | [a]="unexpected token in pragma diagnostic", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[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]={{ | [j]={{I,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);"},{I,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);"},{I,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);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/pragma_diagnostic.c"]={"clang/test/Preprocessor/pragma_diagnostic.c:29:40: warning: unexpected token in pragma diagnostic [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_diagnostic.c:38:31: warning: unexpected token in pragma diagnostic [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_diagnostic.c:39:30: warning: unexpected token in pragma diagnostic [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_diagnostic_unknown_warning"]={ | ["warn_pragma_diagnostic_unknown_warning"]={ | ||
[ | [g]="unknown warning group \'A\', ignored [-Wunknown-warning-option]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={tc}, | ||
[ | [o]=tc, | ||
[ | [e]="unknown warning group \'%0\', ignored", | ||
[ | [f]=m, | ||
[ | [a]="unknown warning group \'(.*?)\', ignored", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunknown\\-warning\\-option[^\\]]*\\]", | ||
[ | [h]=D, | ||
[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]={{ | [j]={{I,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;"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/pragma_diagnostic.c"]={"clang/test/Preprocessor/pragma_diagnostic.c:32:30: warning: unknown warning group \'-Winvalid-name\', ignored [-Wunknown-warning-option]"} | |||
} | |||
}, | }, | ||
["warn_pragma_exec_charset_expected"]={ | ["warn_pragma_exec_charset_expected"]={ | ||
[ | [g]="#pragma execution_character_set expected \'A\' [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="#pragma execution_character_set expected \'%0\'", | ||
[ | [f]=m, | ||
[ | [a]="\\#pragma execution_character_set expected \'(.*?)\'", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[i]={"0f56b22614c8",1552587137,"Add PragmaHandler for MSVC pragma execution_character_set"}, | [i]={"0f56b22614c8",1552587137,"Add PragmaHandler for MSVC pragma execution_character_set"}, | ||
[j]={{ | [j]={{I,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) << \"(\";"},{I,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) << \")\";"}}, | ||
[p]={ | |||
[wb]={"clang/test/Preprocessor/pragma_microsoft.c:244:85: warning: #pragma execution_character_set expected \'(\' [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:249:85: warning: #pragma execution_character_set expected \')\' [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:250:36: warning: #pragma execution_character_set expected \')\' [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:251:36: warning: #pragma execution_character_set expected \')\' [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_exec_charset_push_invalid"]={ | ["warn_pragma_exec_charset_push_invalid"]={ | ||
[ | [g]="#pragma execution_character_set invalid value \'A\', only \'UTF-8\' is supported [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="#pragma execution_character_set invalid value \'%0\', only \'UTF-8\' is supported", | ||
[ | [f]=m, | ||
[ | [a]="\\#pragma execution_character_set invalid value \'(.*?)\', only \'UTF\\-8\' is supported", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[i]={"0f56b22614c8",1552587137,"Add PragmaHandler for MSVC pragma execution_character_set"}, | [i]={"0f56b22614c8",1552587137,"Add PragmaHandler for MSVC pragma execution_character_set"}, | ||
[j]={{ | [j]={{I,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;"}}, | ||
[p]={ | |||
[wb]={"clang/test/Preprocessor/pragma_microsoft.c:255:45: warning: #pragma execution_character_set invalid value \'asdf\', only \'UTF-8\' is supported [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_exec_charset_spec_invalid"]={ | ["warn_pragma_exec_charset_spec_invalid"]={ | ||
[ | [g]="#pragma execution_character_set expected \'push\' or \'pop\' [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="#pragma execution_character_set expected \'push\' or \'pop\'", | ||
[ | [f]=m, | ||
[ | [a]="\\#pragma execution_character_set expected \'push\' or \'pop\'", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[i]={"0f56b22614c8",1552587137,"Add PragmaHandler for MSVC pragma execution_character_set"}, | [i]={"0f56b22614c8",1552587137,"Add PragmaHandler for MSVC pragma execution_character_set"}, | ||
[j]={{ | [j]={{I,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);"}}, | ||
[p]={ | |||
[wb]={"clang/test/Preprocessor/pragma_microsoft.c:245:97: warning: #pragma execution_character_set expected \'push\' or \'pop\' [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:246:33: warning: #pragma execution_character_set expected \'push\' or \'pop\' [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:247:33: warning: #pragma execution_character_set expected \'push\' or \'pop\' [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:248:33: warning: #pragma execution_character_set expected \'push\' or \'pop\' [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_action_or_r_paren"]={ | ["warn_pragma_expected_action_or_r_paren"]={ | ||
[ | [g]="expected action or \')\' in \'#pragma A\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected action or \')\' in \'#pragma %0\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="expected action or \'\\)\' in \'\\#pragma (.*?)\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={ | [i]={wc,1396996247,Lc}, | ||
[j]={{ | [j]={{s,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;"}}, | ||
[p]={ | |||
[kc]={"clang/test/Sema/pragma-section.c:39:9: warning: expected action or \')\' in \'#pragma section\' - ignored [-Wignored-pragmas]","clang/test/Sema/pragma-section.c:44:9: warning: expected action or \')\' in \'#pragma section\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_colon"]={ | ["warn_pragma_expected_colon"]={ | ||
[ | [g]="missing \':\' after A - ignoring [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="missing \':\' after %0 - ignoring", | ||
[ | [f]=m, | ||
[ | [a]="missing \'\\:\' after (.*?) \\- ignoring", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{L,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\";"},{L,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\";"},{L,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\";"},{L,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\";"},{L,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\";"},{L,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\");"},{L,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) << \")\";"},{L,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\";"},{L,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\");"},{s,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;"}}, | ||
[p]={ | |||
["clang/test/OpenMP/parallel_reduction_messages.c"]={"clang/test/OpenMP/parallel_reduction_messages.c:7:213: warning: missing \':\' after reduction identifier - ignoring [-Wignored-pragmas]","clang/test/OpenMP/parallel_reduction_messages.c:9:220: warning: missing \':\' after reduction identifier - ignoring [-Wignored-pragmas]","clang/test/OpenMP/parallel_reduction_messages.c:11:221: warning: missing \':\' after reduction identifier - ignoring [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_colon_r_paren"]={ | ["warn_pragma_expected_colon_r_paren"]={ | ||
[ | [g]="missing \':\' or \')\' after A - ignoring [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="missing \':\' or \')\' after %0 - ignoring", | ||
[ | [f]=m, | ||
[ | [a]="missing \'\\:\' or \'\\)\' after (.*?) \\- ignoring", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{L,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\");"}}, | ||
[p]={ | |||
["clang/test/OpenMP/ordered_messages.cpp"]={"clang/test/OpenMP/ordered_messages.cpp:190:376: warning: missing \':\' or \')\' after dependency type - ignoring [-Wignored-pragmas]","clang/test/OpenMP/ordered_messages.cpp:192:271: warning: missing \':\' or \')\' after dependency type - ignoring [-Wignored-pragmas]","clang/test/OpenMP/ordered_messages.cpp:369:376: warning: missing \':\' or \')\' after dependency type - ignoring [-Wignored-pragmas]","clang/test/OpenMP/ordered_messages.cpp:371:271: warning: missing \':\' or \')\' after dependency type - ignoring [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_comma"]={ | ["warn_pragma_expected_comma"]={ | ||
[ | [g]="expected \',\' in \'#pragma A\' [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected \',\' in \'#pragma %0\'", | ||
[ | [f]=m, | ||
[ | [a]="expected \',\' in \'\\#pragma (.*?)\'", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,1286,"bool Parser::HandlePragmaMSAllocText(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::comma, diag::warn_pragma_expected_comma, PragmaName))"},{s,3760,"// #pragma optimize(\"gsty\", on|off)\nbool Parser::HandlePragmaMSOptimize(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::comma, diag::warn_pragma_expected_comma, PragmaName))"}}, | ||
[p]={ | |||
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:4:20: warning: expected \',\' in \'#pragma alloc_text\' [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_identifier"]={ | ["warn_pragma_expected_identifier"]={ | ||
[ | [g]="expected identifier in \'#pragma A\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected identifier in \'#pragma %0\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="expected identifier in \'\\#pragma (.*?)\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | [i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | ||
[j]={{ | [j]={{s,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;"},{s,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\";"},{s,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\";"},{s,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\");"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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();"}}, | ||
[p]={ | |||
["clang/test/Parser/pragma-weak.c"]={"clang/test/Parser/pragma-weak.c:7:77: warning: expected identifier in \'#pragma weak\' - ignored [-Wignored-pragmas]","clang/test/Parser/pragma-weak.c:11:82: warning: expected identifier in \'#pragma weak\' - ignored [-Wignored-pragmas]","clang/test/Parser/pragma-weak.c:12:81: warning: expected identifier in \'#pragma weak\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_init_seg"]={ | ["warn_pragma_expected_init_seg"]={ | ||
[ | [g]="expected \'compiler\', \'lib\', \'user\', or a string literal for the section name in \'#pragma A\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected \'compiler\', \'lib\', \'user\', or a string literal for the section name in \'#pragma %0\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="expected \'compiler\', \'lib\', \'user\', or a string literal for the section name in \'\\#pragma (.*?)\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={"1a711b169619",1405990385,"-fms-extensions: Implement half of #pragma init_seg"}, | [i]={"1a711b169619",1405990385,"-fms-extensions: Implement half of #pragma init_seg"}, | ||
[j]={{ | [j]={{s,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/pragma-init_seg.cpp"]={"clang/test/SemaCXX/pragma-init_seg.cpp:9:9: warning: expected \'compiler\', \'lib\', \'user\', or a string literal for the section name in \'#pragma init_seg\' - ignored [-Wignored-pragmas]","clang/test/SemaCXX/pragma-init_seg.cpp:10:9: warning: expected \'compiler\', \'lib\', \'user\', or a string literal for the section name in \'#pragma init_seg\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_integer"]={ | ["warn_pragma_expected_integer"]={ | ||
[ | [g]="expected integer between A and B inclusive in \'#pragma C\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected integer between %0 and %1 inclusive in \'#pragma %2\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="expected integer between (.*?) and (.*?) inclusive in \'\\#pragma (.*?)\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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\";"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/pragma-vtordisp.cpp"]={"clang/test/SemaCXX/pragma-vtordisp.cpp:15:25: warning: expected integer between 0 and 2 inclusive in \'#pragma vtordisp\' - ignored [-Wignored-pragmas]","clang/test/SemaCXX/pragma-vtordisp.cpp:32:19: warning: expected integer between 0 and 2 inclusive in \'#pragma vtordisp\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_lparen"]={ | ["warn_pragma_expected_lparen"]={ | ||
[ | [g]="missing \'(\' after \'#pragma A\' - ignoring [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="missing \'(\' after \'#pragma %0\' - ignoring", | ||
[ | [f]=m, | ||
[ | [a]="missing \'\\(\' after \'\\#pragma (.*?)\' \\- ignoring", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | [i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | ||
[j]={{ | [j]={{s,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;"},{s,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;"},{s,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;"},{s,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))"},{s,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))"},{s,1261,"bool Parser::HandlePragmaMSAllocText(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::l_paren, diag::warn_pragma_expected_lparen, PragmaName))"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,3707,"bool Parser::HandlePragmaMSFunction(StringRef PragmaName, SourceLocation PragmaLocation) {\n if (ExpectAndConsume(tok::l_paren, diag::warn_pragma_expected_lparen, PragmaName))"},{s,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))"}}, | ||
[p]={ | |||
["clang/test/Parser/pragma-pack.c"]={"clang/test/Parser/pragma-pack.c:6:73: warning: missing \'(\' after \'#pragma pack\' - ignoring [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_non_wide_string"]={ | ["warn_pragma_expected_non_wide_string"]={ | ||
[ | [g]="expected non-wide string literal in \'#pragma A\' [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected non-wide string literal in \'#pragma %0\'", | ||
[ | [f]=m, | ||
[ | [a]="expected non\\-wide string literal in \'\\#pragma (.*?)\'", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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;"},{s,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;"},{s,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;"},{s,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;"},{s,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;"}}, | ||
[p]={ | |||
[kc]={"clang/test/Sema/pragma-section.c:12:9: warning: expected non-wide string literal in \'#pragma data_seg\' [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_predicate"]={ | ["warn_pragma_expected_predicate"]={ | ||
[ | [g]="expected ... - ignoring [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected %select{\'enable\', \'disable\', \'begin\' or \'end\'|\'disable\'}0 - ignoring", | ||
[ | [f]=m, | ||
[ | [a]="expected (?:\'enable\', \'disable\', \'begin\' or \'end\'|\'disable\') \\- ignoring", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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;"},{s,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;"},{s,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\");"}}, | ||
[p]={ | |||
["clang/test/Parser/opencl-pragma.cl"]={"clang/test/Parser/opencl-pragma.cl:10:40: warning: expected \'enable\', \'disable\', \'begin\' or \'end\' - ignoring [-Wignored-pragmas]","clang/test/Parser/opencl-pragma.cl:8:26: warning: expected \'disable\' - ignoring [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_punc"]={ | ["warn_pragma_expected_punc"]={ | ||
[ | [g]="expected \')\' or \',\' in \'#pragma A\' [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected \')\' or \',\' in \'#pragma %0\'", | ||
[ | [f]=m, | ||
[ | [a]="expected \'\\)\' or \',\' in \'\\#pragma (.*?)\'", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={"88969810565a",1392059197,"Basic: Clean up malformed pragma diagnostics"}, | [i]={"88969810565a",1392059197,"Basic: Clean up malformed pragma diagnostics"}, | ||
[j]={{ | [j]={{s,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;"},{s,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;"},{s,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))"},{s,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\";"},{s,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"]={ | ||
[ | [g]="missing \')\' after \'#pragma A\' - ignoring [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="missing \')\' after \'#pragma %0\' - ignoring", | ||
[ | [f]=m, | ||
[ | [a]="missing \'\\)\' after \'\\#pragma (.*?)\' \\- ignoring", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | [i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | ||
[j]={{ | [j]={{s,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;"},{s,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;"},{s,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;"},{s,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))"},{s,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))"},{s,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))"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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))"},{s,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))"}}, | ||
[p]={ | |||
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:5:22: warning: missing \')\' after \'#pragma alloc_text\' - ignoring [-Wignored-pragmas]","clang/test/Sema/pragma-ms-alloc-text.cpp:15:22: warning: missing \')\' after \'#pragma alloc_text\' - ignoring [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_section_label_or_name"]={ | ["warn_pragma_expected_section_label_or_name"]={ | ||
[ | [g]="expected a stack label or a string literal for the section name in \'#pragma A\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected a stack label or a string literal for the section name in \'#pragma %0\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="expected a stack label or a string literal for the section name in \'\\#pragma (.*?)\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={ | [i]={wc,1396996247,Lc}, | ||
[j]={{ | [j]={{s,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;"}}, | ||
[p]={ | |||
[kc]={"clang/test/Sema/pragma-section.c:28:9: warning: expected a stack label or a string literal for the section name in \'#pragma bss_seg\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_section_name"]={ | ["warn_pragma_expected_section_name"]={ | ||
[ | [g]="expected a string literal for the section name in \'#pragma A\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected a string literal for the section name in \'#pragma %0\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="expected a string literal for the section name in \'\\#pragma (.*?)\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={ | [i]={wc,1396996247,Lc}, | ||
[j]={{ | [j]={{s,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;"},{s,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;"},{s,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:3:9: warning: expected a string literal for the section name in \'#pragma alloc_text\' - ignored [-Wignored-pragmas]","clang/test/Sema/pragma-ms-alloc-text.cpp:7:9: warning: expected a string literal for the section name in \'#pragma alloc_text\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_section_push_pop_or_name"]={ | ["warn_pragma_expected_section_push_pop_or_name"]={ | ||
[ | [g]="expected push, pop or a string literal for the section name in \'#pragma A\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected push, pop or a string literal for the section name in \'#pragma %0\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="expected push, pop or a string literal for the section name in \'\\#pragma (.*?)\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={ | [i]={wc,1396996247,Lc}, | ||
[j]={{ | [j]={{s,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;"},{s,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;"}}, | ||
[p]={ | |||
[kc]={"clang/test/Sema/pragma-section.c:24:9: warning: expected push, pop or a string literal for the section name in \'#pragma bss_seg\' - ignored [-Wignored-pragmas]","clang/test/Sema/pragma-section.c:25:9: warning: expected push, pop or a string literal for the section name in \'#pragma bss_seg\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_expected_string"]={ | ["warn_pragma_expected_string"]={ | ||
[ | [g]="expected string literal in \'#pragma A\' - ignoring [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected string literal in \'#pragma %0\' - ignoring", | ||
[ | [f]=m, | ||
[ | [a]="expected string literal in \'\\#pragma (.*?)\' \\- ignoring", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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;"}}, | ||
[p]={ | |||
[wb]={"clang/test/Preprocessor/pragma_microsoft.c:225:9: warning: expected string literal in \'#pragma optimize\' - ignoring [-Wignored-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:226:9: warning: expected string literal in \'#pragma optimize\' - ignoring [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_extension_is_core"]={ | ["warn_pragma_extension_is_core"]={ | ||
[ | [g]="OpenCL extension A is core feature or supported optional core feature - ignoring [-Wpedantic-core-features]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"pedantic-core-features"}, | ||
[ | [o]="pedantic-core-features", | ||
[ | [e]="OpenCL extension %0 is core feature or supported optional core feature - ignoring", | ||
[ | [f]=m, | ||
[ | [a]="OpenCL extension (.*?) is core feature or supported optional core feature \\- ignoring", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpedantic\\-core\\-features[^\\]]*\\]", | ||
[ | [h]=B, | ||
[i]={"64936ce91dba",1463154277,"[OpenCL] Add supported OpenCL extensions to target info."}, | [i]={"64936ce91dba",1463154277,"[OpenCL] Add supported OpenCL extensions to target info."}, | ||
[j]={{ | [j]={{s,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;"}}, | ||
[p]={ | |||
["clang/test/Misc/amdgcn.languageOptsOpenCL.cl"]={"clang/test/Misc/amdgcn.languageOptsOpenCL.cl:57:26: warning: OpenCL extension \'cl_khr_byte_addressable_store\' is core feature or supported optional core feature - ignoring [-Wpedantic-core-features]","clang/test/Misc/amdgcn.languageOptsOpenCL.cl:65:26: warning: OpenCL extension \'cl_khr_global_int32_base_atomics\' is core feature or supported optional core feature - ignoring [-Wpedantic-core-features]","clang/test/Misc/amdgcn.languageOptsOpenCL.cl:73:26: warning: OpenCL extension \'cl_khr_global_int32_extended_atomics\' is core feature or supported optional core feature - ignoring [-Wpedantic-core-features]","clang/test/Misc/amdgcn.languageOptsOpenCL.cl:81:26: warning: OpenCL extension \'cl_khr_local_int32_base_atomics\' is core feature or supported optional core feature - ignoring [-Wpedantic-core-features]","clang/test/Misc/amdgcn.languageOptsOpenCL.cl:89:26: warning: OpenCL extension \'cl_khr_local_int32_extended_atomics\' is core feature or supported optional core feature - ignoring [-Wpedantic-core-features]","clang/test/Misc/amdgcn.languageOptsOpenCL.cl:98:26: warning: OpenCL extension \'cl_khr_fp64\' is core feature or supported optional core feature - ignoring [-Wpedantic-core-features]","clang/test/Misc/amdgcn.languageOptsOpenCL.cl:107:26: warning: OpenCL extension \'cl_khr_3d_image_writes\' is core feature or supported optional core feature - ignoring [-Wpedantic-core-features]"} | |||
} | |||
}, | }, | ||
["warn_pragma_extra_tokens_at_eol"]={ | ["warn_pragma_extra_tokens_at_eol"]={ | ||
[ | [g]="extra tokens at end of \'#pragma A\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="extra tokens at end of \'#pragma %0\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="extra tokens at end of \'\\#pragma (.*?)\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={"f5867dd51a83",1244162998,"Add parser support for #pragma weak."}, | [i]={"f5867dd51a83",1244162998,"Add parser support for #pragma weak."}, | ||
[j]={{ | [j]={{s,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;"},{s,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;"},{s,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;"},{s,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))"},{s,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))"},{s,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))"},{s,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);"},{s,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);"},{s,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);"},{s,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);"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\");"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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();"},{s,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\";"},{s,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\";"},{s,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))"},{s,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))"},{s,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\";"},{s,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\";"},{s,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\";"},{s,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\";"}}, | ||
[p]={ | |||
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:14:29: warning: extra tokens at end of \'#pragma alloc_text\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_final_macro"]={ | ["warn_pragma_final_macro"]={ | ||
[ | [g]="macro A has been marked as final and should not be ... [-Wfinal-macro]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"final-macro","pedantic-macros"}, | ||
[ | [o]="final-macro", | ||
[ | [e]="macro %0 has been marked as final and should not be %select{undefined|redefined}1", | ||
[ | [f]=m, | ||
[ | [a]="macro (.*?) has been marked as final and should not be (?:undefined|redefined)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wfinal\\-macro[^\\]]*\\]", | ||
[ | [h]=D, | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[j]={{ | [j]={{lc,1485,"void Preprocessor::emitFinalMacroWarning(const Token &Identifier, bool IsUndef) const {\n Diag(Identifier, diag::warn_pragma_final_macro) << Identifier.getIdentifierInfo() << (IsUndef ? 0 : 1);"}}, | ||
[p]={ | |||
["clang/test/Lexer/final-macro.c"]={"clang/test/Lexer/final-macro.c:10:9: warning: macro \'Foo\' has been marked as final and should not be redefined [-Wfinal-macro]","clang/test/Lexer/final-macro.c:14:9: warning: macro \'Foo\' has been marked as final and should not be redefined [-Wfinal-macro]","clang/test/Lexer/final-macro.c:23:8: warning: macro \'Foo\' has been marked as final and should not be undefined [-Wfinal-macro]","clang/test/Lexer/final-macro.c:25:9: warning: macro \'Foo\' has been marked as final and should not be redefined [-Wfinal-macro]","clang/test/Lexer/Inputs/final-macro-system.h:2:8: warning: macro \'SYSTEM_MACRO\' has been marked as final and should not be undefined [-Wfinal-macro]","clang/test/Lexer/Inputs/final-macro-system.h:4:9: warning: macro \'SYSTEM_MACRO\' has been marked as final and should not be redefined [-Wfinal-macro]"} | |||
} | |||
}, | }, | ||
["warn_pragma_force_cuda_host_device_bad_arg"]={ | ["warn_pragma_force_cuda_host_device_bad_arg"]={ | ||
[ | [g]="incorrect use of #pragma clang force_cuda_host_device begin|end [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="incorrect use of #pragma clang force_cuda_host_device begin|end", | ||
[ | [f]=m, | ||
[ | [a]="incorrect use of \\#pragma clang force_cuda_host_device begin\\|end", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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);"},{s,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);"}}, | ||
[p]={ | |||
["clang/test/Parser/cuda-force-host-device.cu"]={"clang/test/Parser/cuda-force-host-device.cu:29:15: warning: incorrect use of #pragma clang force_cuda_host_device begin|end [-Wignored-pragmas]","clang/test/Parser/cuda-force-host-device.cu:32:15: warning: incorrect use of #pragma clang force_cuda_host_device begin|end [-Wignored-pragmas]","clang/test/Parser/cuda-force-host-device.cu:35:15: warning: incorrect use of #pragma clang force_cuda_host_device begin|end [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_fp_ignored"]={ | ["warn_pragma_fp_ignored"]={ | ||
[ | [g]="\'#pragma A\' is not supported on this target - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="\'#pragma %0\' is not supported on this target - ignored", | ||
[ | [f]=m, | ||
[ | [a]="\'\\#pragma (.*?)\' is not supported on this target \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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();"},{s,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;"},{s,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();"},{s,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();"}}, | ||
[p]={ | |||
["clang/test/Parser/pragma-fp-warn.c"]={"clang/test/Parser/pragma-fp-warn.c:15:9: warning: \'#pragma float_control\' is not supported on this target - ignored [-Wignored-pragmas]","clang/test/Parser/pragma-fp-warn.c:17:14: warning: \'#pragma FENV_ACCESS\' is not supported on this target - ignored [-Wignored-pragmas]","clang/test/Parser/pragma-fp-warn.c:19:14: warning: \'#pragma FENV_ROUND\' is not supported on this target - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_ignored"]={ | ["warn_pragma_ignored"]={ | ||
[ | [g]="unknown pragma ignored [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="unknown pragma ignored", | ||
[ | [f]=m, | ||
[ | [a]="unknown pragma ignored", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[i]={"21656f22dbb9",1240175426,"basic support for -Wunknown-pragmas, more coming."}, | [i]={"21656f22dbb9",1240175426,"basic support for -Wunknown-pragmas, more coming."}, | ||
[j]={{ | [j]={{I,120,"void PragmaNamespace::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n if (!Handler) {\n PP.Diag(Tok, diag::warn_pragma_ignored);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/_Pragma.c"]={"clang/test/Preprocessor/_Pragma.c:6:1: warning: unknown pragma ignored [-Wunknown-pragmas]","clang/test/Preprocessor/_Pragma.c:8:1: warning: unknown pragma ignored [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_include_alias_expected"]={ | ["warn_pragma_include_alias_expected"]={ | ||
[ | [g]="pragma include_alias expected \'A\' [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="pragma include_alias expected \'%0\'", | ||
[ | [f]=m, | ||
[ | [a]="pragma include_alias expected \'(.*?)\'", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[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]={{ | [j]={{I,695,"void Preprocessor::HandlePragmaIncludeAlias(Token &Tok) {\n if (Tok.isNot(tok::l_paren)) {\n Diag(Tok, diag::warn_pragma_include_alias_expected) << \"(\";"},{I,717,"void Preprocessor::HandlePragmaIncludeAlias(Token &Tok) {\n if (Tok.isNot(tok::comma)) {\n Diag(Tok, diag::warn_pragma_include_alias_expected) << \",\";"},{I,736,"void Preprocessor::HandlePragmaIncludeAlias(Token &Tok) {\n if (Tok.isNot(tok::r_paren)) {\n Diag(Tok, diag::warn_pragma_include_alias_expected) << \")\";"}}, | ||
[p]={ | |||
[wb]={"clang/test/Preprocessor/pragma_microsoft.c:89:31: warning: pragma include_alias expected \',\' [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_include_alias_expected_filename"]={ | ["warn_pragma_include_alias_expected_filename"]={ | ||
[ | [g]="pragma include_alias expected include filename [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="pragma include_alias expected include filename", | ||
[ | [f]=m, | ||
[ | [a]="pragma include_alias expected include filename", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[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]={{ | [j]={{I,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);"},{I,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);"}}, | ||
[p]={ | |||
[wb]={"clang/test/Preprocessor/pragma_microsoft.c:96:22: warning: pragma include_alias expected include filename [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_include_alias_mismatch_angle"]={ | ["warn_pragma_include_alias_mismatch_angle"]={ | ||
[ | [g]="angle-bracketed include <A> cannot be aliased to double-quoted include \"B\" [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="angle-bracketed include <%0> cannot be aliased to double-quoted include \"%1\"", | ||
[ | [f]=m, | ||
[ | [a]="angle\\-bracketed include \\<(.*?)\\> cannot be aliased to double\\-quoted include \"(.*?)\"", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[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]={{ | [j]={{I,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;"}}, | ||
[p]={ | |||
[wb]={"clang/test/Preprocessor/pragma_microsoft.c:87:23: warning: angle-bracketed include <bar.h> cannot be aliased to double-quoted include \"bar.h\" [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_include_alias_mismatch_quote"]={ | ["warn_pragma_include_alias_mismatch_quote"]={ | ||
[ | [g]="double-quoted include \"A\" cannot be aliased to angle-bracketed include <B> [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="double-quoted include \"%0\" cannot be aliased to angle-bracketed include <%1>", | ||
[ | [f]=m, | ||
[ | [a]="double\\-quoted include \"(.*?)\" cannot be aliased to angle\\-bracketed include \\<(.*?)\\>", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[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]={{ | [j]={{I,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;"}}, | ||
[p]={ | |||
[wb]={"clang/test/Preprocessor/pragma_microsoft.c:88:23: warning: double-quoted include \"foo.h\" cannot be aliased to angle-bracketed include <bar.h> [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_init_seg_unsupported_target"]={ | ["warn_pragma_init_seg_unsupported_target"]={ | ||
[ | [g]="\'#pragma init_seg\' is only supported when targeting a Microsoft environment [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="\'#pragma init_seg\' is only supported when targeting a Microsoft environment", | ||
[ | [f]=m, | ||
[ | [a]="\'\\#pragma init_seg\' is only supported when targeting a Microsoft environment", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/pragma-init_seg.cpp"]={"clang/test/SemaCXX/pragma-init_seg.cpp:21:9: warning: \'#pragma init_seg\' is only supported when targeting a Microsoft environment [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_intrinsic_builtin"]={ | ["warn_pragma_intrinsic_builtin"]={ | ||
[ | [g]="A is not a recognized builtin... [-Wignored-pragma-intrinsic]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"ignored-pragma-intrinsic",w,z}, | ||
[ | [o]="ignored-pragma-intrinsic", | ||
[ | [e]="%0 is not a recognized builtin%select{|; consider including <intrin.h> to access non-builtin intrinsics}1", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) is not a recognized builtin(?:|; consider including \\<intrin\\.h\\> to access non\\-builtin intrinsics)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wignored\\-pragma\\-intrinsic[^\\]]*\\]", | ||
[ | [h]=B, | ||
[i]={"3f1ec62a8397",1473266312,"Parsing MS pragma intrinsic"}, | [i]={"3f1ec62a8397",1473266312,"Parsing MS pragma intrinsic"}, | ||
[j]={{ | [j]={{s,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;"},{s,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;"}}, | ||
[p]={ | |||
[wb]={"clang/test/Preprocessor/pragma_microsoft.c:179:19: warning: \'asdf\' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Wignored-pragma-intrinsic]","clang/test/Preprocessor/pragma_microsoft.c:180:19: warning: \'main\' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Wignored-pragma-intrinsic]","clang/test/Preprocessor/pragma_microsoft.c:186:19: warning: \'asdf\' is not a recognized builtin [-Wignored-pragma-intrinsic]","clang/test/Preprocessor/pragma_microsoft.c:189:19: warning: \'asdf\' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Wignored-pragma-intrinsic]","clang/test/Preprocessor/pragma_microsoft.c:195:19: warning: \'asdf\' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Wignored-pragma-intrinsic]","clang/test/Preprocessor/pragma_microsoft.c:201:19: warning: \'asdf\' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Wignored-pragma-intrinsic]","clang/test/Preprocessor/pragma_microsoft.c:207:18: warning: \'asdf\' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Wignored-pragma-intrinsic]","clang/test/Preprocessor/pragma_microsoft.c:208:18: warning: \'main\' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Wignored-pragma-intrinsic]","clang/test/Preprocessor/pragma_microsoft.c:214:18: warning: \'asdf\' is not a recognized builtin [-Wignored-pragma-intrinsic]","clang/test/Preprocessor/pragma_microsoft.c:217:18: warning: \'asdf\' is not a recognized builtin; consider including <intrin.h> to access non-builtin intrinsics [-Wignored-pragma-intrinsic]"} | |||
} | |||
}, | }, | ||
["warn_pragma_invalid_action"]={ | ["warn_pragma_invalid_action"]={ | ||
[ | [g]="unknown action for \'#pragma A\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="unknown action for \'#pragma %0\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="unknown action for \'\\#pragma (.*?)\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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;"},{s,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\";"},{s,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\";"}}, | ||
[p]={ | |||
["clang/test/Parser/pragma-pack.c"]={"clang/test/Parser/pragma-pack.c:10:73: warning: unknown action for \'#pragma pack\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_invalid_argument"]={ | ["warn_pragma_invalid_argument"]={ | ||
[ | [g]="unexpected argument \'A\' to \'#pragma B\'... [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="unexpected argument \'%0\' to \'#pragma %1\'%select{|; expected %3}2", | ||
[ | [f]=m, | ||
[ | [a]="unexpected argument \'(.*?)\' to \'\\#pragma (.*?)\'(?:|; expected (.*?))", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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\'\";"},{s,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 << \"\\\"\\\"\";"},{s,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\'\";"},{s,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\'\";"}}, | ||
[p]={ | |||
["clang/test/Sema/riscv-bad-intrinsic-pragma.c"]={"clang/test/Sema/riscv-bad-intrinsic-pragma.c:4:31: warning: unexpected argument \'vvvv\' to \'#pragma riscv\'; expected \'vector\' or \'sifive_vector\' [-Wignored-pragmas]","clang/test/Sema/riscv-bad-intrinsic-pragma.c:7:21: warning: unexpected argument \'what\' to \'#pragma riscv\'; expected \'intrinsic\' [-Wignored-pragmas]","clang/test/Sema/riscv-bad-intrinsic-pragma.c:9:21: warning: unexpected argument \'int\' to \'#pragma riscv\'; expected \'intrinsic\' [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_invalid_specific_action"]={ | ["warn_pragma_invalid_specific_action"]={ | ||
[ | [g]="unknown action \'A\' for \'#pragma B\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="unknown action \'%1\' for \'#pragma %0\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="unknown action \'(.*?)\' for \'\\#pragma (.*?)\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={ | [i]={wc,1396996247,Lc}, | ||
[j]={{ | [j]={{s,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();"}}, | ||
[p]={ | |||
[kc]={"clang/test/Sema/pragma-section.c:41:9: warning: unknown action \'bogus\' for \'#pragma section\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_message"]={ | ["warn_pragma_message"]={ | ||
[ | [g]="A [-W#pragma-messages]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"#pragma-messages"}, | ||
[ | [o]="#pragma-messages", | ||
[ | [e]="%0", | ||
[ | [f]=m, | ||
[ | [a]="(.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-W\\#pragma\\-messages[^\\]]*\\]", | ||
[ | [h]="#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]={{ | [j]={{I,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,"}}, | ||
[p]={ | |||
["clang/test/Lexer/pragma-operators.cpp"]={"clang/test/Lexer/pragma-operators.cpp:37:65: warning: \"Hello\", world! [-W#pragma-messages]"} | |||
} | |||
}, | }, | ||
["warn_pragma_missing_argument"]={ | ["warn_pragma_missing_argument"]={ | ||
[ | [g]="missing argument to \'#pragma A\'... [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="missing argument to \'#pragma %0\'%select{|; expected %2}1", | ||
[ | [f]=m, | ||
[ | [a]="missing argument to \'\\#pragma (.*?)\'(?:|; expected (.*?))", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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\'\";"}}, | ||
[p]={ | |||
[wb]={"clang/test/Preprocessor/pragma_microsoft.c:228:9: warning: missing argument to \'#pragma optimize\'; expected \'on\' or \'off\' [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_ms_fenv_access"]={ | ["warn_pragma_ms_fenv_access"]={ | ||
[ | [g]="incorrect use of \'#pragma fenv_access (on|off)\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="incorrect use of \'#pragma fenv_access (on|off)\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="incorrect use of \'\\#pragma fenv_access \\(on\\|off\\)\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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);"},{s,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);"}}, | ||
[p]={ | |||
["clang/test/Parser/pragma-fenv_access-ms.c"]={"clang/test/Parser/pragma-fenv_access-ms.c:9:83: warning: incorrect use of \'#pragma fenv_access (on|off)\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_ms_struct"]={ | ["warn_pragma_ms_struct"]={ | ||
[ | [g]="incorrect use of \'#pragma ms_struct on|off\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="incorrect use of \'#pragma ms_struct on|off\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="incorrect use of \'\\#pragma ms_struct on\\|off\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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);"},{s,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/pragma-ms_struct.c"]={"clang/test/Sema/pragma-ms_struct.c:9:96: warning: incorrect use of \'#pragma ms_struct on|off\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_omp_ignored"]={ | ["warn_pragma_omp_ignored"]={ | ||
[ | [g]="unexpected \'#pragma omp ...\' in program [-Wsource-uses-openmp]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={O,nb}, | ||
[ | [o]=nb, | ||
[ | [e]="unexpected \'#pragma omp ...\' in program", | ||
[ | [f]=m, | ||
[ | [a]="unexpected \'\\#pragma omp \\.\\.\\.\' in program", | ||
[ | [b]=Rb, | ||
[ | [h]=B, | ||
[i]={"5d61097dd909",1351328745,"Feature:"}, | [i]={"5d61097dd909",1351328745,"Feature:"}, | ||
[j]={{ | [j]={{s,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())) {"},{s,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);"},{s,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());"}}, | ||
[p]={ | |||
["clang/test/OpenMP/option_warn.c"]={"clang/test/OpenMP/option_warn.c:7:9: warning: unexpected \'#pragma omp ...\' in program [-Wsource-uses-openmp]"} | |||
} | |||
}, | }, | ||
["warn_pragma_options_align_reset_failed"]={ | ["warn_pragma_options_align_reset_failed"]={ | ||
[ | [g]="#pragma options align=reset failed: A [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="#pragma options align=reset failed: %0", | ||
[ | [f]=m, | ||
[ | [a]="\\#pragma options align\\=reset failed\\: (.*?)", | ||
[ | [b]=F, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{jb,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\";"}}, | ||
[p]={ | |||
["clang/test/Sema/pragma-pack-and-options-align.c"]={"clang/test/Sema/pragma-pack-and-options-align.c:51:84: warning: #pragma options align=reset failed: stack empty [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_options_expected_align"]={ | ["warn_pragma_options_expected_align"]={ | ||
[ | [g]="expected \'align\' following \'#pragma options\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected \'align\' following \'#pragma options\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="expected \'align\' following \'\\#pragma options\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={"75c9be7e8048",1274916546,"Parse: Add support for \'#pragma options align\'."}, | [i]={"75c9be7e8048",1274916546,"Parse: Add support for \'#pragma options align\'."}, | ||
[j]={{ | [j]={{s,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);"}}, | ||
[p]={ | |||
["clang/test/Parser/pragma-options.c"]={"clang/test/Parser/pragma-options.c:3:88: warning: expected \'align\' following \'#pragma options\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_pack_invalid_alignment"]={ | ["warn_pragma_pack_invalid_alignment"]={ | ||
[ | [g]="expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\' [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'", | ||
[ | [f]=m, | ||
[ | [a]="expected \\#pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'", | ||
[ | [b]=F, | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{jb,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/pragma-pack.c"]={"clang/test/Sema/pragma-pack.c:4:74: warning: expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\' [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_pack_malformed"]={ | ["warn_pragma_pack_malformed"]={ | ||
[ | [g]="expected integer or identifier in \'#pragma pack\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected integer or identifier in \'#pragma pack\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="expected integer or identifier in \'\\#pragma pack\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{s,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);"},{s,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);"}}, | ||
[p]={ | |||
["clang/test/Parser/pragma-pack.c"]={"clang/test/Parser/pragma-pack.c:14:94: warning: expected integer or identifier in \'#pragma pack\' - ignored [-Wignored-pragmas]","clang/test/Parser/pragma-pack.c:15:94: warning: expected integer or identifier in \'#pragma pack\' - ignored [-Wignored-pragmas]","clang/test/Parser/pragma-pack.c:16:94: warning: expected integer or identifier in \'#pragma pack\' - ignored [-Wignored-pragmas]","clang/test/Parser/pragma-pack.c:19:97: warning: expected integer or identifier in \'#pragma pack\' - ignored [-Wignored-pragmas]","clang/test/Parser/pragma-pack.c:20:96: warning: expected integer or identifier in \'#pragma pack\' - ignored [-Wignored-pragmas]","clang/test/Parser/pragma-pack.c:21:96: warning: expected integer or identifier in \'#pragma pack\' - ignored [-Wignored-pragmas]","clang/test/Parser/pragma-pack.c:32:76: warning: expected integer or identifier in \'#pragma pack\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_pack_modified_after_include"]={ | ["warn_pragma_pack_modified_after_include"]={ | ||
[ | [g]="the current #pragma pack alignment value is modified in the included file [-Wpragma-pack]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Sc,z}, | ||
[ | [o]=Sc, | ||
[ | [e]="the current #pragma pack alignment value is modified in the included file", | ||
[ | [f]=m, | ||
[ | [a]="the current \\#pragma pack alignment value is modified in the included file", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpragma\\-pack[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{jb,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/misleading-pragma-align-pack-diagnostics.c"]={"clang/test/Sema/misleading-pragma-align-pack-diagnostics.c:15:10: warning: the current #pragma pack alignment value is modified in the included file [-Wpragma-pack]"} | |||
} | |||
}, | }, | ||
["warn_pragma_pack_no_pop_eof"]={ | ["warn_pragma_pack_no_pop_eof"]={ | ||
[ | [g]="unterminated \'#pragma pack (push, ...)\' at end of file [-Wpragma-pack]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Sc,z}, | ||
[ | [o]=Sc, | ||
[ | [e]="unterminated \'#pragma pack (push, ...)\' at end of file", | ||
[ | [f]=m, | ||
[ | [a]="unterminated \'\\#pragma pack \\(push, \\.\\.\\.\\)\' at end of file", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpragma\\-pack[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{jb,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);"}}, | ||
[p]={ | |||
["clang/test/FixIt/fixit-pragma-pack.c"]={"clang/test/FixIt/fixit-pragma-pack.c:3:9: warning: unterminated \'#pragma pack (push, ...)\' at end of file [-Wpragma-pack]"} | |||
} | |||
}, | }, | ||
["warn_pragma_pack_non_default_at_include"]={ | ["warn_pragma_pack_non_default_at_include"]={ | ||
[ | [g]="non-default #pragma pack value changes the alignment of struct or union members in the included file [-Wpragma-pack-suspicious-include]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Sc,"pragma-pack-suspicious-include",z}, | ||
[ | [o]="pragma-pack-suspicious-include", | ||
[ | [e]="non-default #pragma pack value changes the alignment of struct or union members in the included file", | ||
[ | [f]=m, | ||
[ | [a]="non\\-default \\#pragma pack value changes the alignment of struct or union members in the included file", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpragma\\-pack\\-suspicious\\-include[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{jb,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/suspicious-pragma-pack.m"]={"clang/test/SemaObjC/suspicious-pragma-pack.m:4:9: warning: non-default #pragma pack value changes the alignment of struct or union members in the included file [-Wpragma-pack-suspicious-include]"} | |||
} | |||
}, | }, | ||
["warn_pragma_pack_pop_identifier_and_alignment"]={ | ["warn_pragma_pack_pop_identifier_and_alignment"]={ | ||
[ | [g]="specifying both a name and alignment to \'pop\' is undefined", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="specifying both a name and alignment to \'pop\' is undefined", | ||
[ | [f]=m, | ||
[ | [a]="specifying both a name and alignment to \'pop\' is undefined", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[i]={"2a8c18d99118",1523027672,"Fix typos in clang"}, | [i]={"2a8c18d99118",1523027672,"Fix typos in clang"}, | ||
[j]={{ | [j]={{jb,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"]={ | ||
[ | [g]="value of #pragma pack(show) == A", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="value of #pragma pack(show) == %0", | ||
[ | [f]=m, | ||
[ | [a]="value of \\#pragma pack\\(show\\) \\=\\= (.*?)", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{jb,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\";"},{jb,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/pragma-pack.c"]={"clang/test/Sema/pragma-pack.c:3:69: warning: value of #pragma pack(show) == 8","clang/test/Sema/pragma-pack.c:5:69: warning: value of #pragma pack(show) == 8","clang/test/Sema/pragma-pack.c:7:69: warning: value of #pragma pack(show) == 4","clang/test/Sema/pragma-pack.c:9:69: warning: value of #pragma pack(show) == 8","clang/test/Sema/pragma-pack.c:12:70: warning: value of #pragma pack(show) == 16","clang/test/Sema/pragma-pack.c:14:70: warning: value of #pragma pack(show) == 16","clang/test/Sema/pragma-pack.c:17:69: warning: value of #pragma pack(show) == 8","clang/test/Sema/pragma-pack.c:19:69: warning: value of #pragma pack(show) == 1","clang/test/Sema/pragma-pack.c:21:69: warning: value of #pragma pack(show) == 2","clang/test/Sema/pragma-pack.c:26:70: warning: value of #pragma pack(show) == 16"} | |||
} | |||
}, | }, | ||
["warn_pragma_pop_failed"]={ | ["warn_pragma_pop_failed"]={ | ||
[ | [g]="#pragma A(pop, ...) failed: B [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="#pragma %0(pop, ...) failed: %1", | ||
[ | [f]=m, | ||
[ | [a]="\\#pragma (.*?)\\(pop, \\.\\.\\.\\) failed\\: (.*?)", | ||
[ | [b]=F, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{jb,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\""},{jb,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\""},{jb,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\""},{jb,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\";"},{jb,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\""}}, | ||
[p]={ | |||
["clang/test/Sema/pragma-pack-and-options-align.c"]={"clang/test/Sema/pragma-pack-and-options-align.c:52:79: warning: #pragma pack(pop, ...) failed: stack empty [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_pop_macro_no_push"]={ | ["warn_pragma_pop_macro_no_push"]={ | ||
[ | [g]="pragma pop_macro could not pop \'A\', no matching push_macro [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="pragma pop_macro could not pop \'%0\', no matching push_macro", | ||
[ | [f]=m, | ||
[ | [a]="pragma pop_macro could not pop \'(.*?)\', no matching push_macro", | ||
[ | [b]=F, | ||
[ | [h]=D, | ||
[i]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!"}, | [i]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!"}, | ||
[j]={{ | [j]={{I,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"]={ | ||
[ | [g]="macro A has been marked as unsafe for use in headers... [-Wrestrict-expansion]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"pedantic-macros","restrict-expansion"}, | ||
[ | [o]="restrict-expansion", | ||
[ | [e]="macro %0 has been marked as unsafe for use in headers%select{|: %2}1", | ||
[ | [f]=m, | ||
[ | [a]="macro (.*?) has been marked as unsafe for use in headers(?:|\\: (.*?))", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wrestrict\\-expansion[^\\]]*\\]", | ||
[ | [h]=D, | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[j]={{ | [j]={{lc,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;"},{lc,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;"}}, | ||
[p]={ | |||
["clang/test/Lexer/unsafe-macro.c"]={"clang/test/Lexer/Inputs/unsafe-macro-2.h:2:5: warning: macro \'UNSAFE_MACRO\' has been marked as unsafe for use in headers: Don\'t use this! [-Wrestrict-expansion]","clang/test/Lexer/Inputs/unsafe-macro-2.h:6:13: warning: macro \'UNSAFE_MACRO\' has been marked as unsafe for use in headers: Don\'t use this! [-Wrestrict-expansion]","clang/test/Lexer/Inputs/unsafe-macro-2.h:10:8: warning: macro \'UNSAFE_MACRO\' has been marked as unsafe for use in headers: Don\'t use this! [-Wrestrict-expansion]","clang/test/Lexer/Inputs/unsafe-macro-2.h:14:9: warning: macro \'UNSAFE_MACRO\' has been marked as unsafe for use in headers: Don\'t use this! [-Wrestrict-expansion]","clang/test/Lexer/Inputs/unsafe-macro-2.h:18:15: warning: macro \'UNSAFE_MACRO\' has been marked as unsafe for use in headers: Don\'t use this! [-Wrestrict-expansion]","clang/test/Lexer/Inputs/unsafe-macro-2.h:21:15: warning: macro \'UNSAFE_MACRO_2\' has been marked as unsafe for use in headers [-Wrestrict-expansion]","clang/test/Lexer/Inputs/unsafe-macro-2.h:34:7: warning: macro \'UNSAFE_MACRO\' has been marked as unsafe for use in headers: Don\'t use this! [-Wrestrict-expansion]","clang/test/Lexer/Inputs/unsafe-macro-2.h:41:10: warning: macro \'UNSAFE_MACRO\' has been marked as unsafe for use in headers: Don\'t use this! [-Wrestrict-expansion]","clang/test/Lexer/Inputs/unsafe-macro-2.h:48:11: warning: macro \'UNSAFE_MACRO\' has been marked as unsafe for use in headers: Don\'t use this! [-Wrestrict-expansion]"} | |||
} | |||
}, | }, | ||
["warn_pragma_unknown_extension"]={ | ["warn_pragma_unknown_extension"]={ | ||
[ | [g]="OpenCL extension A unknown or does not require pragma - ignoring [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="OpenCL extension %0 unknown or does not require pragma - ignoring", | ||
[ | [f]=m, | ||
[ | [a]="OpenCL extension (.*?) unknown or does not require pragma \\- ignoring", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[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]={{ | [j]={{s,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;"}}, | ||
[p]={ | |||
["clang/test/Parser/opencl-pragma.cl"]={"clang/test/Parser/opencl-pragma.cl:5:26: warning: OpenCL extension \'cl_no_such_extension\' unknown or does not require pragma - ignoring [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_unroll_cuda_value_in_parens"]={ | ["warn_pragma_unroll_cuda_value_in_parens"]={ | ||
[ | [g]="argument to \'#pragma unroll\' should not be in parentheses in CUDA C/C++ [-Wcuda-compat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"cuda-compat"}, | ||
[ | [o]="cuda-compat", | ||
[ | [e]="argument to \'#pragma unroll\' should not be in parentheses in CUDA C/C++", | ||
[ | [f]=m, | ||
[ | [a]="argument to \'\\#pragma unroll\' should not be in parentheses in CUDA C\\/C\\+\\+", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]", | ||
[ | [h]=B, | ||
[i]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'."}, | [i]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'."}, | ||
[j]={{ | [j]={{s,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);"}}, | ||
[p]={ | |||
["clang/test/Parser/warn-cuda-compat.cu"]={"clang/test/Parser/warn-cuda-compat.cu:9:114: warning: argument to \'#pragma unroll\' should not be in parentheses in CUDA C/C++ [-Wcuda-compat]"} | |||
} | |||
}, | }, | ||
["warn_pragma_unsupported_action"]={ | ["warn_pragma_unsupported_action"]={ | ||
[ | [g]="known but unsupported action \'A\' for \'#pragma B\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="known but unsupported action \'%1\' for \'#pragma %0\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="known but unsupported action \'(.*?)\' for \'\\#pragma (.*?)\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={ | [i]={wc,1396996247,Lc}, | ||
[j]={{ | [j]={{s,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();"}}, | ||
[p]={ | |||
[kc]={"clang/test/Sema/pragma-section.c:42:9: warning: known but unsupported action \'nopage\' for \'#pragma section\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_unsupported_extension"]={ | ["warn_pragma_unsupported_extension"]={ | ||
[ | [g]="unsupported OpenCL extension A - ignoring [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="unsupported OpenCL extension %0 - ignoring", | ||
[ | [f]=m, | ||
[ | [a]="unsupported OpenCL extension (.*?) \\- ignoring", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={"64936ce91dba",1463154277,"[OpenCL] Add supported OpenCL extensions to target info."}, | [i]={"64936ce91dba",1463154277,"[OpenCL] Add supported OpenCL extensions to target info."}, | ||
[j]={{ | [j]={{s,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;"}}, | ||
[p]={ | |||
["clang/test/Misc/amdgcn.languageOptsOpenCL.cl"]={"clang/test/Misc/amdgcn.languageOptsOpenCL.cl:115:26: warning: unsupported OpenCL extension \'cl_khr_gl_msaa_sharing\' - ignoring [-Wignored-pragmas]","clang/test/Misc/amdgcn.languageOptsOpenCL.cl:133:26: warning: unsupported OpenCL extension \'cl_khr_srgb_image_writes\' - ignoring [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_unused_expected_var"]={ | ["warn_pragma_unused_expected_var"]={ | ||
[ | [g]="expected \'#pragma unused\' argument to be a variable name [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="expected \'#pragma unused\' argument to be a variable name", | ||
[ | [f]=m, | ||
[ | [a]="expected \'\\#pragma unused\' argument to be a variable name", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | [i]={"fd14fade2ffc",1237847305,"Implement \'#pragma unused\'."}, | ||
[j]={{ | [j]={{s,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/pragma-unused.c"]={"clang/test/Sema/pragma-unused.c:14:20: warning: expected \'#pragma unused\' argument to be a variable name [-Wignored-pragmas]","clang/test/Sema/pragma-unused.c:15:18: warning: expected \'#pragma unused\' argument to be a variable name [-Wignored-pragmas]","clang/test/Sema/pragma-unused.c:24:18: warning: expected \'#pragma unused\' argument to be a variable name [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_unused_expected_var_arg"]={ | ["warn_pragma_unused_expected_var_arg"]={ | ||
[ | [g]="only variables can be arguments to \'#pragma unused\' [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="only variables can be arguments to \'#pragma unused\'", | ||
[ | [f]=m, | ||
[ | [a]="only variables can be arguments to \'\\#pragma unused\'", | ||
[ | [b]=F, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{jb,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"]={ | ||
[ | [g]="undeclared variable A used as an argument for \'#pragma unused\' [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="undeclared variable %0 used as an argument for \'#pragma unused\'", | ||
[ | [f]=m, | ||
[ | [a]="undeclared variable (.*?) used as an argument for \'\\#pragma unused\'", | ||
[ | [b]=F, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{jb,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());"}}, | ||
[p]={ | |||
["clang/test/Sema/pragma-unused.c"]={"clang/test/Sema/pragma-unused.c:19:11: warning: undeclared variable \'x\' used as an argument for \'#pragma unused\' [-Wignored-pragmas]","clang/test/Sema/pragma-unused.c:36:11: warning: undeclared variable \'undeclared\' used as an argument for \'#pragma unused\' [-Wignored-pragmas]","clang/test/Sema/pragma-unused.c:36:11: warning: undeclared variable \'undefined\' used as an argument for \'#pragma unused\' [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_warning_expected"]={ | ["warn_pragma_warning_expected"]={ | ||
[ | [g]="#pragma warning expected \'A\' [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="#pragma warning expected \'%0\'", | ||
[ | [f]=m, | ||
[ | [a]="\\#pragma warning expected \'(.*?)\'", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | [i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | ||
[j]={{ | [j]={{I,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) << \"(\";"},{I,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) << \":\";"},{I,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) << \")\";"}}, | ||
[p]={ | |||
[wb]={"clang/test/Preprocessor/pragma_microsoft.c:154:54: warning: #pragma warning expected \'(\' [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:157:22: warning: #pragma warning expected \')\' [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:159:59: warning: #pragma warning expected \')\' [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:162:20: warning: #pragma warning expected \')\' [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:166:25: warning: #pragma warning expected \':\' [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:168:25: warning: #pragma warning expected \':\' [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_warning_expected_number"]={ | ["warn_pragma_warning_expected_number"]={ | ||
[ | [g]="#pragma warning expected a warning number [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="#pragma warning expected a warning number", | ||
[ | [f]=m, | ||
[ | [a]="\\#pragma warning expected a warning number", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | [i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | ||
[j]={{ | [j]={{I,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);"}}, | ||
[p]={ | |||
[wb]={"clang/test/Preprocessor/pragma_microsoft.c:167:28: warning: #pragma warning expected a warning number [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_warning_push_level"]={ | ["warn_pragma_warning_push_level"]={ | ||
[ | [g]="#pragma warning(push, level) requires a level between 0 and 4 [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="#pragma warning(push, level) requires a level between 0 and 4", | ||
[ | [f]=m, | ||
[ | [a]="\\#pragma warning\\(push, level\\) requires a level between 0 and 4", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | [i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | ||
[j]={{ | [j]={{I,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);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/pragma_microsoft.cpp"]={"clang/test/Preprocessor/pragma_microsoft.cpp:3:23: warning: #pragma warning(push, level) requires a level between 0 and 4 [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pragma_warning_spec_invalid"]={ | ["warn_pragma_warning_spec_invalid"]={ | ||
[ | [g]="#pragma warning expected \'push\', \'pop\', \'default\', \'disable\', \'error\', \'once\', \'suppress\', 1, 2, 3, or 4 [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="#pragma warning expected \'push\', \'pop\', \'default\', \'disable\', \'error\', \'once\', \'suppress\', 1, 2, 3, or 4", | ||
[ | [f]=m, | ||
[ | [a]="\\#pragma warning expected \'push\', \'pop\', \'default\', \'disable\', \'error\', \'once\', \'suppress\', 1, 2, 3, or 4", | ||
[ | [b]=ib, | ||
[ | [h]=D, | ||
[i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | [i]={"881dff36831f",1379109630,"Lex and ignore Microsoft\'s #pragma warning(...)"}, | ||
[j]={{ | [j]={{I,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);"},{I,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);"}}, | ||
[p]={ | |||
[wb]={"clang/test/Preprocessor/pragma_microsoft.c:146:18: warning: #pragma warning expected \'push\', \'pop\', \'default\', \'disable\', \'error\', \'once\', \'suppress\', 1, 2, 3, or 4 [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:155:132: warning: #pragma warning expected \'push\', \'pop\', \'default\', \'disable\', \'error\', \'once\', \'suppress\', 1, 2, 3, or 4 [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:156:17: warning: #pragma warning expected \'push\', \'pop\', \'default\', \'disable\', \'error\', \'once\', \'suppress\', 1, 2, 3, or 4 [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_microsoft.c:169:17: warning: #pragma warning expected \'push\', \'pop\', \'default\', \'disable\', \'error\', \'once\', \'suppress\', 1, 2, 3, or 4 [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_pre_c2x_compat_attributes"]={ | ["warn_pre_c2x_compat_attributes"]={ | ||
[ | [g]="[[]] attributes are incompatible with C standards before C2x [-Wpre-c2x-compat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"pre-c2x-compat","pre-c2x-compat-pedantic"}, | ||
[ | [o]="pre-c2x-compat", | ||
[ | [e]="[[]] attributes are incompatible with C standards before C2x", | ||
[ | [f]=m, | ||
[ | [a]="\\[\\[\\]\\] attributes are incompatible with C standards before C2x", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpre\\-c2x\\-compat[^\\]]*\\]", | ||
[ | [h]=B, | ||
[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",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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/Sema/c2x-attr.c"]={"clang/test/Sema/c2x-attr.c:4:1: warning: [[]] attributes are incompatible with C standards before C2x [-Wpre-c2x-compat]"} | |||
} | |||
}, | }, | ||
["warn_precedence_bitwise_conditional"]={ | ["warn_precedence_bitwise_conditional"]={ | ||
[ | [g]="operator \'?:\' has lower precedence than \'A\'; \'B\' will be evaluated first [-Wbitwise-conditional-parentheses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,"bitwise-conditional-parentheses",Hc}, | ||
[ | [o]="bitwise-conditional-parentheses", | ||
[ | [e]="operator \'?:\' has lower precedence than \'%0\'; \'%0\' will be evaluated first", | ||
[ | [f]=m, | ||
[ | [a]="operator \'\\?\\:\' has lower precedence than \'(.*?)\'; \'(.*?)\' will be evaluated first", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wbitwise\\-conditional\\-parentheses[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Ac,1567434909,zc}, | ||
[j]={{ | [j]={{A,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/parentheses.c"]={"clang/test/Sema/parentheses.c:97:30: warning: operator \'?:\' has lower precedence than \'|\'; \'|\' will be evaluated first [-Wbitwise-conditional-parentheses]","clang/test/Sema/parentheses.c:102:16: warning: operator \'?:\' has lower precedence than \'|\'; \'|\' will be evaluated first [-Wbitwise-conditional-parentheses]","clang/test/Sema/parentheses.c:103:16: warning: operator \'?:\' has lower precedence than \'&\'; \'&\' will be evaluated first [-Wbitwise-conditional-parentheses]"} | |||
} | |||
}, | }, | ||
["warn_precedence_bitwise_rel"]={ | ["warn_precedence_bitwise_rel"]={ | ||
[ | [g]="A has lower precedence than B; C will be evaluated first [-Wparentheses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,Hc}, | ||
[ | [o]=Hc, | ||
[ | [e]="%0 has lower precedence than %1; %1 will be evaluated first", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) has lower precedence than (.*?); (.*?) will be evaluated first", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wparentheses[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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;"}}, | ||
[p]={ | |||
["clang/test/CodeGen/2008-10-13-FrontendCrash.c"]={"clang/test/CodeGen/2008-10-13-FrontendCrash.c:8:18: warning: ^ has lower precedence than !=; != will be evaluated first [-Wparentheses]"} | |||
} | |||
}, | }, | ||
["warn_precedence_conditional"]={ | ["warn_precedence_conditional"]={ | ||
[ | [g]="operator \'?:\' has lower precedence than \'A\'; \'B\' will be evaluated first [-Wparentheses]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,Hc}, | ||
[ | [o]=Hc, | ||
[ | [e]="operator \'?:\' has lower precedence than \'%0\'; \'%0\' will be evaluated first", | ||
[ | [f]=m, | ||
[ | [a]="operator \'\\?\\:\' has lower precedence than \'(.*?)\'; \'(.*?)\' will be evaluated first", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wparentheses[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"cf9bac4bc9dd",1307124036,"Warn about missing parentheses for conditional operator."}, | [i]={"cf9bac4bc9dd",1307124036,"Warn about missing parentheses for conditional operator."}, | ||
[j]={{ | [j]={{A,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;"}}, | ||
[p]={ | |||
["clang/test/Misc/caret-diags-macros.c"]={"clang/test/Misc/caret-diags-macros.c:125:38: warning: operator \'?:\' has lower precedence than \'+\'; \'+\' will be evaluated first [-Wparentheses]","clang/test/Misc/caret-diags-macros.c:139:9: warning: operator \'?:\' has lower precedence than \'+\'; \'+\' will be evaluated first [-Wparentheses]","clang/test/Misc/caret-diags-macros.c:158:9: warning: operator \'?:\' has lower precedence than \'+\'; \'+\' will be evaluated first [-Wparentheses]","clang/test/Misc/caret-diags-macros.c:174:21: warning: operator \'?:\' has lower precedence than \'+\'; \'+\' will be evaluated first [-Wparentheses]"} | |||
} | |||
}, | }, | ||
["warn_printf_ObjCflags_without_ObjCConversion"]={ | ["warn_printf_ObjCflags_without_ObjCConversion"]={ | ||
[ | [g]="object format flags cannot be used with \'A\' conversion specifier [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="object format flags cannot be used with \'%0\' conversion specifier", | ||
[ | [f]=m, | ||
[ | [a]="object format flags cannot be used with \'(.*?)\' conversion specifier", | ||
[ | [b]=sb, | ||
[ | [h]=db, | ||
[i]={"2b4177190923",1435815556,"Parse \'technical term\' format specifier."}, | [i]={"2b4177190923",1435815556,"Parse \'technical term\' format specifier."}, | ||
[j]={{ | [j]={{y,10660,"void CheckPrintfHandler::HandleObjCFlagsWithNonObjCConversion(const char *flagsStart, const char *flagsEnd, const char *conversionPosition) {\n auto diag = diag::warn_printf_ObjCflags_without_ObjCConversion;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/format-strings-objc.m"]={"clang/test/SemaObjC/format-strings-objc.m:289:27: warning: object format flags cannot be used with \'s\' conversion specifier [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_printf_asterisk_missing_arg"]={ | ["warn_printf_asterisk_missing_arg"]={ | ||
[ | [g]="\'...\' specified field ... is missing a matching \'int\' argument [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="\'%select{*|.*}0\' specified field %select{width|precision}0 is missing a matching \'int\' argument", | ||
[ | [f]=m, | ||
[ | [a]="\'(?:\\*|\\.\\*)\' specified field (?:width|precision) is missing a matching \'int\' argument", | ||
[ | [b]=sb, | ||
[ | [h]=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]={{ | [j]={{y,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()),"}}, | ||
[p]={ | |||
[fc]={"clang/test/Sema/format-strings.c:238:13: warning: \'*\' specified field width is missing a matching \'int\' argument [-Wformat]","clang/test/Sema/format-strings.c:239:13: warning: \'.*\' specified field precision is missing a matching \'int\' argument [-Wformat]","clang/test/Sema/format-strings.c:290:13: warning: \'*\' specified field width is missing a matching \'int\' argument [-Wformat]","clang/test/Sema/format-strings.c:291:14: warning: \'.*\' specified field precision is missing a matching \'int\' argument [-Wformat]","clang/test/Sema/format-strings.c:402:14: warning: \'*\' specified field width is missing a matching \'int\' argument [-Wformat]","clang/test/Sema/format-strings.c:605:10: warning: \'*\' specified field width is missing a matching \'int\' argument [-Wformat]","clang/test/Sema/format-strings.c:606:13: warning: \'*\' specified field width is missing a matching \'int\' argument [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_printf_asterisk_wrong_type"]={ | ["warn_printf_asterisk_wrong_type"]={ | ||
[ | [g]="field ... should have type A, but argument has type B [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="field %select{width|precision}0 should have type %1, but argument has type %2", | ||
[ | [f]=m, | ||
[ | [a]="field (?:width|precision) should have type (.*?), but argument has type (.*?)", | ||
[ | [b]=sb, | ||
[ | [h]=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]={{ | [j]={{y,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()),"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/format-strings-oslog.m"]={"clang/test/SemaObjC/format-strings-oslog.m:19:35: warning: field precision should have type \'int\', but argument has type \'void *\' [-Wformat]","clang/test/SemaObjC/format-strings-oslog.m:55:36: warning: field precision should have type \'int\', but argument has type \'void *\' [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_printf_data_arg_not_used"]={ | ["warn_printf_data_arg_not_used"]={ | ||
[ | [g]="data argument not used by format string [-Wformat-extra-args]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,"format-extra-args",v}, | ||
[ | [o]="format-extra-args", | ||
[ | [e]="data argument not used by format string", | ||
[ | [f]=m, | ||
[ | [a]="data argument not used by format string", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wformat\\-extra\\-args[^\\]]*\\]", | ||
[ | [h]=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]={{ | [j]={{y,10284,"void UncoveredArgHandler::Diagnose(Sema &S, bool IsFunctionCall, const Expr *ArgExpr) {\n PartialDiagnostic PDiag = S.PDiag(diag::warn_printf_data_arg_not_used);"}}, | ||
[p]={ | |||
["clang/test/SemaOpenCL/printf-format-string-warnings.cl"]={"clang/test/SemaOpenCL/printf-format-string-warnings.cl:11:32: warning: data argument not used by format string [-Wformat-extra-args]"} | |||
} | |||
}, | }, | ||
["warn_printf_empty_objc_flag"]={ | ["warn_printf_empty_objc_flag"]={ | ||
[ | [g]="missing object format flag [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="missing object format flag", | ||
[ | [f]=m, | ||
[ | [a]="missing object format flag", | ||
[ | [b]=sb, | ||
[ | [h]=db, | ||
[i]={"2b4177190923",1435815556,"Parse \'technical term\' format specifier."}, | [i]={"2b4177190923",1435815556,"Parse \'technical term\' format specifier."}, | ||
[j]={{ | [j]={{y,10639,"void CheckPrintfHandler::HandleEmptyObjCModifierFlag(const char *startFlag, unsigned flagLen) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_printf_empty_objc_flag), getLocationOfByte(startFlag),"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/format-strings-objc.m"]={"clang/test/SemaObjC/format-strings-objc.m:281:13: warning: missing object format flag [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_printf_format_string_contains_null_char"]={ | ["warn_printf_format_string_contains_null_char"]={ | ||
[ | [g]="format string contains \'\\0\' within the string body [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="format string contains \'\\0\' within the string body", | ||
[ | [f]=m, | ||
[ | [a]="format string contains \'\\\\0\' within the string body", | ||
[ | [b]=sb, | ||
[ | [h]=db, | ||
[i]={ | [i]={nc,1237025389,qc}, | ||
[j]={{ | [j]={{y,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());"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-fortify-source.c"]={"clang/test/Sema/warn-fortify-source.c:102:43: warning: format string contains \'\\0\' within the string body [-Wformat]","clang/test/Sema/warn-fortify-source.c:103:43: warning: format string contains \'\\0\' within the string body [-Wformat]","clang/test/Sema/warn-fortify-source.c:153:21: warning: format string contains \'\\0\' within the string body [-Wformat]","clang/test/Sema/warn-fortify-source.c:154:24: warning: format string contains \'\\0\' within the string body [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_printf_format_string_not_null_terminated"]={ | ["warn_printf_format_string_not_null_terminated"]={ | ||
[ | [g]="format string is not null-terminated [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="format string is not null-terminated", | ||
[ | [f]=m, | ||
[ | [a]="format string is not null\\-terminated", | ||
[ | [b]=sb, | ||
[ | [h]=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]={{ | [j]={{y,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(),"}}, | ||
[p]={ | |||
[fc]={"clang/test/Sema/format-strings.c:657:10: warning: format string is not null-terminated [-Wformat]","clang/test/Sema/format-strings.c:660:10: warning: format string is not null-terminated [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_printf_ignored_flag"]={ | ["warn_printf_ignored_flag"]={ | ||
[ | [g]="flag \'A\' is ignored when flag \'B\' is present [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="flag \'%0\' is ignored when flag \'%1\' is present", | ||
[ | [f]=m, | ||
[ | [a]="flag \'(.*?)\' is ignored when flag \'(.*?)\' is present", | ||
[ | [b]=sb, | ||
[ | [h]=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]={{ | [j]={{y,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()),"}}, | ||
[p]={ | |||
[fc]={"clang/test/Sema/format-strings.c:459:12: warning: flag \' \' is ignored when flag \'+\' is present [-Wformat]","clang/test/Sema/format-strings.c:460:13: warning: flag \' \' is ignored when flag \'+\' is present [-Wformat]","clang/test/Sema/format-strings.c:461:12: warning: flag \'0\' is ignored when flag \'-\' is present [-Wformat]","clang/test/Sema/format-strings.c:462:13: warning: flag \'0\' is ignored when flag \'-\' is present [-Wformat]","clang/test/Sema/format-strings.c:626:10: warning: flag \'0\' is ignored when flag \'-\' is present [-Wformat]","clang/test/Sema/format-strings.c:627:13: warning: flag \'0\' is ignored when flag \'-\' is present [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_printf_incomplete_specifier"]={ | ["warn_printf_incomplete_specifier"]={ | ||
[ | [g]="incomplete format specifier [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="incomplete format specifier", | ||
[ | [f]=m, | ||
[ | [a]="incomplete format specifier", | ||
[ | [b]=sb, | ||
[ | [h]=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]={{ | [j]={{y,10117,"void CheckFormatHandler::HandleIncompleteSpecifier(const char *startSpecifier, unsigned specifierLen) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_printf_incomplete_specifier), getLocationOfByte(startSpecifier),"}}, | ||
[p]={ | |||
["clang/test/Sema/block-printf-attribute-1.c"]={"clang/test/Sema/block-printf-attribute-1.c:20:18: warning: incomplete format specifier [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_printf_insufficient_data_args"]={ | ["warn_printf_insufficient_data_args"]={ | ||
[ | [g]="more \'%\' conversions than data arguments [-Wformat-insufficient-args]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,"format-insufficient-args",v}, | ||
[ | [o]="format-insufficient-args", | ||
[ | [e]="more \'%%\' conversions than data arguments", | ||
[ | [f]=m, | ||
[ | [a]="more \'%\' conversions than data arguments", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wformat\\-insufficient\\-args[^\\]]*\\]", | ||
[ | [h]=db, | ||
[i]={ | [i]={nc,1237025389,qc}, | ||
[j]={{ | [j]={{y,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-format_arg.c"]={"clang/test/Sema/attr-format_arg.c:12:15: warning: more \'%\' conversions than data arguments [-Wformat-insufficient-args]","clang/test/Sema/attr-format_arg.c:15:17: warning: more \'%\' conversions than data arguments [-Wformat-insufficient-args]"} | |||
} | |||
}, | }, | ||
["warn_printf_invalid_objc_flag"]={ | ["warn_printf_invalid_objc_flag"]={ | ||
[ | [g]="\'A\' is not a valid object format flag [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="\'%0\' is not a valid object format flag", | ||
[ | [f]=m, | ||
[ | [a]="\'(.*?)\' is not a valid object format flag", | ||
[ | [b]=sb, | ||
[ | [h]=db, | ||
[i]={"2b4177190923",1435815556,"Parse \'technical term\' format specifier."}, | [i]={"2b4177190923",1435815556,"Parse \'technical term\' format specifier."}, | ||
[j]={{ | [j]={{y,10650,"void CheckPrintfHandler::HandleInvalidObjCModifierFlag(const char *startFlag, unsigned flagLen) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_printf_invalid_objc_flag) << flag, getLocationOfByte(startFlag),"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/format-strings-objc.m"]={"clang/test/SemaObjC/format-strings-objc.m:287:13: warning: \'blark\' is not a valid object format flag [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_printf_narg_not_supported"]={ | ["warn_printf_narg_not_supported"]={ | ||
[ | [g]="\'%n\' specifier not supported on this platform [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="\'%%n\' specifier not supported on this platform", | ||
[ | [f]=m, | ||
[ | [a]="\'%n\' specifier not supported on this platform", | ||
[ | [b]=sb, | ||
[ | [h]=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]={{ | [j]={{y,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()),"}}, | ||
[p]={ | |||
[fc]={"clang/test/Sema/format-strings.c:166:12: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:168:14: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:169:14: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:170:14: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:171:14: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:174:13: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:175:13: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:176:13: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:179:12: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:180:12: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:181:12: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:184:13: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:185:13: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:186:13: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:189:14: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:190:14: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:191:14: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:194:13: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:195:13: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:440:13: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:442:13: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:452:13: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:454:14: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:733:12: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:735:12: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:738:12: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:745:12: warning: \'%n\' specifier not supported on this platform [-Wformat]","clang/test/Sema/format-strings.c:746:12: warning: \'%n\' specifier not supported on this platform [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_printf_nonsensical_flag"]={ | ["warn_printf_nonsensical_flag"]={ | ||
[ | [g]="flag \'A\' results in undefined behavior with \'B\' conversion specifier [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="flag \'%0\' results in undefined behavior with \'%1\' conversion specifier", | ||
[ | [f]=m, | ||
[ | [a]="flag \'(.*?)\' results in undefined behavior with \'(.*?)\' conversion specifier", | ||
[ | [b]=sb, | ||
[ | [h]=db, | ||
[i]={"d31b2637abd2",1265880461,"Patch by Cristian Draghici:"}, | [i]={"d31b2637abd2",1265880461,"Patch by Cristian Draghici:"}, | ||
[j]={{ | [j]={{y,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()),"}}, | ||
[p]={ | |||
[fc]={"clang/test/Sema/format-strings.c:333:12: warning: flag \'+\' results in undefined behavior with \'p\' conversion specifier [-Wformat]","clang/test/Sema/format-strings.c:334:12: warning: flag \' \' results in undefined behavior with \'p\' conversion specifier [-Wformat]","clang/test/Sema/format-strings.c:335:12: warning: flag \'0\' results in undefined behavior with \'p\' conversion specifier [-Wformat]","clang/test/Sema/format-strings.c:337:12: warning: flag \'+\' results in undefined behavior with \'s\' conversion specifier [-Wformat]","clang/test/Sema/format-strings.c:339:12: warning: flag \' \' results in undefined behavior with \'s\' conversion specifier [-Wformat]","clang/test/Sema/format-strings.c:341:12: warning: flag \'0\' results in undefined behavior with \'s\' conversion specifier [-Wformat]","clang/test/Sema/format-strings.c:432:12: warning: flag \'#\' results in undefined behavior with \'p\' conversion specifier [-Wformat]","clang/test/Sema/format-strings.c:440:12: warning: flag \'#\' results in undefined behavior with \'n\' conversion specifier [-Wformat]","clang/test/Sema/format-strings.c:442:12: warning: flag \'-\' results in undefined behavior with \'n\' conversion specifier [-Wformat]","clang/test/Sema/format-strings.c:514:12: warning: flag \'\'\' results in undefined behavior with \'p\' conversion specifier [-Wformat]","clang/test/Sema/format-strings.c:515:12: warning: flag \'\'\' results in undefined behavior with \'b\' conversion specifier [-Wformat]","clang/test/Sema/format-strings.c:516:12: warning: flag \'\'\' results in undefined behavior with \'B\' conversion specifier [-Wformat]","clang/test/Sema/format-strings.c:618:10: warning: flag \'0\' results in undefined behavior with \'s\' conversion specifier [-Wformat]","clang/test/Sema/format-strings.c:619:12: warning: flag \'0\' results in undefined behavior with \'s\' conversion specifier [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_printf_nonsensical_optional_amount"]={ | ["warn_printf_nonsensical_optional_amount"]={ | ||
[ | [g]="... used with \'A\' conversion specifier, resulting in undefined behavior [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="%select{field width|precision}0 used with \'%1\' conversion specifier, resulting in undefined behavior", | ||
[ | [f]=m, | ||
[ | [a]="(?:field width|precision) used with \'(.*?)\' conversion specifier, resulting in undefined behavior", | ||
[ | [b]=sb, | ||
[ | [h]=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]={{ | [j]={{y,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()),"}}, | ||
[p]={ | |||
[fc]={"clang/test/Sema/format-strings.c:332:12: warning: precision used with \'p\' conversion specifier, resulting in undefined behavior [-Wformat]","clang/test/Sema/format-strings.c:447:12: warning: precision used with \'c\' conversion specifier, resulting in undefined behavior [-Wformat]","clang/test/Sema/format-strings.c:452:12: warning: field width used with \'n\' conversion specifier, resulting in undefined behavior [-Wformat]","clang/test/Sema/format-strings.c:454:12: warning: precision used with \'n\' conversion specifier, resulting in undefined behavior [-Wformat]","clang/test/Sema/format-strings.c:614:10: warning: precision used with \'p\' conversion specifier, resulting in undefined behavior [-Wformat]","clang/test/Sema/format-strings.c:615:12: warning: precision used with \'p\' conversion specifier, resulting in undefined behavior [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_printf_positional_arg_exceeds_data_args"]={ | ["warn_printf_positional_arg_exceeds_data_args"]={ | ||
[ | [g]="data argument position \'A\' exceeds the number of data arguments (B) [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="data argument position \'%0\' exceeds the number of data arguments (%1)", | ||
[ | [f]=m, | ||
[ | [a]="data argument position \'(.*?)\' exceeds the number of data arguments \\((.*?)\\)", | ||
[ | [b]=sb, | ||
[ | [h]=db, | ||
[i]={"4d745dd5cb3c",1269489552,"Fix two bugs in format-string checking:"}, | [i]={"4d745dd5cb3c",1269489552,"Fix two bugs in format-string checking:"}, | ||
[j]={{ | [j]={{y,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);"}}, | ||
[p]={ | |||
[fc]={"clang/test/Sema/format-strings.c:415:24: warning: data argument position \'2\' exceeds the number of data arguments (1) [-Wformat]","clang/test/Sema/format-strings.c:416:25: warning: data argument position \'18\' exceeds the number of data arguments (1) [-Wformat]","clang/test/Sema/format-strings.c:573:10: warning: data argument position \'18\' exceeds the number of data arguments (2) [-Wformat]","clang/test/Sema/format-strings.c:574:15: warning: data argument position \'18\' exceeds the number of data arguments (2) [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_private_extern"]={ | ["warn_private_extern"]={ | ||
[ | [g]="use of __private_extern__ on a declaration may not produce external symbol private to the linkage unit and is deprecated [-Wprivate-extern]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,"private-extern"}, | ||
[ | [o]="private-extern", | ||
[ | [e]="use of __private_extern__ on a declaration may not produce external symbol private to the linkage unit and is deprecated", | ||
[ | [f]=m, | ||
[ | [a]="use of __private_extern__ on a declaration may not produce external symbol private to the linkage unit and is deprecated", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wprivate\\-extern[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/tentative-decls.c"]={"clang/test/Sema/tentative-decls.c:36:24: warning: use of __private_extern__ on a declaration may not produce external symbol private to the linkage unit and is deprecated [-Wprivate-extern]"} | |||
} | |||
}, | }, | ||
["warn_profile_data_misexpect"]={ | ["warn_profile_data_misexpect"]={ | ||
[ | [g]="Potential performance regression from use of __builtin_expect(): Annotation was correct on A of profiled executions. [-Wmisexpect]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"misexpect"}, | ||
[ | [o]="misexpect", | ||
[ | [e]="Potential performance regression from use of __builtin_expect(): Annotation was correct on %0 of profiled executions.", | ||
[ | [f]=m, | ||
[ | [a]="Potential performance regression from use of __builtin_expect\\(\\)\\: Annotation was correct on (.*?) of profiled executions\\.", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmisexpect[^\\]]*\\]", | ||
[ | [h]="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",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())) {"}} | [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"]={ | ||
[ | [g]="profile data may be incomplete: of A functionB, C has no data [-Wprofile-instr-missing]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"profile-instr-missing"}, | ||
[ | [o]="profile-instr-missing", | ||
[ | [e]="profile data may be incomplete: of %0 function%s0, %1 %plural{1:has|:have}1 no data", | ||
[ | [f]=m, | ||
[ | [a]="profile data may be incomplete\\: of (.*?) function(.*?), (.*?) (?:has|have) no data", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wprofile\\-instr\\-missing[^\\]]*\\]", | ||
[ | [h]="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",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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/Profile/c-outdated-data.c"]={"warning: profile data may be incomplete: of 3 functions, 1 has no data [-Wprofile-instr-missing]"} | |||
} | |||
}, | }, | ||
["warn_profile_data_out_of_date"]={ | ["warn_profile_data_out_of_date"]={ | ||
[ | [g]="profile data may be out of date: of A functionB, C has mismatched data that will be ignored [-Wprofile-instr-out-of-date]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"profile-instr-out-of-date"}, | ||
[ | [o]="profile-instr-out-of-date", | ||
[ | [e]="profile data may be out of date: of %0 function%s0, %1 %plural{1:has|:have}1 mismatched data that will be ignored", | ||
[ | [f]=m, | ||
[ | [a]="profile data may be out of date\\: of (.*?) function(.*?), (.*?) (?:has|have) mismatched data that will be ignored", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wprofile\\-instr\\-out\\-of\\-date[^\\]]*\\]", | ||
[ | [h]="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",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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/Profile/profile-summary.c"]={"warning: profile data may be out of date: of 3 functions, 3 have mismatched data that will be ignored [-Wprofile-instr-out-of-date]"} | |||
} | |||
}, | }, | ||
["warn_profile_data_unprofiled"]={ | ["warn_profile_data_unprofiled"]={ | ||
[ | [g]="no profile data available for file \"A\" [-Wprofile-instr-unprofiled]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"profile-instr-unprofiled"}, | ||
[ | [o]="profile-instr-unprofiled", | ||
[ | [e]="no profile data available for file \"%0\"", | ||
[ | [f]=m, | ||
[ | [a]="no profile data available for file \"(.*?)\"", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wprofile\\-instr\\-unprofiled[^\\]]*\\]", | ||
[ | [h]="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",704,"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;"}}, | ||
[p]={ | |||
["clang/test/Profile/c-unprofiled.c"]={"warning: no profile data available for file \"c-unprofiled.c\" [-Wprofile-instr-unprofiled]"} | |||
} | |||
}, | }, | ||
["warn_property_access_suggest"]={ | ["warn_property_access_suggest"]={ | ||
[ | [g]="property A not found on object of type B; did you mean to access property C? [-Wproperty-access-dot-syntax]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"property-access-dot-syntax"}, | ||
[ | [o]="property-access-dot-syntax", | ||
[ | [e]="property %0 not found on object of type %1; did you mean to access property %2?", | ||
[ | [f]=m, | ||
[ | [a]="property (.*?) not found on object of type (.*?); did you mean to access property (.*?)\\?", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wproperty\\-access\\-dot\\-syntax[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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,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());"}} | [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());"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property-user-setter.m"]={"clang/test/SemaObjC/property-user-setter.m:127:8: warning: property \'P\' not found on object of type \'rdar11363363 *\'; did you mean to access property p? [-Wproperty-access-dot-syntax]","clang/test/SemaObjC/property-user-setter.m:128:8: warning: property \'q\' not found on object of type \'rdar11363363 *\'; did you mean to access property Q? [-Wproperty-access-dot-syntax]","clang/test/SemaObjC/property-user-setter.m:135:15: warning: property \'R\' not found on object of type \'rdar11363363 *\'; did you mean to access property r? [-Wproperty-access-dot-syntax]"} | |||
} | |||
}, | }, | ||
["warn_property_attr_mismatch"]={ | ["warn_property_attr_mismatch"]={ | ||
[ | [g]="property attribute in class extension does not match the primary class [-Wproperty-attribute-mismatch]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Vb}, | ||
[ | [o]=Vb, | ||
[ | [e]="property attribute in class extension does not match the primary class", | ||
[ | [f]=m, | ||
[ | [a]="property attribute in class extension does not match the primary class", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wproperty\\-attribute\\-mismatch[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{T,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property-in-class-extension-1.m"]={"clang/test/SemaObjC/property-in-class-extension-1.m:42:1: warning: property attribute in class extension does not match the primary class [-Wproperty-attribute-mismatch]"} | |||
} | |||
}, | }, | ||
["warn_property_attribute"]={ | ["warn_property_attribute"]={ | ||
[ | [g]="\'A\' attribute on property B does not match the property inherited from C [-Wproperty-attribute-mismatch]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Vb}, | ||
[ | [o]=Vb, | ||
[ | [e]="\'%1\' attribute on property %0 does not match the property inherited from %2", | ||
[ | [f]=m, | ||
[ | [a]="\'(.*?)\' attribute on property (.*?) does not match the property inherited from (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wproperty\\-attribute\\-mismatch[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{T,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;"},{T,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;"},{T,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;"},{T,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;"},{T,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property-ownership-attr.m"]={"clang/test/SemaObjC/property-ownership-attr.m:17:22: warning: \'copy\' attribute on property \'z\' does not match the property inherited from \'P\' [-Wproperty-attribute-mismatch]"} | |||
} | |||
}, | }, | ||
["warn_property_getter_owning_mismatch"]={ | ["warn_property_getter_owning_mismatch"]={ | ||
[ | [g]="property declared as returning non-retained objects; getter returning retained objects", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="property declared as returning non-retained objects; getter returning retained objects", | ||
[ | [f]=m, | ||
[ | [a]="property declared as returning non\\-retained objects; getter returning retained objects", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{T,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property-ns-returns-not-retained-attr.m"]={"clang/test/SemaObjC/property-ns-returns-not-retained-attr.m:11:1: warning: property declared as returning non-retained objects; getter returning retained objects"} | |||
} | |||
}, | }, | ||
["warn_property_implicitly_mismatched"]={ | ["warn_property_implicitly_mismatched"]={ | ||
[ | [g]="primary property declaration is implicitly strong while redeclaration in class extension is weak [-Wobjc-property-implicit-mismatch]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-property-implicit-mismatch"}, | ||
[ | [o]="objc-property-implicit-mismatch", | ||
[ | [e]="primary property declaration is implicitly strong while redeclaration in class extension is weak", | ||
[ | [f]=m, | ||
[ | [a]="primary property declaration is implicitly strong while redeclaration in class extension is weak", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-implicit\\-mismatch[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"7196487de91a",1382747739,"ObjectiveC arc. Warn when an implicitly \'strong\' property "}, | [i]={"7196487de91a",1382747739,"ObjectiveC arc. Warn when an implicitly \'strong\' property "}, | ||
[j]={{ | [j]={{T,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:166:1: warning: primary property declaration is implicitly strong while redeclaration in class extension is weak [-Wobjc-property-implicit-mismatch]"} | |||
} | |||
}, | }, | ||
["warn_property_method_deprecated"]={ | ["warn_property_method_deprecated"]={ | ||
[ | [g]="property access is using A method which is deprecated [-Wdeprecated-declarations]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={yb,"deprecated-declarations"}, | ||
[ | [o]="deprecated-declarations", | ||
[ | [e]="property access is using %0 method which is deprecated", | ||
[ | [f]=m, | ||
[ | [a]="property access is using (.*?) method which is deprecated", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]", | ||
[ | [h]=Tb, | ||
[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]={{ | [j]={{Cc,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property-deprecated-warning.m"]={"clang/test/SemaObjC/property-deprecated-warning.m:168:6: warning: property access is using \'setX:\' method which is deprecated [-Wdeprecated-declarations]"} | |||
} | |||
}, | }, | ||
["warn_property_redecl_getter_mismatch"]={ | ["warn_property_redecl_getter_mismatch"]={ | ||
[ | [g]="getter name mismatch between property redeclaration (A) and its original declaration (B) [-Wproperty-attribute-mismatch]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Vb}, | ||
[ | [o]=Vb, | ||
[ | [e]="getter name mismatch between property redeclaration (%1) and its original declaration (%0)", | ||
[ | [f]=m, | ||
[ | [a]="getter name mismatch between property redeclaration \\((.*?)\\) and its original declaration \\((.*?)\\)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wproperty\\-attribute\\-mismatch[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{T,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property-3.m"]={"clang/test/SemaObjC/property-3.m:41:1: warning: getter name mismatch between property redeclaration (\'wasAvailable\') and its original declaration (\'isAvailable\') [-Wproperty-attribute-mismatch]"} | |||
} | |||
}, | }, | ||
["warn_property_types_are_incompatible"]={ | ["warn_property_types_are_incompatible"]={ | ||
[ | [g]="property type A is incompatible with type B inherited from C [-Wincompatible-property-type]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"incompatible-property-type"}, | ||
[ | [o]="incompatible-property-type", | ||
[ | [e]="property type %0 is incompatible with type %1 inherited from %2", | ||
[ | [f]=m, | ||
[ | [a]="property type (.*?) is incompatible with type (.*?) inherited from (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-property\\-type[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{T,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property-category-3.m"]={"clang/test/SemaObjC/property-category-3.m:15:17: warning: property type \'float\' is incompatible with type \'int\' inherited from \'P\' [-Wincompatible-property-type]"} | |||
} | |||
}, | }, | ||
["warn_protocol_property_mismatch"]={ | ["warn_protocol_property_mismatch"]={ | ||
[ | [g]="property ... was selected for synthesis [-Wprotocol-property-synthesis-ambiguity]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"protocol-property-synthesis-ambiguity"}, | ||
[ | [o]="protocol-property-synthesis-ambiguity", | ||
[ | [e]="property %select{of type %1|with attribute \'%1\'|without attribute \'%1\'|with getter %1|with setter %1}0 was selected for synthesis", | ||
[ | [f]=m, | ||
[ | [a]="property (?:of type (.*?)|with attribute \'(.*?)\'|without attribute \'(.*?)\'|with getter (.*?)|with setter (.*?)) was selected for synthesis", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wprotocol\\-property\\-synthesis\\-ambiguity[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{T,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property-ambiguous-synthesis.m"]={"clang/test/SemaObjC/property-ambiguous-synthesis.m:10:18: warning: property of type \'double\' was selected for synthesis [-Wprotocol-property-synthesis-ambiguity]","clang/test/SemaObjC/property-ambiguous-synthesis.m:10:18: warning: property of type \'double\' was selected for synthesis [-Wprotocol-property-synthesis-ambiguity]","clang/test/SemaObjC/property-ambiguous-synthesis.m:5:23: warning: property of type \'id\' was selected for synthesis [-Wprotocol-property-synthesis-ambiguity]"} | |||
} | |||
}, | }, | ||
["warn_pt_guarded_pass_by_reference"]={ | ["warn_pt_guarded_pass_by_reference"]={ | ||
[ | [g]="passing the value that A points to by reference requires holding B ... [-Wthread-safety-reference]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,"thread-safety-reference"}, | ||
[ | [o]="thread-safety-reference", | ||
[ | [e]="passing the value that %1 points to by reference requires holding %0 %select{\'%2\'|\'%2\' exclusively}3", | ||
[ | [f]=m, | ||
[ | [a]="passing the value that (.*?) points to by reference requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-reference[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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;"},{E,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={"clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5560:13: warning: passing the value that \'foop\' points to by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5561:17: warning: passing the value that \'foop\' points to by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5562:12: warning: passing the value that \'foop\' points to by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5563:16: warning: passing the value that \'foop\' points to by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5564:21: warning: passing the value that \'foop\' points to by reference requires holding mutex \'mu\' [-Wthread-safety-reference]"} | |||
} | |||
}, | }, | ||
["warn_ptr_arith_exceeds_bounds"]={ | ["warn_ptr_arith_exceeds_bounds"]={ | ||
[ | [g]="the pointer incremented by A refers past the end of the array (that has type B) [-Warray-bounds-pointer-arithmetic]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"array-bounds-pointer-arithmetic"}, | ||
[ | [o]="array-bounds-pointer-arithmetic", | ||
[ | [e]="the pointer incremented by %0 refers past the end of the array (that has type %1)", | ||
[ | [f]=m, | ||
[ | [a]="the pointer incremented by (.*?) refers past the end of the array \\(that has type (.*?)\\)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds\\-pointer\\-arithmetic[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/array-bounds-ptr-arith.cpp"]={"clang/test/SemaCXX/array-bounds-ptr-arith.cpp:10:11: warning: the pointer incremented by 14 refers past the end of the array (that has type \'const char[13]\') [-Warray-bounds-pointer-arithmetic]","clang/test/SemaCXX/array-bounds-ptr-arith.cpp:15:11: warning: the pointer incremented by 14 refers past the end of the array (that has type \'const char[13]\') [-Warray-bounds-pointer-arithmetic]","clang/test/SemaCXX/array-bounds-ptr-arith.cpp:25:18: warning: the pointer incremented by 60 refers past the end of the array (that has type \'double[2]\') [-Warray-bounds-pointer-arithmetic]","clang/test/SemaCXX/array-bounds-ptr-arith.cpp:29:11: warning: the pointer incremented by 6 refers past the end of the array (that has type \'char[5]\') [-Warray-bounds-pointer-arithmetic]","clang/test/SemaCXX/array-bounds-ptr-arith.cpp:31:32: warning: the pointer incremented by 6 refers past the end of the array (that has type \'char[5]\') [-Warray-bounds-pointer-arithmetic]"} | |||
} | |||
}, | }, | ||
["warn_ptr_arith_exceeds_max_addressable_bounds"]={ | ["warn_ptr_arith_exceeds_max_addressable_bounds"]={ | ||
[ | [g]="the pointer incremented by A refers past the last possible element for an array in B-bit address space containing C-bit (D-byte) elements (max possible E elementF) [-Warray-bounds]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"array-bounds"}, | ||
[ | [o]="array-bounds", | ||
[ | [e]="the pointer incremented by %0 refers past the last possible element for an array in %1-bit address space containing %2-bit (%3-byte) elements (max possible %4 element%s5)", | ||
[ | [f]=m, | ||
[ | [a]="the pointer incremented by (.*?) refers past the last possible element for an array in (.*?)\\-bit address space containing (.*?)\\-bit \\((.*?)\\-byte\\) elements \\(max possible (.*?) element(.*?)\\)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/const-eval.c"]={"clang/test/Sema/const-eval.c:145:48: warning: the pointer incremented by 18446744073709551615 refers past the last possible element for an array in 64-bit address space containing 64-bit (8-byte) elements (max possible 2305843009213693952 elements) [-Warray-bounds]","clang/test/Sema/const-eval.c:146:18: warning: the pointer incremented by 18446744073709551615 refers past the last possible element for an array in 64-bit address space containing 64-bit (8-byte) elements (max possible 2305843009213693952 elements) [-Warray-bounds]","clang/test/Sema/const-eval.c:147:22: warning: the pointer incremented by 18446744073709551615 refers past the last possible element for an array in 64-bit address space containing 128-bit (16-byte) elements (max possible 1152921504606846976 elements) [-Warray-bounds]"} | |||
} | |||
}, | }, | ||
["warn_ptr_arith_precedes_bounds"]={ | ["warn_ptr_arith_precedes_bounds"]={ | ||
[ | [g]="the pointer decremented by A refers before the beginning of the array [-Warray-bounds-pointer-arithmetic]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"array-bounds-pointer-arithmetic"}, | ||
[ | [o]="array-bounds-pointer-arithmetic", | ||
[ | [e]="the pointer decremented by %0 refers before the beginning of the array", | ||
[ | [f]=m, | ||
[ | [a]="the pointer decremented by (.*?) refers before the beginning of the array", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds\\-pointer\\-arithmetic[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/array-bounds-ptr-arith.cpp"]={"clang/test/SemaCXX/array-bounds-ptr-arith.cpp:9:11: warning: the pointer decremented by 6 refers before the beginning of the array [-Warray-bounds-pointer-arithmetic]","clang/test/SemaCXX/array-bounds-ptr-arith.cpp:14:11: warning: the pointer decremented by 6 refers before the beginning of the array [-Warray-bounds-pointer-arithmetic]"} | |||
} | |||
}, | }, | ||
["warn_ptr_independentclass_attribute"]={ | ["warn_ptr_independentclass_attribute"]={ | ||
[ | [g]="\'objc_independent_class\' attribute may be put on Objective-C object pointer type only; attribute is ignored [-WIndependentClass-attribute]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"IndependentClass-attribute"}, | ||
[ | [o]="IndependentClass-attribute", | ||
[ | [e]="\'objc_independent_class\' attribute may be put on Objective-C object pointer type only; attribute is ignored", | ||
[ | [f]=m, | ||
[ | [a]="\'objc_independent_class\' attribute may be put on Objective\\-C object pointer type only; attribute is ignored", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-WIndependentClass\\-attribute[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"7a60b6db76f5",1429209524,"[Objective-C Sema] patch to introduce IndependentClass"}, | [i]={"7a60b6db76f5",1429209524,"[Objective-C Sema] patch to introduce IndependentClass"}, | ||
[j]={{ | [j]={{C,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/objc-independent-class-attribute.m"]={"clang/test/SemaObjC/objc-independent-class-attribute.m:8:70: warning: \'objc_independent_class\' attribute may be put on Objective-C object pointer type only; attribute is ignored [-WIndependentClass-attribute]"} | |||
} | |||
}, | }, | ||
["warn_qual_return_type"]={ | ["warn_qual_return_type"]={ | ||
[ | [g]="\'A\' type qualifierB on return type has no effect [-Wignored-qualifiers]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={x,t,Xb,Xc}, | ||
[ | [o]=Xc, | ||
[ | [e]="\'%0\' type qualifier%s1 on return type %plural{1:has|:have}1 no effect", | ||
[ | [f]=m, | ||
[ | [a]="\'(.*?)\' type qualifier(.*?) on return type (?:has|have) no effect", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wignored\\-qualifiers[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{R,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());"},{R,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);"},{R,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());"},{R,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());"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/return.cpp"]={"clang/test/SemaCXX/return.cpp:26:1: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:27:5: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:31:1: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:36:1: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:39:7: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:40:7: warning: \'volatile\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:43:1: warning: \'const volatile\' type qualifiers on return type have no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:47:1: warning: \'const volatile\' type qualifiers on return type have no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:53:1: warning: \'volatile\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:55:1: warning: \'const volatile\' type qualifiers on return type have no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:60:1: warning: \'_Atomic\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:65:5: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:68:5: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:78:5: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]"} | |||
} | |||
}, | }, | ||
["warn_quoted_include_in_framework_header"]={ | ["warn_quoted_include_in_framework_header"]={ | ||
[ | [g]="double-quoted include \"A\" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"quoted-include-in-framework-header"}, | ||
[ | [o]="quoted-include-in-framework-header", | ||
[ | [e]="double-quoted include \"%0\" in framework header, expected angle-bracketed instead", | ||
[ | [f]=m, | ||
[ | [a]="double\\-quoted include \"(.*?)\" in framework header, expected angle\\-bracketed instead", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wquoted\\-include\\-in\\-framework\\-header[^\\]]*\\]", | ||
[ | [h]=D, | ||
[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",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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/Modules/double-quotes.m"]={"clang/test/Modules/Inputs/double-quotes/A.framework/Headers/A.h:1:10: warning: double-quoted include \"A0.h\" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]","clang/test/Modules/Inputs/double-quotes/A.framework/Headers/A.h:2:10: warning: double-quoted include \"B.h\" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/Modules/Inputs/double-quotes/flat-header-path/Z.h:1:9: warning: double-quoted include \"B.h\" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]"} | |||
} | |||
}, | }, | ||
["warn_reading_std_cxx_module_by_implicit_paths"]={ | ["warn_reading_std_cxx_module_by_implicit_paths"]={ | ||
[ | [g]="it is deprecated to read module \'A\' implicitly; it is going to be removed in clang 18; consider to specify the dependencies explicitly [-Wread-modules-implicitly]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"read-modules-implicitly"}, | ||
[ | [o]="read-modules-implicitly", | ||
[ | [e]="it is deprecated to read module \'%0\' implicitly; it is going to be removed in clang 18; consider to specify the dependencies explicitly", | ||
[ | [f]=m, | ||
[ | [a]="it is deprecated to read module \'(.*?)\' implicitly; it is going to be removed in clang 18; consider to specify the dependencies explicitly", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wread\\-modules\\-implicitly[^\\]]*\\]", | ||
[ | [h]="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",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;"}} | [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"]={ | ||
[ | [g]="attribute \'readonly\' of property A restricts attribute \'readwrite\' of property inherited from B [-Wproperty-attribute-mismatch]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Vb}, | ||
[ | [o]=Vb, | ||
[ | [e]="attribute \'readonly\' of property %0 restricts attribute \'readwrite\' of property inherited from %1", | ||
[ | [f]=m, | ||
[ | [a]="attribute \'readonly\' of property (.*?) restricts attribute \'readwrite\' of property inherited from (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wproperty\\-attribute\\-mismatch[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{T,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property-3.m"]={"clang/test/SemaObjC/property-3.m:12:25: warning: attribute \'readonly\' of property \'d1\' restricts attribute \'readwrite\' of property inherited from \'I\' [-Wproperty-attribute-mismatch]"} | |||
} | |||
}, | }, | ||
["warn_receiver_forward_class"]={ | ["warn_receiver_forward_class"]={ | ||
[ | [g]="receiver A is a forward class and corresponding @interface may not exist [-Wreceiver-forward-class]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"receiver-forward-class"}, | ||
[ | [o]="receiver-forward-class", | ||
[ | [e]="receiver %0 is a forward class and corresponding @interface may not exist", | ||
[ | [f]=m, | ||
[ | [a]="receiver (.*?) is a forward class and corresponding @interface may not exist", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wreceiver\\-forward\\-class[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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,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)) {"}} | [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)) {"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/forward-class-receiver.m"]={"clang/test/SemaObjC/forward-class-receiver.m:12:4: warning: receiver \'NotKnown\' is a forward class and corresponding @interface may not exist [-Wreceiver-forward-class]"} | |||
} | |||
}, | }, | ||
["warn_receiver_forward_instance"]={ | ["warn_receiver_forward_instance"]={ | ||
[ | [g]="receiver type A for instance message is a forward declaration [-Wreceiver-forward-class]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"receiver-forward-class"}, | ||
[ | [o]="receiver-forward-class", | ||
[ | [e]="receiver type %0 for instance message is a forward declaration", | ||
[ | [f]=m, | ||
[ | [a]="receiver type (.*?) for instance message is a forward declaration", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wreceiver\\-forward\\-class[^\\]]*\\]", | ||
[ | [h]="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,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)) {"}} | [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)) {"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/receiver-forward-class.m"]={"clang/test/SemaObjC/receiver-forward-class.m:15:11: warning: receiver type \'A\' for instance message is a forward declaration [-Wreceiver-forward-class]"} | |||
} | |||
}, | }, | ||
["warn_redecl_library_builtin"]={ | ["warn_redecl_library_builtin"]={ | ||
[ | [g]="incompatible redeclaration of library function A [-Wincompatible-library-redeclaration]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"incompatible-library-redeclaration"}, | ||
[ | [o]="incompatible-library-redeclaration", | ||
[ | [e]="incompatible redeclaration of library function %0", | ||
[ | [f]=m, | ||
[ | [a]="incompatible redeclaration of library function (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-library\\-redeclaration[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/pragma_poison.c"]={"clang/test/Preprocessor/pragma_poison.c:4:1: warning: incompatible redeclaration of library function \'rindex\' [-Wincompatible-library-redeclaration]"} | |||
} | |||
}, | }, | ||
["warn_redeclaration_without_attribute_prev_attribute_ignored"]={ | ["warn_redeclaration_without_attribute_prev_attribute_ignored"]={ | ||
[ | [g]="A redeclared without B attribute: previous C ignored [-Winconsistent-dllimport]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"inconsistent-dllimport","microsoft"}, | ||
[ | [o]="inconsistent-dllimport", | ||
[ | [e]="%q0 redeclared without %1 attribute: previous %1 ignored", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) redeclared without (.*?) attribute\\: previous (.*?) ignored", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Winconsistent\\-dllimport[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/dllimport.c"]={"clang/test/Sema/dllimport.c:108:34: warning: \'GlobalRedecl3\' redeclared without \'dllimport\' attribute: previous \'dllimport\' ignored [-Winconsistent-dllimport]","clang/test/Sema/dllimport.c:180:28: warning: \'redecl2\' redeclared without \'dllimport\' attribute: previous \'dllimport\' ignored [-Winconsistent-dllimport]"} | |||
} | |||
}, | }, | ||
["warn_redeclaration_without_import_attribute"]={ | ["warn_redeclaration_without_import_attribute"]={ | ||
[ | [g]="A redeclared without \'dllimport\' attribute: \'dllexport\' attribute added [-Winconsistent-dllimport]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"inconsistent-dllimport","microsoft"}, | ||
[ | [o]="inconsistent-dllimport", | ||
[ | [e]="%q0 redeclared without \'dllimport\' attribute: \'dllexport\' attribute added", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) redeclared without \'dllimport\' attribute\\: \'dllexport\' attribute added", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Winconsistent\\-dllimport[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/CodeGen/flip-dllimport.c"]={"clang/test/CodeGen/flip-dllimport.c:7:6: warning: \'f\' redeclared without \'dllimport\' attribute: \'dllexport\' attribute added [-Winconsistent-dllimport]"} | |||
} | |||
}, | }, | ||
["warn_redefine_extname_not_applied"]={ | ["warn_redefine_extname_not_applied"]={ | ||
[ | [g]="#pragma redefine_extname is applicable to external C declarations only; not applied to ... A [-Wpragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={z}, | ||
[ | [o]=z, | ||
[ | [e]="#pragma redefine_extname is applicable to external C declarations only; not applied to %select{function|variable}0 %1", | ||
[ | [f]=m, | ||
[ | [a]="\\#pragma redefine_extname is applicable to external C declarations only; not applied to (?:function|variable) (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpragmas[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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;"},{H,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;"},{H,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/redefine_extname.cpp"]={"clang/test/SemaCXX/redefine_extname.cpp:6:12: warning: #pragma redefine_extname is applicable to external C declarations only; not applied to function \'foo_cpp\' [-Wpragmas]"} | |||
} | |||
}, | }, | ||
["warn_redefinition_in_param_list"]={ | ["warn_redefinition_in_param_list"]={ | ||
[ | [g]="redefinition of A will not be visible outside of this function [-Wvisibility]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"visibility"}, | ||
[ | [o]="visibility", | ||
[ | [e]="redefinition of %0 will not be visible outside of this function", | ||
[ | [f]=m, | ||
[ | [a]="redefinition of (.*?) will not be visible outside of this function", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wvisibility[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/decl-in-prototype.c"]={"clang/test/Sema/decl-in-prototype.c:26:26: warning: redefinition of \'b\' will not be visible outside of this function [-Wvisibility]","clang/test/Sema/decl-in-prototype.c:34:27: warning: redefinition of \'ab\' will not be visible outside of this function [-Wvisibility]","clang/test/Sema/decl-in-prototype.c:34:51: warning: redefinition of \'ab\' will not be visible outside of this function [-Wvisibility]"} | |||
} | |||
}, | }, | ||
["warn_redundant_loop_iteration"]={ | ["warn_redundant_loop_iteration"]={ | ||
[ | [g]="variable A is ... both in the loop header and in the loop body [-Wfor-loop-analysis]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,"for-loop-analysis","loop-analysis",v}, | ||
[ | [o]="for-loop-analysis", | ||
[ | [e]="variable %0 is %select{decremented|incremented}1 both in the loop header and in the loop body", | ||
[ | [f]=m, | ||
[ | [a]="variable (.*?) is (?:decremented|incremented) both in the loop header and in the loop body", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wfor\\-loop\\-analysis[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{S,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()))"},{S,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-loop-analysis.cpp"]={"clang/test/SemaCXX/warn-loop-analysis.cpp:160:5: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:164:7: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:168:5: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:171:7: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:176:5: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:180:7: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:184:5: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:187:7: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:209:5: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:223:5: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:227:7: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:231:5: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:234:7: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:239:5: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:243:7: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:247:5: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:250:7: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:272:5: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]"} | |||
} | |||
}, | }, | ||
["warn_redundant_move_on_return"]={ | ["warn_redundant_move_on_return"]={ | ||
[ | [g]="redundant move in return statement [-Wredundant-move]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,"move","redundant-move"}, | ||
[ | [o]="redundant-move", | ||
[ | [e]="redundant move in return statement", | ||
[ | [f]=m, | ||
[ | [a]="redundant move in return statement", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wredundant\\-move[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."}, | [i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings."}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-redundant-move.cpp"]={"clang/test/SemaCXX/warn-redundant-move.cpp:82:10: warning: redundant move in return statement [-Wredundant-move]","clang/test/SemaCXX/warn-redundant-move.cpp:96:12: warning: redundant move in return statement [-Wredundant-move]"} | |||
} | |||
}, | }, | ||
["warn_redundant_parens_around_declarator"]={ | ["warn_redundant_parens_around_declarator"]={ | ||
[ | [g]="redundant parentheses surrounding declarator [-Wredundant-parens]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"redundant-parens"}, | ||
[ | [o]="redundant-parens", | ||
[ | [e]="redundant parentheses surrounding declarator", | ||
[ | [f]=m, | ||
[ | [a]="redundant parentheses surrounding declarator", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wredundant\\-parens[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{R,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);"}}, | ||
[p]={ | |||
["clang/test/Parser/cxx-decl.cpp"]={"clang/test/Parser/cxx-decl.cpp:88:3: warning: redundant parentheses surrounding declarator [-Wredundant-parens]","clang/test/Parser/cxx-decl.cpp:270:5: warning: redundant parentheses surrounding declarator [-Wredundant-parens]","clang/test/Parser/cxx-decl.cpp:271:5: warning: redundant parentheses surrounding declarator [-Wredundant-parens]","clang/test/Parser/cxx-decl.cpp:274:5: warning: redundant parentheses surrounding declarator [-Wredundant-parens]","clang/test/Parser/cxx-decl.cpp:279:6: warning: redundant parentheses surrounding declarator [-Wredundant-parens]"} | |||
} | |||
}, | }, | ||
["warn_reference_field_is_uninit"]={ | ["warn_reference_field_is_uninit"]={ | ||
[ | [g]="reference A is not yet bound to a value when used here [-Wuninitialized]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,xb}, | ||
[ | [o]=xb, | ||
[ | [e]="reference %0 is not yet bound to a value when used here", | ||
[ | [f]=m, | ||
[ | [a]="reference (.*?) is not yet bound to a value when used here", | ||
[ | [b]=Mc, | ||
[ | [h]=q, | ||
[i]={"d799a2b3b91f",1345452742,"Better wording for reference self-initialization warning."}, | [i]={"d799a2b3b91f",1345452742,"Better wording for reference self-initialization warning."}, | ||
[j]={{ | [j]={{ab,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/uninitialized.cpp"]={"clang/test/SemaCXX/uninitialized.cpp:840:13: warning: reference \'a\' is not yet bound to a value when used here [-Wuninitialized]","clang/test/SemaCXX/uninitialized.cpp:853:10: warning: reference \'b\' is not yet bound to a value when used here [-Wuninitialized]","clang/test/SemaCXX/uninitialized.cpp:855:14: warning: reference \'c\' is not yet bound to a value when used here [-Wuninitialized]","clang/test/SemaCXX/uninitialized.cpp:1086:9: warning: reference \'c\' is not yet bound to a value when used here [-Wuninitialized]","clang/test/SemaCXX/uninitialized.cpp:1087:9: warning: reference \'c\' is not yet bound to a value when used here [-Wuninitialized]"} | |||
} | |||
}, | }, | ||
["warn_register_objc_catch_parm"]={ | ["warn_register_objc_catch_parm"]={ | ||
[ | [g]="\'register\' storage specifier on @catch parameter will be ignored", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="\'register\' storage specifier on @catch parameter will be ignored", | ||
[ | [f]=m, | ||
[ | [a]="\'register\' storage specifier on @catch parameter will be ignored", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{P,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"]={ | ||
[ | [g]="\'reinterpret_cast\' ... class A ... its ... B behaves differently from \'static_cast\' [-Wreinterpret-base-class]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"reinterpret-base-class"}, | ||
[ | [o]="reinterpret-base-class", | ||
[ | [e]="\'reinterpret_cast\' %select{from|to}3 class %0 %select{to|from}3 its %select{virtual base|base at non-zero offset}2 %1 behaves differently from \'static_cast\'", | ||
[ | [f]=m, | ||
[ | [a]="\'reinterpret_cast\' (?:from|to) class (.*?) (?:to|from) its (?:virtual base|base at non\\-zero offset) (.*?) behaves differently from \'static_cast\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wreinterpret\\-base\\-class[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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,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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-reinterpret-base-class.cpp"]={"clang/test/SemaCXX/warn-reinterpret-base-class.cpp:123:10: warning: \'reinterpret_cast\' to class \'DVA *\' from its virtual base \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:128:10: warning: \'reinterpret_cast\' to class \'DDVA *\' from its virtual base \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:133:10: warning: \'reinterpret_cast\' to class \'DMA *\' from its virtual base \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:156:9: warning: \'reinterpret_cast\' to class \'DVA &\' from its virtual base \'A\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:161:9: warning: \'reinterpret_cast\' to class \'DDVA &\' from its virtual base \'A\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:166:9: warning: \'reinterpret_cast\' to class \'DMA &\' from its virtual base \'A\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:186:10: warning: \'reinterpret_cast\' from class \'DVA *\' to its virtual base \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:191:10: warning: \'reinterpret_cast\' from class \'DDVA *\' to its virtual base \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:196:10: warning: \'reinterpret_cast\' from class \'DDVA *\' to its virtual base \'DA *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:201:10: warning: \'reinterpret_cast\' from class \'DMA *\' to its virtual base \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:206:10: warning: \'reinterpret_cast\' from class \'DMA *\' to its virtual base \'DA *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:226:9: warning: \'reinterpret_cast\' from class \'DVA\' to its virtual base \'A &\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:231:9: warning: \'reinterpret_cast\' from class \'DDVA\' to its virtual base \'A &\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:236:9: warning: \'reinterpret_cast\' from class \'DDVA\' to its virtual base \'DA &\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:241:9: warning: \'reinterpret_cast\' from class \'DMA\' to its virtual base \'A &\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:246:9: warning: \'reinterpret_cast\' from class \'DMA\' to its virtual base \'DA &\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:273:9: warning: \'reinterpret_cast\' to class \'F *\' from its base at non-zero offset \'E *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:278:9: warning: \'reinterpret_cast\' to class \'G *\' from its base at non-zero offset \'E *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:284:9: warning: \'reinterpret_cast\' to class \'I *\' from its virtual base \'E *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:291:9: warning: \'reinterpret_cast\' to class \'I *\' from its virtual base \'F *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:299:9: warning: \'reinterpret_cast\' to class \'H *\' from its base at non-zero offset \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:303:9: warning: \'reinterpret_cast\' to class \'K\' (aka \'const F *\') from its base at non-zero offset \'E *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:310:9: warning: \'reinterpret_cast\' from class \'F *\' to its base at non-zero offset \'E *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:316:9: warning: \'reinterpret_cast\' from class \'G *\' to its base at non-zero offset \'E *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:326:9: warning: \'reinterpret_cast\' from class \'H *\' to its base at non-zero offset \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:330:9: warning: \'reinterpret_cast\' from class \'I *\' to its virtual base \'F *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:335:9: warning: \'reinterpret_cast\' from class \'I *\' to its virtual base \'E *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]"} | |||
} | |||
}, | }, | ||
["warn_related_result_type_compatibility_class"]={ | ["warn_related_result_type_compatibility_class"]={ | ||
[ | [g]="method is expected to return an instance of its class type A, but is declared to return B", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="method is expected to return an instance of its class type %diff{$, but is declared to return $|, but is declared to return different type}0,1", | ||
[ | [f]=m, | ||
[ | [a]="method is expected to return an instance of its class type (?:(.*?), but is declared to return (.*?)|, but is declared to return different type)", | ||
[ | [b]=Q, | ||
[ | [h]="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]={{ | [j]={{P,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/related-result-type-inference.m"]={"clang/test/SemaObjC/related-result-type-inference.m:89:1: warning: method is expected to return an instance of its class type \'B\', but is declared to return \'Unrelated *\'","clang/test/SemaObjC/related-result-type-inference.m:96:1: warning: method is expected to return an instance of its class type \'C\', but is declared to return \'Unrelated *\'","clang/test/SemaObjC/related-result-type-inference.m:110:1: warning: method is expected to return an instance of its class type \'D\', but is declared to return \'Unrelated *\'","clang/test/SemaObjC/related-result-type-inference.m:114:1: warning: method is expected to return an instance of its class type \'D\', but is declared to return \'Unrelated *\'"} | |||
} | |||
}, | }, | ||
["warn_related_result_type_compatibility_protocol"]={ | ["warn_related_result_type_compatibility_protocol"]={ | ||
[ | [g]="protocol method is expected to return an instance of the implementing class, but is declared to return A", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="protocol method is expected to return an instance of the implementing class, but is declared to return %0", | ||
[ | [f]=m, | ||
[ | [a]="protocol method is expected to return an instance of the implementing class, but is declared to return (.*?)", | ||
[ | [b]=Q, | ||
[ | [h]="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]={{ | [j]={{P,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/related-result-type-inference.m"]={"clang/test/SemaObjC/related-result-type-inference.m:125:1: warning: protocol method is expected to return an instance of the implementing class, but is declared to return \'int\'"} | |||
} | |||
}, | }, | ||
["warn_remainder_division_by_zero"]={ | ["warn_remainder_division_by_zero"]={ | ||
[ | [g]="... by zero is undefined [-Wdivision-by-zero]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"div-by-zero","division-by-zero"}, | ||
[ | [o]="division-by-zero", | ||
[ | [e]="%select{remainder|division}0 by zero is undefined", | ||
[ | [f]=m, | ||
[ | [a]="(?:remainder|division) by zero is undefined", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdivision\\-by\\-zero[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC"}, | [i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC"}, | ||
[j]={{ | [j]={{A,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());"}}, | ||
[p]={ | |||
["clang/test/Analysis/test-include.c"]={"clang/test/Analysis/test-include.c:12:13: warning: division by zero is undefined [-Wdivision-by-zero]","clang/test/Analysis/test-include.c:18:13: warning: division by zero is undefined [-Wdivision-by-zero]"} | |||
} | |||
}, | }, | ||
["warn_require_const_init_added_too_late"]={ | ["warn_require_const_init_added_too_late"]={ | ||
[ | [g]="\'require_constant_initialization\' attribute added after initialization of variable [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="\'require_constant_initialization\' attribute added after initialization of variable", | ||
[ | [f]=m, | ||
[ | [a]="\'require_constant_initialization\' attribute added after initialization of variable", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[i]={ | [i]={Ac,1567434909,zc}, | ||
[j]={{ | [j]={{H,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()));"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/attr-require-constant-initialization.cpp"]={"clang/test/SemaCXX/attr-require-constant-initialization.cpp:309:3: warning: \'require_constant_initialization\' attribute added after initialization of variable [-Wignored-attributes]","clang/test/SemaCXX/attr-require-constant-initialization.cpp:312:10: warning: \'require_constant_initialization\' attribute added after initialization of variable [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_reserved_extern_symbol"]={ | ["warn_reserved_extern_symbol"]={ | ||
[ | [g]="identifier A is reserved because ... [-Wreserved-identifier]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Oc}, | ||
[ | [o]=Oc, | ||
[ | [e]="identifier %0 is reserved because %select{<ERROR>|it starts with \'_\' at global scope|it starts with \'_\' and has C language linkage|it starts with \'__\'|it starts with \'_\' followed by a capital letter|it contains \'__\'}1", | ||
[ | [f]=m, | ||
[ | [a]="identifier (.*?) is reserved because (?:it starts with \'_\' at global scope|it starts with \'_\' and has C language linkage|it starts with \'__\'|it starts with \'_\' followed by a capital letter|it contains \'__\')", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wreserved\\-identifier[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"}, | [i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"}, | ||
[j]={{ | [j]={{H,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);"},{Ub,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;"},{S,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/reserved-identifier.cpp"]={"clang/test/SemaCXX/reserved-identifier.cpp:3:5: warning: identifier \'foo__bar\' is reserved because it contains \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:4:12: warning: identifier \'_bar\' is reserved because it starts with \'_\' at global scope [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:5:12: warning: identifier \'_Bar\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:6:5: warning: identifier \'_barbouille\' is reserved because it starts with \'_\' at global scope [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:8:23: warning: identifier \'_Reserved\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:9:16: warning: identifier \'__1\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:16:35: warning: identifier \'__toucan\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:19:9: warning: identifier \'_Barbotine\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:21:17: warning: identifier \'__\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:27:17: warning: identifier \'__\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:30:11: warning: identifier \'_Barbidur\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:32:8: warning: identifier \'__barbidou\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:35:5: warning: identifier \'__barbouille\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:38:5: warning: identifier \'__babar\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:43:7: warning: identifier \'__barbapapa\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:45:7: warning: identifier \'_Barbalala\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:48:12: warning: identifier \'__menu\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:49:3: warning: identifier \'__some\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:50:3: warning: identifier \'_Other\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:54:6: warning: identifier \'_Menu\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:55:3: warning: identifier \'_OtheR_\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:56:3: warning: identifier \'_other_\' is reserved because it starts with \'_\' at global scope [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:60:3: warning: identifier \'__some\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:61:3: warning: identifier \'_Other\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:62:3: warning: identifier \'_other\' is reserved because it starts with \'_\' at global scope [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:69:7: warning: identifier \'_Barbamama\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:79:24: warning: identifier \'_BarbeBleue\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:89:36: warning: identifier \'_SacreBleu\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:95:8: warning: identifier \'_BarbeRouge\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:97:8: warning: identifier \'_BarbeNoire\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:101:15: warning: identifier \'_barbegrise\' is reserved because it starts with \'_\' at global scope [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:111:18: warning: identifier \'_namespace_b\' is reserved because it starts with \'_\' and has C language linkage [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:113:19: warning: identifier \'_namespace_d\' is reserved because it starts with \'_\' and has C language linkage [-Wreserved-identifier]"} | |||
} | |||
}, | }, | ||
["warn_reserved_module_name"]={ | ["warn_reserved_module_name"]={ | ||
[ | [g]="A is a reserved name for a module [-Wreserved-module-identifier]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Oc,"reserved-module-identifier"}, | ||
[ | [o]="reserved-module-identifier", | ||
[ | [e]="%0 is a reserved name for a module", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) is a reserved name for a module", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wreserved\\-module\\-identifier[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[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;"}} | [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"]={ | ||
[ | [g]="returning address of label, which is local [-Wreturn-stack-address]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Yb,"return-local-addr",uc}, | ||
[ | [o]=uc, | ||
[ | [e]="returning address of label, which is local", | ||
[ | [f]=m, | ||
[ | [a]="returning address of label, which is local", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wreturn\\-stack\\-address[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"252d36e74caa",1256875318,"warn about returning the address of a label."}, | [i]={"252d36e74caa",1256875318,"warn about returning the address of a label."}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/Sema/statements.c"]={"clang/test/Sema/statements.c:34:10: warning: returning address of label, which is local [-Wreturn-stack-address]"} | |||
} | |||
}, | }, | ||
["warn_ret_local_temp_addr_ref"]={ | ["warn_ret_local_temp_addr_ref"]={ | ||
[ | [g]="returning ... local temporary object [-Wreturn-stack-address]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Yb,"return-local-addr",uc}, | ||
[ | [o]=uc, | ||
[ | [e]="returning %select{address of|reference to}0 local temporary object", | ||
[ | [f]=m, | ||
[ | [a]="returning (?:address of|reference to) local temporary object", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wreturn\\-stack\\-address[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC"}, | [i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC"}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p15-star-this-capture.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p15-star-this-capture.cpp:11:14: warning: returning reference to local temporary object [-Wreturn-stack-address]","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p15-star-this-capture.cpp:17:14: warning: returning reference to local temporary object [-Wreturn-stack-address]"} | |||
} | |||
}, | }, | ||
["warn_ret_stack_addr_ref"]={ | ["warn_ret_stack_addr_ref"]={ | ||
[ | [g]="... stack memory associated with ... A returned [-Wreturn-stack-address]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Yb,"return-local-addr",uc}, | ||
[ | [o]=uc, | ||
[ | [e]="%select{address of|reference to}0 stack memory associated with %select{local variable|parameter}2 %1 returned", | ||
[ | [f]=m, | ||
[ | [a]="(?:address of|reference to) stack memory associated with (?:local variable|parameter) (.*?) returned", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wreturn\\-stack\\-address[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC"}, | [i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC"}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/CodeGen/pointer-to-int.c"]={"clang/test/CodeGen/pointer-to-int.c:11:10: warning: address of stack memory associated with local variable \'x\' returned [-Wreturn-stack-address]"} | |||
} | |||
}, | }, | ||
["warn_return_missing_expr"]={ | ["warn_return_missing_expr"]={ | ||
[ | [g]="non-void ... A should return a value [-Wreturn-type]", | ||
[c]= | [c]=Cb, | ||
[d]= | [d]=Hb, | ||
[ | [n]={t,u,v,"return-type"}, | ||
[ | [o]="return-type", | ||
[ | [e]="non-void %select{function|method}1 %0 should return a value", | ||
[ | [f]=Ib, | ||
[ | [a]="non\\-void (?:function|method) (.*?) should return a value", | ||
[ | [b]=" \\[[^\\]]*\\-Wreturn\\-type[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={nc,1237025389,qc}, | ||
[j]={{ | [j]={{S,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/method-return-void.m"]={"clang/test/SemaObjC/method-return-void.m:8:14: error: non-void method \'foo\' should return a value [-Wreturn-type]"} | |||
} | |||
}, | }, | ||
["warn_return_typestate_for_unconsumable_type"]={ | ["warn_return_typestate_for_unconsumable_type"]={ | ||
[ | [g]="return state set for an unconsumable type \'A\' [-Wconsumed]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Bb}, | ||
[ | [o]=Bb, | ||
[ | [e]="return state set for an unconsumable type \'%0\'", | ||
[ | [f]=m, | ||
[ | [a]="return state set for an unconsumable type \'(.*?)\'", | ||
[ | [b]=Ic, | ||
[ | [h]=q, | ||
[i]={"fc368259af1a",1378239098,"Consumed analysis: add return_typestate attribute."}, | [i]={"fc368259af1a",1378239098,"Consumed analysis: add return_typestate attribute."}, | ||
[j]={{ | [j]={{E,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-consumed-parsing.cpp"]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:14:38: warning: return state set for an unconsumable type \'int\' [-Wconsumed]"} | |||
} | |||
}, | }, | ||
["warn_return_typestate_mismatch"]={ | ["warn_return_typestate_mismatch"]={ | ||
[ | [g]="return value not in expected state; expected \'A\', observed \'B\' [-Wconsumed]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Bb}, | ||
[ | [o]=Bb, | ||
[ | [e]="return value not in expected state; expected \'%0\', observed \'%1\'", | ||
[ | [f]=m, | ||
[ | [a]="return value not in expected state; expected \'(.*?)\', observed \'(.*?)\'", | ||
[ | [b]=Ic, | ||
[ | [h]=q, | ||
[i]={"fc368259af1a",1378239098,"Consumed analysis: add return_typestate attribute."}, | [i]={"fc368259af1a",1378239098,"Consumed analysis: add return_typestate attribute."}, | ||
[j]={{ | [j]={{E,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);"}}, | ||
[p]={ | |||
[Zc]={"clang/test/SemaCXX/warn-consumed-analysis.cpp:78:3: warning: return value not in expected state; expected \'unconsumed\', observed \'consumed\' [-Wconsumed]"} | |||
} | |||
}, | }, | ||
["warn_return_value_size"]={ | ["warn_return_value_size"]={ | ||
[ | [g]="return value of A is a large (B bytes) pass-by-value object; pass it by reference instead ? [-Wlarge-by-value-copy]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"large-by-value-copy"}, | ||
[ | [o]="large-by-value-copy", | ||
[ | [e]="return value of %0 is a large (%1 bytes) pass-by-value object; pass it by reference instead ?", | ||
[ | [f]=m, | ||
[ | [a]="return value of (.*?) is a large \\((.*?) bytes\\) pass\\-by\\-value object; pass it by reference instead \\?", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wlarge\\-by\\-value\\-copy[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-large-by-value-copy.cpp"]={"clang/test/SemaCXX/warn-large-by-value-copy.cpp:16:6: warning: return value of \'f101\' is a large (101 bytes) pass-by-value object; pass it by reference instead ? [-Wlarge-by-value-copy]","clang/test/SemaCXX/warn-large-by-value-copy.cpp:24:18: warning: return value of \'foo_template<rdar8548050::S101>\' is a large (101 bytes) pass-by-value object; pass it by reference instead ? [-Wlarge-by-value-copy]"} | |||
} | |||
}, | }, | ||
["warn_return_value_udt"]={ | ["warn_return_value_udt"]={ | ||
[ | [g]="A has C-linkage specified, but returns user-defined type B which is incompatible with C [-Wreturn-type-c-linkage]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,"return-type","return-type-c-linkage"}, | ||
[ | [o]="return-type-c-linkage", | ||
[ | [e]="%0 has C-linkage specified, but returns user-defined type %1 which is incompatible with C", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) has C\\-linkage specified, but returns user\\-defined type (.*?) which is incompatible with C", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wreturn\\-type\\-c\\-linkage[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/function-extern-c.cpp"]={"clang/test/SemaCXX/function-extern-c.cpp:27:14: warning: \'f3\' has C-linkage specified, but returns user-defined type \'U\' which is incompatible with C [-Wreturn-type-c-linkage]","clang/test/SemaCXX/function-extern-c.cpp:28:14: warning: \'f0\' has C-linkage specified, but returns user-defined type \'S\' which is incompatible with C [-Wreturn-type-c-linkage]","clang/test/SemaCXX/function-extern-c.cpp:29:14: warning: \'f4\' has C-linkage specified, but returns user-defined type \'A\' which is incompatible with C [-Wreturn-type-c-linkage]","clang/test/SemaCXX/function-extern-c.cpp:77:3: warning: \'bbb\' has C-linkage specified, but returns user-defined type \'A\' which is incompatible with C [-Wreturn-type-c-linkage]","clang/test/SemaCXX/function-extern-c.cpp:78:3: warning: \'ccc\' has C-linkage specified, but returns user-defined type \'A\' which is incompatible with C [-Wreturn-type-c-linkage]"} | |||
} | |||
}, | }, | ||
["warn_return_value_udt_incomplete"]={ | ["warn_return_value_udt_incomplete"]={ | ||
[ | [g]="A has C-linkage specified, but returns incomplete type B which could be incompatible with C [-Wreturn-type-c-linkage]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,"return-type","return-type-c-linkage"}, | ||
[ | [o]="return-type-c-linkage", | ||
[ | [e]="%0 has C-linkage specified, but returns incomplete type %1 which could be incompatible with C", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) has C\\-linkage specified, but returns incomplete type (.*?) which could be incompatible with C", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wreturn\\-type\\-c\\-linkage[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/function-extern-c.cpp"]={"clang/test/SemaCXX/function-extern-c.cpp:40:31: warning: \'f12\' has C-linkage specified, but returns incomplete type \'struct mypodstruct\' which could be incompatible with C [-Wreturn-type-c-linkage]","clang/test/SemaCXX/function-extern-c.cpp:48:16: warning: \'f\' has C-linkage specified, but returns incomplete type \'A\' which could be incompatible with C [-Wreturn-type-c-linkage]"} | |||
} | |||
}, | }, | ||
["warn_riscv_repeated_interrupt_attribute"]={ | ["warn_riscv_repeated_interrupt_attribute"]={ | ||
[ | [g]="repeated RISC-V \'interrupt\' attribute [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="repeated RISC-V \'interrupt\' attribute", | ||
[ | [f]=m, | ||
[ | [a]="repeated RISC\\-V \'interrupt\' attribute", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[i]={"1eee1b771f43",1532626665," [RISCV] Add support for interrupt attribute"}, | [i]={"1eee1b771f43",1532626665," [RISCV] Add support for interrupt attribute"}, | ||
[j]={{ | [j]={{C,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/riscv-interrupt-attr.c"]={"clang/test/Sema/riscv-interrupt-attr.c:41:38: warning: repeated RISC-V \'interrupt\' attribute [-Wignored-attributes]","clang/test/Sema/riscv-interrupt-attr.c:44:27: warning: repeated RISC-V \'interrupt\' attribute [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_root_inst_method_not_found"]={ | ["warn_root_inst_method_not_found"]={ | ||
[ | [g]="instance method A is being used on \'Class\' which is not in the root class [-Wobjc-method-access]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-method-access"}, | ||
[ | [o]="objc-method-access", | ||
[ | [e]="instance method %0 is being used on \'Class\' which is not in the root class", | ||
[ | [f]=m, | ||
[ | [a]="instance method (.*?) is being used on \'Class\' which is not in the root class", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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,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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/inst-method-lookup-in-root.m"]={"clang/test/SemaObjC/inst-method-lookup-in-root.m:23:13: warning: instance method \'starboard\' is being used on \'Class\' which is not in the root class [-Wobjc-method-access]"} | |||
} | |||
}, | }, | ||
["warn_sampler_initializer_invalid_bits"]={ | ["warn_sampler_initializer_invalid_bits"]={ | ||
[ | [g]="sampler initializer has invalid A bits [-Wspir-compat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"spir-compat","spirv-compat"}, | ||
[ | [o]="spir-compat", | ||
[ | [e]="sampler initializer has invalid %0 bits", | ||
[ | [f]=m, | ||
[ | [a]="sampler initializer has invalid (.*?) bits", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wspir\\-compat[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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,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\";"}} | [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\";"}}, | ||
[p]={ | |||
["clang/test/SemaOpenCL/sampler_t.cl"]={"clang/test/SemaOpenCL/sampler_t.cl:21:20: warning: sampler initializer has invalid Filter Mode bits [-Wspir-compat]","clang/test/SemaOpenCL/sampler_t.cl:26:20: warning: sampler initializer has invalid Addressing Mode bits [-Wspir-compat]"} | |||
} | |||
}, | }, | ||
["warn_scanf_nonzero_width"]={ | ["warn_scanf_nonzero_width"]={ | ||
[ | [g]="zero field width in scanf format string is unused [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="zero field width in scanf format string is unused", | ||
[ | [f]=m, | ||
[ | [a]="zero field width in scanf format string is unused", | ||
[ | [b]=sb, | ||
[ | [h]=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]={{ | [j]={{y,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()),"}}, | ||
[p]={ | |||
["clang/test/Sema/format-strings-scanf.c"]={"clang/test/Sema/format-strings-scanf.c:40:11: warning: zero field width in scanf format string is unused [-Wformat]","clang/test/Sema/format-strings-scanf.c:41:11: warning: zero field width in scanf format string is unused [-Wformat]","clang/test/Sema/format-strings-scanf.c:83:9: warning: zero field width in scanf format string is unused [-Wformat]","clang/test/Sema/format-strings-scanf.c:84:11: warning: zero field width in scanf format string is unused [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_scanf_scanlist_incomplete"]={ | ["warn_scanf_scanlist_incomplete"]={ | ||
[ | [g]="no closing \']\' for \'%[\' in scanf format string [-Wformat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,M,v}, | ||
[ | [o]=M, | ||
[ | [e]="no closing \']\' for \'%%[\' in scanf format string", | ||
[ | [f]=m, | ||
[ | [a]="no closing \'\\]\' for \'%\\[\' in scanf format string", | ||
[ | [b]=sb, | ||
[ | [h]=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]={{ | [j]={{y,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)); }"}}, | ||
[p]={ | |||
["clang/test/Sema/format-strings-scanf.c"]={"clang/test/Sema/format-strings-scanf.c:42:22: warning: no closing \']\' for \'%[\' in scanf format string [-Wformat]","clang/test/Sema/format-strings-scanf.c:86:9: warning: no closing \']\' for \'%[\' in scanf format string [-Wformat]","clang/test/Sema/format-strings-scanf.c:87:12: warning: no closing \']\' for \'%[\' in scanf format string [-Wformat]","clang/test/Sema/format-strings-scanf.c:105:15: warning: no closing \']\' for \'%[\' in scanf format string [-Wformat]","clang/test/Sema/format-strings-scanf.c:106:19: warning: no closing \']\' for \'%[\' in scanf format string [-Wformat]","clang/test/Sema/format-strings-scanf.c:107:21: warning: no closing \']\' for \'%[\' in scanf format string [-Wformat]"} | |||
} | |||
}, | }, | ||
["warn_second_arg_of_va_start_not_last_named_param"]={ | ["warn_second_arg_of_va_start_not_last_named_param"]={ | ||
[ | [g]="second argument to \'va_start\' is not the last named parameter [-Wvarargs]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Fc}, | ||
[ | [o]=Fc, | ||
[ | [e]="second argument to \'va_start\' is not the last named parameter", | ||
[ | [f]=m, | ||
[ | [a]="second argument to \'va_start\' is not the last named parameter", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wvarargs[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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);"}}, | ||
[p]={ | |||
["clang/test/C/C2x/n2975.c"]={"clang/test/C/C2x/n2975.c:49:28: warning: second argument to \'va_start\' is not the last named parameter [-Wvarargs]"} | |||
} | |||
}, | }, | ||
["warn_second_parameter_to_va_arg_never_compatible"]={ | ["warn_second_parameter_to_va_arg_never_compatible"]={ | ||
[ | [g]="second argument to \'va_arg\' is of promotable type A; this va_arg has undefined behavior because arguments will be promoted to B [-Wvarargs]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Fc}, | ||
[ | [o]=Fc, | ||
[ | [e]="second argument to \'va_arg\' is of promotable type %0; this va_arg has undefined behavior because arguments will be promoted to %1", | ||
[ | [f]=m, | ||
[ | [a]="second argument to \'va_arg\' is of promotable type (.*?); this va_arg has undefined behavior because arguments will be promoted to (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wvarargs[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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());"}}, | ||
[p]={ | |||
["clang/test/Sema/varargs-x86-64.c"]={"clang/test/Sema/varargs-x86-64.c:71:32: warning: second argument to \'va_arg\' is of promotable type \'float\'; this va_arg has undefined behavior because arguments will be promoted to \'double\' [-Wvarargs]","clang/test/Sema/varargs-x86-64.c:73:32: warning: second argument to \'va_arg\' is of promotable type \'short\'; this va_arg has undefined behavior because arguments will be promoted to \'int\' [-Wvarargs]","clang/test/Sema/varargs-x86-64.c:74:32: warning: second argument to \'va_arg\' is of promotable type \'char\'; this va_arg has undefined behavior because arguments will be promoted to \'int\' [-Wvarargs]"} | |||
} | |||
}, | }, | ||
["warn_second_parameter_to_va_arg_not_pod"]={ | ["warn_second_parameter_to_va_arg_not_pod"]={ | ||
[ | [g]="second argument to \'va_arg\' is of non-POD type A [-Wnon-pod-varargs]", | ||
[c]= | [c]=Cb, | ||
[d]= | [d]=Hb, | ||
[ | [n]={Rc,Kc}, | ||
[ | [o]=Kc, | ||
[ | [e]="second argument to \'va_arg\' is of non-POD type %0", | ||
[ | [f]=Ib, | ||
[ | [a]="second argument to \'va_arg\' is of non\\-POD type (.*?)", | ||
[ | [b]=" \\[[^\\]]*\\-Wnon\\-pod\\-varargs[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/vararg-non-pod.cpp"]={"clang/test/SemaCXX/vararg-non-pod.cpp:177:32: warning: second argument to \'va_arg\' is of non-POD type \'C\' [-Wnon-pod-varargs]"} | |||
} | |||
}, | }, | ||
["warn_second_parameter_to_va_arg_ownership_qualified"]={ | ["warn_second_parameter_to_va_arg_ownership_qualified"]={ | ||
[ | [g]="second argument to \'va_arg\' is of ARC ownership-qualified type A [-Wnon-pod-varargs]", | ||
[c]= | [c]=Cb, | ||
[d]= | [d]=Hb, | ||
[ | [n]={Rc,Kc}, | ||
[ | [o]=Kc, | ||
[ | [e]="second argument to \'va_arg\' is of ARC ownership-qualified type %0", | ||
[ | [f]=Ib, | ||
[ | [a]="second argument to \'va_arg\' is of ARC ownership\\-qualified type (.*?)", | ||
[ | [b]=" \\[[^\\]]*\\-Wnon\\-pod\\-varargs[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/arc-non-pod-memaccess.m"]={"clang/test/SemaObjC/arc-non-pod-memaccess.m:61:35: error: second argument to \'va_arg\' is of ARC ownership-qualified type \'__strong id\' [-Wnon-pod-varargs]"} | |||
} | |||
}, | }, | ||
["warn_self_assignment_builtin"]={ | ["warn_self_assignment_builtin"]={ | ||
[ | [g]="explicitly assigning value of variable of type A to itself... [-Wself-assign]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,"self-assign"}, | ||
[ | [o]="self-assign", | ||
[ | [e]="explicitly assigning value of variable of type %0 to itself%select{|; did you mean to assign to member %2?}1", | ||
[ | [f]=m, | ||
[ | [a]="explicitly assigning value of variable of type (.*?) to itself(?:|; did you mean to assign to member (.*?)\\?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wself\\-assign[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"6ed0fad9996d",1524519321,"[Sema] Add -Wno-self-assign-overloaded"}, | [i]={"6ed0fad9996d",1524519321,"[Sema] Add -Wno-self-assign-overloaded"}, | ||
[j]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/member-init.cpp"]={"clang/test/SemaCXX/member-init.cpp:103:25: warning: explicitly assigning value of variable of type \'Sprite\' to itself [-Wself-assign-overloaded]"} | |||
} | |||
}, | }, | ||
["warn_self_assignment_overloaded"]={ | ["warn_self_assignment_overloaded"]={ | ||
[ | [g]="explicitly assigning value of variable of type A to itself... [-Wself-assign-overloaded]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,"self-assign","self-assign-overloaded"}, | ||
[ | [o]="self-assign-overloaded", | ||
[ | [e]="explicitly assigning value of variable of type %0 to itself%select{|; did you mean to assign to member %2?}1", | ||
[ | [f]=m, | ||
[ | [a]="explicitly assigning value of variable of type (.*?) to itself(?:|; did you mean to assign to member (.*?)\\?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wself\\-assign\\-overloaded[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"6ed0fad9996d",1524519321,"[Sema] Add -Wno-self-assign-overloaded"}, | [i]={"6ed0fad9996d",1524519321,"[Sema] Add -Wno-self-assign-overloaded"}, | ||
[j]={{ | [j]={{A,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"]={ | ||
[ | [g]="explicitly moving variable of type A to itself... [-Wself-move]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,t,u,u,v,v,"move","self-move"}, | ||
[ | [o]="self-move", | ||
[ | [e]="explicitly moving variable of type %0 to itself%select{|; did you mean to move to member %2?}1", | ||
[ | [f]=m, | ||
[ | [a]="explicitly moving variable of type (.*?) to itself(?:|; did you mean to move to member (.*?)\\?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wself\\-move[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"17ddb829aaed",1420869858,"Add a new warning, -Wself-move, to Clang."}, | [i]={"17ddb829aaed",1420869858,"Add a new warning, -Wself-move, to Clang."}, | ||
[j]={{ | [j]={{y,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();"},{y,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();"},{y,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();"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-self-move.cpp"]={"clang/test/SemaCXX/warn-self-move.cpp:16:5: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:17:7: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:20:5: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:26:10: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:27:12: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:30:10: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:37:7: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:40:13: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:43:7: warning: explicitly moving variable of type \'int\' to itself; did you mean to move to member \'x\'? [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:52:5: warning: explicitly moving variable of type \'A\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:55:5: warning: explicitly moving variable of type \'B\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:56:7: warning: explicitly moving variable of type \'A\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:59:5: warning: explicitly moving variable of type \'C\' to itself [-Wself-move]"} | |||
} | |||
}, | }, | ||
["warn_semicolon_before_method_body"]={ | ["warn_semicolon_before_method_body"]={ | ||
[ | [g]="semicolon before method body is ignored [-Wsemicolon-before-method-body]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={x,t,Xb,"semicolon-before-method-body"}, | ||
[ | [o]="semicolon-before-method-body", | ||
[ | [e]="semicolon before method body is ignored", | ||
[ | [f]=m, | ||
[ | [a]="semicolon before method body is ignored", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wsemicolon\\-before\\-method\\-body[^\\]]*\\]", | ||
[ | [h]=B, | ||
[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",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());"}} | [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());"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/objc-string-constant.m"]={"clang/test/SemaObjC/objc-string-constant.m:32:20: warning: semicolon before method body is ignored [-Wsemicolon-before-method-body]"} | |||
} | |||
}, | }, | ||
["warn_setter_getter_impl_required"]={ | ["warn_setter_getter_impl_required"]={ | ||
[ | [g]="property A requires method B to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation [-Wobjc-property-implementation]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-property-implementation"}, | ||
[ | [o]="objc-property-implementation", | ||
[ | [e]="property %0 requires method %1 to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation", | ||
[ | [f]=m, | ||
[ | [a]="property (.*?) requires method (.*?) to be defined \\- use @synthesize, @dynamic or provide a method implementation in this class implementation", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-implementation[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"6c6aea914ab0",1239750921,"Diagnose properties which have no implementations;"}, | [i]={"6c6aea914ab0",1239750921,"Diagnose properties which have no implementations;"}, | ||
[j]={{ | [j]={{T,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property-category-1.m"]={"clang/test/SemaObjC/property-category-1.m:49:17: warning: property \'p0\' requires method \'p0\' to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation [-Wobjc-property-implementation]"} | |||
} | |||
}, | }, | ||
["warn_setter_getter_impl_required_in_category"]={ | ["warn_setter_getter_impl_required_in_category"]={ | ||
[ | [g]="property A requires method B to be defined - use @dynamic or provide a method implementation in this category [-Wobjc-property-implementation]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"objc-property-implementation"}, | ||
[ | [o]="objc-property-implementation", | ||
[ | [e]="property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category", | ||
[ | [f]=m, | ||
[ | [a]="property (.*?) requires method (.*?) to be defined \\- use @dynamic or provide a method implementation in this category", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-implementation[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"4f8a57112f13",1264016181,"Settled rule on warning on unimplemented property in"}, | [i]={"4f8a57112f13",1264016181,"Settled rule on warning on unimplemented property in"}, | ||
[j]={{ | [j]={{T,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/default-synthesize.m"]={"clang/test/SemaObjC/default-synthesize.m:110:17: warning: property \'p\' requires method \'p\' to be defined - use @dynamic or provide a method implementation in this category [-Wobjc-property-implementation]","clang/test/SemaObjC/default-synthesize.m:110:17: warning: property \'p\' requires method \'setP:\' to be defined - use @dynamic or provide a method implementation in this category [-Wobjc-property-implementation]"} | |||
} | |||
}, | }, | ||
["warn_shadow_field"]={ | ["warn_shadow_field"]={ | ||
[ | [g]="... A ...shadows member inherited from type B [-Wshadow-field]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"shadow-all","shadow-field"}, | ||
[ | [o]="shadow-field", | ||
[ | [e]="%select{parameter|non-static data member}3 %0 %select{|of %1 }3shadows member inherited from type %2", | ||
[ | [f]=m, | ||
[ | [a]="(?:parameter|non\\-static data member) (.*?) (?:|of (.*?) )shadows member inherited from type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wshadow\\-field[^\\]]*\\]", | ||
[ | [h]=x, | ||
[i]={"a6ae060db4fd",1486524613,"Sema: add warning for c++ member variable shadowing"}, | [i]={"a6ae060db4fd",1486524613,"Sema: add warning for c++ member variable shadowing"}, | ||
[j]={{ | [j]={{ab,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))"},{ab,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;"}}, | ||
[p]={ | |||
["clang/test/CXX/class.derived/class.member.lookup/p10.cpp"]={"clang/test/CXX/class.derived/class.member.lookup/p10.cpp:39:12: warning: non-static data member \'x\' of \'E\' shadows member inherited from type \'A\' [-Wshadow-field]","clang/test/CXX/class.derived/class.member.lookup/p10.cpp:40:8: warning: non-static data member \'y\' of \'E\' shadows member inherited from type \'A\' [-Wshadow-field]","clang/test/CXX/class.derived/class.member.lookup/p10.cpp:42:8: warning: non-static data member \'w\' of \'E\' shadows member inherited from type \'D\' [-Wshadow-field]","clang/test/CXX/class.derived/class.member.lookup/p10.cpp:42:8: warning: non-static data member \'w\' of \'E\' shadows member inherited from type \'W\' [-Wshadow-field]","clang/test/CXX/class.derived/class.member.lookup/p10.cpp:53:7: warning: non-static data member \'x\' of \'H\' shadows member inherited from type \'A\' [-Wshadow-field]","clang/test/CXX/class.derived/class.member.lookup/p10.cpp:54:7: warning: non-static data member \'y\' of \'H\' shadows member inherited from type \'A\' [-Wshadow-field]","clang/test/CXX/class.derived/class.member.lookup/p10.cpp:67:7: warning: non-static data member \'x\' of \'J\' shadows member inherited from type \'I\' [-Wshadow-field]","clang/test/CXX/class.derived/class.member.lookup/p10.cpp:110:7: warning: non-static data member \'x\' of \'E1\' shadows member inherited from type \'A1\' [-Wshadow-field]"} | |||
} | |||
}, | }, | ||
["warn_shift_gt_typewidth"]={ | ["warn_shift_gt_typewidth"]={ | ||
[ | [g]="shift count >= width of type [-Wshift-count-overflow]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"shift-count-overflow"}, | ||
[ | [o]="shift-count-overflow", | ||
[ | [e]="shift count >= width of type", | ||
[ | [f]=m, | ||
[ | [a]="shift count \\>\\= width of type", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wshift\\-count\\-overflow[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"f53fab87d80b",1249662020,"PR3333: warn when shifting by invalid amount"}, | [i]={"f53fab87d80b",1249662020,"PR3333: warn when shifting by invalid amount"}, | ||
[j]={{ | [j]={{A,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());"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/runtimediag-ppe.cpp"]={"clang/test/SemaCXX/runtimediag-ppe.cpp:16:33: warning: shift count >= width of type [-Wshift-count-overflow]"} | |||
} | |||
}, | }, | ||
["warn_shift_lhs_negative"]={ | ["warn_shift_lhs_negative"]={ | ||
[ | [g]="shifting a negative signed value is undefined [-Wshift-negative-value]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"shift-negative-value"}, | ||
[ | [o]="shift-negative-value", | ||
[ | [e]="shifting a negative signed value is undefined", | ||
[ | [f]=m, | ||
[ | [a]="shifting a negative signed value is undefined", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wshift\\-negative\\-value[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"bf0f7757e242",1436205729,"[Sema] Warn when shifting a negative value."}, | [i]={"bf0f7757e242",1436205729,"[Sema] Warn when shifting a negative value."}, | ||
[j]={{ | [j]={{A,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());"}}, | ||
[p]={ | |||
["clang/test/Sema/shift.c"]={"clang/test/Sema/shift.c:45:10: warning: shifting a negative signed value is undefined [-Wshift-negative-value]","clang/test/Sema/shift.c:46:10: warning: shifting a negative signed value is undefined [-Wshift-negative-value]","clang/test/Sema/shift.c:55:17: warning: shifting a negative signed value is undefined [-Wshift-negative-value]"} | |||
} | |||
}, | }, | ||
["warn_shift_negative"]={ | ["warn_shift_negative"]={ | ||
[ | [g]="shift count is negative [-Wshift-count-negative]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"shift-count-negative"}, | ||
[ | [o]="shift-count-negative", | ||
[ | [e]="shift count is negative", | ||
[ | [f]=m, | ||
[ | [a]="shift count is negative", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wshift\\-count\\-negative[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"f53fab87d80b",1249662020,"PR3333: warn when shifting by invalid amount"}, | [i]={"f53fab87d80b",1249662020,"PR3333: warn when shifting by invalid amount"}, | ||
[j]={{ | [j]={{A,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());"}}, | ||
[p]={ | |||
["clang/test/Sema/shift.c"]={"clang/test/Sema/shift.c:21:9: warning: shift count is negative [-Wshift-count-negative]","clang/test/Sema/shift.c:22:9: warning: shift count is negative [-Wshift-count-negative]","clang/test/Sema/shift.c:31:5: warning: shift count is negative [-Wshift-count-negative]","clang/test/Sema/shift.c:32:5: warning: shift count is negative [-Wshift-count-negative]"} | |||
} | |||
}, | }, | ||
["warn_shift_result_gt_typewidth"]={ | ["warn_shift_result_gt_typewidth"]={ | ||
[ | [g]="signed shift result (A) requires B bits to represent, but C only has D bits [-Wshift-overflow]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"shift-overflow"}, | ||
[ | [o]="shift-overflow", | ||
[ | [e]="signed shift result (%0) requires %1 bits to represent, but %2 only has %3 bits", | ||
[ | [f]=m, | ||
[ | [a]="signed shift result \\((.*?)\\) requires (.*?) bits to represent, but (.*?) only has (.*?) bits", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wshift\\-overflow[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/shift.c"]={"clang/test/Sema/shift.c:43:9: warning: signed shift result (0x100000000) requires 34 bits to represent, but \'int\' only has 32 bits [-Wshift-overflow]"} | |||
} | |||
}, | }, | ||
["warn_shift_result_sets_sign_bit"]={ | ["warn_shift_result_sets_sign_bit"]={ | ||
[ | [g]="signed shift result (A) sets the sign bit of the shift expression\'s type (B) and becomes negative [-Wshift-sign-overflow]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"shift-sign-overflow"}, | ||
[ | [o]="shift-sign-overflow", | ||
[ | [e]="signed shift result (%0) sets the sign bit of the shift expression\'s type (%1) and becomes negative", | ||
[ | [f]=m, | ||
[ | [a]="signed shift result \\((.*?)\\) sets the sign bit of the shift expression\'s type \\((.*?)\\) and becomes negative", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wshift\\-sign\\-overflow[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"70f05fdfeebd",1308099292,"Sema: show shift result in hexadecimal"}, | [i]={"70f05fdfeebd",1308099292,"Sema: show shift result in hexadecimal"}, | ||
[j]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/shift.c"]={"clang/test/Sema/shift.c:44:9: warning: signed shift result (0x80000000) sets the sign bit of the shift expression\'s type (\'int\') and becomes negative [-Wshift-sign-overflow]"} | |||
} | |||
}, | }, | ||
["warn_side_effects_typeid"]={ | ["warn_side_effects_typeid"]={ | ||
[ | [g]="expression with side effects will be evaluated despite being used as an operand to \'typeid\' [-Wpotentially-evaluated-expression]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,"potentially-evaluated-expression","unevaluated-expression",Y,fb}, | ||
[ | [o]="potentially-evaluated-expression", | ||
[ | [e]="expression with side effects will be evaluated despite being used as an operand to \'typeid\'", | ||
[ | [f]=m, | ||
[ | [a]="expression with side effects will be evaluated despite being used as an operand to \'typeid\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpotentially\\-evaluated\\-expression[^\\]]*\\]", | ||
[ | [h]=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]={{ | [j]={{Ub,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);"}}, | ||
[p]={ | |||
["clang/test/CodeGenCXX/microsoft-no-rtti-data.cpp"]={"clang/test/CodeGenCXX/microsoft-no-rtti-data.cpp:20:35: warning: expression with side effects will be evaluated despite being used as an operand to \'typeid\' [-Wpotentially-evaluated-expression]"} | |||
} | |||
}, | }, | ||
["warn_side_effects_unevaluated_context"]={ | ["warn_side_effects_unevaluated_context"]={ | ||
[ | [g]="expression with side effects has no effect in an unevaluated context [-Wunevaluated-expression]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,"unevaluated-expression",Y,fb}, | ||
[ | [o]="unevaluated-expression", | ||
[ | [e]="expression with side effects has no effect in an unevaluated context", | ||
[ | [f]=m, | ||
[ | [a]="expression with side effects has no effect in an unevaluated context", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunevaluated\\-expression[^\\]]*\\]", | ||
[ | [h]=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]={{ | [j]={{A,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);"},{A,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);"},{Ub,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);"},{Ub,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);"},{R,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);"}}, | ||
[p]={ | |||
["clang/test/SemaOpenCL/vec_step.cl"]={"clang/test/SemaOpenCL/vec_step.cl:33:37: warning: expression with side effects has no effect in an unevaluated context [-Wunevaluated-expression]"} | |||
} | |||
}, | }, | ||
["warn_signed_bitfield_enum_conversion"]={ | ["warn_signed_bitfield_enum_conversion"]={ | ||
[ | [g]="signed bit-field A needs an extra bit to represent the largest positive enumerators of B [-Wbitfield-enum-conversion]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"bitfield-enum-conversion",Fb,Wb}, | ||
[ | [o]="bitfield-enum-conversion", | ||
[ | [e]="signed bit-field %0 needs an extra bit to represent the largest positive enumerators of %1", | ||
[ | [f]=m, | ||
[ | [a]="signed bit\\-field (.*?) needs an extra bit to represent the largest positive enumerators of (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-enum\\-conversion[^\\]]*\\]", | ||
[ | [h]=Pb, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp"]={"clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:32:21: warning: signed bit-field \'two_bits_signed\' needs an extra bit to represent the largest positive enumerators of \'TwoBits\' [-Wbitfield-enum-conversion]","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:44:23: warning: signed bit-field \'three_bits_signed\' needs an extra bit to represent the largest positive enumerators of \'ThreeBits\' [-Wbitfield-enum-conversion]"} | |||
} | |||
}, | }, | ||
["warn_sizeof_array_decay"]={ | ["warn_sizeof_array_decay"]={ | ||
[ | [g]="sizeof on pointer operation will return size of A instead of B [-Wsizeof-array-decay]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,"sizeof-array-decay"}, | ||
[ | [o]="sizeof-array-decay", | ||
[ | [e]="sizeof on pointer operation will return size of %0 instead of %1", | ||
[ | [f]=m, | ||
[ | [a]="sizeof on pointer operation will return size of (.*?) instead of (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wsizeof\\-array\\-decay[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-sizeof-array-decay.c"]={"clang/test/Sema/warn-sizeof-array-decay.c:8:20: warning: sizeof on pointer operation will return size of \'int *\' instead of \'int[20]\' [-Wsizeof-array-decay]","clang/test/Sema/warn-sizeof-array-decay.c:9:20: warning: sizeof on pointer operation will return size of \'char *\' instead of \'char[10]\' [-Wsizeof-array-decay]","clang/test/Sema/warn-sizeof-array-decay.c:10:20: warning: sizeof on pointer operation will return size of \'int *\' instead of \'int[20]\' [-Wsizeof-array-decay]","clang/test/Sema/warn-sizeof-array-decay.c:11:20: warning: sizeof on pointer operation will return size of \'char *\' instead of \'char[10]\' [-Wsizeof-array-decay]","clang/test/Sema/warn-sizeof-array-decay.c:17:17: warning: sizeof on pointer operation will return size of \'char *\' instead of \'char[10]\' [-Wsizeof-array-decay]"} | |||
} | |||
}, | }, | ||
["warn_sizeof_array_param"]={ | ["warn_sizeof_array_param"]={ | ||
[ | [g]="sizeof on array function parameter will return size of A instead of B [-Wsizeof-array-argument]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,"sizeof-array-argument"}, | ||
[ | [o]="sizeof-array-argument", | ||
[ | [e]="sizeof on array function parameter will return size of %0 instead of %1", | ||
[ | [f]=m, | ||
[ | [a]="sizeof on array function parameter will return size of (.*?) instead of (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wsizeof\\-array\\-argument[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-sizeof-arrayarg.c"]={"clang/test/Sema/warn-sizeof-arrayarg.c:10:15: warning: sizeof on array function parameter will return size of \'int *\' instead of \'int[10]\' [-Wsizeof-array-argument]","clang/test/Sema/warn-sizeof-arrayarg.c:12:15: warning: sizeof on array function parameter will return size of \'int *\' instead of \'int[10]\' [-Wsizeof-array-argument]","clang/test/Sema/warn-sizeof-arrayarg.c:14:16: warning: sizeof on array function parameter will return size of \'int *\' instead of \'int[10]\' [-Wsizeof-array-argument]","clang/test/Sema/warn-sizeof-arrayarg.c:16:16: warning: sizeof on array function parameter will return size of \'int *\' instead of \'Arr\' (aka \'int[10]\') [-Wsizeof-array-argument]"} | |||
} | |||
}, | }, | ||
["warn_sizeof_pointer_expr_memaccess"]={ | ["warn_sizeof_pointer_expr_memaccess"]={ | ||
[ | [g]="\'A\' call operates on objects of type B while the size is based on a different type C [-Wsizeof-pointer-memaccess]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"sizeof-pointer-memaccess","suspicious-memaccess"}, | ||
[ | [o]="sizeof-pointer-memaccess", | ||
[ | [e]="\'%0\' call operates on objects of type %1 while the size is based on a different type %2", | ||
[ | [f]=m, | ||
[ | [a]="\'(.*?)\' call operates on objects of type (.*?) while the size is based on a different type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wsizeof\\-pointer\\-memaccess[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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())) {"},{y,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);"},{y,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))"}}, | ||
[p]={ | |||
["clang/test/Sema/memset-invalid-1.c"]={"clang/test/Sema/memset-invalid-1.c:12:26: warning: \'memset\' call operates on objects of type \'struct __incomplete\' while the size is based on a different type \'incomplete\' (aka \'struct __incomplete *\') [-Wsizeof-pointer-memaccess]"} | |||
} | |||
}, | }, | ||
["warn_sizeof_pointer_expr_memaccess_note"]={ | ["warn_sizeof_pointer_expr_memaccess_note"]={ | ||
[ | [g]="did you mean to ...?", | ||
[c]="note: ", | [c]="note: ", | ||
[d]="Note", | [d]="Note", | ||
[ | [e]="did you mean to %select{dereference the argument to \'sizeof\' (and multiply it by the number of elements)|remove the addressof in the argument to \'sizeof\' (and multiply it by the number of elements)|provide an explicit length}0?", | ||
[ | [f]="note\\: ", | ||
[ | [a]="did you mean to (?:dereference the argument to \'sizeof\' \\(and multiply it by the number of elements\\)|remove the addressof in the argument to \'sizeof\' \\(and multiply it by the number of elements\\)|provide an explicit length)\\?", | ||
[ | [b]=x, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/memset-invalid-1.c"]={"clang/test/Sema/memset-invalid-1.c:12:26: note: did you mean to dereference the argument to \'sizeof\' (and multiply it by the number of elements)?"} | |||
} | |||
}, | }, | ||
["warn_sizeof_pointer_type_memaccess"]={ | ["warn_sizeof_pointer_type_memaccess"]={ | ||
[ | [g]="argument to \'sizeof\' in A call is the same pointer type B as the ...; expected C or an explicit length [-Wsizeof-pointer-memaccess]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"sizeof-pointer-memaccess","suspicious-memaccess"}, | ||
[ | [o]="sizeof-pointer-memaccess", | ||
[ | [e]="argument to \'sizeof\' in %0 call is the same pointer type %1 as the %select{destination|source}2; expected %3 or an explicit length", | ||
[ | [f]=m, | ||
[ | [a]="argument to \'sizeof\' in (.*?) call is the same pointer type (.*?) as the (?:destination|source); expected (.*?) or an explicit length", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wsizeof\\-pointer\\-memaccess[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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());"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-memset-bad-sizeof.cpp"]={"clang/test/SemaCXX/warn-memset-bad-sizeof.cpp:44:18: warning: argument to \'sizeof\' in \'memset\' call is the same pointer type \'typeof (ps2)\' (aka \'S *\') as the destination; expected \'S\' or an explicit length [-Wsizeof-pointer-memaccess]","clang/test/SemaCXX/warn-memset-bad-sizeof.cpp:46:18: warning: argument to \'sizeof\' in \'memset\' call is the same pointer type \'PS\' (aka \'S *\') as the destination; expected \'S\' or an explicit length [-Wsizeof-pointer-memaccess]","clang/test/SemaCXX/warn-memset-bad-sizeof.cpp:57:14: warning: argument to \'sizeof\' in \'bzero\' call is the same pointer type \'typeof (ps2)\' (aka \'S *\') as the destination; expected \'S\' or an explicit length [-Wsizeof-pointer-memaccess]","clang/test/SemaCXX/warn-memset-bad-sizeof.cpp:59:14: warning: argument to \'sizeof\' in \'bzero\' call is the same pointer type \'PS\' (aka \'S *\') as the destination; expected \'S\' or an explicit length [-Wsizeof-pointer-memaccess]"} | |||
} | |||
}, | }, | ||
["warn_slash_u_filename"]={ | ["warn_slash_u_filename"]={ | ||
[ | [g]="\'/UA\' treated as the \'/U\' option [-Wslash-u-filename]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"slash-u-filename"}, | ||
[ | [o]="slash-u-filename", | ||
[ | [e]="\'/U%0\' treated as the \'/U\' option", | ||
[ | [f]=m, | ||
[ | [a]="\'\\/U(.*?)\' treated as the \'\\/U\' option", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wslash\\-u\\-filename[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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",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;"}} | [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"]={ | ||
[ | [g]="speculative load hardening does not protect functions with asm goto [-Wslh-asm-goto]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"slh-asm-goto"}, | ||
[ | [o]="slh-asm-goto", | ||
[ | [e]="speculative load hardening does not protect functions with asm goto", | ||
[ | [f]=m, | ||
[ | [a]="speculative load hardening does not protect functions with asm goto", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wslh\\-asm\\-goto[^\\]]*\\]", | ||
[ | [h]="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",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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/Parser/slh-asm-goto.cpp"]={"clang/test/Parser/slh-asm-goto.cpp:4:9: warning: speculative load hardening does not protect functions with asm goto [-Wslh-asm-goto]"} | |||
} | |||
}, | }, | ||
["warn_some_initializers_out_of_order"]={ | ["warn_some_initializers_out_of_order"]={ | ||
[ | [g]="initializer order does not match the declaration order [-Wreorder-ctor]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,"reorder","reorder-ctor"}, | ||
[ | [o]="reorder-ctor", | ||
[ | [e]="initializer order does not match the declaration order", | ||
[ | [f]=m, | ||
[ | [a]="initializer order does not match the declaration order", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wreorder\\-ctor[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{ab,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-reorder-ctor-initialization.cpp"]={"clang/test/SemaCXX/warn-reorder-ctor-initialization.cpp:10:9: warning: initializer order does not match the declaration order [-Wreorder-ctor]"} | |||
} | |||
}, | }, | ||
["warn_sometimes_uninit_var"]={ | ["warn_sometimes_uninit_var"]={ | ||
[ | [g]="variable A is ... uninitialized whenever ... [-Wsometimes-uninitialized]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,"sometimes-uninitialized",xb}, | ||
[ | [o]="sometimes-uninitialized", | ||
[ | [e]="variable %0 is %select{used|captured}1 uninitialized whenever %select{\'%3\' condition is %select{true|false}4|\'%3\' loop %select{is entered|exits because its condition is false}4|\'%3\' loop %select{condition is true|exits because its condition is false}4|switch %3 is taken|its declaration is reached|%3 is called}2", | ||
[ | [f]=m, | ||
[ | [a]="variable (.*?) is (?:used|captured) uninitialized whenever (?:\'(.*?)\' condition is (?:true|false)|\'(.*?)\' loop (?:is entered|exits because its condition is false)|\'(.*?)\' loop (?:condition is true|exits because its condition is false)|switch (.*?) is taken|its declaration is reached|(.*?) is called)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wsometimes\\-uninitialized[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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();"},{E,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;"},{E,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())) {"}}, | ||
[p]={ | |||
["clang/test/Sema/uninit-variables.c"]={"clang/test/Sema/uninit-variables.c:43:7: warning: variable \'x\' is used uninitialized whenever \'if\' condition is false [-Wsometimes-uninitialized]","clang/test/Sema/uninit-variables.c:156:7: warning: variable \'z\' is used uninitialized whenever \'||\' condition is true [-Wsometimes-uninitialized]","clang/test/Sema/uninit-variables.c:163:7: warning: variable \'z\' is used uninitialized whenever \'||\' condition is true [-Wsometimes-uninitialized]","clang/test/Sema/uninit-variables.c:299:7: warning: variable \'y\' is used uninitialized whenever \'if\' condition is false [-Wsometimes-uninitialized]"} | |||
} | |||
}, | }, | ||
["warn_splice_in_doxygen_comment"]={ | ["warn_splice_in_doxygen_comment"]={ | ||
[ | [g]="line splicing in Doxygen comments are not supported [-Wdocumentation]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={xc}, | ||
[ | [o]=xc, | ||
[ | [e]="line splicing in Doxygen comments are not supported", | ||
[ | [f]=m, | ||
[ | [a]="line splicing in Doxygen comments are not supported", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdocumentation[^\\]]*\\]", | ||
[ | [h]="Documentation Issue", | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[j]={{ | [j]={{W,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);"}}, | ||
[p]={ | |||
["clang/test/Lexer/comment-escape.c"]={"clang/test/Lexer/comment-escape.c:9:1: warning: line splicing in Doxygen comments are not supported [-Wdocumentation]","clang/test/Lexer/comment-escape.c:14:1: warning: line splicing in Doxygen comments are not supported [-Wdocumentation]","clang/test/Lexer/comment-escape.c:21:1: warning: line splicing in Doxygen comments are not supported [-Wdocumentation]","clang/test/Lexer/comment-escape.c:26:1: warning: line splicing in Doxygen comments are not supported [-Wdocumentation]","clang/test/Lexer/comment-escape.c:32:1: warning: line splicing in Doxygen comments are not supported [-Wdocumentation]","clang/test/Lexer/comment-escape.c:36:1: warning: line splicing in Doxygen comments are not supported [-Wdocumentation]"} | |||
} | |||
}, | }, | ||
["warn_stack_clash_protection_inline_asm"]={ | ["warn_stack_clash_protection_inline_asm"]={ | ||
[ | [g]="unable to protect inline asm that clobbers stack pointer against stack clash [-Wstack-protector]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"stack-protector"}, | ||
[ | [o]="stack-protector", | ||
[ | [e]="unable to protect inline asm that clobbers stack pointer against stack clash", | ||
[ | [f]=m, | ||
[ | [a]="unable to protect inline asm that clobbers stack pointer against stack clash", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstack\\-protector[^\\]]*\\]", | ||
[ | [h]="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",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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/Driver/stack-clash-protection-02.c"]={"clang/test/Driver/stack-clash-protection-02.c:8:3: warning: unable to protect inline asm that clobbers stack pointer against stack clash [-Wstack-protector]"} | |||
} | |||
}, | }, | ||
["warn_stack_exhausted"]={ | ["warn_stack_exhausted"]={ | ||
[ | [g]="stack nearly exhausted; compilation time may suffer, and crashes due to stack overflow are likely [-Wstack-exhausted]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"stack-exhausted"}, | ||
[ | [o]="stack-exhausted", | ||
[ | [e]="stack nearly exhausted; compilation time may suffer, and crashes due to stack overflow are likely", | ||
[ | [f]=m, | ||
[ | [a]="stack nearly exhausted; compilation time may suffer, and crashes due to stack overflow are likely", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstack\\-exhausted[^\\]]*\\]", | ||
[ | [h]=x, | ||
[i]={"26a92d5852b2",1566843487,"Improve behavior in the case of stack exhaustion."}, | [i]={"26a92d5852b2",1566843487,"Improve behavior in the case of stack exhaustion."}, | ||
[j]={{ | [j]={{W,506,"void Sema::warnStackExhausted(SourceLocation Loc) {\n // Only warn about this once.\n if (!WarnedStackExhausted) {\n Diag(Loc, diag::warn_stack_exhausted);"}}, | ||
[p]={ | |||
["clang/test/SemaTemplate/stack-exhaustion.cpp"]={"clang/test/SemaTemplate/stack-exhaustion.cpp:19:24: warning: stack nearly exhausted; compilation time may suffer, and crashes due to stack overflow are likely [-Wstack-exhausted]"} | |||
} | |||
}, | }, | ||
["warn_standalone_specifier"]={ | ["warn_standalone_specifier"]={ | ||
[ | [g]="\'A\' ignored on this declaration [-Wmissing-declarations]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"missing-declarations"}, | ||
[ | [o]="missing-declarations", | ||
[ | [e]="\'%0\' ignored on this declaration", | ||
[ | [f]=m, | ||
[ | [a]="\'(.*?)\' ignored on this declaration", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmissing\\-declarations[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"aa017377827f",1300834804,"Warn about unused declaration-specifiers on tag declarations."}, | [i]={"aa017377827f",1300834804,"Warn about unused declaration-specifiers on tag declarations."}, | ||
[j]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/struct-decl.c"]={"clang/test/Sema/struct-decl.c:51:1: warning: \'static\' ignored on this declaration [-Wmissing-declarations]","clang/test/Sema/struct-decl.c:54:1: warning: \'const\' ignored on this declaration [-Wmissing-declarations]"} | |||
} | |||
}, | }, | ||
["warn_static_array_too_small"]={ | ["warn_static_array_too_small"]={ | ||
[ | [g]="array argument is too small; ..., callee requires at least A [-Warray-bounds]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"array-bounds"}, | ||
[ | [o]="array-bounds", | ||
[ | [e]="array argument is too small; %select{contains %0 elements|is of size %0}2, callee requires at least %1", | ||
[ | [f]=m, | ||
[ | [a]="array argument is too small; (?:contains (.*?) elements|is of size (.*?)), callee requires at least (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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;"},{A,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:16:3: warning: array argument is too small; contains 2 elements, callee requires at least 3 [-Warray-bounds]","clang/test/Sema/static-array.c:25:3: warning: array argument is too small; is of size 4, callee requires at least 12 [-Warray-bounds]","clang/test/Sema/static-array.c:26:3: warning: array argument is too small; is of size 4, callee requires at least 12 [-Warray-bounds]"} | |||
} | |||
}, | }, | ||
["warn_static_assert_message_constexpr"]={ | ["warn_static_assert_message_constexpr"]={ | ||
[ | [g]="the message in this static assertion is not a constant expression [-Winvalid-static-assert-message]", | ||
[c]= | [c]=Cb, | ||
[d]= | [d]=Hb, | ||
[ | [n]={"invalid-static-assert-message"}, | ||
[ | [o]="invalid-static-assert-message", | ||
[ | [e]="the message in this static assertion is not a constant expression", | ||
[ | [f]=Ib, | ||
[ | [a]="the message in this static assertion is not a constant expression", | ||
[ | [b]=" \\[[^\\]]*\\-Winvalid\\-static\\-assert\\-message[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"}, | [i]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"}, | ||
[j]={{ | [j]={{ab,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))"},{ab,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:34:21: error: the message in this static assertion is not a constant expression [-Winvalid-static-assert-message]","clang/test/SemaCXX/static-assert-cxx26.cpp:48:21: error: the message in this static assertion is not a constant expression [-Winvalid-static-assert-message]"} | |||
} | |||
}, | }, | ||
["warn_static_inline_explicit_inst_ignored"]={ | ["warn_static_inline_explicit_inst_ignored"]={ | ||
[ | [g]="ignoring \'...\' keyword on explicit template instantiation [-Wstatic-inline-explicit-instantiation]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"static-inline-explicit-instantiation"}, | ||
[ | [o]="static-inline-explicit-instantiation", | ||
[ | [e]="ignoring \'%select{static|inline}0\' keyword on explicit template instantiation", | ||
[ | [f]=m, | ||
[ | [a]="ignoring \'(?:static|inline)\' keyword on explicit template instantiation", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstatic\\-inline\\-explicit\\-instantiation[^\\]]*\\]", | ||
[ | [h]=B, | ||
[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",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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/SemaTemplate/explicit-instantiation.cpp"]={"clang/test/SemaTemplate/explicit-instantiation.cpp:89:1: warning: ignoring \'inline\' keyword on explicit template instantiation [-Wstatic-inline-explicit-instantiation]","clang/test/SemaTemplate/explicit-instantiation.cpp:90:1: warning: ignoring \'static\' keyword on explicit template instantiation [-Wstatic-inline-explicit-instantiation]"} | |||
} | |||
}, | }, | ||
["warn_static_local_in_extern_inline"]={ | ["warn_static_local_in_extern_inline"]={ | ||
[ | [g]="non-constant static local variable in inline function may be different in different files [-Wstatic-local-in-inline]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"static-local-in-inline"}, | ||
[ | [o]="static-local-in-inline", | ||
[ | [e]="non-constant static local variable in inline function may be different in different files", | ||
[ | [f]=m, | ||
[ | [a]="non\\-constant static local variable in inline function may be different in different files", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstatic\\-local\\-in\\-inline[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/inline.c"]={"clang/test/Sema/inline.c:78:3: warning: non-constant static local variable in inline function may be different in different files [-Wstatic-local-in-inline]"} | |||
} | |||
}, | }, | ||
["warn_static_main"]={ | ["warn_static_main"]={ | ||
[ | [g]="\'main\' should not be declared static [-Wmain]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"main"}, | ||
[ | [o]="main", | ||
[ | [e]="\'main\' should not be declared static", | ||
[ | [f]=m, | ||
[ | [a]="\'main\' should not be declared static", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics."}, | [i]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics."}, | ||
[j]={{ | [j]={{H,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());"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-main.c"]={"clang/test/Sema/warn-main.c:12:1: warning: \'main\' should not be declared static [-Wmain]"} | |||
} | |||
}, | }, | ||
["warn_static_self_reference_in_init"]={ | ["warn_static_self_reference_in_init"]={ | ||
[ | [g]="static variable A is suspiciously used within its own initialization [-Wstatic-self-init]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,"static-self-init",xb}, | ||
[ | [o]="static-self-init", | ||
[ | [e]="static variable %0 is suspiciously used within its own initialization", | ||
[ | [f]=m, | ||
[ | [a]="static variable (.*?) is suspiciously used within its own initialization", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstatic\\-self\\-init[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/uninitialized.cpp"]={ | |||
[1]="clang/test/SemaCXX/uninitialized.cpp:737:20: warning: static variable \'b\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[2]="clang/test/SemaCXX/uninitialized.cpp:738:21: warning: static variable \'c\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[3]="clang/test/SemaCXX/uninitialized.cpp:738:25: warning: static variable \'c\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[4]="clang/test/SemaCXX/uninitialized.cpp:739:23: warning: static variable \'d\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[5]="clang/test/SemaCXX/uninitialized.cpp:739:27: warning: static variable \'d\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[6]="clang/test/SemaCXX/uninitialized.cpp:740:38: warning: static variable \'e\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[7]="clang/test/SemaCXX/uninitialized.cpp:741:24: warning: static variable \'f\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[8]="clang/test/SemaCXX/uninitialized.cpp:751:24: warning: static variable \'l\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[9]="clang/test/SemaCXX/uninitialized.cpp:751:28: warning: static variable \'l\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[10]="clang/test/SemaCXX/uninitialized.cpp:752:29: warning: static variable \'m\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[11]="clang/test/SemaCXX/uninitialized.cpp:752:33: warning: static variable \'m\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[12]="clang/test/SemaCXX/uninitialized.cpp:753:21: warning: static variable \'n\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[13]="clang/test/SemaCXX/uninitialized.cpp:754:30: warning: static variable \'o\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[14]="clang/test/SemaCXX/uninitialized.cpp:755:36: warning: static variable \'p\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[15]="clang/test/SemaCXX/uninitialized.cpp:756:36: warning: static variable \'q\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[16]="clang/test/SemaCXX/uninitialized.cpp:757:44: warning: static variable \'r\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[17]="clang/test/SemaCXX/uninitialized.cpp:758:25: warning: static variable \'s\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[18]="clang/test/SemaCXX/uninitialized.cpp:759:20: warning: static variable \'t\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[19]="clang/test/SemaCXX/uninitialized.cpp:760:25: warning: static variable \'u\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[20]="clang/test/SemaCXX/uninitialized.cpp:761:26: warning: static variable \'v\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[21]="clang/test/SemaCXX/uninitialized.cpp:762:21: warning: static variable \'w\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[22]="clang/test/SemaCXX/uninitialized.cpp:763:20: warning: static variable \'x\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[23]="clang/test/SemaCXX/uninitialized.cpp:764:40: warning: static variable \'y\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[24]="clang/test/SemaCXX/uninitialized.cpp:765:26: warning: static variable \'z\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[25]="clang/test/SemaCXX/uninitialized.cpp:766:26: warning: static variable \'aa\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[26]="clang/test/SemaCXX/uninitialized.cpp:767:21: warning: static variable \'bb\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[27]="clang/test/SemaCXX/uninitialized.cpp:771:22: warning: static variable \'b\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[28]="clang/test/SemaCXX/uninitialized.cpp:772:23: warning: static variable \'c\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[29]="clang/test/SemaCXX/uninitialized.cpp:772:27: warning: static variable \'c\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[30]="clang/test/SemaCXX/uninitialized.cpp:773:25: warning: static variable \'d\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[31]="clang/test/SemaCXX/uninitialized.cpp:773:29: warning: static variable \'d\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[32]="clang/test/SemaCXX/uninitialized.cpp:774:40: warning: static variable \'e\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[33]="clang/test/SemaCXX/uninitialized.cpp:775:26: warning: static variable \'f\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[34]="clang/test/SemaCXX/uninitialized.cpp:785:26: warning: static variable \'l\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[35]="clang/test/SemaCXX/uninitialized.cpp:785:30: warning: static variable \'l\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[36]="clang/test/SemaCXX/uninitialized.cpp:786:31: warning: static variable \'m\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[37]="clang/test/SemaCXX/uninitialized.cpp:786:35: warning: static variable \'m\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[38]="clang/test/SemaCXX/uninitialized.cpp:787:23: warning: static variable \'n\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[39]="clang/test/SemaCXX/uninitialized.cpp:788:32: warning: static variable \'o\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[40]="clang/test/SemaCXX/uninitialized.cpp:789:38: warning: static variable \'p\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[41]="clang/test/SemaCXX/uninitialized.cpp:790:38: warning: static variable \'q\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[42]="clang/test/SemaCXX/uninitialized.cpp:791:46: warning: static variable \'r\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[43]="clang/test/SemaCXX/uninitialized.cpp:792:27: warning: static variable \'s\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[44]="clang/test/SemaCXX/uninitialized.cpp:793:22: warning: static variable \'t\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[45]="clang/test/SemaCXX/uninitialized.cpp:794:27: warning: static variable \'u\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[46]="clang/test/SemaCXX/uninitialized.cpp:795:28: warning: static variable \'v\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[47]="clang/test/SemaCXX/uninitialized.cpp:796:23: warning: static variable \'w\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[48]="clang/test/SemaCXX/uninitialized.cpp:797:22: warning: static variable \'x\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[49]="clang/test/SemaCXX/uninitialized.cpp:798:42: warning: static variable \'y\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[50]="clang/test/SemaCXX/uninitialized.cpp:799:28: warning: static variable \'z\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[51]="clang/test/SemaCXX/uninitialized.cpp:800:28: warning: static variable \'aa\' is suspiciously used within its own initialization [-Wstatic-self-init]", | |||
[52]="clang/test/SemaCXX/uninitialized.cpp:801:23: warning: static variable \'bb\' is suspiciously used within its own initialization [-Wstatic-self-init]" | |||
} | |||
} | |||
}, | }, | ||
["warn_stdc_fenv_round_not_supported"]={ | ["warn_stdc_fenv_round_not_supported"]={ | ||
[ | [g]="pragma STDC FENV_ROUND is not supported [-Wunknown-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,z,N}, | ||
[ | [o]=N, | ||
[ | [e]="pragma STDC FENV_ROUND is not supported", | ||
[ | [f]=m, | ||
[ | [a]="pragma STDC FENV_ROUND is not supported", | ||
[ | [b]=ib, | ||
[ | [h]=B, | ||
[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"}, | [i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"}, | ||
[j]={{ | [j]={{s,3379,"void PragmaSTDC_FENV_ROUNDHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n PP.Diag(Tok.getLocation(), diag::warn_stdc_fenv_round_not_supported);"}}, | ||
[p]={ | |||
["clang/test/AST/ast-dump-pragma-json.c"]={"clang/test/AST/ast-dump-pragma-json.c:4:40: warning: pragma STDC FENV_ROUND is not supported [-Wunknown-pragmas]","clang/test/AST/ast-dump-pragma-json.c:6:38: warning: pragma STDC FENV_ROUND is not supported [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_stdc_unknown_rounding_mode"]={ | ["warn_stdc_unknown_rounding_mode"]={ | ||
[ | [g]="invalid or unsupported rounding mode in \'#pragma STDC FENV_ROUND\' - ignored [-Wignored-pragmas]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={w,z}, | ||
[ | [o]=w, | ||
[ | [e]="invalid or unsupported rounding mode in \'#pragma STDC FENV_ROUND\' - ignored", | ||
[ | [f]=m, | ||
[ | [a]="invalid or unsupported rounding mode in \'\\#pragma STDC FENV_ROUND\' \\- ignored", | ||
[ | [b]=F, | ||
[ | [h]=B, | ||
[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"}, | [i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"}, | ||
[j]={{ | [j]={{s,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);"}}, | ||
[p]={ | |||
["clang/test/Parser/pragma-fenv_round.c"]={"clang/test/Parser/pragma-fenv_round.c:3:25: warning: invalid or unsupported rounding mode in \'#pragma STDC FENV_ROUND\' - ignored [-Wignored-pragmas]"} | |||
} | |||
}, | }, | ||
["warn_strict_multiple_method_decl"]={ | ["warn_strict_multiple_method_decl"]={ | ||
[ | [g]="multiple methods named A found [-Wstrict-selector-match]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"strict-selector-match"}, | ||
[ | [o]="strict-selector-match", | ||
[ | [e]="multiple methods named %0 found", | ||
[ | [f]=m, | ||
[ | [a]="multiple methods named (.*?) found", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstrict\\-selector\\-match[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"3337b2e8dd0e",1281396478,"Implements gcc\'s -Wstrict-selector-match."}, | [i]={"3337b2e8dd0e",1281396478,"Implements gcc\'s -Wstrict-selector-match."}, | ||
[j]={{ | [j]={{P,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());"},{P,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/warn-strict-selector-match.m"]={"clang/test/SemaObjC/warn-strict-selector-match.m:11:18: warning: multiple methods named \'method\' found [-Wstrict-selector-match]","clang/test/SemaObjC/warn-strict-selector-match.m:26:3: warning: multiple methods named \'setWindow:\' found [-Wstrict-selector-match]","clang/test/SemaObjC/warn-strict-selector-match.m:28:3: warning: multiple methods named \'setWindow:\' found [-Wstrict-selector-match]","clang/test/SemaObjC/warn-strict-selector-match.m:57:32: warning: multiple methods named \'initWithData:\' found [-Wstrict-selector-match]","clang/test/SemaObjC/warn-strict-selector-match.m:93:12: warning: multiple methods named \'initWithType:\' found [-Wstrict-selector-match]"} | |||
} | |||
}, | }, | ||
["warn_strict_potentially_direct_selector_expression"]={ | ["warn_strict_potentially_direct_selector_expression"]={ | ||
[ | [g]="@selector expression formed with potentially direct selector A [-Wstrict-potentially-direct-selector]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"strict-potentially-direct-selector"}, | ||
[ | [o]="strict-potentially-direct-selector", | ||
[ | [e]="@selector expression formed with potentially direct selector %0", | ||
[ | [f]=m, | ||
[ | [a]="@selector expression formed with potentially direct selector (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstrict\\-potentially\\-direct\\-selector[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Sb,1582847864,Nb}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/potentially-direct-selector.m"]={"clang/test/SemaObjC/potentially-direct-selector.m:83:9: warning: @selector expression formed with potentially direct selector \'inBase\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:84:9: warning: @selector expression formed with potentially direct selector \'inBaseImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:85:9: warning: @selector expression formed with potentially direct selector \'inBaseCat\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:86:9: warning: @selector expression formed with potentially direct selector \'inBaseCatImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:87:9: warning: @selector expression formed with potentially direct selector \'inDerived\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:88:9: warning: @selector expression formed with potentially direct selector \'inDerivedImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:89:9: warning: @selector expression formed with potentially direct selector \'inDerivedCat\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:90:9: warning: @selector expression formed with potentially direct selector \'inDerivedCatImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:91:9: warning: @selector expression formed with potentially direct selector \'inDerivedClass\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:92:9: warning: @selector expression formed with potentially direct selector \'inBaseClass\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:93:9: warning: @selector expression formed with potentially direct selector \'inDerivedCatClass\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:103:9: warning: @selector expression formed with potentially direct selector \'inDerived\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:104:9: warning: @selector expression formed with potentially direct selector \'inDerivedImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:105:9: warning: @selector expression formed with potentially direct selector \'inDerivedCat\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:106:9: warning: @selector expression formed with potentially direct selector \'inDerivedCatImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:107:9: warning: @selector expression formed with potentially direct selector \'inDerivedClass\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:109:9: warning: @selector expression formed with potentially direct selector \'inDerivedCatClass\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:117:9: warning: @selector expression formed with potentially direct selector \'inBase\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:118:9: warning: @selector expression formed with potentially direct selector \'inBaseImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:119:9: warning: @selector expression formed with potentially direct selector \'inBaseCat\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:120:9: warning: @selector expression formed with potentially direct selector \'inBaseCatImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:121:9: warning: @selector expression formed with potentially direct selector \'inDerived\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:122:9: warning: @selector expression formed with potentially direct selector \'inDerivedImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:123:9: warning: @selector expression formed with potentially direct selector \'inDerivedCat\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:124:9: warning: @selector expression formed with potentially direct selector \'inDerivedCatImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:125:9: warning: @selector expression formed with potentially direct selector \'inDerivedClass\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:126:9: warning: @selector expression formed with potentially direct selector \'inBaseClass\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:127:9: warning: @selector expression formed with potentially direct selector \'inDerivedCatClass\' [-Wstrict-potentially-direct-selector]"} | |||
} | |||
}, | }, | ||
["warn_strict_prototypes"]={ | ["warn_strict_prototypes"]={ | ||
[ | [g]="a ... declaration without a prototype is deprecated ... [-Wstrict-prototypes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"pedantic","strict-prototypes"}, | ||
[ | [o]="strict-prototypes", | ||
[ | [e]="a %select{function|block}0 declaration without a prototype is deprecated %select{in all versions of C|}0", | ||
[ | [f]=m, | ||
[ | [a]="a (?:function|block) declaration without a prototype is deprecated (?:in all versions of C|)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstrict\\-prototypes[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"840f8df67759",1481107938,"Implement the -Wstrict-prototypes warning"}, | [i]={"840f8df67759",1481107938,"Implement the -Wstrict-prototypes warning"}, | ||
[j]={{ | [j]={{R,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\");"}}, | ||
[p]={ | |||
["clang/test/Parser/declarators.c"]={"clang/test/Parser/declarators.c:5:8: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]","clang/test/Parser/declarators.c:47:10: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]"} | |||
} | |||
}, | }, | ||
["warn_strict_uses_without_prototype"]={ | ["warn_strict_uses_without_prototype"]={ | ||
[ | [g]="passing arguments to ... without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"deprecated-non-prototype","strict-prototypes"}, | ||
[ | [o]="deprecated-non-prototype", | ||
[ | [e]="passing arguments to %select{a function|%1}0 without a prototype is deprecated in all versions of C and is not supported in C2x", | ||
[ | [f]=m, | ||
[ | [a]="passing arguments to (?:a function|(.*?)) without a prototype is deprecated in all versions of C and is not supported in C2x", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-non\\-prototype[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Vc,1620530452,Wc}, | ||
[j]={{ | [j]={{A,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()))))"},{A,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;"}}, | ||
[p]={ | |||
["clang/test/CodeGen/avr/address-space-avr.c"]={"<stdin>:27:6: warning: passing arguments to \'foo\' without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype]","<stdin>:28:6: warning: passing arguments to \'foo\' without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype]"} | |||
} | |||
}, | }, | ||
["warn_string_plus_char"]={ | ["warn_string_plus_char"]={ | ||
[ | [g]="adding A to a string pointer does not append to the string [-Wstring-plus-char]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"string-plus-char"}, | ||
[ | [o]="string-plus-char", | ||
[ | [e]="adding %0 to a string pointer does not append to the string", | ||
[ | [f]=m, | ||
[ | [a]="adding (.*?) to a string pointer does not append to the string", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstring\\-plus\\-char[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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;"},{A,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/string-plus-char.c"]={"clang/test/Sema/string-plus-char.c:6:16: warning: adding \'char\' to a string pointer does not append to the string [-Wstring-plus-char]","clang/test/Sema/string-plus-char.c:11:20: warning: adding \'char\' to a string pointer does not append to the string [-Wstring-plus-char]","clang/test/Sema/string-plus-char.c:13:28: warning: adding \'char\' to a string pointer does not append to the string [-Wstring-plus-char]","clang/test/Sema/string-plus-char.c:15:13: warning: adding \'char\' to a string pointer does not append to the string [-Wstring-plus-char]","clang/test/Sema/string-plus-char.c:18:16: warning: adding \'char\' to a string pointer does not append to the string [-Wstring-plus-char]","clang/test/Sema/string-plus-char.c:20:20: warning: adding \'char\' to a string pointer does not append to the string [-Wstring-plus-char]","clang/test/Sema/string-plus-char.c:24:23: warning: adding \'char\' to a string pointer does not append to the string [-Wstring-plus-char]"} | |||
} | |||
}, | }, | ||
["warn_string_plus_int"]={ | ["warn_string_plus_int"]={ | ||
[ | [g]="adding A to a string does not append to the string [-Wstring-plus-int]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,"string-plus-int"}, | ||
[ | [o]="string-plus-int", | ||
[ | [e]="adding %0 to a string does not append to the string", | ||
[ | [f]=m, | ||
[ | [a]="adding (.*?) to a string does not append to the string", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstring\\-plus\\-int[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/string-plus-int.cpp"]={"clang/test/SemaCXX/string-plus-int.cpp:31:17: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:32:17: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:33:17: warning: adding \'MyEnum\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:34:17: warning: adding \'MyEnum\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:36:13: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:37:17: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:38:19: warning: adding \'MyEnum\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:39:24: warning: adding \'MyEnum\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:42:23: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:43:19: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:45:18: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:46:18: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:48:17: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:49:17: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:50:19: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:54:15: warning: adding \'unsigned long\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:68:20: warning: adding \'unsigned long\' to a string does not append to the string [-Wstring-plus-int]"} | |||
} | |||
}, | }, | ||
["warn_stringcompare"]={ | ["warn_stringcompare"]={ | ||
[ | [g]="result of comparison against ... is unspecified (use an explicit string comparison function instead) [-Wstring-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"address","string-compare"}, | ||
[ | [o]="string-compare", | ||
[ | [e]="result of comparison against %select{a string literal|@encode}0 is unspecified (use an explicit string comparison function instead)", | ||
[ | [f]=m, | ||
[ | [a]="result of comparison against (?:a string literal|@encode) is unspecified \\(use an explicit string comparison function instead\\)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstring\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={nc,1237025389,qc}, | ||
[j]={{ | [j]={{A,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());"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/exprs.m"]={"clang/test/SemaObjC/exprs.m:20:20: warning: result of comparison against @encode is unspecified (use an explicit string comparison function instead) [-Wstring-compare]"} | |||
} | |||
}, | }, | ||
["warn_strlcpycat_wrong_size"]={ | ["warn_strlcpycat_wrong_size"]={ | ||
[ | [g]="size argument in A call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"strlcpy-strlcat-size"}, | ||
[ | [o]="strlcpy-strlcat-size", | ||
[ | [e]="size argument in %0 call appears to be size of the source; expected the size of the destination", | ||
[ | [f]=m, | ||
[ | [a]="size argument in (.*?) call appears to be size of the source; expected the size of the destination", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstrlcpy\\-strlcat\\-size[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-strlcpycat-size.c"]={"clang/test/Sema/warn-strlcpycat-size.c:22:26: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:23:26: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:24:26: warning: size argument in \'strlcat\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:25:29: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:26:36: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:27:28: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:38:29: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:46:26: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:54:26: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]"} | |||
} | |||
}, | }, | ||
["warn_strncat_large_size"]={ | ["warn_strncat_large_size"]={ | ||
[ | [g]="the value of the size argument in \'strncat\' is too large, might lead to a buffer overflow [-Wstrncat-size]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Bc}, | ||
[ | [o]=Bc, | ||
[ | [e]="the value of the size argument in \'strncat\' is too large, might lead to a buffer overflow", | ||
[ | [f]=m, | ||
[ | [a]="the value of the size argument in \'strncat\' is too large, might lead to a buffer overflow", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstrncat\\-size[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-strncat-size.c"]={"clang/test/Sema/warn-strncat-size.c:37:48: warning: the value of the size argument in \'strncat\' is too large, might lead to a buffer overflow [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:39:52: warning: the value of the size argument in \'strncat\' is too large, might lead to a buffer overflow [-Wstrncat-size]"} | |||
} | |||
}, | }, | ||
["warn_strncat_src_size"]={ | ["warn_strncat_src_size"]={ | ||
[ | [g]="size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Bc}, | ||
[ | [o]=Bc, | ||
[ | [e]="size argument in \'strncat\' call appears to be size of the source", | ||
[ | [f]=m, | ||
[ | [a]="size argument in \'strncat\' call appears to be size of the source", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstrncat\\-size[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"},{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-strncat-size.c"]={"clang/test/Sema/warn-strncat-size.c:33:22: warning: size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:35:22: warning: size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:41:29: warning: size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:42:21: warning: size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:43:22: warning: size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:54:23: warning: size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:70:19: warning: size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]"} | |||
} | |||
}, | }, | ||
["warn_strncat_wrong_size"]={ | ["warn_strncat_wrong_size"]={ | ||
[ | [g]="the value of the size argument to \'strncat\' is wrong [-Wstrncat-size]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Bc}, | ||
[ | [o]=Bc, | ||
[ | [e]="the value of the size argument to \'strncat\' is wrong", | ||
[ | [f]=m, | ||
[ | [a]="the value of the size argument to \'strncat\' is wrong", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstrncat\\-size[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-strncat-size.c"]={"clang/test/Sema/warn-strncat-size.c:62:19: warning: the value of the size argument to \'strncat\' is wrong [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:75:17: warning: the value of the size argument to \'strncat\' is wrong [-Wstrncat-size]"} | |||
} | |||
}, | }, | ||
["warn_struct_class_previous_tag_mismatch"]={ | ["warn_struct_class_previous_tag_mismatch"]={ | ||
[ | [g]="A defined as ...... here but previously declared as ......; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,"mismatched-tags",v}, | ||
[ | [o]="mismatched-tags", | ||
[ | [e]="%2 defined as %select{a struct|an interface|a class}0%select{| template}1 here but previously declared as %select{a struct|an interface|a class}3%select{| template}1; this is valid, but may result in linker errors under the Microsoft C++ ABI", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) defined as (?:a struct|an interface|a class)(?:| template) here but previously declared as (?:a struct|an interface|a class)(?:| template); this is valid, but may result in linker errors under the Microsoft C\\+\\+ ABI", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-tags[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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());"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/struct-class-redecl.cpp"]={"clang/test/SemaCXX/struct-class-redecl.cpp:8:19: warning: \'Y\' defined as a class template here but previously declared as a struct template; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:24:1: warning: \'B\' defined as a struct here but previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:34:1: warning: \'C\' defined as a class here but previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:57:19: warning: \'G\' defined as a struct template here but previously declared as a class template; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]"} | |||
} | |||
}, | }, | ||
["warn_struct_class_tag_mismatch"]={ | ["warn_struct_class_tag_mismatch"]={ | ||
[ | [g]="...... A was previously declared as a ......; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,"mismatched-tags",v}, | ||
[ | [o]="mismatched-tags", | ||
[ | [e]="%select{struct|interface|class}0%select{| template}1 %2 was previously declared as a %select{struct|interface|class}3%select{| template}1; this is valid, but may result in linker errors under the Microsoft C++ ABI", | ||
[ | [f]=m, | ||
[ | [a]="(?:struct|interface|class)(?:| template) (.*?) was previously declared as a (?:struct|interface|class)(?:| template); this is valid, but may result in linker errors under the Microsoft C\\+\\+ ABI", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-tags[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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); };"},{H,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);"},{H,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/struct-class-redecl.cpp"]={"clang/test/SemaCXX/struct-class-redecl.cpp:4:9: warning: struct \'X\' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:18:1: warning: struct \'A\' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:23:1: warning: struct \'B\' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:27:1: warning: struct \'C\' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:30:1: warning: class \'C\' was previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:32:1: warning: struct \'C\' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:40:1: warning: class \'D\' was previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:52:1: warning: class \'F\' was previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:56:19: warning: struct template \'G\' was previously declared as a class template; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:77:1: warning: struct \'H\' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:80:1: warning: class \'I\' was previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:83:1: warning: class \'K\' was previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:85:1: warning: class \'M\' was previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]"} | |||
} | |||
}, | }, | ||
["warn_sub_ptr_zero_size_types"]={ | ["warn_sub_ptr_zero_size_types"]={ | ||
[ | [g]="subtraction of pointers to type A of zero size has undefined behavior [-Wpointer-arith]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"pointer-arith"}, | ||
[ | [o]="pointer-arith", | ||
[ | [e]="subtraction of pointers to type %0 of zero size has undefined behavior", | ||
[ | [f]=m, | ||
[ | [a]="subtraction of pointers to type (.*?) of zero size has undefined behavior", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpointer\\-arith[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/empty1.c"]={"clang/test/Sema/empty1.c:47:12: warning: subtraction of pointers to type \'struct emp_1\' of zero size has undefined behavior [-Wpointer-arith]","clang/test/Sema/empty1.c:51:16: warning: subtraction of pointers to type \'struct emp_1\' of zero size has undefined behavior [-Wpointer-arith]","clang/test/Sema/empty1.c:55:12: warning: subtraction of pointers to type \'struct emp_1\' of zero size has undefined behavior [-Wpointer-arith]","clang/test/Sema/empty1.c:59:12: warning: subtraction of pointers to type \'struct emp_1\' of zero size has undefined behavior [-Wpointer-arith]","clang/test/Sema/empty1.c:63:12: warning: subtraction of pointers to type \'struct emp_1\' of zero size has undefined behavior [-Wpointer-arith]","clang/test/Sema/empty1.c:68:12: warning: subtraction of pointers to type \'union emp_2\' of zero size has undefined behavior [-Wpointer-arith]","clang/test/Sema/empty1.c:78:12: warning: subtraction of pointers to type \'struct emp_1[10]\' of zero size has undefined behavior [-Wpointer-arith]","clang/test/Sema/empty1.c:86:12: warning: subtraction of pointers to type \'int[0]\' of zero size has undefined behavior [-Wpointer-arith]"} | |||
} | |||
}, | }, | ||
["warn_subscript_is_char"]={ | ["warn_subscript_is_char"]={ | ||
[ | [g]="array subscript is of type \'char\' [-Wchar-subscripts]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,"char-subscripts",v}, | ||
[ | [o]="char-subscripts", | ||
[ | [e]="array subscript is of type \'char\'", | ||
[ | [f]=m, | ||
[ | [a]="array subscript is of type \'char\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wchar\\-subscripts[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"914244e7b0c6",1252893538,"Add support for -Wchar-subscripts. Fixes PR4801."}, | [i]={"914244e7b0c6",1252893538,"Add support for -Wchar-subscripts. Fixes PR4801."}, | ||
[j]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-char-subscripts.c"]={"clang/test/Sema/warn-char-subscripts.c:6:18: warning: array subscript is of type \'char\' [-Wchar-subscripts]","clang/test/Sema/warn-char-subscripts.c:12:22: warning: array subscript is of type \'char\' [-Wchar-subscripts]","clang/test/Sema/warn-char-subscripts.c:18:18: warning: array subscript is of type \'char\' [-Wchar-subscripts]","clang/test/Sema/warn-char-subscripts.c:24:22: warning: array subscript is of type \'char\' [-Wchar-subscripts]","clang/test/Sema/warn-char-subscripts.c:30:18: warning: array subscript is of type \'char\' [-Wchar-subscripts]","clang/test/Sema/warn-char-subscripts.c:49:18: warning: array subscript is of type \'char\' [-Wchar-subscripts]"} | |||
} | |||
}, | }, | ||
["warn_suggest_destructor_marked_not_override_overriding"]={ | ["warn_suggest_destructor_marked_not_override_overriding"]={ | ||
[ | [g]="A overrides a destructor but is not marked \'override\' [-Wsuggest-destructor-override]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"suggest-destructor-override"}, | ||
[ | [o]="suggest-destructor-override", | ||
[ | [e]="%0 overrides a destructor but is not marked \'override\'", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) overrides a destructor but is not marked \'override\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wsuggest\\-destructor\\-override[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Sb,1582847864,Nb}, | ||
[j]={{ | [j]={{ab,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"]={ | ||
[ | [g]="A overrides a member function but is not marked \'override\' [-Wsuggest-override]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"suggest-override"}, | ||
[ | [o]="suggest-override", | ||
[ | [e]="%0 overrides a member function but is not marked \'override\'", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) overrides a member function but is not marked \'override\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wsuggest\\-override[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Sb,1582847864,Nb}, | ||
[j]={{ | [j]={{ab,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"]={ | ||
[ | [g]="block could be declared with attribute \'noreturn\' [-Wmissing-noreturn]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"missing-noreturn"}, | ||
[ | [o]="missing-noreturn", | ||
[ | [e]="block could be declared with attribute \'noreturn\'", | ||
[ | [f]=m, | ||
[ | [a]="block could be declared with attribute \'noreturn\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmissing\\-noreturn[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"bce7a27d222a",1248822672,"Add support for -Wmissing-noreturn."}, | [i]={"bce7a27d222a",1248822672,"Add support for -Wmissing-noreturn."}, | ||
[j]={{ | [j]={{E,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"]={ | ||
[ | [g]="... A could be declared with attribute \'noreturn\' [-Wmissing-noreturn]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"missing-noreturn"}, | ||
[ | [o]="missing-noreturn", | ||
[ | [e]="%select{function|method}0 %1 could be declared with attribute \'noreturn\'", | ||
[ | [f]=m, | ||
[ | [a]="(?:function|method) (.*?) could be declared with attribute \'noreturn\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmissing\\-noreturn[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"bce7a27d222a",1248822672,"Add support for -Wmissing-noreturn."}, | [i]={"bce7a27d222a",1248822672,"Add support for -Wmissing-noreturn."}, | ||
[j]={{ | [j]={{E,572,"struct CheckFallThroughDiagnostics {\n static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n if (!isVirtualMethod && !isTemplateInstantiation)\n D.diag_NeverFallThroughOrReturn = diag::warn_suggest_noreturn_function;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/return.m"]={"clang/test/SemaObjC/return.m:17:19: warning: function \'test3\' could be declared with attribute \'noreturn\' [-Wmissing-noreturn]","clang/test/SemaObjC/return.m:47:16: warning: method \'method\' could be declared with attribute \'noreturn\' [-Wmissing-noreturn]"} | |||
} | |||
}, | }, | ||
["warn_superclass_variable_sized_type_not_at_end"]={ | ["warn_superclass_variable_sized_type_not_at_end"]={ | ||
[ | [g]="field A can overwrite instance variable B with variable sized type C in superclass D [-Wobjc-flexible-array]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,"objc-flexible-array"}, | ||
[ | [o]="objc-flexible-array", | ||
[ | [e]="field %0 can overwrite instance variable %1 with variable sized type %2 in superclass %3", | ||
[ | [f]=m, | ||
[ | [a]="field (.*?) can overwrite instance variable (.*?) with variable sized type (.*?) in superclass (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-flexible\\-array[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{P,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();"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/flexible-array.m"]={"clang/test/SemaObjC/flexible-array.m:247:7: warning: field \'last\' can overwrite instance variable \'flexible\' with variable sized type \'char[]\' in superclass \'FlexibleArrayMemberBase\' [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:254:7: warning: field \'last\' can overwrite instance variable \'flexible\' with variable sized type \'char[]\' in superclass \'FlexibleArrayMemberBase\' [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:261:7: warning: field \'last\' can overwrite instance variable \'flexible\' with variable sized type \'char[]\' in superclass \'FlexibleArrayMemberBase\' [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:269:13: warning: field \'count\' can overwrite instance variable \'flexible\' with variable sized type \'char[]\' in superclass \'FlexibleArrayMemberBase\' [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:273:7: warning: field \'last\' can overwrite instance variable \'flexible\' with variable sized type \'char[]\' in superclass \'FlexibleArrayMemberBase\' [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:286:7: warning: field \'last\' can overwrite instance variable \'flexible\' with variable sized type \'char[]\' in superclass \'FlexibleArrayMemberBase\' [-Wobjc-flexible-array]"} | |||
} | |||
}, | }, | ||
["warn_suspicious_bzero_size"]={ | ["warn_suspicious_bzero_size"]={ | ||
[ | [g]="\'size\' argument to bzero is \'0\' [-Wsuspicious-bzero]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"suspicious-bzero","suspicious-memaccess"}, | ||
[ | [o]="suspicious-bzero", | ||
[ | [e]="\'size\' argument to bzero is \'0\'", | ||
[ | [f]=m, | ||
[ | [a]="\'size\' argument to bzero is \'0\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wsuspicious\\-bzero[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"}, | [i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"}, | ||
[j]={{ | [j]={{y,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/transpose-memset.c"]={"clang/test/Sema/transpose-memset.c:29:14: warning: \'size\' argument to bzero is \'0\' [-Wsuspicious-bzero]","clang/test/Sema/transpose-memset.c:30:19: warning: \'size\' argument to bzero is \'0\' [-Wsuspicious-bzero]","clang/test/Sema/transpose-memset.c:51:3: warning: \'size\' argument to bzero is \'0\' [-Wsuspicious-bzero]","clang/test/Sema/transpose-memset.c:62:26: warning: \'size\' argument to bzero is \'0\' [-Wsuspicious-bzero]"} | |||
} | |||
}, | }, | ||
["warn_suspicious_sizeof_memset"]={ | ["warn_suspicious_sizeof_memset"]={ | ||
[ | [g]="...; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"memset-transposed-args","suspicious-memaccess"}, | ||
[ | [o]="memset-transposed-args", | ||
[ | [e]="%select{\'size\' argument to memset is \'0\'|setting buffer to a \'sizeof\' expression}0; did you mean to transpose the last two arguments?", | ||
[ | [f]=m, | ||
[ | [a]="(?:\'size\' argument to memset is \'0\'|setting buffer to a \'sizeof\' expression); did you mean to transpose the last two arguments\\?", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmemset\\-transposed\\-args[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"}, | [i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args"}, | ||
[j]={{ | [j]={{y,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;"},{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/transpose-memset.c"]={"clang/test/Sema/transpose-memset.c:12:32: warning: \'size\' argument to memset is \'0\'; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:13:17: warning: setting buffer to a \'sizeof\' expression; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:14:32: warning: \'size\' argument to memset is \'0\'; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:15:28: warning: \'size\' argument to memset is \'0\'; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:16:15: warning: setting buffer to a \'sizeof\' expression; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:17:28: warning: \'size\' argument to memset is \'0\'; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:18:15: warning: setting buffer to a \'sizeof\' expression; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:19:15: warning: setting buffer to a \'sizeof\' expression; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:20:15: warning: setting buffer to a \'sizeof\' expression; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:38:17: warning: setting buffer to a \'sizeof\' expression; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:51:3: warning: \'size\' argument to memset is \'0\'; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:61:30: warning: \'size\' argument to memset is \'0\'; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]"} | |||
} | |||
}, | }, | ||
["warn_sycl_kernel_invalid_template_param_type"]={ | ["warn_sycl_kernel_invalid_template_param_type"]={ | ||
[ | [g]="template parameter of a function template with the \'sycl_kernel\' attribute cannot be a non-type template parameter [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="template parameter of a function template with the \'sycl_kernel\' attribute cannot be a non-type template parameter", | ||
[ | [f]=m, | ||
[ | [a]="template parameter of a function template with the \'sycl_kernel\' attribute cannot be a non\\-type template parameter", | ||
[ | [b]=V, | ||
[ | [h]=x, | ||
[i]={ | [i]={jc,1573050950,pc}, | ||
[j]={{ | [j]={{C,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);"}}, | ||
[p]={ | |||
["clang/test/SemaSYCL/kernel-attribute.cpp"]={"clang/test/SemaSYCL/kernel-attribute.cpp:24:35: warning: template parameter of a function template with the \'sycl_kernel\' attribute cannot be a non-type template parameter [-Wignored-attributes]","clang/test/SemaSYCL/kernel-attribute.cpp:26:29: warning: template parameter of a function template with the \'sycl_kernel\' attribute cannot be a non-type template parameter [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_sycl_kernel_num_of_function_params"]={ | ["warn_sycl_kernel_num_of_function_params"]={ | ||
[ | [g]="function template with \'sycl_kernel\' attribute must have a single parameter [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="function template with \'sycl_kernel\' attribute must have a single parameter", | ||
[ | [f]=m, | ||
[ | [a]="function template with \'sycl_kernel\' attribute must have a single parameter", | ||
[ | [b]=V, | ||
[ | [h]=x, | ||
[i]={ | [i]={jc,1573050950,pc}, | ||
[j]={{ | [j]={{C,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);"}}, | ||
[p]={ | |||
["clang/test/SemaSYCL/kernel-attribute.cpp"]={"clang/test/SemaSYCL/kernel-attribute.cpp:36:35: warning: function template with \'sycl_kernel\' attribute must have a single parameter [-Wignored-attributes]","clang/test/SemaSYCL/kernel-attribute.cpp:38:29: warning: function template with \'sycl_kernel\' attribute must have a single parameter [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_sycl_kernel_num_of_template_params"]={ | ["warn_sycl_kernel_num_of_template_params"]={ | ||
[ | [g]="\'sycl_kernel\' attribute only applies to a function template with at least two template parameters [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="\'sycl_kernel\' attribute only applies to a function template with at least two template parameters", | ||
[ | [f]=m, | ||
[ | [a]="\'sycl_kernel\' attribute only applies to a function template with at least two template parameters", | ||
[ | [b]=V, | ||
[ | [h]=x, | ||
[i]={ | [i]={jc,1573050950,pc}, | ||
[j]={{ | [j]={{C,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);"}}, | ||
[p]={ | |||
["clang/test/SemaSYCL/kernel-attribute.cpp"]={"clang/test/SemaSYCL/kernel-attribute.cpp:18:35: warning: \'sycl_kernel\' attribute only applies to a function template with at least two template parameters [-Wignored-attributes]","clang/test/SemaSYCL/kernel-attribute.cpp:20:29: warning: \'sycl_kernel\' attribute only applies to a function template with at least two template parameters [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_sycl_kernel_return_type"]={ | ["warn_sycl_kernel_return_type"]={ | ||
[ | [g]="function template with \'sycl_kernel\' attribute must have a \'void\' return type [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="function template with \'sycl_kernel\' attribute must have a \'void\' return type", | ||
[ | [f]=m, | ||
[ | [a]="function template with \'sycl_kernel\' attribute must have a \'void\' return type", | ||
[ | [b]=V, | ||
[ | [h]=x, | ||
[i]={ | [i]={jc,1573050950,pc}, | ||
[j]={{ | [j]={{C,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);"}}, | ||
[p]={ | |||
["clang/test/SemaSYCL/kernel-attribute.cpp"]={"clang/test/SemaSYCL/kernel-attribute.cpp:30:34: warning: function template with \'sycl_kernel\' attribute must have a \'void\' return type [-Wignored-attributes]","clang/test/SemaSYCL/kernel-attribute.cpp:32:28: warning: function template with \'sycl_kernel\' attribute must have a \'void\' return type [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_sync_fetch_and_nand_semantics_change"]={ | ["warn_sync_fetch_and_nand_semantics_change"]={ | ||
[ | [g]="the semantics of this intrinsic changed with GCC version 4.4 - the newer semantics are provided here [-Wsync-fetch-and-nand-semantics-changed]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"sync-fetch-and-nand-semantics-changed"}, | ||
[ | [o]="sync-fetch-and-nand-semantics-changed", | ||
[ | [e]="the semantics of this intrinsic changed with GCC version 4.4 - the newer semantics are provided here", | ||
[ | [f]=m, | ||
[ | [a]="the semantics of this intrinsic changed with GCC version 4\\.4 \\- the newer semantics are provided here", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wsync\\-fetch\\-and\\-nand\\-semantics\\-changed[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"d2208b59cfaa",1412283230,"Add __sync_fetch_and_nand (again)"}, | [i]={"d2208b59cfaa",1412283230,"Add __sync_fetch_and_nand (again)"}, | ||
[j]={{ | [j]={{y,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();"}}, | ||
[p]={ | |||
["clang/test/CodeGen/atomic.c"]={"clang/test/CodeGen/atomic.c:60:40: warning: the semantics of this intrinsic changed with GCC version 4.4 - the newer semantics are provided here [-Wsync-fetch-and-nand-semantics-changed]","clang/test/CodeGen/atomic.c:78:39: warning: the semantics of this intrinsic changed with GCC version 4.4 - the newer semantics are provided here [-Wsync-fetch-and-nand-semantics-changed]"} | |||
} | |||
}, | }, | ||
["warn_sync_op_misaligned"]={ | ["warn_sync_op_misaligned"]={ | ||
[ | [g]="__sync builtin operation MUST have natural alignment (consider using __atomic). [-Wsync-alignment]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"sync-alignment"}, | ||
[ | [o]="sync-alignment", | ||
[ | [e]="__sync builtin operation MUST have natural alignment (consider using __atomic).", | ||
[ | [f]=m, | ||
[ | [a]="__sync builtin operation MUST have natural alignment \\(consider using __atomic\\)\\.", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wsync\\-alignment[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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",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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/CodeGen/SystemZ/sync-builtins-i128-8Al.c"]={"clang/test/CodeGen/SystemZ/sync-builtins-i128-8Al.c:11:10: warning: __sync builtin operation MUST have natural alignment (consider using __atomic). [-Wsync-alignment]","clang/test/CodeGen/SystemZ/sync-builtins-i128-8Al.c:16:10: warning: __sync builtin operation MUST have natural alignment (consider using __atomic). [-Wsync-alignment]","clang/test/CodeGen/SystemZ/sync-builtins-i128-8Al.c:21:10: warning: __sync builtin operation MUST have natural alignment (consider using __atomic). [-Wsync-alignment]","clang/test/CodeGen/SystemZ/sync-builtins-i128-8Al.c:26:3: warning: __sync builtin operation MUST have natural alignment (consider using __atomic). [-Wsync-alignment]"} | |||
} | |||
}, | }, | ||
["warn_taking_address_of_packed_member"]={ | ["warn_taking_address_of_packed_member"]={ | ||
[ | [g]="taking address of packed member A of class or structure B may result in an unaligned pointer value [-Waddress-of-packed-member]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"address-of-packed-member"}, | ||
[ | [o]="address-of-packed-member", | ||
[ | [e]="taking address of packed member %0 of class or structure %q1 may result in an unaligned pointer value", | ||
[ | [f]=m, | ||
[ | [a]="taking address of packed member (.*?) of class or structure (.*?) may result in an unaligned pointer value", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Waddress\\-of\\-packed\\-member[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"ac6617b288ed",1465832500,"Warn when taking address of a packed member"}, | [i]={"ac6617b288ed",1465832500,"Warn when taking address of a packed member"}, | ||
[j]={{ | [j]={{y,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/address-packed.c"]={"clang/test/Sema/address-packed.c:40:9: warning: taking address of packed member \'x\' of class or structure \'Arguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:52:9: warning: taking address of packed member \'x\' of class or structure \'UnionArguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:61:9: warning: taking address of packed member \'x\' of class or structure \'Arguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:71:9: warning: taking address of packed member \'x\' of class or structure \'Arguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:81:10: warning: taking address of packed member \'x\' of class or structure \'Arguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:96:11: warning: taking address of packed member \'i\' of class or structure \'S1\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:108:11: warning: taking address of packed member \'inner\' of class or structure \'S2\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:117:11: warning: taking address of packed member \'inner\' of class or structure \'S2_a\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:128:11: warning: taking address of packed member \'inner\' of class or structure \'S3\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:139:11: warning: taking address of packed member \'i\' of class or structure \'S4::struct (unnamed at clang/test/Sema/address-packed.c:133:3)\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:151:11: warning: taking address of packed member \'i\' of class or structure \'S5::struct (unnamed at clang/test/Sema/address-packed.c:144:3)\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:184:13: warning: taking address of packed member \'x\' of class or structure \'TypedefStructArguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:188:13: warning: taking address of packed member \'x\' of class or structure \'TypedefStructArguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:192:13: warning: taking address of packed member \'x\' of class or structure \'TypedefUnionArguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:203:11: warning: taking address of packed member \'x\' of class or structure \'S6::union (anonymous at clang/test/Sema/address-packed.c:196:3)\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:218:9: warning: taking address of packed member \'d\' of class or structure \'S6a\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:282:10: warning: taking address of packed member \'x\' of class or structure \'S9\' may result in an unaligned pointer value [-Waddress-of-packed-member]"} | |||
} | |||
}, | }, | ||
["warn_target_clone_duplicate_options"]={ | ["warn_target_clone_duplicate_options"]={ | ||
[ | [g]="version list contains duplicate entries [-Wfunction-multiversion]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Zb}, | ||
[ | [o]=Zb, | ||
[ | [e]="version list contains duplicate entries", | ||
[ | [f]=m, | ||
[ | [a]="version list contains duplicate entries", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wfunction\\-multiversion[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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]={{ | [j]={{C,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);"},{C,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);"},{C,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:41:50: warning: version list contains duplicate entries [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:43:58: warning: version list contains duplicate entries [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:45:55: warning: version list contains duplicate entries [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:48:41: warning: version list contains duplicate entries [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:48:62: warning: version list contains duplicate entries [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:51:50: warning: version list contains duplicate entries [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:72:52: warning: version list contains duplicate entries [-Wfunction-multiversion]"} | |||
} | |||
}, | }, | ||
["warn_target_clone_mixed_values"]={ | ["warn_target_clone_mixed_values"]={ | ||
[ | [g]="mixing \'target_clones\' specifier mechanisms is permitted for GCC compatibility; use a comma separated sequence of string literals, or a string literal containing a comma-separated list of versions [-Wtarget-clones-mixed-specifiers]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Zb,"target-clones-mixed-specifiers"}, | ||
[ | [o]="target-clones-mixed-specifiers", | ||
[ | [e]="mixing \'target_clones\' specifier mechanisms is permitted for GCC compatibility; use a comma separated sequence of string literals, or a string literal containing a comma-separated list of versions", | ||
[ | [f]=m, | ||
[ | [a]="mixing \'target_clones\' specifier mechanisms is permitted for GCC compatibility; use a comma separated sequence of string literals, or a string literal containing a comma\\-separated list of versions", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtarget\\-clones\\-mixed\\-specifiers[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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]={{ | [j]={{C,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-target-clones.c"]={"clang/test/Sema/attr-target-clones.c:49:20: warning: mixing \'target_clones\' specifier mechanisms is permitted for GCC compatibility; use a comma separated sequence of string literals, or a string literal containing a comma-separated list of versions [-Wtarget-clones-mixed-specifiers]"} | |||
} | |||
}, | }, | ||
["warn_target_clone_no_impact_options"]={ | ["warn_target_clone_no_impact_options"]={ | ||
[ | [g]="version list contains entries that don\'t impact code generation [-Wfunction-multiversion]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Zb}, | ||
[ | [o]=Zb, | ||
[ | [e]="version list contains entries that don\'t impact code generation", | ||
[ | [f]=m, | ||
[ | [a]="version list contains entries that don\'t impact code generation", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wfunction\\-multiversion[^\\]]*\\]", | ||
[ | [h]=x, | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[j]={{ | [j]={{C,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:8:36: warning: version list contains entries that don\'t impact code generation [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:27:35: warning: version list contains entries that don\'t impact code generation [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:59:36: warning: version list contains entries that don\'t impact code generation [-Wfunction-multiversion]"} | |||
} | |||
}, | }, | ||
["warn_target_override_arm64ec"]={ | ["warn_target_override_arm64ec"]={ | ||
[ | [g]="/arm64EC has been overridden by specified target: A; option ignored [-Woption-ignored]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"option-ignored"}, | ||
[ | [o]="option-ignored", | ||
[ | [e]="/arm64EC has been overridden by specified target: %0; option ignored", | ||
[ | [f]=m, | ||
[ | [a]="\\/arm64EC has been overridden by specified target\\: (.*?); option ignored", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Woption\\-ignored[^\\]]*\\]", | ||
[ | [h]=x, | ||
[i]={"b0fff3db6ada",1664803233,"[ARM64EC][clang-cl] Add /arm64EC flag"}, | [i]={"b0fff3db6ada",1664803233,"[ARM64EC][clang-cl] Add /arm64EC flag"}, | ||
[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();"}} | [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"]={ | ||
[ | [g]="mismatch between architecture and environment in target triple \'A\'; did you mean \'B\'? [-Winvalid-command-line-argument]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"invalid-command-line-argument"}, | ||
[ | [o]="invalid-command-line-argument", | ||
[ | [e]="mismatch between architecture and environment in target triple \'%0\'; did you mean \'%1\'?", | ||
[ | [f]=m, | ||
[ | [a]="mismatch between architecture and environment in target triple \'(.*?)\'; did you mean \'(.*?)\'\\?", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Winvalid\\-command\\-line\\-argument[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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",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\");"}} | [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"]={ | ||
[ | [g]="ignoring \'-mabs=2008\' option because the \'A\' architecture does not support it [-Wunsupported-abs]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unsupported-abs"}, | ||
[ | [o]="unsupported-abs", | ||
[ | [e]="ignoring \'-mabs=2008\' option because the \'%0\' architecture does not support it", | ||
[ | [f]=m, | ||
[ | [a]="ignoring \'\\-mabs\\=2008\' option because the \'(.*?)\' architecture does not support it", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-abs[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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",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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/Driver/mips-mabs-warning.c"]={"clang: warning: ignoring \'-mabs=2008\' option because the \'mips32\' architecture does not support it [-Wunsupported-abs]"} | |||
} | |||
}, | }, | ||
["warn_target_unsupported_abslegacy"]={ | ["warn_target_unsupported_abslegacy"]={ | ||
[ | [g]="ignoring \'-mabs=legacy\' option because the \'A\' architecture does not support it [-Wunsupported-abs]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unsupported-abs"}, | ||
[ | [o]="unsupported-abs", | ||
[ | [e]="ignoring \'-mabs=legacy\' option because the \'%0\' architecture does not support it", | ||
[ | [f]=m, | ||
[ | [a]="ignoring \'\\-mabs\\=legacy\' option because the \'(.*?)\' architecture does not support it", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-abs[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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",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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/Driver/mips-mabs-warning.c"]={"clang: warning: ignoring \'-mabs=legacy\' option because the \'mips32r6\' architecture does not support it [-Wunsupported-abs]"} | |||
} | |||
}, | }, | ||
["warn_target_unsupported_branch_protection_attribute"]={ | ["warn_target_unsupported_branch_protection_attribute"]={ | ||
[ | [g]="ignoring the \'branch-protection\' attribute because the \'A\' architecture does not support it [-Wbranch-protection]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={rc}, | ||
[ | [o]=rc, | ||
[ | [e]="ignoring the \'branch-protection\' attribute because the \'%0\' architecture does not support it", | ||
[ | [f]=m, | ||
[ | [a]="ignoring the \'branch\\-protection\' attribute because the \'(.*?)\' architecture does not support it", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wbranch\\-protection[^\\]]*\\]", | ||
[ | [h]=Mb, | ||
[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",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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/Frontend/arm-ignore-branch-protection-option.c"]={"clang/test/Frontend/arm-ignore-branch-protection-option.c:6:48: warning: ignoring the \'branch-protection\' attribute because the \'cortex-m0\' architecture does not support it [-Wbranch-protection]"} | |||
} | |||
}, | }, | ||
["warn_target_unsupported_compact_branches"]={ | ["warn_target_unsupported_compact_branches"]={ | ||
[ | [g]="ignoring \'-mcompact-branches=\' option because the \'A\' architecture does not support it [-Wunsupported-cb]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unsupported-cb"}, | ||
[ | [o]="unsupported-cb", | ||
[ | [e]="ignoring \'-mcompact-branches=\' option because the \'%0\' architecture does not support it", | ||
[ | [f]=m, | ||
[ | [a]="ignoring \'\\-mcompact\\-branches\\=\' option because the \'(.*?)\' architecture does not support it", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-cb[^\\]]*\\]", | ||
[ | [h]=x, | ||
[i]={"d0e83bad13b1",1464362011,"[mips] Compact branch policy setting."}, | [i]={"d0e83bad13b1",1464362011,"[mips] Compact branch policy setting."}, | ||
[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;"}} | [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"]={ | ||
[ | [g]="ignoring extension \'A\' because the \'B\' architecture does not support it [-Winvalid-command-line-argument]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"invalid-command-line-argument"}, | ||
[ | [o]="invalid-command-line-argument", | ||
[ | [e]="ignoring extension \'%0\' because the \'%1\' architecture does not support it", | ||
[ | [f]=m, | ||
[ | [a]="ignoring extension \'(.*?)\' because the \'(.*?)\' architecture does not support it", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Winvalid\\-command\\-line\\-argument[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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",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));"}} | [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));"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/arm-acle-6.5.c"]={"clang: warning: ignoring extension \'sha2\' because the \'armv7-a\' architecture does not support it [-Winvalid-command-line-argument]","clang: warning: ignoring extension \'aes\' because the \'armv7-a\' architecture does not support it [-Winvalid-command-line-argument]"} | |||
} | |||
}, | }, | ||
["warn_target_unsupported_nan2008"]={ | ["warn_target_unsupported_nan2008"]={ | ||
[ | [g]="ignoring \'-mnan=2008\' option because the \'A\' architecture does not support it [-Wunsupported-nan]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unsupported-nan"}, | ||
[ | [o]="unsupported-nan", | ||
[ | [e]="ignoring \'-mnan=2008\' option because the \'%0\' architecture does not support it", | ||
[ | [f]=m, | ||
[ | [a]="ignoring \'\\-mnan\\=2008\' option because the \'(.*?)\' architecture does not support it", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-nan[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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",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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/CodeGen/mips-unsupported-nan.c"]={"clang: warning: ignoring \'-mnan=2008\' option because the \'mips64\' architecture does not support it [-Wunsupported-nan]"} | |||
} | |||
}, | }, | ||
["warn_target_unsupported_nanlegacy"]={ | ["warn_target_unsupported_nanlegacy"]={ | ||
[ | [g]="ignoring \'-mnan=legacy\' option because the \'A\' architecture does not support it [-Wunsupported-nan]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unsupported-nan"}, | ||
[ | [o]="unsupported-nan", | ||
[ | [e]="ignoring \'-mnan=legacy\' option because the \'%0\' architecture does not support it", | ||
[ | [f]=m, | ||
[ | [a]="ignoring \'\\-mnan\\=legacy\' option because the \'(.*?)\' architecture does not support it", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-nan[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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",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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/CodeGen/mips-unsupported-nan.c"]={"clang: warning: ignoring \'-mnan=legacy\' option because the \'mips64r6\' architecture does not support it [-Wunsupported-nan]"} | |||
} | |||
}, | }, | ||
["warn_tautological_bool_compare"]={ | ["warn_tautological_bool_compare"]={ | ||
[ | [g]="result of comparison of ... with ... is always A [-Wtautological-constant-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,ec,"tautological-constant-compare"}, | ||
[ | [o]="tautological-constant-compare", | ||
[ | [e]="result of comparison of %select{constant %0|true|false}1 with %select{expression of type %2|boolean expression}3 is always %4", | ||
[ | [f]=m, | ||
[ | [a]="result of comparison of (?:constant (.*?)|true|false) with (?:expression of type (.*?)|boolean expression) is always (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtautological\\-constant\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,13737,"static int classifyConstantValue(Expr *Constant) {\n // diag::warn_out_of_range_compare and diag::warn_tautological_bool_compare."},{y,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());"}}, | ||
[p]={ | |||
["clang/test/Sema/atomic-compare.c"]={"clang/test/Sema/atomic-compare.c:17:10: warning: result of comparison of constant 1 with boolean expression is always false [-Wtautological-constant-compare]"} | |||
} | |||
}, | }, | ||
["warn_tautological_compare_objc_bool"]={ | ["warn_tautological_compare_objc_bool"]={ | ||
[ | [g]="result of comparison of constant A with expression of type \'BOOL\' is always B, as the only well defined values for \'BOOL\' are YES and NO [-Wtautological-objc-bool-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,"objc-signed-char-bool",ec,"tautological-objc-bool-compare"}, | ||
[ | [o]="tautological-objc-bool-compare", | ||
[ | [e]="result of comparison of constant %0 with expression of type \'BOOL\' is always %1, as the only well defined values for \'BOOL\' are YES and NO", | ||
[ | [f]=m, | ||
[ | [a]="result of comparison of constant (.*?) with expression of type \'BOOL\' is always (.*?), as the only well defined values for \'BOOL\' are YES and NO", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtautological\\-objc\\-bool\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"fa591c370d24",1562629372,"[ObjC] Add a -Wtautological-compare warning for BOOL"}, | [i]={"fa591c370d24",1562629372,"[ObjC] Add a -Wtautological-compare warning for BOOL"}, | ||
[j]={{ | [j]={{y,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/tautological-objc-bool-compare.m"]={"clang/test/Sema/tautological-objc-bool-compare.m:12:9: warning: result of comparison of constant 1 with expression of type \'BOOL\' is always false, as the only well defined values for \'BOOL\' are YES and NO [-Wtautological-objc-bool-compare]","clang/test/Sema/tautological-objc-bool-compare.m:14:9: warning: result of comparison of constant 0 with expression of type \'BOOL\' is always false, as the only well defined values for \'BOOL\' are YES and NO [-Wtautological-objc-bool-compare]","clang/test/Sema/tautological-objc-bool-compare.m:15:9: warning: result of comparison of constant 0 with expression of type \'BOOL\' is always true, as the only well defined values for \'BOOL\' are YES and NO [-Wtautological-objc-bool-compare]","clang/test/Sema/tautological-objc-bool-compare.m:18:9: warning: result of comparison of constant YES with expression of type \'BOOL\' is always false, as the only well defined values for \'BOOL\' are YES and NO [-Wtautological-objc-bool-compare]","clang/test/Sema/tautological-objc-bool-compare.m:20:9: warning: result of comparison of constant NO with expression of type \'BOOL\' is always false, as the only well defined values for \'BOOL\' are YES and NO [-Wtautological-objc-bool-compare]","clang/test/Sema/tautological-objc-bool-compare.m:22:9: warning: result of comparison of constant NO with expression of type \'BOOL\' is always true, as the only well defined values for \'BOOL\' are YES and NO [-Wtautological-objc-bool-compare]"} | |||
} | |||
}, | }, | ||
["warn_tautological_compare_value_range"]={ | ["warn_tautological_compare_value_range"]={ | ||
[ | [g]="result of comparison of ... A ... is always B [-Wtautological-value-range-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Pc,"tautological-value-range-compare"}, | ||
[ | [o]="tautological-value-range-compare", | ||
[ | [e]="result of comparison of %select{%4|%1-bit %select{signed|unsigned}2 value}0 %3 %select{%1-bit %select{signed|unsigned}2 value|%4}0 is always %5", | ||
[ | [f]=m, | ||
[ | [a]="result of comparison of (?:(.*?)|(.*?)\\-bit (?:signed|unsigned) value) (.*?) (?:(.*?)\\-bit (?:signed|unsigned) value|(.*?)) is always (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtautological\\-value\\-range\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Sb,1582847864,Nb}, | ||
[j]={{ | [j]={{y,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/tautological-constant-compare.c"]={"clang/test/Sema/tautological-constant-compare.c:560:11: warning: result of comparison of 3-bit signed value < 4 is always true [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:562:11: warning: result of comparison of 3-bit unsigned value < 8 is always true [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:564:11: warning: result of comparison of 3-bit signed value < 4 is always true [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:566:11: warning: result of comparison of 3-bit unsigned value < 8 is always true [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:574:18: warning: result of comparison of 8-bit unsigned value < 0 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:593:34: warning: result of comparison of 2-bit unsigned value > 3 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:608:32: warning: result of comparison of 15-bit unsigned value > 32767 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:614:17: warning: result of comparison of 6-bit signed value > 31 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:621:21: warning: result of comparison of 4-bit signed value < -8 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:623:21: warning: result of comparison of 4-bit signed value > 7 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:628:21: warning: result of comparison of 5-bit signed value < -16 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:629:21: warning: result of comparison of 5-bit signed value > 15 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:632:21: warning: result of comparison of 4-bit signed value > 7 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:633:21: warning: result of comparison of 4-bit signed value < -8 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:635:22: warning: result of comparison of 5-bit signed value < -16 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:648:15: warning: result of comparison of 3-bit signed value > 3 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:652:15: warning: result of comparison of 3-bit signed value < -4 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:656:15: warning: result of comparison of 2-bit unsigned value > 3 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:657:15: warning: result of comparison of 2-bit unsigned value < 0 is always false [-Wtautological-value-range-compare]"} | |||
} | |||
}, | }, | ||
["warn_tautological_constant_compare"]={ | ["warn_tautological_constant_compare"]={ | ||
[ | [g]="result of comparison ... A ... is always B [-Wtautological-type-limit-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Pc,"tautological-type-limit-compare","type-limits"}, | ||
[ | [o]="tautological-type-limit-compare", | ||
[ | [e]="result of comparison %select{%3|%1}0 %2 %select{%1|%3}0 is always %4", | ||
[ | [f]=m, | ||
[ | [a]="result of comparison (?:(.*?)|(.*?)) (.*?) (?:(.*?)|(.*?)) is always (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtautological\\-type\\-limit\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/compare.cpp"]={"clang/test/SemaCXX/compare.cpp:249:11: warning: result of comparison \'short\' > 4294967295 is always false [-Wtautological-type-limit-compare]","clang/test/SemaCXX/compare.cpp:250:11: warning: result of comparison \'short\' <= 4294967295 is always true [-Wtautological-type-limit-compare]"} | |||
} | |||
}, | }, | ||
["warn_tautological_overlap_comparison"]={ | ["warn_tautological_overlap_comparison"]={ | ||
[ | [g]="overlapping comparisons always evaluate to ... [-Wtautological-overlap-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,ec,"tautological-overlap-compare"}, | ||
[ | [o]="tautological-overlap-compare", | ||
[ | [e]="overlapping comparisons always evaluate to %select{false|true}0", | ||
[ | [f]=m, | ||
[ | [a]="overlapping comparisons always evaluate to (?:false|true)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtautological\\-overlap\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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;"},{E,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); }"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-overlap.c"]={ | |||
[1]="clang/test/Sema/warn-overlap.c:70:21: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[2]="clang/test/Sema/warn-overlap.c:69:21: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[3]="clang/test/Sema/warn-overlap.c:64:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[4]="clang/test/Sema/warn-overlap.c:63:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[5]="clang/test/Sema/warn-overlap.c:62:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[6]="clang/test/Sema/warn-overlap.c:61:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[7]="clang/test/Sema/warn-overlap.c:60:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[8]="clang/test/Sema/warn-overlap.c:59:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[9]="clang/test/Sema/warn-overlap.c:54:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[10]="clang/test/Sema/warn-overlap.c:52:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[11]="clang/test/Sema/warn-overlap.c:50:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[12]="clang/test/Sema/warn-overlap.c:49:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[13]="clang/test/Sema/warn-overlap.c:46:13: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[14]="clang/test/Sema/warn-overlap.c:45:13: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[15]="clang/test/Sema/warn-overlap.c:43:13: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[16]="clang/test/Sema/warn-overlap.c:42:13: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[17]="clang/test/Sema/warn-overlap.c:41:13: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[18]="clang/test/Sema/warn-overlap.c:40:13: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[19]="clang/test/Sema/warn-overlap.c:37:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[20]="clang/test/Sema/warn-overlap.c:36:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[21]="clang/test/Sema/warn-overlap.c:35:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[22]="clang/test/Sema/warn-overlap.c:34:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[23]="clang/test/Sema/warn-overlap.c:32:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[24]="clang/test/Sema/warn-overlap.c:31:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[25]="clang/test/Sema/warn-overlap.c:28:13: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[26]="clang/test/Sema/warn-overlap.c:27:13: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[27]="clang/test/Sema/warn-overlap.c:23:13: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[28]="clang/test/Sema/warn-overlap.c:22:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[29]="clang/test/Sema/warn-overlap.c:83:21: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[30]="clang/test/Sema/warn-overlap.c:82:21: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[31]="clang/test/Sema/warn-overlap.c:112:22: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[32]="clang/test/Sema/warn-overlap.c:110:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[33]="clang/test/Sema/warn-overlap.c:108:22: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[34]="clang/test/Sema/warn-overlap.c:106:16: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[35]="clang/test/Sema/warn-overlap.c:104:15: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[36]="clang/test/Sema/warn-overlap.c:102:13: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[37]="clang/test/Sema/warn-overlap.c:127:17: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[38]="clang/test/Sema/warn-overlap.c:124:18: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[39]="clang/test/Sema/warn-overlap.c:122:18: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[40]="clang/test/Sema/warn-overlap.c:119:17: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[41]="clang/test/Sema/warn-overlap.c:117:17: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[42]="clang/test/Sema/warn-overlap.c:142:16: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[43]="clang/test/Sema/warn-overlap.c:139:17: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[44]="clang/test/Sema/warn-overlap.c:137:17: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[45]="clang/test/Sema/warn-overlap.c:134:16: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]", | |||
[46]="clang/test/Sema/warn-overlap.c:132:16: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[47]="clang/test/Sema/warn-overlap.c:149:17: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[48]="clang/test/Sema/warn-overlap.c:147:16: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[49]="clang/test/Sema/warn-overlap.c:154:17: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[50]="clang/test/Sema/warn-overlap.c:173:19: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]", | |||
[51]="clang/test/Sema/warn-overlap.c:171:18: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]" | |||
} | |||
} | |||
}, | }, | ||
["warn_tcb_enforcement_violation"]={ | ["warn_tcb_enforcement_violation"]={ | ||
[ | [g]="calling A is a violation of trusted computing base \'B\' [-Wtcb-enforcement]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"tcb-enforcement"}, | ||
[ | [o]="tcb-enforcement", | ||
[ | [e]="calling %0 is a violation of trusted computing base \'%1\'", | ||
[ | [f]=m, | ||
[ | [a]="calling (.*?) is a violation of trusted computing base \'(.*?)\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtcb\\-enforcement[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-enforce-tcb.c"]={"clang/test/Sema/attr-enforce-tcb.c:18:5: warning: calling \'foo3\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:19:5: warning: calling \'foo4\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:22:5: warning: calling \'foo7\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:39:5: warning: calling \'foo1\' is a violation of trusted computing base \'bar2\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:40:5: warning: calling \'foo4\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:42:5: warning: calling \'foo7\' is a violation of trusted computing base \'bar2\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:42:5: warning: calling \'foo7\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:52:3: warning: calling \'foo1\' is a violation of trusted computing base \'bar2\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:52:3: warning: calling \'foo1\' is a violation of trusted computing base \'bar3\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:55:3: warning: calling \'foo3\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:55:3: warning: calling \'foo3\' is a violation of trusted computing base \'bar2\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:55:3: warning: calling \'foo3\' is a violation of trusted computing base \'bar3\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:59:3: warning: calling \'foo4\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:59:3: warning: calling \'foo4\' is a violation of trusted computing base \'bar3\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:62:3: warning: calling \'foo7\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:62:3: warning: calling \'foo7\' is a violation of trusted computing base \'bar2\' [-Wtcb-enforcement]"} | |||
} | |||
}, | }, | ||
["warn_template_arg_negative"]={ | ["warn_template_arg_negative"]={ | ||
[ | [g]="non-type template argument with value \'A\' converted to \'B\' for unsigned template parameter of type C [-Wconversion]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Fb,Wb}, | ||
[ | [o]=Fb, | ||
[ | [e]="non-type template argument with value \'%0\' converted to \'%1\' for unsigned template parameter of type %2", | ||
[ | [f]=m, | ||
[ | [a]="non\\-type template argument with value \'(.*?)\' converted to \'(.*?)\' for unsigned template parameter of type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wconversion[^\\]]*\\]", | ||
[ | [h]=Pb, | ||
[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]={{ | [j]={{Qc,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();"}}, | ||
[p]={ | |||
["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:105:12: warning: non-type template argument with value \'-10\' converted to \'4294967286\' for unsigned template parameter of type \'unsigned int\' [-Wconversion]"} | |||
} | |||
}, | }, | ||
["warn_template_arg_too_large"]={ | ["warn_template_arg_too_large"]={ | ||
[ | [g]="non-type template argument value \'A\' truncated to \'B\' for template parameter of type C [-Wconversion]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Fb,Wb}, | ||
[ | [o]=Fb, | ||
[ | [e]="non-type template argument value \'%0\' truncated to \'%1\' for template parameter of type %2", | ||
[ | [f]=m, | ||
[ | [a]="non\\-type template argument value \'(.*?)\' truncated to \'(.*?)\' for template parameter of type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wconversion[^\\]]*\\]", | ||
[ | [h]=Pb, | ||
[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]={{ | [j]={{Qc,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();"}}, | ||
[p]={ | |||
["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:100:10: warning: non-type template argument value \'256\' truncated to \'0\' for template parameter of type \'unsigned char\' [-Wconversion]","clang/test/SemaTemplate/temp_arg_nontype.cpp:111:16: warning: non-type template argument value \'-129\' truncated to \'127\' for template parameter of type \'signed char\' [-Wconversion]","clang/test/SemaTemplate/temp_arg_nontype.cpp:113:16: warning: non-type template argument value \'128\' truncated to \'-128\' for template parameter of type \'signed char\' [-Wconversion]","clang/test/SemaTemplate/temp_arg_nontype.cpp:114:16: warning: non-type template argument value \'128\' truncated to \'-128\' for template parameter of type \'signed char\' [-Wconversion]","clang/test/SemaTemplate/temp_arg_nontype.cpp:207:34: warning: non-type template argument value \'9223372036854775807\' truncated to \'-1\' for template parameter of type \'int\' [-Wconversion]","clang/test/SemaTemplate/temp_arg_nontype.cpp:258:21: warning: non-type template argument value \'2147483648\' truncated to \'-2147483648\' for template parameter of type \'int\' [-Wconversion]"} | |||
} | |||
}, | }, | ||
["warn_template_export_unsupported"]={ | ["warn_template_export_unsupported"]={ | ||
[ | [g]="exported templates are unsupported", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="exported templates are unsupported", | ||
[ | [f]=m, | ||
[ | [a]="exported templates are unsupported", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{Qc,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);"}}, | ||
[p]={ | |||
["clang/test/Parser/cxx-template-decl.cpp"]={"clang/test/Parser/cxx-template-decl.cpp:12:1: warning: exported templates are unsupported"} | |||
} | |||
}, | }, | ||
["warn_template_qualified_friend_ignored"]={ | ["warn_template_qualified_friend_ignored"]={ | ||
[ | [g]="dependent nested name specifier \'A\' for friend template declaration is not supported; ignoring this friend declaration [-Wunsupported-friend]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unsupported-friend"}, | ||
[ | [o]="unsupported-friend", | ||
[ | [e]="dependent nested name specifier \'%0\' for friend template declaration is not supported; ignoring this friend declaration", | ||
[ | [f]=m, | ||
[ | [a]="dependent nested name specifier \'(.*?)\' for friend template declaration is not supported; ignoring this friend declaration", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-friend[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{Qc,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();"}}, | ||
[p]={ | |||
["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:238:62: warning: dependent nested name specifier \'A<S>::\' for friend template declaration is not supported; ignoring this friend declaration [-Wunsupported-friend]"} | |||
} | |||
}, | }, | ||
["warn_template_qualified_friend_unsupported"]={ | ["warn_template_qualified_friend_unsupported"]={ | ||
[ | [g]="dependent nested name specifier \'A\' for friend class declaration is not supported; turning off access control for B [-Wunsupported-friend]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unsupported-friend"}, | ||
[ | [o]="unsupported-friend", | ||
[ | [e]="dependent nested name specifier \'%0\' for friend class declaration is not supported; turning off access control for %1", | ||
[ | [f]=m, | ||
[ | [a]="dependent nested name specifier \'(.*?)\' for friend class declaration is not supported; turning off access control for (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-friend[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{ab,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);"},{ab,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);"}}, | ||
[p]={ | |||
["clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp"]={"clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp:39:44: warning: dependent nested name specifier \'B<S>::\' for friend class declaration is not supported; turning off access control for \'A\' [-Wunsupported-friend]","clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp:77:43: warning: dependent nested name specifier \'A<T>::\' for friend class declaration is not supported; turning off access control for \'(unnamed struct at clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp:51:1)\' [-Wunsupported-friend]"} | |||
} | |||
}, | }, | ||
["warn_template_spec_extra_headers"]={ | ["warn_template_spec_extra_headers"]={ | ||
[ | [g]="extraneous template parameter list in template specialization", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="extraneous template parameter list in template specialization", | ||
[ | [f]=m, | ||
[ | [a]="extraneous template parameter list in template specialization", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[i]={"65911498eff3",1258978305,"Tolerate extraneous \"template<>\" headers better, downgrading the"}, | [i]={"65911498eff3",1258978305,"Tolerate extraneous \"template<>\" headers better, downgrading the"}, | ||
[j]={{ | [j]={{Qc,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());"}}, | ||
[p]={ | |||
["clang/test/SemaTemplate/temp_explicit.cpp"]={"clang/test/SemaTemplate/temp_explicit.cpp:131:1: warning: extraneous template parameter list in template specialization"} | |||
} | |||
}, | }, | ||
["warn_tentative_incomplete_array"]={ | ["warn_tentative_incomplete_array"]={ | ||
[ | [g]="tentative array definition assumed to have one element", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="tentative array definition assumed to have one element", | ||
[ | [f]=m, | ||
[ | [a]="tentative array definition assumed to have one element", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{W,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/extern-redecl.c"]={"clang/test/Sema/extern-redecl.c:4:12: warning: tentative array definition assumed to have one element","clang/test/Sema/extern-redecl.c:23:12: warning: tentative array definition assumed to have one element"} | |||
} | |||
}, | }, | ||
["warn_this_bool_conversion"]={ | ["warn_this_bool_conversion"]={ | ||
[ | [g]="\'this\' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true [-Wundefined-bool-conversion]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"bool-conversion","bool-conversions",Fb,Wb,"undefined-bool-conversion"}, | ||
[ | [o]="undefined-bool-conversion", | ||
[ | [e]="\'this\' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true", | ||
[ | [f]=m, | ||
[ | [a]="\'this\' pointer cannot be null in well\\-defined C\\+\\+ code; pointer may be assumed to always convert to true", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wundefined\\-bool\\-conversion[^\\]]*\\]", | ||
[ | [h]=Pb, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-undefined-bool-conversion.cpp"]={"clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:19:9: warning: \'this\' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true [-Wundefined-bool-conversion]","clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:22:10: warning: \'this\' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true [-Wundefined-bool-conversion]","clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:117:14: warning: \'this\' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true [-Wundefined-bool-conversion]"} | |||
} | |||
}, | }, | ||
["warn_this_null_compare"]={ | ["warn_this_null_compare"]={ | ||
[ | [g]="\'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to ... [-Wtautological-undefined-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,ec,"tautological-undefined-compare"}, | ||
[ | [o]="tautological-undefined-compare", | ||
[ | [e]="\'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to %select{true|false}0", | ||
[ | [f]=m, | ||
[ | [a]="\'this\' pointer cannot be null in well\\-defined C\\+\\+ code; comparison may be assumed to always evaluate to (?:true|false)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtautological\\-undefined\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-tautological-undefined-compare.cpp"]={"clang/test/SemaCXX/warn-tautological-undefined-compare.cpp:18:9: warning: \'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to false [-Wtautological-undefined-compare]","clang/test/SemaCXX/warn-tautological-undefined-compare.cpp:20:9: warning: \'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to true [-Wtautological-undefined-compare]","clang/test/SemaCXX/warn-tautological-undefined-compare.cpp:130:14: warning: \'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to true [-Wtautological-undefined-compare]","clang/test/SemaCXX/warn-tautological-undefined-compare.cpp:132:14: warning: \'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to false [-Wtautological-undefined-compare]","clang/test/SemaCXX/warn-tautological-undefined-compare.cpp:134:14: warning: \'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to true [-Wtautological-undefined-compare]","clang/test/SemaCXX/warn-tautological-undefined-compare.cpp:136:14: warning: \'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to false [-Wtautological-undefined-compare]"} | |||
} | |||
}, | }, | ||
["warn_thread_attribute_argument_not_lockable"]={ | ["warn_thread_attribute_argument_not_lockable"]={ | ||
[ | [g]="A attribute requires arguments whose type is annotated with \'capability\' attribute; type here is B [-Wthread-safety-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,Ab}, | ||
[ | [o]=Ab, | ||
[ | [e]="%0 attribute requires arguments whose type is annotated with \'capability\' attribute; type here is %1", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) attribute requires arguments whose type is annotated with \'capability\' attribute; type here is (.*?)", | ||
[ | [b]=Dc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{C,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-capabilities.cpp"]={"clang/test/Sema/attr-capabilities.cpp:13:31: warning: \'assert_capability\' attribute requires arguments whose type is annotated with \'capability\' attribute; type here is \'NotACapability *\' [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.cpp:14:31: warning: \'assert_capability\' attribute requires arguments whose type is annotated with \'capability\' attribute; type here is \'bool\' [-Wthread-safety-attributes]"} | |||
} | |||
}, | }, | ||
["warn_thread_attribute_decl_not_lockable"]={ | ["warn_thread_attribute_decl_not_lockable"]={ | ||
[ | [g]="A attribute can only be applied in a context annotated with \'capability\' attribute [-Wthread-safety-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,Ab}, | ||
[ | [o]=Ab, | ||
[ | [e]="%0 attribute can only be applied in a context annotated with \'capability\' attribute", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) attribute can only be applied in a context annotated with \'capability\' attribute", | ||
[ | [b]=Dc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{C,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-thread-safety-parsing.cpp"]={"clang/test/SemaCXX/warn-thread-safety-parsing.cpp:498:31: warning: \'acquired_after\' attribute can only be applied in a context annotated with \'capability\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:561:31: warning: \'acquired_before\' attribute can only be applied in a context annotated with \'capability\' attribute [-Wthread-safety-attributes]"} | |||
} | |||
}, | }, | ||
["warn_thread_attribute_decl_not_pointer"]={ | ["warn_thread_attribute_decl_not_pointer"]={ | ||
[ | [g]="A only applies to pointer types; type here is B [-Wthread-safety-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,Ab}, | ||
[ | [o]=Ab, | ||
[ | [e]="%0 only applies to pointer types; type here is %1", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) only applies to pointer types; type here is (.*?)", | ||
[ | [b]=Dc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{C,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-thread-safety-parsing.cpp"]={"clang/test/SemaCXX/warn-thread-safety-parsing.cpp:184:20: warning: \'pt_guarded_var\' only applies to pointer types; type here is \'int\' [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:190:20: warning: \'pt_guarded_var\' only applies to pointer types; type here is \'int\' [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:389:18: warning: \'pt_guarded_by\' only applies to pointer types; type here is \'int\' [-Wthread-safety-attributes]"} | |||
} | |||
}, | }, | ||
["warn_thread_attribute_ignored"]={ | ["warn_thread_attribute_ignored"]={ | ||
[ | [g]="ignoring A attribute because its argument is invalid [-Wthread-safety-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,Ab}, | ||
[ | [o]=Ab, | ||
[ | [e]="ignoring %0 attribute because its argument is invalid", | ||
[ | [f]=m, | ||
[ | [a]="ignoring (.*?) attribute because its argument is invalid", | ||
[ | [b]=Dc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{C,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-thread-safety-parsing.cpp"]={"clang/test/SemaCXX/warn-thread-safety-parsing.cpp:312:18: warning: ignoring \'guarded_by\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:360:22: warning: ignoring \'guarded_by\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:431:25: warning: ignoring \'pt_guarded_by\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:492:24: warning: ignoring \'acquired_after\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:555:24: warning: ignoring \'acquired_before\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:621:26: warning: ignoring \'exclusive_lock_function\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:694:26: warning: ignoring \'shared_lock_function\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:780:26: warning: ignoring \'exclusive_trylock_function\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:858:26: warning: ignoring \'shared_trylock_function\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:925:25: warning: ignoring \'unlock_function\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:1001:25: warning: ignoring \'lock_returned\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:1068:25: warning: ignoring \'locks_excluded\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:1135:26: warning: ignoring \'exclusive_locks_required\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:1203:26: warning: ignoring \'shared_locks_required\' attribute because its argument is invalid [-Wthread-safety-attributes]"} | |||
} | |||
}, | }, | ||
["warn_thread_attribute_not_on_capability_member"]={ | ["warn_thread_attribute_not_on_capability_member"]={ | ||
[ | [g]="A attribute without capability arguments refers to \'this\', but B isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,Ab}, | ||
[ | [o]=Ab, | ||
[ | [e]="%0 attribute without capability arguments refers to \'this\', but %1 isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) attribute without capability arguments refers to \'this\', but (.*?) isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute", | ||
[ | [b]=Dc, | ||
[ | [h]=q, | ||
[i]={"7ba1ab71ecf4",1537403967,"Thread Safety Analysis: warnings for attributes without arguments"}, | [i]={"7ba1ab71ecf4",1537403967,"Thread Safety Analysis: warnings for attributes without arguments"}, | ||
[j]={{ | [j]={{C,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();"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-thread-safety-parsing.cpp"]={"clang/test/SemaCXX/warn-thread-safety-parsing.cpp:594:22: warning: \'exclusive_lock_function\' attribute without capability arguments refers to \'this\', but \'ElfFoo\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:670:22: warning: \'shared_lock_function\' attribute without capability arguments refers to \'this\', but \'SlfFoo\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:746:22: warning: \'exclusive_trylock_function\' attribute without capability arguments refers to \'this\', but \'EtfFoo\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:827:22: warning: \'shared_trylock_function\' attribute without capability arguments refers to \'this\', but \'StfFoo\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:898:22: warning: \'unlock_function\' attribute without capability arguments refers to \'this\', but \'UfFoo\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:1274:25: warning: \'unlock_function\' attribute without capability arguments refers to \'this\', but \'NonSLTemplateClass\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:1294:17: warning: \'unlock_function\' attribute without capability arguments refers to \'this\', but \'SLDerived2\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:1299:17: warning: \'unlock_function\' attribute without capability arguments refers to \'this\', but \'SLDerived3\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]"} | |||
} | |||
}, | }, | ||
["warn_thread_attribute_not_on_non_static_member"]={ | ["warn_thread_attribute_not_on_non_static_member"]={ | ||
[ | [g]="A attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,Ab}, | ||
[ | [o]=Ab, | ||
[ | [e]="%0 attribute without capability arguments can only be applied to non-static methods of a class", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) attribute without capability arguments can only be applied to non\\-static methods of a class", | ||
[ | [b]=Dc, | ||
[ | [h]=q, | ||
[i]={"7ba1ab71ecf4",1537403967,"Thread Safety Analysis: warnings for attributes without arguments"}, | [i]={"7ba1ab71ecf4",1537403967,"Thread Safety Analysis: warnings for attributes without arguments"}, | ||
[j]={{ | [j]={{C,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-capabilities.c"]={"clang/test/Sema/attr-capabilities.c:40:33: warning: \'assert_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:41:34: warning: \'assert_shared_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:46:34: warning: \'acquire_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:47:34: warning: \'acquire_shared_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:53:34: warning: \'release_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:54:34: warning: \'release_shared_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:55:34: warning: \'release_generic_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:57:34: warning: \'try_acquire_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:58:34: warning: \'try_acquire_shared_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]"} | |||
} | |||
}, | }, | ||
["warn_thread_safety_beta"]={ | ["warn_thread_safety_beta"]={ | ||
[ | [g]="thread safety beta warning [-Wthread-safety-beta]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"thread-safety-beta"}, | ||
[ | [o]="thread-safety-beta", | ||
[ | [e]="thread safety beta warning", | ||
[ | [f]=m, | ||
[ | [a]="thread safety beta warning", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-beta[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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"]={ | ||
[ | [g]="thread safety verbose warning [-Wthread-safety-verbose]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"thread-safety-verbose"}, | ||
[ | [o]="thread-safety-verbose", | ||
[ | [e]="thread safety verbose warning", | ||
[ | [f]=m, | ||
[ | [a]="thread safety verbose warning", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-verbose[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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"]={ | ||
[ | [g]="A has a non-throwing exception specification but can still throw [-Wexceptions]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"exceptions"}, | ||
[ | [o]="exceptions", | ||
[ | [e]="%0 has a non-throwing exception specification but can still throw", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) has a non\\-throwing exception specification but can still throw", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wexceptions[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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;"},{E,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()))"}}, | ||
[p]={ | |||
["clang/test/CXX/except/except.spec/p11.cpp"]={"clang/test/CXX/except/except.spec/p11.cpp:5:3: warning: \'f\' has a non-throwing exception specification but can still throw [-Wexceptions]","clang/test/CXX/except/except.spec/p11.cpp:8:3: warning: \'g\' has a non-throwing exception specification but can still throw [-Wexceptions]"} | |||
} | |||
}, | }, | ||
["warn_throw_underaligned_obj"]={ | ["warn_throw_underaligned_obj"]={ | ||
[ | [g]="underaligned exception object thrown [-Wunderaligned-exception-object]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"underaligned-exception-object"}, | ||
[ | [o]="underaligned-exception-object", | ||
[ | [e]="underaligned exception object thrown", | ||
[ | [f]=m, | ||
[ | [a]="underaligned exception object thrown", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunderaligned\\-exception\\-object[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{Ub,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-overaligned-type-thrown.cpp"]={"clang/test/SemaCXX/warn-overaligned-type-thrown.cpp:53:3: warning: underaligned exception object thrown [-Wunderaligned-exception-object]"} | |||
} | |||
}, | }, | ||
["warn_transparent_union_attribute_field_size_align"]={ | ["warn_transparent_union_attribute_field_size_align"]={ | ||
[ | [g]="... of field A (B bits) does not match the ... of the first field in transparent union; transparent_union attribute ignored [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="%select{alignment|size}0 of field %1 (%2 bits) does not match the %select{alignment|size}0 of the first field in transparent union; transparent_union attribute ignored", | ||
[ | [f]=m, | ||
[ | [a]="(?:alignment|size) of field (.*?) \\((.*?) bits\\) does not match the (?:alignment|size) of the first field in transparent union; transparent_union attribute ignored", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{C,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/transparent-union.c"]={"clang/test/Sema/transparent-union.c:83:19: warning: alignment of field \'s8\' (64 bits) does not match the alignment of the first field in transparent union; transparent_union attribute ignored [-Wignored-attributes]","clang/test/Sema/transparent-union.c:88:19: warning: alignment of field \'s8\' (64 bits) does not match the alignment of the first field in transparent union; transparent_union attribute ignored [-Wignored-attributes]","clang/test/Sema/transparent-union.c:93:7: warning: size of field \'i\' (32 bits) does not match the size of the first field in transparent union; transparent_union attribute ignored [-Wignored-attributes]","clang/test/Sema/transparent-union.c:98:7: warning: size of field \'i\' (32 bits) does not match the size of the first field in transparent union; transparent_union attribute ignored [-Wignored-attributes]","clang/test/Sema/transparent-union.c:127:3: warning: alignment of field \'\' (64 bits) does not match the alignment of the first field in transparent union; transparent_union attribute ignored [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_transparent_union_attribute_floating"]={ | ["warn_transparent_union_attribute_floating"]={ | ||
[ | [g]="first field of a transparent union cannot have ... type A; transparent_union attribute ignored [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="first field of a transparent union cannot have %select{floating point|vector}0 type %1; transparent_union attribute ignored", | ||
[ | [f]=m, | ||
[ | [a]="first field of a transparent union cannot have (?:floating point|vector) type (.*?); transparent_union attribute ignored", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{C,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/transparent-union.c"]={"clang/test/Sema/transparent-union.c:102:9: warning: first field of a transparent union cannot have floating point type \'float\'; transparent_union attribute ignored [-Wignored-attributes]","clang/test/Sema/transparent-union.c:109:8: warning: first field of a transparent union cannot have vector type \'int4\' (vector of 4 \'int\' values); transparent_union attribute ignored [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_transparent_union_attribute_not_definition"]={ | ["warn_transparent_union_attribute_not_definition"]={ | ||
[ | [g]="transparent_union attribute can only be applied to a union definition; attribute ignored [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="transparent_union attribute can only be applied to a union definition; attribute ignored", | ||
[ | [f]=m, | ||
[ | [a]="transparent_union attribute can only be applied to a union definition; attribute ignored", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{C,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"]={ | ||
[ | [g]="transparent union definition must contain at least one field; transparent_union attribute ignored [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="transparent union definition must contain at least one field; transparent_union attribute ignored", | ||
[ | [f]=m, | ||
[ | [a]="transparent union definition must contain at least one field; transparent_union attribute ignored", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{C,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/transparent-union.c"]={"clang/test/Sema/transparent-union.c:105:38: warning: transparent union definition must contain at least one field; transparent_union attribute ignored [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_type_attribute_deprecated_on_decl"]={ | ["warn_type_attribute_deprecated_on_decl"]={ | ||
[ | [g]="applying attribute A to a declaration is deprecated; apply it to the type instead [-Wdeprecated-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={yb,"deprecated-attributes"}, | ||
[ | [o]="deprecated-attributes", | ||
[ | [e]="applying attribute %0 to a declaration is deprecated; apply it to the type instead", | ||
[ | [f]=m, | ||
[ | [a]="applying attribute (.*?) to a declaration is deprecated; apply it to the type instead", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-attributes[^\\]]*\\]", | ||
[ | [h]=Tb, | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[j]={{ | [j]={{C,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();"},{R,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/attr-objc-gc.m"]={"clang/test/SemaObjC/attr-objc-gc.m:22:3: warning: applying attribute \'objc_gc\' to a declaration is deprecated; apply it to the type instead [-Wdeprecated-attributes]","clang/test/SemaObjC/attr-objc-gc.m:23:15: warning: applying attribute \'objc_gc\' to a declaration is deprecated; apply it to the type instead [-Wdeprecated-attributes]"} | |||
} | |||
}, | }, | ||
["warn_type_attribute_wrong_type"]={ | ["warn_type_attribute_wrong_type"]={ | ||
[ | [g]="\'A\' only applies to ... types; type here is B [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="\'%0\' only applies to %select{function|pointer|Objective-C object or block pointer}1 types; type here is %2", | ||
[ | [f]=m, | ||
[ | [a]="\'(.*?)\' only applies to (?:function|pointer|Objective\\-C object or block pointer) types; type here is (.*?)", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[i]={"db6d85ef9272",1374260024,"Replace some existing type attribute diagnostics with a"}, | [i]={"db6d85ef9272",1374260024,"Replace some existing type attribute diagnostics with a"}, | ||
[j]={{ | [j]={{R,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;"},{R,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/stdcall-fastcall-x64.c"]={"clang/test/Sema/stdcall-fastcall-x64.c:4:20: warning: \'stdcall\' only applies to function types; type here is \'int\' [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:5:20: warning: \'fastcall\' only applies to function types; type here is \'int\' [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_type_safety_null_pointer_required"]={ | ["warn_type_safety_null_pointer_required"]={ | ||
[ | [g]="specified A type tag requires a null pointer [-Wtype-safety]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={oc}, | ||
[ | [o]=oc, | ||
[ | [e]="specified %0 type tag requires a null pointer", | ||
[ | [f]=m, | ||
[ | [a]="specified (.*?) type tag requires a null pointer", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtype\\-safety[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-type-safety-mpi-hdf5.c"]={"clang/test/Sema/warn-type-safety-mpi-hdf5.c:191:14: warning: specified mpi type tag requires a null pointer [-Wtype-safety]"} | |||
} | |||
}, | }, | ||
["warn_type_safety_type_mismatch"]={ | ["warn_type_safety_type_mismatch"]={ | ||
[ | [g]="argument type A doesn\'t match specified B type tag ... [-Wtype-safety]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={oc}, | ||
[ | [o]=oc, | ||
[ | [e]="argument type %0 doesn\'t match specified %1 type tag %select{that requires %3|}2", | ||
[ | [f]=m, | ||
[ | [a]="argument type (.*?) doesn\'t match specified (.*?) type tag (?:that requires (.*?)|)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtype\\-safety[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-type-safety.cpp"]={"clang/test/Sema/warn-type-safety.cpp:54:15: warning: argument type \'int *\' doesn\'t match specified \'mpi\' type tag that requires \'float *\' [-Wtype-safety]","clang/test/Sema/warn-type-safety.cpp:60:15: warning: argument type \'int *\' doesn\'t match specified \'mpi\' type tag that requires \'float *\' [-Wtype-safety]"} | |||
} | |||
}, | }, | ||
["warn_type_tag_for_datatype_wrong_kind"]={ | ["warn_type_tag_for_datatype_wrong_kind"]={ | ||
[ | [g]="this type tag was not designed to be used with this function [-Wtype-safety]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={oc}, | ||
[ | [o]=oc, | ||
[ | [e]="this type tag was not designed to be used with this function", | ||
[ | [f]=m, | ||
[ | [a]="this type tag was not designed to be used with this function", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtype\\-safety[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-type-safety.c"]={"clang/test/Sema/warn-type-safety.c:82:15: warning: this type tag was not designed to be used with this function [-Wtype-safety]","clang/test/Sema/warn-type-safety.c:84:15: warning: this type tag was not designed to be used with this function [-Wtype-safety]"} | |||
} | |||
}, | }, | ||
["warn_typecheck_convert_incompatible_function_pointer_strict"]={ | ["warn_typecheck_convert_incompatible_function_pointer_strict"]={ | ||
[ | [g]="incompatible function pointer types ...... [-Wincompatible-function-pointer-types-strict]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"incompatible-function-pointer-types-strict"}, | ||
[ | [o]="incompatible-function-pointer-types-strict", | ||
[ | [e]="incompatible function pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", | ||
[ | [f]=m, | ||
[ | [a]="incompatible function pointer types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-function\\-pointer\\-types\\-strict[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[j]={{ | [j]={{A,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))"},{A,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/incompatible-function-pointer-types-strict.c"]={"clang/test/Sema/incompatible-function-pointer-types-strict.c:17:6: error: incompatible function pointer types passing \'int (*)(void)\' to parameter of type \'fn_a_t\' (aka \'enum E (*)(void)\') [-Werror,-Wincompatible-function-pointer-types-strict]"} | |||
} | |||
}, | }, | ||
["warn_typecheck_function_qualifiers_ignored"]={ | ["warn_typecheck_function_qualifiers_ignored"]={ | ||
[ | [g]="\'A\' qualifier on function type B has no effect [-Wignored-qualifiers]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={x,t,Xb,Xc}, | ||
[ | [o]=Xc, | ||
[ | [e]="\'%0\' qualifier on function type %1 has no effect", | ||
[ | [f]=m, | ||
[ | [a]="\'(.*?)\' qualifier on function type (.*?) has no effect", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wignored\\-qualifiers[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{R,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);"}}, | ||
[p]={ | |||
["clang/test/CXX/drs/dr2xx.cpp"]={"clang/test/CXX/drs/dr2xx.cpp:1094:3: warning: \'const\' qualifier on function type \'f\' (aka \'int ()\') has no effect [-Wignored-qualifiers]","clang/test/CXX/drs/dr2xx.cpp:1102:11: warning: \'const\' qualifier on function type \'U\' (aka \'int ()\') has no effect [-Wignored-qualifiers]","clang/test/CXX/drs/dr2xx.cpp:1105:11: warning: \'volatile\' qualifier on function type \'U\' (aka \'int ()\') has no effect [-Wignored-qualifiers]"} | |||
} | |||
}, | }, | ||
["warn_typecheck_function_qualifiers_unspecified"]={ | ["warn_typecheck_function_qualifiers_unspecified"]={ | ||
[ | [g]="\'A\' qualifier on function type B has unspecified behavior", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="\'%0\' qualifier on function type %1 has unspecified behavior", | ||
[ | [f]=m, | ||
[ | [a]="\'(.*?)\' qualifier on function type (.*?) has unspecified behavior", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{R,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:21:1: warning: \'const\' qualifier on function type \'f\' (aka \'int (void)\') has unspecified behavior"} | |||
} | |||
}, | }, | ||
["warn_typecheck_ordered_comparison_of_function_pointers"]={ | ["warn_typecheck_ordered_comparison_of_function_pointers"]={ | ||
[ | [g]="ordered comparison of function pointers (A and B) [-Wordered-compare-function-pointers]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"ordered-compare-function-pointers"}, | ||
[ | [o]="ordered-compare-function-pointers", | ||
[ | [e]="ordered comparison of function pointers (%0 and %1)", | ||
[ | [f]=m, | ||
[ | [a]="ordered comparison of function pointers \\((.*?) and (.*?)\\)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wordered\\-compare\\-function\\-pointers[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Qb,1615397021,Ob}, | ||
[j]={{ | [j]={{A,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/compare-function-pointer.cpp"]={"clang/test/SemaCXX/compare-function-pointer.cpp:11:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp0_t\') [-Wordered-compare-function-pointers]","clang/test/SemaCXX/compare-function-pointer.cpp:12:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp0_t\') [-Wordered-compare-function-pointers]","clang/test/SemaCXX/compare-function-pointer.cpp:13:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp0_t\') [-Wordered-compare-function-pointers]","clang/test/SemaCXX/compare-function-pointer.cpp:14:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp0_t\') [-Wordered-compare-function-pointers]","clang/test/SemaCXX/compare-function-pointer.cpp:19:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\')) [-Wordered-compare-function-pointers]","clang/test/SemaCXX/compare-function-pointer.cpp:21:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\')) [-Wordered-compare-function-pointers]","clang/test/SemaCXX/compare-function-pointer.cpp:23:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\')) [-Wordered-compare-function-pointers]","clang/test/SemaCXX/compare-function-pointer.cpp:25:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\')) [-Wordered-compare-function-pointers]"} | |||
} | |||
}, | }, | ||
["warn_typecheck_reference_qualifiers"]={ | ["warn_typecheck_reference_qualifiers"]={ | ||
[ | [g]="\'A\' qualifier on reference type B has no effect [-Wignored-reference-qualifiers]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={x,t,Xb,Xc,"ignored-reference-qualifiers"}, | ||
[ | [o]="ignored-reference-qualifiers", | ||
[ | [e]="\'%0\' qualifier on reference type %1 has no effect", | ||
[ | [f]=m, | ||
[ | [a]="\'(.*?)\' qualifier on reference type (.*?) has no effect", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wignored\\-reference\\-qualifiers[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{R,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);"}}, | ||
[p]={ | |||
["clang/test/Parser/cxx0x-rvalue-reference.cpp"]={"clang/test/Parser/cxx0x-rvalue-reference.cpp:6:9: warning: \'const\' qualifier on reference type \'R\' (aka \'int &&\') has no effect [-Wignored-reference-qualifiers]"} | |||
} | |||
}, | }, | ||
["warn_typecheck_vector_element_sizes_not_equal"]={ | ["warn_typecheck_vector_element_sizes_not_equal"]={ | ||
[ | [g]="vector operands do not have the same elements sizes (A and B) [-Wvec-elem-size]", | ||
[c]= | [c]=Cb, | ||
[d]= | [d]=Hb, | ||
[ | [n]={"vec-elem-size"}, | ||
[ | [o]="vec-elem-size", | ||
[ | [e]="vector operands do not have the same elements sizes (%0 and %1)", | ||
[ | [f]=Ib, | ||
[ | [a]="vector operands do not have the same elements sizes \\((.*?) and (.*?)\\)", | ||
[ | [b]=" \\[[^\\]]*\\-Wvec\\-elem\\-size[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"9941ca8af6b4",1476878770,"[Sema] Gcc compatibility of vector shift"}, | [i]={"9941ca8af6b4",1476878770,"[Sema] Gcc compatibility of vector shift"}, | ||
[j]={{ | [j]={{A,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();"}}, | ||
[p]={ | |||
["clang/test/CodeGen/vecshift.c"]={"clang/test/CodeGen/vecshift.c:113:13: warning: vector operands do not have the same elements sizes (\'vector_int8\' (vector of 8 \'int\' values) and \'vector_uchar8\' (vector of 8 \'unsigned char\' values)) [-Wvec-elem-size]","clang/test/CodeGen/vecshift.c:118:15: warning: vector operands do not have the same elements sizes (\'vector_uchar8\' (vector of 8 \'unsigned char\' values) and \'vector_int8\' (vector of 8 \'int\' values)) [-Wvec-elem-size]","clang/test/CodeGen/vecshift.c:123:15: warning: vector operands do not have the same elements sizes (\'vector_ushort8\' (vector of 8 \'unsigned short\' values) and \'vector_uint8\' (vector of 8 \'unsigned int\' values)) [-Wvec-elem-size]","clang/test/CodeGen/vecshift.c:128:15: warning: vector operands do not have the same elements sizes (\'vector_uint8\' (vector of 8 \'unsigned int\' values) and \'vector_short8\' (vector of 8 \'short\' values)) [-Wvec-elem-size]"} | |||
} | |||
}, | }, | ||
["warn_ucn_escape_incomplete"]={ | ["warn_ucn_escape_incomplete"]={ | ||
[ | [g]="incomplete universal character name; treating as \'\\\' followed by identifier [-Wunicode]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Jb}, | ||
[ | [o]=Jb, | ||
[ | [e]="incomplete universal character name; treating as \'\\\' followed by identifier", | ||
[ | [f]=m, | ||
[ | [a]="incomplete universal character name; treating as \'\\\\\' followed by identifier", | ||
[ | [b]=Yc, | ||
[ | [h]=D, | ||
[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]={{ | [j]={{Lb,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);"},{Lb,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);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:26:5: warning: incomplete universal character name; treating as \'\\\' followed by identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:30:5: warning: incomplete universal character name; treating as \'\\\' followed by identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:76:18: warning: incomplete universal character name; treating as \'\\\' followed by identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:114:19: warning: incomplete universal character name; treating as \'\\\' followed by identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:122:9: warning: incomplete universal character name; treating as \'\\\' followed by identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:132:9: warning: incomplete universal character name; treating as \'\\\' followed by identifier [-Wunicode]"} | |||
} | |||
}, | }, | ||
["warn_ucn_escape_no_digits"]={ | ["warn_ucn_escape_no_digits"]={ | ||
[ | [g]="\\A used with no following hex digits; treating as \'\\\' followed by identifier [-Wunicode]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Jb}, | ||
[ | [o]=Jb, | ||
[ | [e]="\\%0 used with no following hex digits; treating as \'\\\' followed by identifier", | ||
[ | [f]=m, | ||
[ | [a]="\\\\(.*?) used with no following hex digits; treating as \'\\\\\' followed by identifier", | ||
[ | [b]=Yc, | ||
[ | [h]=D, | ||
[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]={{ | [j]={{Lb,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);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:28:5: warning: \\u used with no following hex digits; treating as \'\\\' followed by identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:75:18: warning: \\u used with no following hex digits; treating as \'\\\' followed by identifier [-Wunicode]"} | |||
} | |||
}, | }, | ||
["warn_ucn_escape_surrogate"]={ | ["warn_ucn_escape_surrogate"]={ | ||
[ | [g]="universal character name refers to a surrogate character [-Wunicode]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Jb}, | ||
[ | [o]=Jb, | ||
[ | [e]="universal character name refers to a surrogate character", | ||
[ | [f]=m, | ||
[ | [a]="universal character name refers to a surrogate character", | ||
[ | [b]=Yc, | ||
[ | [h]=D, | ||
[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]={{ | [j]={{Lb,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);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/ucn-allowed-chars.c"]={"clang/test/Preprocessor/ucn-allowed-chars.c:33:11: warning: universal character name refers to a surrogate character [-Wunicode]"} | |||
} | |||
}, | }, | ||
["warn_ucn_not_valid_in_c89"]={ | ["warn_ucn_not_valid_in_c89"]={ | ||
[ | [g]="universal character names are only valid in C99 or C++; treating as \'\\\' followed by identifier [-Wunicode]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Jb}, | ||
[ | [o]=Jb, | ||
[ | [e]="universal character names are only valid in C99 or C++; treating as \'\\\' followed by identifier", | ||
[ | [f]=m, | ||
[ | [a]="universal character names are only valid in C99 or C\\+\\+; treating as \'\\\\\' followed by identifier", | ||
[ | [b]=Yc, | ||
[ | [h]=D, | ||
[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]={{ | [j]={{Lb,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);"}}, | ||
[p]={ | |||
["clang/test/Lexer/c90.c"]={"clang/test/Lexer/c90.c:43:16: warning: universal character names are only valid in C99 or C++; treating as \'\\\' followed by identifier [-Wunicode]","clang/test/Lexer/c90.c:46:21: warning: universal character names are only valid in C99 or C++; treating as \'\\\' followed by identifier [-Wunicode]"} | |||
} | |||
}, | }, | ||
["warn_ucn_not_valid_in_c89_literal"]={ | ["warn_ucn_not_valid_in_c89_literal"]={ | ||
[ | [g]="universal character names are only valid in C99 or C++ [-Wunicode]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Jb}, | ||
[ | [o]=Jb, | ||
[ | [e]="universal character names are only valid in C99 or C++", | ||
[ | [f]=m, | ||
[ | [a]="universal character names are only valid in C99 or C\\+\\+", | ||
[ | [b]=Yc, | ||
[ | [h]=D, | ||
[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",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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/Lexer/c90.c"]={"clang/test/Lexer/c90.c:32:11: error: universal character names are only valid in C99 or C++ [-Werror,-Wunicode]","clang/test/Lexer/c90.c:33:11: error: universal character names are only valid in C99 or C++ [-Werror,-Wunicode]"} | |||
} | |||
}, | }, | ||
["warn_unaligned_access"]={ | ["warn_unaligned_access"]={ | ||
[ | [g]="field A within B is less aligned than C and is usually due to D being packed, which can lead to unaligned accesses [-Wunaligned-access]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"unaligned-access"}, | ||
[ | [o]="unaligned-access", | ||
[ | [e]="field %1 within %0 is less aligned than %2 and is usually due to %0 being packed, which can lead to unaligned accesses", | ||
[ | [f]=m, | ||
[ | [a]="field (.*?) within (.*?) is less aligned than (.*?) and is usually due to (.*?) being packed, which can lead to unaligned accesses", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunaligned\\-access[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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,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();"}} | [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();"}}, | ||
[p]={ | |||
["clang/test/Sema/test-wunaligned-access.cpp"]={"clang/test/Sema/test-wunaligned-access.cpp:24:6: warning: field b within \'U1\' is less aligned than \'T1\' and is usually due to \'U1\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:48:6: warning: field b within \'U5\' is less aligned than \'T1\' and is usually due to \'U5\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:65:6: warning: field b within \'U7\' is less aligned than \'T1\' and is usually due to \'U7\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:71:6: warning: field b within \'U8\' is less aligned than \'T1\' and is usually due to \'U8\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:77:6: warning: field b within \'U9\' is less aligned than \'T1\' and is usually due to \'U9\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:83:6: warning: field b within \'U10\' is less aligned than \'T1\' and is usually due to \'U10\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:141:6: warning: field b within \'A1\' is less aligned than \'T1\' and is usually due to \'A1\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:157:6: warning: field b within \'U17\' is less aligned than \'A2\' and is usually due to \'U17\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:183:6: warning: field b within \'U19\' is less aligned than \'A4\' and is usually due to \'U19\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:197:6: warning: field b within \'U20\' is less aligned than \'A5\' and is usually due to \'U20\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:209:6: warning: field b within \'U21\' is less aligned than \'A6\' and is usually due to \'U21\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:231:6: warning: field b within \'A8\' is less aligned than \'T1\' and is usually due to \'A8\' being packed, which can lead to unaligned accesses [-Wunaligned-access]"} | |||
} | |||
}, | }, | ||
["warn_unannotated_fallthrough"]={ | ["warn_unannotated_fallthrough"]={ | ||
[ | [g]="unannotated fall-through between switch labels [-Wimplicit-fallthrough]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"implicit-fallthrough"}, | ||
[ | [o]="implicit-fallthrough", | ||
[ | [e]="unannotated fall-through between switch labels", | ||
[ | [f]=m, | ||
[ | [a]="unannotated fall\\-through between switch labels", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-fallthrough[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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);"},{E,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());"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/switch-implicit-fallthrough-blocks.cpp"]={"clang/test/SemaCXX/switch-implicit-fallthrough-blocks.cpp:12:5: warning: unannotated fall-through between switch labels [-Wimplicit-fallthrough]"} | |||
} | |||
}, | }, | ||
["warn_unannotated_fallthrough_per_function"]={ | ["warn_unannotated_fallthrough_per_function"]={ | ||
[ | [g]="unannotated fall-through between switch labels in partly-annotated function [-Wimplicit-fallthrough-per-function]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"implicit-fallthrough","implicit-fallthrough-per-function"}, | ||
[ | [o]="implicit-fallthrough-per-function", | ||
[ | [e]="unannotated fall-through between switch labels in partly-annotated function", | ||
[ | [f]=m, | ||
[ | [a]="unannotated fall\\-through between switch labels in partly\\-annotated function", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-fallthrough\\-per\\-function[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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);"},{E,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());"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/switch-implicit-fallthrough-per-method.cpp"]={"clang/test/SemaCXX/switch-implicit-fallthrough-per-method.cpp:15:7: warning: unannotated fall-through between switch labels in partly-annotated function [-Wimplicit-fallthrough-per-function]","clang/test/SemaCXX/switch-implicit-fallthrough-per-method.cpp:8:5: warning: unannotated fall-through between switch labels in partly-annotated function [-Wimplicit-fallthrough-per-function]"} | |||
} | |||
}, | }, | ||
["warn_unavailable_def"]={ | ["warn_unavailable_def"]={ | ||
[ | [g]="implementing unavailable method [-Wdeprecated-implementations]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"deprecated-implementations"}, | ||
[ | [o]="deprecated-implementations", | ||
[ | [e]="implementing unavailable method", | ||
[ | [f]=m, | ||
[ | [a]="implementing unavailable method", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-implementations[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"e1088dc42b3e",1499963831,"Extend -Wdeprecated-implementations to warn about unavailable methods"}, | [i]={"e1088dc42b3e",1499963831,"Extend -Wdeprecated-implementations to warn about unavailable methods"}, | ||
[j]={{ | [j]={{P,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/warn-deprecated-implementations.m"]={"clang/test/SemaObjC/warn-deprecated-implementations.m:24:1: warning: implementing unavailable method [-Wdeprecated-implementations]","clang/test/SemaObjC/warn-deprecated-implementations.m:59:1: warning: implementing unavailable method [-Wdeprecated-implementations]"} | |||
} | |||
}, | }, | ||
["warn_unavailable_fwdclass_message"]={ | ["warn_unavailable_fwdclass_message"]={ | ||
[ | [g]="A may be unavailable because the receiver type is unknown [-Wunavailable-declarations]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unavailable-declarations"}, | ||
[ | [o]="unavailable-declarations", | ||
[ | [e]="%0 may be unavailable because the receiver type is unknown", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) may be unavailable because the receiver type is unknown", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunavailable\\-declarations[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"7d6e11a1923a",1292892241,"Warn when message is sent to receiver of"}, | [i]={"7d6e11a1923a",1292892241,"Warn when message is sent to receiver of"}, | ||
[j]={{ | [j]={{Cc,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/special-dep-unavail-warning.m"]={"clang/test/SemaObjC/special-dep-unavail-warning.m:34:6: warning: \'unavailMeth\' may be unavailable because the receiver type is unknown [-Wunavailable-declarations]","clang/test/SemaObjC/special-dep-unavail-warning.m:36:6: warning: \'unavailMeth1\' may be unavailable because the receiver type is unknown [-Wunavailable-declarations]","clang/test/SemaObjC/special-dep-unavail-warning.m:38:6: warning: \'unavailMeth2\' may be unavailable because the receiver type is unknown [-Wunavailable-declarations]","clang/test/SemaObjC/special-dep-unavail-warning.m:39:6: warning: \'depunavailInA\' may be unavailable because the receiver type is unknown [-Wunavailable-declarations]","clang/test/SemaObjC/special-dep-unavail-warning.m:40:6: warning: \'depunavailInA1\' may be unavailable because the receiver type is unknown [-Wunavailable-declarations]"} | |||
} | |||
}, | }, | ||
["warn_uncovered_module_header"]={ | ["warn_uncovered_module_header"]={ | ||
[ | [g]="umbrella header for module \'A\' does not include header \'B\' [-Wincomplete-umbrella]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"incomplete-module","incomplete-umbrella"}, | ||
[ | [o]="incomplete-umbrella", | ||
[ | [e]="umbrella header for module \'%0\' does not include header \'%1\'", | ||
[ | [f]=m, | ||
[ | [a]="umbrella header for module \'(.*?)\' does not include header \'(.*?)\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-umbrella[^\\]]*\\]", | ||
[ | [h]=D, | ||
[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",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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/Modules/dependency-gen-inferred-map.m"]={"clang/test/Modules/Inputs/Module.framework/Headers/Module.h:38:1: warning: umbrella header for module \'Module\' does not include header \'NotInModule.h\' [-Wincomplete-umbrella]"} | |||
} | |||
}, | }, | ||
["warn_undeclared_selector"]={ | ["warn_undeclared_selector"]={ | ||
[ | [g]="undeclared selector A [-Wundeclared-selector]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"undeclared-selector"}, | ||
[ | [o]="undeclared-selector", | ||
[ | [e]="undeclared selector %0", | ||
[ | [f]=m, | ||
[ | [a]="undeclared selector (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wundeclared\\-selector[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"0571d9bbbaed",1245169500,"Implements -Wundeclared-selector for ObjC."}, | [i]={"0571d9bbbaed",1245169500,"Implements -Wundeclared-selector for ObjC."}, | ||
[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;"}} | [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"]={ | ||
[ | [g]="undeclared selector A; did you mean B? [-Wundeclared-selector]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"undeclared-selector"}, | ||
[ | [o]="undeclared-selector", | ||
[ | [e]="undeclared selector %0; did you mean %1?", | ||
[ | [f]=m, | ||
[ | [a]="undeclared selector (.*?); did you mean (.*?)\\?", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wundeclared\\-selector[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"0c0fc9e14b9c",1370457974,"Objective-C: Provide fixit with suggested spelling correction"}, | [i]={"0c0fc9e14b9c",1370457974,"Objective-C: Provide fixit with suggested spelling correction"}, | ||
[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());"}} | [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());"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/undeclared-selector.m"]={"clang/test/SemaObjC/undeclared-selector.m:40:12: warning: undeclared selector \'methodC\'; did you mean \'methodB\'? [-Wundeclared-selector]"} | |||
} | |||
}, | }, | ||
["warn_undef_interface"]={ | ["warn_undef_interface"]={ | ||
[ | [g]="cannot find interface declaration for A", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="cannot find interface declaration for %0", | ||
[ | [f]=m, | ||
[ | [a]="cannot find interface declaration for (.*?)", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{P,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;"},{P,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);"},{P,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:30:17: warning: cannot find interface declaration for \'E\'"} | |||
} | |||
}, | }, | ||
["warn_undef_interface_suggest"]={ | ["warn_undef_interface_suggest"]={ | ||
[ | [g]="cannot find interface declaration for A; did you mean B?", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="cannot find interface declaration for %0; did you mean %1?", | ||
[ | [f]=m, | ||
[ | [a]="cannot find interface declaration for (.*?); did you mean (.*?)\\?", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{P,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,"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/undef-superclass-1.m"]={"clang/test/SemaObjC/undef-superclass-1.m:35:17: warning: cannot find interface declaration for \'iNTF3\'; did you mean \'INTF3\'?"} | |||
} | |||
}, | }, | ||
["warn_undef_method_impl"]={ | ["warn_undef_method_impl"]={ | ||
[ | [g]="method definition for A not found [-Wincomplete-implementation]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"incomplete-implementation"}, | ||
[ | [o]="incomplete-implementation", | ||
[ | [e]="method definition for %0 not found", | ||
[ | [f]=m, | ||
[ | [a]="method definition for (.*?) not found", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-implementation[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{P,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);"},{P,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);"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/method-bad-param.m"]={"clang/test/SemaObjC/method-bad-param.m:61:17: warning: method definition for \'my_method:\' not found [-Wincomplete-implementation]"} | |||
} | |||
}, | }, | ||
["warn_undef_protocolref"]={ | ["warn_undef_protocolref"]={ | ||
[ | [g]="cannot find protocol definition for A", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="cannot find protocol definition for %0", | ||
[ | [f]=m, | ||
[ | [a]="cannot find protocol definition for (.*?)", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[i]={bb,1236199783, | [i]={bb,1236199783,cb}, | ||
[j]={{ | [j]={{P,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;"},{P,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();"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/class-def-test-1.m"]={"clang/test/SemaObjC/class-def-test-1.m:5:19: warning: cannot find protocol definition for \'SUPER\'"} | |||
} | |||
}, | }, | ||
["warn_undefined_inline"]={ | ["warn_undefined_inline"]={ | ||
[ | [g]="inline function A is not defined [-Wundefined-inline]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"undefined-inline"}, | ||
[ | [o]="undefined-inline", | ||
[ | [e]="inline function %q0 is not defined", | ||
[ | [f]=m, | ||
[ | [a]="inline function (.*?) is not defined", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wundefined\\-inline[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{W,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;"}}, | ||
[p]={ | |||
["clang/test/CXX/basic/basic.def/p4.cpp"]={"clang/test/CXX/basic/basic.def/p4.cpp:3:12: warning: inline function \'f\' is not defined [-Wundefined-inline]"} | |||
} | |||
}, | }, | ||
["warn_undefined_internal"]={ | ["warn_undefined_internal"]={ | ||
[ | [g]="... A has internal linkage but is not defined [-Wundefined-internal]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"undefined-internal"}, | ||
[ | [o]="undefined-internal", | ||
[ | [e]="%select{function|variable}0 %q1 has internal linkage but is not defined", | ||
[ | [f]=m, | ||
[ | [a]="(?:function|variable) (.*?) has internal linkage but is not defined", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wundefined\\-internal[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{W,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;"}}, | ||
[p]={ | |||
["clang/test/OpenMP/declare_variant.cpp"]={"clang/test/OpenMP/declare_variant.cpp:15:13: warning: function \'baz\' has internal linkage but is not defined [-Wundefined-internal]","clang/test/OpenMP/declare_variant.cpp:6:6: warning: function \'(anonymous namespace)::bar\' has internal linkage but is not defined [-Wundefined-internal]"} | |||
} | |||
}, | }, | ||
["warn_undefined_reinterpret_cast"]={ | ["warn_undefined_reinterpret_cast"]={ | ||
[ | [g]="reinterpret_cast from A to B has undefined behavior [-Wundefined-reinterpret-cast]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"undefined-reinterpret-cast"}, | ||
[ | [o]="undefined-reinterpret-cast", | ||
[ | [e]="reinterpret_cast from %0 to %1 has undefined behavior", | ||
[ | [f]=m, | ||
[ | [a]="reinterpret_cast from (.*?) to (.*?) has undefined behavior", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wundefined\\-reinterpret\\-cast[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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,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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/reinterpret-cast.cpp"]={"clang/test/SemaCXX/reinterpret-cast.cpp:162:9: warning: reinterpret_cast from \'long\' to \'double &\' has undefined behavior [-Wundefined-reinterpret-cast]","clang/test/SemaCXX/reinterpret-cast.cpp:164:9: warning: reinterpret_cast from \'float\' to \'double &\' has undefined behavior [-Wundefined-reinterpret-cast]","clang/test/SemaCXX/reinterpret-cast.cpp:166:9: warning: reinterpret_cast from \'long\' to \'float &\' has undefined behavior [-Wundefined-reinterpret-cast]","clang/test/SemaCXX/reinterpret-cast.cpp:168:9: warning: reinterpret_cast from \'double\' to \'float &\' has undefined behavior [-Wundefined-reinterpret-cast]"} | |||
} | |||
}, | }, | ||
["warn_unevaluated_string_prefix"]={ | ["warn_unevaluated_string_prefix"]={ | ||
[ | [g]="encoding prefix \'A\' on an unevaluated string literal has no effect... [-Winvalid-unevaluated-string]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"invalid-unevaluated-string"}, | ||
[ | [o]="invalid-unevaluated-string", | ||
[ | [e]="encoding prefix \'%0\' on an unevaluated string literal has no effect%select{| and is incompatible with c++2c}1", | ||
[ | [f]=m, | ||
[ | [a]="encoding prefix \'(.*?)\' on an unevaluated string literal has no effect(?:| and is incompatible with c\\+\\+2c)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Winvalid\\-unevaluated\\-string[^\\]]*\\]", | ||
[ | [h]=D, | ||
[i]={"82343aa9cf9c",1690639424,"[Clang] Backport static_assert messages fixes"}, | [i]={"82343aa9cf9c",1690639424,"[Clang] Backport static_assert messages fixes"}, | ||
[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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/CXX/dcl.dcl/dcl.link/p2.cpp"]={"clang/test/CXX/dcl.dcl/dcl.link/p2.cpp:11:8: warning: encoding prefix \'u8\' on an unevaluated string literal has no effect and is incompatible with c++2c [-Winvalid-unevaluated-string]","clang/test/CXX/dcl.dcl/dcl.link/p2.cpp:12:8: warning: encoding prefix \'L\' on an unevaluated string literal has no effect and is incompatible with c++2c [-Winvalid-unevaluated-string]","clang/test/CXX/dcl.dcl/dcl.link/p2.cpp:13:8: warning: encoding prefix \'u\' on an unevaluated string literal has no effect and is incompatible with c++2c [-Winvalid-unevaluated-string]","clang/test/CXX/dcl.dcl/dcl.link/p2.cpp:14:8: warning: encoding prefix \'U\' on an unevaluated string literal has no effect and is incompatible with c++2c [-Winvalid-unevaluated-string]"} | |||
} | |||
}, | }, | ||
["warn_unguarded_availability"]={ | ["warn_unguarded_availability"]={ | ||
[ | [g]="A is only available on B C or newer [-Wunguarded-availability]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"partial-availability","unguarded-availability"}, | ||
[ | [o]="unguarded-availability", | ||
[ | [e]="%0 is only available on %1 %2 or newer", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) is only available on (.*?) (.*?) or newer", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunguarded\\-availability[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration"}, | [i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration"}, | ||
[j]={{ | [j]={{Cc,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;"},{Cc,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;"}}, | ||
[p]={ | |||
["clang/test/Parser/objc-implementation-attrs.m"]={"clang/test/Parser/objc-implementation-attrs.m:29:3: warning: \'unavail_int\' is only available on macOS 1000 or newer [-Wunguarded-availability-new]"} | |||
} | |||
}, | }, | ||
["warn_unguarded_availability_new"]={ | ["warn_unguarded_availability_new"]={ | ||
[ | [g]="A is only available on B C or newer [-Wunguarded-availability-new]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"partial-availability","unguarded-availability","unguarded-availability-new"}, | ||
[ | [o]="unguarded-availability-new", | ||
[ | [e]="%0 is only available on %1 %2 or newer", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) is only available on (.*?) (.*?) or newer", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunguarded\\-availability\\-new[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"c9a369fbecd5",1498150944,"[Sema] Add -Wunguarded-availability-new"}, | [i]={"c9a369fbecd5",1498150944,"[Sema] Add -Wunguarded-availability-new"}, | ||
[j]={{ | [j]={{Cc,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;"},{Cc,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"]={ | ||
[ | [g]="__declspec attribute A is not supported [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="__declspec attribute %0 is not supported", | ||
[ | [f]=m, | ||
[ | [a]="__declspec attribute (.*?) is not supported", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{C,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();"}}, | ||
[p]={ | |||
["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:67:19: warning: __declspec attribute \'frobble\' is not supported [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:69:19: warning: __declspec attribute \'\"testing\"\' is not supported [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:81:30: warning: __declspec attribute \'frobble\' is not supported [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:81:38: warning: __declspec attribute \'\"testing\"\' is not supported [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:82:19: warning: __declspec attribute \'unknown\' is not supported [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_unimplemented_protocol_method"]={ | ["warn_unimplemented_protocol_method"]={ | ||
[ | [g]="method A in protocol B not implemented [-Wprotocol]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"protocol"}, | ||
[ | [o]="protocol", | ||
[ | [e]="method %0 in protocol %1 not implemented", | ||
[ | [f]=m, | ||
[ | [a]="method (.*?) in protocol (.*?) not implemented", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wprotocol[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{P,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;"},{P,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/undef-protocol-methods-1.m"]={"clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'meth\' in protocol \'PROTO\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'meth:\' in protocol \'PROTO\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'cls_meth:\' in protocol \'PROTO\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'P1proto\' in protocol \'P1\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'ClsP1Proto\' in protocol \'P1\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'P3proto\' in protocol \'P3\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'ClsP3Proto\' in protocol \'P3\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'P2proto\' in protocol \'P2\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'ClsP2Proto\' in protocol \'P2\' not implemented [-Wprotocol]"} | |||
} | |||
}, | }, | ||
["warn_unimplemented_selector"]={ | ["warn_unimplemented_selector"]={ | ||
[ | [g]="no method with selector A is implemented in this translation unit [-Wselector]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"selector"}, | ||
[ | [o]="selector", | ||
[ | [e]="no method with selector %0 is implemented in this translation unit", | ||
[ | [f]=m, | ||
[ | [a]="no method with selector (.*?) is implemented in this translation unit", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wselector[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"6e7e8cc19d05",1279823060,"atch for implementation of objective-c\'s -Wselector"}, | [i]={"6e7e8cc19d05",1279823060,"atch for implementation of objective-c\'s -Wselector"}, | ||
[j]={{ | [j]={{P,5274,"void Sema::DiagnoseUseOfUnimplementedSelectors() {\n for (auto &SelectorAndLocation : ReferencedSelectors) {\n if (!LookupImplementedMethodInGlobalPool(Sel))\n Diag(Loc, diag::warn_unimplemented_selector) << Sel;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/selector-3.m"]={"clang/test/SemaObjC/selector-3.m:28:13: warning: no method with selector \'length\' is implemented in this translation unit [-Wselector]"} | |||
} | |||
}, | }, | ||
["warn_uninit_byref_blockvar_captured_by_block"]={ | ["warn_uninit_byref_blockvar_captured_by_block"]={ | ||
[ | [g]="block pointer variable A is ... when captured by block [-Wuninitialized]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,xb}, | ||
[ | [o]=xb, | ||
[ | [e]="block pointer variable %0 is %select{uninitialized|null}1 when captured by block", | ||
[ | [f]=m, | ||
[ | [a]="block pointer variable (.*?) is (?:uninitialized|null) when captured by block", | ||
[ | [b]=Mc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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();"}}, | ||
[p]={ | |||
["clang/test/FixIt/fixit-recursive-block.c"]={"clang/test/FixIt/fixit-recursive-block.c:8:30: warning: block pointer variable \'arc_fail\' is null when captured by block [-Wuninitialized]"} | |||
} | |||
}, | }, | ||
["warn_uninit_const_reference"]={ | ["warn_uninit_const_reference"]={ | ||
[ | [g]="variable A is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,xb,"uninitialized-const-reference"}, | ||
[ | [o]="uninitialized-const-reference", | ||
[ | [e]="variable %0 is uninitialized when passed as a const reference argument here", | ||
[ | [f]=m, | ||
[ | [a]="variable (.*?) is uninitialized when passed as a const reference argument here", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wuninitialized\\-const\\-reference[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={gc,1576908663,hc}, | ||
[j]={{ | [j]={{E,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();"},{E,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())) {"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-uninitialized-const-reference.cpp"]={"clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:50:25: warning: variable \'l\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:52:21: warning: variable \'l1\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:54:45: warning: variable \'l2\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:29:17: warning: variable \'i\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:30:29: warning: variable \'j\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:31:26: warning: variable \'a1\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:34:24: warning: variable \'a3\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:35:16: warning: variable \'a4\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]"} | |||
} | |||
}, | }, | ||
["warn_uninit_self_reference_in_init"]={ | ["warn_uninit_self_reference_in_init"]={ | ||
[ | [g]="variable A is uninitialized when used within its own initialization [-Wuninitialized]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,xb}, | ||
[ | [o]=xb, | ||
[ | [e]="variable %0 is uninitialized when used within its own initialization", | ||
[ | [f]=m, | ||
[ | [a]="variable (.*?) is uninitialized when used within its own initialization", | ||
[ | [b]=Mc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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();"},{H,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-uninitialized-const-reference.cpp"]={"clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:33:22: warning: variable \'a2\' is uninitialized when used within its own initialization [-Wuninitialized]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:35:16: warning: variable \'a4\' is uninitialized when used within its own initialization [-Wuninitialized]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:30:11: warning: variable \'j\' is uninitialized when used within its own initialization [-Wuninitialized]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:32:21: warning: variable \'k\' is uninitialized when used within its own initialization [-Wuninitialized]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:36:11: warning: variable \'n\' is uninitialized when used within its own initialization [-Wuninitialized]"} | |||
} | |||
}, | }, | ||
["warn_uninit_self_reference_in_reference_init"]={ | ["warn_uninit_self_reference_in_reference_init"]={ | ||
[ | [g]="reference A is not yet bound to a value when used within its own initialization [-Wuninitialized]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,xb}, | ||
[ | [o]=xb, | ||
[ | [e]="reference %0 is not yet bound to a value when used within its own initialization", | ||
[ | [f]=m, | ||
[ | [a]="reference (.*?) is not yet bound to a value when used within its own initialization", | ||
[ | [b]=Mc, | ||
[ | [h]=q, | ||
[i]={"d799a2b3b91f",1345452742,"Better wording for reference self-initialization warning."}, | [i]={"d799a2b3b91f",1345452742,"Better wording for reference self-initialization warning."}, | ||
[j]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/Analysis/stack-addr-ps.cpp"]={"clang/test/Analysis/stack-addr-ps.cpp:94:12: warning: reference \'i\' is not yet bound to a value when used within its own initialization [-Wuninitialized]"} | |||
} | |||
}, | }, | ||
["warn_uninit_var"]={ | ["warn_uninit_var"]={ | ||
[ | [g]="variable A is uninitialized when ... [-Wuninitialized]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,xb}, | ||
[ | [o]=xb, | ||
[ | [e]="variable %0 is uninitialized when %select{used here|captured by block}1", | ||
[ | [f]=m, | ||
[ | [a]="variable (.*?) is uninitialized when (?:used here|captured by block)", | ||
[ | [b]=Mc, | ||
[ | [h]=q, | ||
[i]={"bcf848f70a42",1295982828,"Teach -Wuninitialized-experimental to also warn"}, | [i]={"bcf848f70a42",1295982828,"Teach -Wuninitialized-experimental to also warn"}, | ||
[j]={{ | [j]={{E,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();"},{E,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())) {"}}, | ||
[p]={ | |||
["clang/test/Analysis/uninit-asm-goto.cpp"]={"clang/test/Analysis/uninit-asm-goto.cpp:108:10: warning: variable \'y\' is uninitialized when used here [-Wuninitialized]"} | |||
} | |||
}, | }, | ||
["warn_unknown_attribute_ignored"]={ | ["warn_unknown_attribute_ignored"]={ | ||
[ | [g]="unknown attribute A ignored [-Wunknown-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,"unknown-attributes"}, | ||
[ | [o]="unknown-attributes", | ||
[ | [e]="unknown attribute %0 ignored", | ||
[ | [f]=m, | ||
[ | [a]="unknown attribute (.*?) ignored", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunknown\\-attributes[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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",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();"},{ | [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();"},{C,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();"},{C,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();"},{C,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();"},{ab,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();"},{R,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();"}}, | ||
[p]={ | |||
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p2-1z.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p2-1z.cpp:3:3: warning: unknown attribute \'disable_tail_calls\' ignored [-Wunknown-attributes]","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p2-1z.cpp:3:23: warning: unknown attribute \'noduplicate\' ignored [-Wunknown-attributes]","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p2-1z.cpp:15:9: warning: unknown attribute \'unknown_attr\' ignored [-Wunknown-attributes]","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p2-1z.cpp:16:9: warning: unknown attribute \'something\' ignored [-Wunknown-attributes]"} | |||
} | |||
}, | }, | ||
["warn_unknown_comment_command_name"]={ | ["warn_unknown_comment_command_name"]={ | ||
[ | [g]="unknown command tag name [-Wdocumentation-unknown-command]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"documentation-pedantic","documentation-unknown-command"}, | ||
[ | [o]="documentation-unknown-command", | ||
[ | [e]="unknown command tag name", | ||
[ | [f]=m, | ||
[ | [a]="unknown command tag name", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-unknown\\-command[^\\]]*\\]", | ||
[ | [h]="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",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());"},{ | [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());"},{H,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()))"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-documentation.m"]={"clang/test/Sema/warn-documentation.m:156:1: warning: unknown command tag name [-Wdocumentation-unknown-command]","clang/test/Sema/warn-documentation.m:178:5: warning: unknown command tag name [-Wdocumentation-unknown-command]"} | |||
} | |||
}, | }, | ||
["warn_unknown_declare_variant_isa_trait"]={ | ["warn_unknown_declare_variant_isa_trait"]={ | ||
[ | [g]="isa trait \'A\' is not known to the current target; verify the spelling or consider restricting the context selector with the \'arch\' selector further [-Wsource-uses-openmp]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={O,nb}, | ||
[ | [o]=nb, | ||
[ | [e]="isa trait \'%0\' is not known to the current target; verify the spelling or consider restricting the context selector with the \'arch\' selector further", | ||
[ | [f]=m, | ||
[ | [a]="isa trait \'(.*?)\' is not known to the current target; verify the spelling or consider restricting the context selector with the \'arch\' selector further", | ||
[ | [b]=Rb, | ||
[ | [h]=B, | ||
[i]={ | [i]={Sb,1582847864,Nb}, | ||
[j]={{ | [j]={{L,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;"},{L,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;"},{mb,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;"}}, | ||
[p]={ | |||
["clang/test/OpenMP/metadirective_messages.cpp"]={"clang/test/OpenMP/metadirective_messages.cpp:20:1: warning: isa trait \'some-unsupported-feature\' is not known to the current target; verify the spelling or consider restricting the context selector with the \'arch\' selector further [-Wsource-uses-openmp]"} | |||
} | |||
}, | }, | ||
["warn_unknown_diag_option"]={ | ["warn_unknown_diag_option"]={ | ||
[ | [g]="unknown ... option \'A\'... [-Wunknown-warning-option]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={tc}, | ||
[ | [o]=tc, | ||
[ | [e]="unknown %select{warning|remark}0 option \'%1\'%select{|; did you mean \'%3\'?}2", | ||
[ | [f]=m, | ||
[ | [a]="unknown (?:warning|remark) option \'(.*?)\'(?:|; did you mean \'(.*?)\'\\?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunknown\\-warning\\-option[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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",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));"}} | [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));"}}, | ||
[p]={ | |||
["clang/test/Frontend/warning-options.cpp"]={"warning: unknown warning option \'-Wmonkey\'; did you mean \'-Wmove\'? [-Wunknown-warning-option]","warning: unknown warning option \'-Wno-monkey\'; did you mean \'-Wno-move\'? [-Wunknown-warning-option]","warning: unknown warning option \'-Wno-unused-command-line-arguments\'; did you mean \'-Wno-unused-command-line-argument\'? [-Wunknown-warning-option]","warning: unknown warning option \'-Wmodule-build\'; did you mean \'-Wmodule-conflict\'? [-Wunknown-warning-option]","warning: unknown remark option \'-Rmodule-built\'; did you mean \'-Rmodule-build\'? [-Wunknown-warning-option]"} | |||
} | |||
}, | }, | ||
["warn_unknown_sanitizer_ignored"]={ | ["warn_unknown_sanitizer_ignored"]={ | ||
[ | [g]="unknown sanitizer \'A\' ignored [-Wunknown-sanitizers]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unknown-sanitizers"}, | ||
[ | [o]="unknown-sanitizers", | ||
[ | [e]="unknown sanitizer \'%0\' ignored", | ||
[ | [f]=m, | ||
[ | [a]="unknown sanitizer \'(.*?)\' ignored", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunknown\\-sanitizers[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"915df9968b65",1431714812,"Implement no_sanitize attribute."}, | [i]={"915df9968b65",1431714812,"Implement no_sanitize attribute."}, | ||
[j]={{ | [j]={{C,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/attr-no-sanitize.cpp"]={"clang/test/SemaCXX/attr-no-sanitize.cpp:10:28: warning: unknown sanitizer \'unknown\' ignored [-Wunknown-sanitizers]","clang/test/SemaCXX/attr-no-sanitize.cpp:35:37: warning: unknown sanitizer \'unknown\' ignored [-Wunknown-sanitizers]"} | |||
} | |||
}, | }, | ||
["warn_unknown_warning_specifier"]={ | ["warn_unknown_warning_specifier"]={ | ||
[ | [g]="unknown A warning specifier: \'B\' [-Wunknown-warning-option]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={tc}, | ||
[ | [o]=tc, | ||
[ | [e]="unknown %0 warning specifier: \'%1\'", | ||
[ | [f]=m, | ||
[ | [a]="unknown (.*?) warning specifier\\: \'(.*?)\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunknown\\-warning\\-option[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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",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());"}} | [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());"}}, | ||
[p]={ | |||
["clang/test/Frontend/warning-options.cpp"]={"warning: unknown -Werror warning specifier: \'-Werror-vla\' [-Wunknown-warning-option]"} | |||
} | |||
}, | }, | ||
["warn_unlock_but_no_lock"]={ | ["warn_unlock_but_no_lock"]={ | ||
[ | [g]="releasing A \'B\' that was not held [-Wthread-safety-analysis]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,tb}, | ||
[ | [o]=tb, | ||
[ | [e]="releasing %0 \'%1\' that was not held", | ||
[ | [f]=m, | ||
[ | [a]="releasing (.*?) \'(.*?)\' that was not held", | ||
[ | [b]=bc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-thread-safety-analysis.c"]={"clang/test/Sema/warn-thread-safety-analysis.c:123:3: warning: releasing mutex \'mu1\' that was not held [-Wthread-safety-analysis]","clang/test/Sema/warn-thread-safety-analysis.c:128:3: warning: releasing mutex \'mu1\' that was not held [-Wthread-safety-analysis]"} | |||
} | |||
}, | }, | ||
["warn_unlock_kind_mismatch"]={ | ["warn_unlock_kind_mismatch"]={ | ||
[ | [g]="releasing A \'B\' using ... access, expected ... access [-Wthread-safety-analysis]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,tb}, | ||
[ | [o]=tb, | ||
[ | [e]="releasing %0 \'%1\' using %select{shared|exclusive}2 access, expected %select{shared|exclusive}3 access", | ||
[ | [f]=m, | ||
[ | [a]="releasing (.*?) \'(.*?)\' using (?:shared|exclusive) access, expected (?:shared|exclusive) access", | ||
[ | [b]=bc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-thread-safety-analysis.c"]={"clang/test/Sema/warn-thread-safety-analysis.c:121:3: warning: releasing mutex \'mu1\' using shared access, expected exclusive access [-Wthread-safety-analysis]","clang/test/Sema/warn-thread-safety-analysis.c:126:3: warning: releasing mutex \'mu1\' using exclusive access, expected shared access [-Wthread-safety-analysis]"} | |||
} | |||
}, | }, | ||
["warn_unnecessary_packed"]={ | ["warn_unnecessary_packed"]={ | ||
[ | [g]="packed attribute is unnecessary for A [-Wpacked]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"packed"}, | ||
[ | [o]="packed", | ||
[ | [e]="packed attribute is unnecessary for %0", | ||
[ | [f]=m, | ||
[ | [a]="packed attribute is unnecessary for (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpacked[^\\]]*\\]", | ||
[ | [h]=x, | ||
[i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | [i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked."}, | ||
[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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp"]={"clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:180:8: warning: packed attribute is unnecessary for \'S30_use\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:66:8: warning: packed attribute is unnecessary for \'S11\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:81:8: warning: packed attribute is unnecessary for \'S14\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:85:8: warning: packed attribute is unnecessary for \'S15\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:90:8: warning: packed attribute is unnecessary for \'S16\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:99:8: warning: packed attribute is unnecessary for \'S18\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:104:8: warning: packed attribute is unnecessary for \'S19\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:119:8: warning: packed attribute is unnecessary for \'S22\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:124:8: warning: packed attribute is unnecessary for \'S23\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:140:8: warning: packed attribute is unnecessary for \'S25\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:145:8: warning: packed attribute is unnecessary for \'S26\' [-Wpacked]"} | |||
} | |||
}, | }, | ||
["warn_unneeded_internal_decl"]={ | ["warn_unneeded_internal_decl"]={ | ||
[ | [g]="... A is not needed and will not be emitted [-Wunneeded-internal-declaration]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,"unneeded-internal-declaration",Y,"unused-function","unused-template"}, | ||
[ | [o]="unneeded-internal-declaration", | ||
[ | [e]="%select{function|variable}0 %1 is not needed and will not be emitted", | ||
[ | [f]=m, | ||
[ | [a]="(?:function|variable) (.*?) is not needed and will not be emitted", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunneeded\\-internal\\-declaration[^\\]]*\\]", | ||
[ | [h]=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]={{ | [j]={{W,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;"},{W,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-func-not-needed.cpp"]={"clang/test/SemaCXX/warn-func-not-needed.cpp:4:13: warning: function \'f\' is not needed and will not be emitted [-Wunneeded-internal-declaration]","clang/test/SemaCXX/warn-func-not-needed.cpp:14:18: warning: function \'f<int>\' is not needed and will not be emitted [-Wunneeded-internal-declaration]"} | |||
} | |||
}, | }, | ||
["warn_unneeded_member_function"]={ | ["warn_unneeded_member_function"]={ | ||
[ | [g]="member function A is not needed and will not be emitted [-Wunneeded-member-function]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"unneeded-member-function","unused-member-function"}, | ||
[ | [o]="unneeded-member-function", | ||
[ | [e]="member function %0 is not needed and will not be emitted", | ||
[ | [f]=m, | ||
[ | [a]="member function (.*?) is not needed and will not be emitted", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunneeded\\-member\\-function[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{W,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-member-not-needed.cpp"]={"clang/test/SemaCXX/warn-member-not-needed.cpp:5:10: warning: member function \'g\' is not needed and will not be emitted [-Wunneeded-member-function]","clang/test/SemaCXX/warn-member-not-needed.cpp:7:22: warning: member function \'gt<int>\' is not needed and will not be emitted [-Wunneeded-member-function]","clang/test/SemaCXX/warn-member-not-needed.cpp:8:22: warning: member function \'gt<float>\' is not needed and will not be emitted [-Wunneeded-member-function]"} | |||
} | |||
}, | }, | ||
["warn_unneeded_static_internal_decl"]={ | ["warn_unneeded_static_internal_decl"]={ | ||
[ | [g]="\'static\' function A declared in header file should be declared \'static inline\' [-Wunneeded-internal-declaration]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,"unneeded-internal-declaration",Y,"unused-function","unused-template"}, | ||
[ | [o]="unneeded-internal-declaration", | ||
[ | [e]="\'static\' function %0 declared in header file should be declared \'static inline\'", | ||
[ | [f]=m, | ||
[ | [a]="\'static\' function (.*?) declared in header file should be declared \'static inline\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunneeded\\-internal\\-declaration[^\\]]*\\]", | ||
[ | [h]=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]={{ | [j]={{W,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-static-function-inheader.cpp"]={"clang/test/SemaCXX/warn-static-function-inheader.h:1:13: warning: \'static\' function \'thing\' declared in header file should be declared \'static inline\' [-Wunneeded-internal-declaration]"} | |||
} | |||
}, | }, | ||
["warn_unofficial_aarch64_simdlen_must_be_power_of_2"]={ | ["warn_unofficial_aarch64_simdlen_must_be_power_of_2"]={ | ||
[ | [g]="The value specified in simdlen must be a power of 2 when targeting Advanced SIMD.", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="The value specified in simdlen must be a power of 2 when targeting Advanced SIMD.", | ||
[ | [f]=m, | ||
[ | [a]="The value specified in simdlen must be a power of 2 when targeting Advanced SIMD\\.", | ||
[ | [b]=Q, | ||
[ | [h]=x, | ||
[p]={ | |||
["clang/test/OpenMP/declare_simd_aarch64.c"]={"clang/test/OpenMP/declare_simd_aarch64.c:9:34: warning: The value specified in simdlen must be a power of 2 when targeting Advanced SIMD.","clang/test/OpenMP/declare_simd_aarch64.c:47:34: warning: The value specified in simdlen must be a power of 2 when targeting Advanced SIMD."} | |||
} | |||
}, | }, | ||
["warn_unofficial_aarch64_sve_simdlen_constraints"]={ | ["warn_unofficial_aarch64_sve_simdlen_constraints"]={ | ||
[ | [g]="The clause simdlen must fit the A-bit lanes in the architectural constraints for SVE (min is 128-bit, max is 2048-bit, by steps of 128-bit)", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="The clause simdlen must fit the %0-bit lanes in the architectural constraints for SVE (min is 128-bit, max is 2048-bit, by steps of 128-bit)", | ||
[ | [f]=m, | ||
[ | [a]="The clause simdlen must fit the (.*?)\\-bit lanes in the architectural constraints for SVE \\(min is 128\\-bit, max is 2048\\-bit, by steps of 128\\-bit\\)", | ||
[ | [b]=Q, | ||
[ | [h]=x, | ||
[p]={ | |||
["clang/test/OpenMP/declare_simd_aarch64_sve.c"]={"clang/test/OpenMP/declare_simd_aarch64_sve.c:18:34: warning: The clause simdlen must fit the 64-bit lanes in the architectural constraints for SVE (min is 128-bit, max is 2048-bit, by steps of 128-bit)","clang/test/OpenMP/declare_simd_aarch64_sve.c:14:34: warning: The clause simdlen must fit the 64-bit lanes in the architectural constraints for SVE (min is 128-bit, max is 2048-bit, by steps of 128-bit)"} | |||
} | |||
}, | }, | ||
["warn_unofficial_converting_to_boxing_syntax_requires_casting"]={ | ["warn_unofficial_converting_to_boxing_syntax_requires_casting"]={ | ||
[ | [g]="converting to boxing syntax requires casting A to B", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="converting to boxing syntax requires casting %0 to %1", | ||
[ | [f]=m, | ||
[ | [a]="converting to boxing syntax requires casting (.*?) to (.*?)", | ||
[ | [b]=Q, | ||
[ | [h]=x | ||
}, | }, | ||
["warn_unofficial_mips_requires_arch"]={ | ["warn_unofficial_mips_requires_arch"]={ | ||
[ | [g]="the \'A\' ASE requires B revision C or greater", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="the \'%0\' ASE requires %1 revision %2 or greater", | ||
[ | [f]=m, | ||
[ | [a]="the \'(.*?)\' ASE requires (.*?) revision (.*?) or greater", | ||
[ | [b]=Q, | ||
[ | [h]=x, | ||
[p]={ | |||
["clang/test/CodeGen/builtins-mips-msa.c"]={"warning: the \'msa\' ASE requires MIPS32 revision 5 or greater"} | |||
} | |||
}, | }, | ||
["warn_unofficial_trivial_auto_var_init_stop_after"]={ | ["warn_unofficial_trivial_auto_var_init_stop_after"]={ | ||
[ | [g]="-ftrivial-auto-var-init-stop-after=A has been enabled to limit the number of times ftrivial-auto-var-init=B gets applied.", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="-ftrivial-auto-var-init-stop-after=%0 has been enabled to limit the number of times ftrivial-auto-var-init=%1 gets applied.", | ||
[ | [f]=m, | ||
[ | [a]="\\-ftrivial\\-auto\\-var\\-init\\-stop\\-after\\=(.*?) has been enabled to limit the number of times ftrivial\\-auto\\-var\\-init\\=(.*?) gets applied\\.", | ||
[ | [b]=Q, | ||
[ | [h]=x, | ||
[p]={ | |||
["clang/test/CodeGenCXX/auto-var-init-stop-after.cpp"]={"warning: -ftrivial-auto-var-init-stop-after=5 has been enabled to limit the number of times ftrivial-auto-var-init=zero gets applied."} | |||
} | |||
}, | }, | ||
["warn_unpacked_field"]={ | ["warn_unpacked_field"]={ | ||
[ | [g]="not packing field A as it is non-POD for the purposes of layout [-Wpacked-non-pod]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,"packed","packed-non-pod"}, | ||
[ | [o]="packed-non-pod", | ||
[ | [e]="not packing field %0 as it is non-POD for the purposes of layout", | ||
[ | [f]=m, | ||
[ | [a]="not packing field (.*?) as it is non\\-POD for the purposes of layout", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpacked\\-non\\-pod[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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,2137,"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;"}}, | ||
[p]={ | |||
["clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp"]={"clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:163:15: warning: not packing field \'p1\' as it is non-POD for the purposes of layout [-Wpacked-non-pod]"} | |||
} | |||
}, | }, | ||
["warn_unqualified_call_to_std_cast_function"]={ | ["warn_unqualified_call_to_std_cast_function"]={ | ||
[ | [g]="unqualified call to \'A\' [-Wunqualified-std-cast-call]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unqualified-std-cast-call"}, | ||
[ | [o]="unqualified-std-cast-call", | ||
[ | [e]="unqualified call to \'%0\'", | ||
[ | [f]=m, | ||
[ | [a]="unqualified call to \'(.*?)\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunqualified\\-std\\-cast\\-call[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{A,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::\");"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/unqualified-std-call.cpp"]={"clang/test/SemaCXX/unqualified-std-call.cpp:28:3: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:29:4: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:34:3: warning: unqualified call to \'std::forward\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:62:3: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:64:3: warning: unqualified call to \'std::forward\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:93:3: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:102:3: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:103:3: warning: unqualified call to \'std::forward\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:113:3: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:115:3: warning: unqualified call to \'std::forward\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:41:3: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:44:3: warning: unqualified call to \'std::forward\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:69:3: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:70:3: warning: unqualified call to \'std::forward\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:71:4: warning: unqualified call to \'std::forward\' [-Wunqualified-std-cast-call]"} | |||
} | |||
}, | }, | ||
["warn_unreachable"]={ | ["warn_unreachable"]={ | ||
[ | [g]="code will never be executed [-Wunreachable-code]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Tc,vc}, | ||
[ | [o]=Tc, | ||
[ | [e]="code will never be executed", | ||
[ | [f]=m, | ||
[ | [a]="code will never be executed", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunreachable\\-code[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"1bacb81d6f61",1263351594,"Add an unreachable code checker."}, | [i]={"1bacb81d6f61",1263351594,"Add an unreachable code checker."}, | ||
[j]={{ | [j]={{E,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-unreachable.mm"]={"clang/test/Sema/warn-unreachable.mm:10:7: warning: code will never be executed [-Wunreachable-code]"} | |||
} | |||
}, | }, | ||
["warn_unreachable_association"]={ | ["warn_unreachable_association"]={ | ||
[ | [g]="due to lvalue conversion of the controlling expression, association of type A will never be selected because it is ... [-Wunreachable-code-generic-assoc]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Tc,vc,"unreachable-code-generic-assoc"}, | ||
[ | [o]="unreachable-code-generic-assoc", | ||
[ | [e]="due to lvalue conversion of the controlling expression, association of type %0 will never be selected because it is %select{of array type|qualified}1", | ||
[ | [f]=m, | ||
[ | [a]="due to lvalue conversion of the controlling expression, association of type (.*?) will never be selected because it is (?:of array type|qualified)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunreachable\\-code\\-generic\\-assoc[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Vc,1620530452,Wc}, | ||
[j]={{ | [j]={{A,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/generic-selection.cpp"]={"clang/test/SemaCXX/generic-selection.cpp:59:13: warning: due to lvalue conversion of the controlling expression, association of type \'const int\' will never be selected because it is qualified [-Wunreachable-code-generic-assoc]","clang/test/SemaCXX/generic-selection.cpp:60:16: warning: due to lvalue conversion of the controlling expression, association of type \'volatile int\' will never be selected because it is qualified [-Wunreachable-code-generic-assoc]","clang/test/SemaCXX/generic-selection.cpp:61:7: warning: due to lvalue conversion of the controlling expression, association of type \'int[12]\' will never be selected because it is of array type [-Wunreachable-code-generic-assoc]"} | |||
} | |||
}, | }, | ||
["warn_unreachable_break"]={ | ["warn_unreachable_break"]={ | ||
[ | [g]="\'break\' will never be executed [-Wunreachable-code-break]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={vc,"unreachable-code-break"}, | ||
[ | [o]="unreachable-code-break", | ||
[ | [e]="\'break\' will never be executed", | ||
[ | [f]=m, | ||
[ | [a]="\'break\' will never be executed", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunreachable\\-code\\-break[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-unreachable.c"]={"clang/test/Sema/warn-unreachable.c:165:7: warning: \'break\' will never be executed [-Wunreachable-code-break]","clang/test/Sema/warn-unreachable.c:162:7: warning: \'break\' will never be executed [-Wunreachable-code-break]","clang/test/Sema/warn-unreachable.c:158:7: warning: \'break\' will never be executed [-Wunreachable-code-break]","clang/test/Sema/warn-unreachable.c:155:7: warning: \'break\' will never be executed [-Wunreachable-code-break]"} | |||
} | |||
}, | }, | ||
["warn_unreachable_default"]={ | ["warn_unreachable_default"]={ | ||
[ | [g]="default label in switch which covers all enumeration values [-Wcovered-switch-default]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"covered-switch-default"}, | ||
[ | [o]="covered-switch-default", | ||
[ | [e]="default label in switch which covers all enumeration values", | ||
[ | [f]=m, | ||
[ | [a]="default label in switch which covers all enumeration values", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wcovered\\-switch\\-default[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"645ae0ce10cb",1327169527,"Add -Wswitch-enum-redundant-default."}, | [i]={"645ae0ce10cb",1327169527,"Add -Wswitch-enum-redundant-default."}, | ||
[j]={{ | [j]={{S,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/enum-attr.cpp"]={"clang/test/SemaCXX/enum-attr.cpp:38:3: warning: default label in switch which covers all enumeration values [-Wcovered-switch-default]","clang/test/SemaCXX/enum-attr.cpp:51:3: warning: default label in switch which covers all enumeration values [-Wcovered-switch-default]"} | |||
} | |||
}, | }, | ||
["warn_unreachable_fallthrough_attr"]={ | ["warn_unreachable_fallthrough_attr"]={ | ||
[ | [g]="fallthrough annotation in unreachable code [-Wunreachable-code-fallthrough]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Tc,vc,"unreachable-code-fallthrough"}, | ||
[ | [o]="unreachable-code-fallthrough", | ||
[ | [e]="fallthrough annotation in unreachable code", | ||
[ | [f]=m, | ||
[ | [a]="fallthrough annotation in unreachable code", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunreachable\\-code\\-fallthrough[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Qb,1615397021,Ob}, | ||
[j]={{ | [j]={{E,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()))"},{E,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/switch-implicit-fallthrough.cpp"]={"clang/test/SemaCXX/switch-implicit-fallthrough.cpp:187:7: warning: fallthrough annotation in unreachable code [-Wunreachable-code-fallthrough]","clang/test/SemaCXX/switch-implicit-fallthrough.cpp:190:7: warning: fallthrough annotation in unreachable code [-Wunreachable-code-fallthrough]","clang/test/SemaCXX/switch-implicit-fallthrough.cpp:193:7: warning: fallthrough annotation in unreachable code [-Wunreachable-code-fallthrough]","clang/test/SemaCXX/switch-implicit-fallthrough.cpp:311:7: warning: fallthrough annotation in unreachable code [-Wunreachable-code-fallthrough]"} | |||
} | |||
}, | }, | ||
["warn_unreachable_loop_increment"]={ | ["warn_unreachable_loop_increment"]={ | ||
[ | [g]="loop will run at most once (loop increment never executed) [-Wunreachable-code-loop-increment]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Tc,vc,"unreachable-code-loop-increment"}, | ||
[ | [o]="unreachable-code-loop-increment", | ||
[ | [e]="loop will run at most once (loop increment never executed)", | ||
[ | [f]=m, | ||
[ | [a]="loop will run at most once \\(loop increment never executed\\)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunreachable\\-code\\-loop\\-increment[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/unreachable-code.cpp"]={"clang/test/SemaCXX/unreachable-code.cpp:8:8: warning: loop will run at most once (loop increment never executed) [-Wunreachable-code-loop-increment]","clang/test/SemaCXX/unreachable-code.cpp:20:8: warning: loop will run at most once (loop increment never executed) [-Wunreachable-code-loop-increment]"} | |||
} | |||
}, | }, | ||
["warn_unreachable_return"]={ | ["warn_unreachable_return"]={ | ||
[ | [g]="\'return\' will never be executed [-Wunreachable-code-return]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={vc,"unreachable-code-return"}, | ||
[ | [o]="unreachable-code-return", | ||
[ | [e]="\'return\' will never be executed", | ||
[ | [f]=m, | ||
[ | [a]="\'return\' will never be executed", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunreachable\\-code\\-return[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/warn-unreachable.m"]={"clang/test/SemaObjC/warn-unreachable.m:15:3: warning: \'return\' will never be executed [-Wunreachable-code-return]","clang/test/SemaObjC/warn-unreachable.m:25:12: warning: \'return\' will never be executed [-Wunreachable-code-return]","clang/test/SemaObjC/warn-unreachable.m:34:12: warning: \'return\' will never be executed [-Wunreachable-code-return]"} | |||
} | |||
}, | }, | ||
["warn_unsafe_buffer_operation"]={ | ["warn_unsafe_buffer_operation"]={ | ||
[ | [g]="... [-Wunsafe-buffer-usage]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"unsafe-buffer-usage"}, | ||
[ | [o]="unsafe-buffer-usage", | ||
[ | [e]="%select{unsafe pointer operation|unsafe pointer arithmetic|unsafe buffer access|function introduces unsafe buffer manipulation}0", | ||
[ | [f]=m, | ||
[ | [a]="(?:unsafe pointer operation|unsafe pointer arithmetic|unsafe buffer access|function introduces unsafe buffer manipulation)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunsafe\\-buffer\\-usage[^\\]]*\\]", | ||
[ | [h]=x, | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[j]={{ | [j]={{E,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;"},{E,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())) {"},{E,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())) {"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-unsafe-buffer-usage-c-linkage.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-c-linkage.cpp:5:3: warning: unsafe buffer access [-Wunsafe-buffer-usage]","clang/test/SemaCXX/warn-unsafe-buffer-usage-c-linkage.cpp:16:3: warning: unsafe buffer access [-Wunsafe-buffer-usage]","clang/test/SemaCXX/warn-unsafe-buffer-usage-c-linkage.cpp:22:3: warning: unsafe buffer access [-Wunsafe-buffer-usage]"} | |||
} | |||
}, | }, | ||
["warn_unsafe_buffer_variable"]={ | ["warn_unsafe_buffer_variable"]={ | ||
[ | [g]="A is an ... [-Wunsafe-buffer-usage]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"unsafe-buffer-usage"}, | ||
[ | [o]="unsafe-buffer-usage", | ||
[ | [e]="%0 is an %select{unsafe pointer used for buffer access|unsafe buffer that does not perform bounds checks}1", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) is an (?:unsafe pointer used for buffer access|unsafe buffer that does not perform bounds checks)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunsafe\\-buffer\\-usage[^\\]]*\\]", | ||
[ | [h]=x, | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[j]={{ | [j]={{E,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();"},{E,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())) {"},{E,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())) {"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp"]={"clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:6:9: warning: \'ptr\' is an unsafe pointer used for buffer access [-Wunsafe-buffer-usage]","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:12:7: warning: \'array\' is an unsafe buffer that does not perform bounds checks [-Wunsafe-buffer-usage]","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:18:7: warning: \'ptr\' is an unsafe pointer used for buffer access [-Wunsafe-buffer-usage]","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:24:5: warning: \'array\' is an unsafe buffer that does not perform bounds checks [-Wunsafe-buffer-usage]","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:31:37: warning: \'ptr\' is an unsafe pointer used for buffer access [-Wunsafe-buffer-usage]","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:38:37: warning: \'array\' is an unsafe pointer used for buffer access [-Wunsafe-buffer-usage]","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:87:16: warning: \'ptr\' is an unsafe pointer used for buffer access [-Wunsafe-buffer-usage]","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:96:14: warning: \'array\' is an unsafe buffer that does not perform bounds checks [-Wunsafe-buffer-usage]"} | |||
} | |||
}, | }, | ||
["warn_unsequenced_mod_mod"]={ | ["warn_unsequenced_mod_mod"]={ | ||
[ | [g]="multiple unsequenced modifications to A [-Wunsequenced]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"sequence-point","unsequenced"}, | ||
[ | [o]="unsequenced", | ||
[ | [e]="multiple unsequenced modifications to %0", | ||
[ | [f]=m, | ||
[ | [a]="multiple unsequenced modifications to (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunsequenced[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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()));"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-unsequenced.c"]={"clang/test/Sema/warn-unsequenced.c:13:7: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:15:8: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:17:3: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:18:4: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:19:10: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:20:11: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:21:13: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:22:13: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:23:14: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:27:7: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:30:9: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:32:3: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:33:5: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:34:4: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:35:6: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:37:7: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:40:15: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:80:13: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:84:11: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:85:15: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:88:13: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:89:13: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:93:21: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]"} | |||
} | |||
}, | }, | ||
["warn_unsequenced_mod_use"]={ | ["warn_unsequenced_mod_use"]={ | ||
[ | [g]="unsequenced modification and access to A [-Wunsequenced]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"sequence-point","unsequenced"}, | ||
[ | [o]="unsequenced", | ||
[ | [e]="unsequenced modification and access to %0", | ||
[ | [f]=m, | ||
[ | [a]="unsequenced modification and access to (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunsequenced[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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()));"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-unsequenced.c"]={"clang/test/Sema/warn-unsequenced.c:12:7: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:14:8: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:25:7: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:26:10: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:38:8: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:41:15: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:43:16: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:45:12: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:47:16: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:48:12: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:51:16: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:52:12: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:54:18: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:56:4: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:60:10: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:67:6: warning: unsequenced modification and access to \'q\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:77:10: warning: unsequenced modification and access to \'a\' [-Wunsequenced]"} | |||
} | |||
}, | }, | ||
["warn_unsigned_abs"]={ | ["warn_unsigned_abs"]={ | ||
[ | [g]="taking the absolute value of unsigned type A has no effect [-Wabsolute-value]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Gc}, | ||
[ | [o]=Gc, | ||
[ | [e]="taking the absolute value of unsigned type %0 has no effect", | ||
[ | [f]=m, | ||
[ | [a]="taking the absolute value of unsigned type (.*?) has no effect", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wabsolute\\-value[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."}, | [i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."}, | ||
[j]={{ | [j]={{y,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,"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-absolute-value-header.c"]={"clang/test/Sema/warn-absolute-value-header.c:15:9: warning: taking the absolute value of unsigned type \'unsigned int\' has no effect [-Wabsolute-value]"} | |||
} | |||
}, | }, | ||
["warn_unsigned_always_true_comparison"]={ | ["warn_unsigned_always_true_comparison"]={ | ||
[ | [g]="result of comparison of ... A ... is always B [-Wtautological-unsigned-zero-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Pc,"tautological-unsigned-zero-compare","type-limits"}, | ||
[ | [o]="tautological-unsigned-zero-compare", | ||
[ | [e]="result of comparison of %select{%3|unsigned expression}0 %2 %select{unsigned expression|%3}0 is always %4", | ||
[ | [f]=m, | ||
[ | [a]="result of comparison of (?:(.*?)|unsigned expression) (.*?) (?:unsigned expression|(.*?)) is always (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtautological\\-unsigned\\-zero\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/compare.c"]={"clang/test/Sema/compare.c:90:19: warning: result of comparison of unsigned expression < 0 is always false [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:89:20: warning: result of comparison of unsigned expression < 0 is always false [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:81:13: warning: result of comparison of unsigned expression < 0 is always false [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:285:11: warning: result of comparison of 0 <= unsigned expression is always true [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:284:11: warning: result of comparison of unsigned expression >= 0 is always true [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:283:11: warning: result of comparison of 0 > unsigned expression is always false [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:282:13: warning: result of comparison of unsigned expression < 0 is always false [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:297:11: warning: result of comparison of unsigned expression < 0 is always false [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:299:11: warning: result of comparison of unsigned expression < 0 is always false [-Wtautological-unsigned-zero-compare]"} | |||
} | |||
}, | }, | ||
["warn_unsigned_bitfield_assigned_signed_enum"]={ | ["warn_unsigned_bitfield_assigned_signed_enum"]={ | ||
[ | [g]="assigning value of signed enum type A to unsigned bit-field B; negative enumerators of enum C will be converted to positive values [-Wbitfield-enum-conversion]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"bitfield-enum-conversion",Fb,Wb}, | ||
[ | [o]="bitfield-enum-conversion", | ||
[ | [e]="assigning value of signed enum type %1 to unsigned bit-field %0; negative enumerators of enum %1 will be converted to positive values", | ||
[ | [f]=m, | ||
[ | [a]="assigning value of signed enum type (.*?) to unsigned bit\\-field (.*?); negative enumerators of enum (.*?) will be converted to positive values", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-enum\\-conversion[^\\]]*\\]", | ||
[ | [h]=Pb, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp"]={"clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:27:14: warning: assigning value of signed enum type \'TwoBitsSigned\' to unsigned bit-field \'two_bits\'; negative enumerators of enum \'TwoBitsSigned\' will be converted to positive values [-Wbitfield-enum-conversion]","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:29:14: warning: assigning value of signed enum type \'ThreeBitsSigned\' to unsigned bit-field \'two_bits\'; negative enumerators of enum \'ThreeBitsSigned\' will be converted to positive values [-Wbitfield-enum-conversion]","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:38:16: warning: assigning value of signed enum type \'TwoBitsSigned\' to unsigned bit-field \'three_bits\'; negative enumerators of enum \'TwoBitsSigned\' will be converted to positive values [-Wbitfield-enum-conversion]","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:40:16: warning: assigning value of signed enum type \'ThreeBitsSigned\' to unsigned bit-field \'three_bits\'; negative enumerators of enum \'ThreeBitsSigned\' will be converted to positive values [-Wbitfield-enum-conversion]"} | |||
} | |||
}, | }, | ||
["warn_unsigned_char_always_true_comparison"]={ | ["warn_unsigned_char_always_true_comparison"]={ | ||
[ | [g]="result of comparison of ... A ... is always B, since char is interpreted as unsigned [-Wtautological-unsigned-char-zero-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Pc,"tautological-unsigned-char-zero-compare","type-limits"}, | ||
[ | [o]="tautological-unsigned-char-zero-compare", | ||
[ | [e]="result of comparison of %select{%3|char expression}0 %2 %select{char expression|%3}0 is always %4, since char is interpreted as unsigned", | ||
[ | [f]=m, | ||
[ | [a]="result of comparison of (?:(.*?)|char expression) (.*?) (?:char expression|(.*?)) is always (.*?), since char is interpreted as unsigned", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtautological\\-unsigned\\-char\\-zero\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"}, | [i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier"}, | ||
[j]={{ | [j]={{y,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"]={ | ||
[ | [g]="result of comparison of ... A ... is always B [-Wtautological-unsigned-enum-zero-compare]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Pc,"tautological-unsigned-enum-zero-compare","type-limits"}, | ||
[ | [o]="tautological-unsigned-enum-zero-compare", | ||
[ | [e]="result of comparison of %select{%3|unsigned enum expression}0 %2 %select{unsigned enum expression|%3}0 is always %4", | ||
[ | [f]=m, | ||
[ | [a]="result of comparison of (?:(.*?)|unsigned enum expression) (.*?) (?:unsigned enum expression|(.*?)) is always (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtautological\\-unsigned\\-enum\\-zero\\-compare[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/compare.c"]={"clang/test/Sema/compare.c:331:9: warning: result of comparison of unsigned enum expression < 0 is always false [-Wtautological-unsigned-enum-zero-compare]","clang/test/Sema/compare.c:337:9: warning: result of comparison of unsigned enum expression >= 0 is always true [-Wtautological-unsigned-enum-zero-compare]","clang/test/Sema/compare.c:346:9: warning: result of comparison of 0 <= unsigned enum expression is always true [-Wtautological-unsigned-enum-zero-compare]","clang/test/Sema/compare.c:348:9: warning: result of comparison of 0 > unsigned enum expression is always false [-Wtautological-unsigned-enum-zero-compare]","clang/test/Sema/compare.c:357:9: warning: result of comparison of unsigned enum expression < 0 is always false [-Wtautological-unsigned-enum-zero-compare]","clang/test/Sema/compare.c:363:9: warning: result of comparison of unsigned enum expression >= 0 is always true [-Wtautological-unsigned-enum-zero-compare]","clang/test/Sema/compare.c:372:10: warning: result of comparison of 0 <= unsigned enum expression is always true [-Wtautological-unsigned-enum-zero-compare]","clang/test/Sema/compare.c:374:10: warning: result of comparison of 0 > unsigned enum expression is always false [-Wtautological-unsigned-enum-zero-compare]"} | |||
} | |||
}, | }, | ||
["warn_unsupported_branch_protection"]={ | ["warn_unsupported_branch_protection"]={ | ||
[ | [g]="invalid branch protection option \'A\' in \'B\' [-Wbranch-protection]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={rc}, | ||
[ | [o]=rc, | ||
[ | [e]="invalid branch protection option \'%0\' in \'%1\'", | ||
[ | [f]=m, | ||
[ | [a]="invalid branch protection option \'(.*?)\' in \'(.*?)\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wbranch\\-protection[^\\]]*\\]", | ||
[ | [h]=x, | ||
[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",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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/Preprocessor/arm-target-features.c"]={"clang: warning: invalid branch protection option \'b-key\' in \'-mbranch-protection=bti+pac-ret+b-key+leaf\' [-Wbranch-protection]"} | |||
} | |||
}, | }, | ||
["warn_unsupported_branch_protection_spec"]={ | ["warn_unsupported_branch_protection_spec"]={ | ||
[ | [g]="unsupported branch protection specification \'A\' [-Wbranch-protection]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={rc}, | ||
[ | [o]=rc, | ||
[ | [e]="unsupported branch protection specification \'%0\'", | ||
[ | [f]=m, | ||
[ | [a]="unsupported branch protection specification \'(.*?)\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wbranch\\-protection[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{C,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/arm-branch-protection-attr-err.c"]={"clang/test/Sema/arm-branch-protection-attr-err.c:19:23: warning: unsupported branch protection specification \'b-key\' [-Wbranch-protection]"} | |||
} | |||
}, | }, | ||
["warn_unsupported_lifetime_extension"]={ | ["warn_unsupported_lifetime_extension"]={ | ||
[ | [g]="sorry, lifetime extension of ... created by aggregate initialization using default member initializer is not supported; lifetime of ... will end at the end of the full-expression [-Wdangling]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Yb}, | ||
[ | [o]=Yb, | ||
[ | [e]="sorry, lifetime extension of %select{temporary|backing array of initializer list}0 created by aggregate initialization using default member initializer is not supported; lifetime of %select{temporary|backing array}0 will end at the end of the full-expression", | ||
[ | [f]=m, | ||
[ | [a]="sorry, lifetime extension of (?:temporary|backing array of initializer list) created by aggregate initialization using default member initializer is not supported; lifetime of (?:temporary|backing array) will end at the end of the full\\-expression", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdangling[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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,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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/eval-crashes.cpp"]={"clang/test/SemaCXX/eval-crashes.cpp:32:10: warning: sorry, lifetime extension of temporary created by aggregate initialization using default member initializer is not supported; lifetime of temporary will end at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/eval-crashes.cpp:32:10: warning: sorry, lifetime extension of temporary created by aggregate initialization using default member initializer is not supported; lifetime of temporary will end at the end of the full-expression [-Wdangling]"} | |||
} | |||
}, | }, | ||
["warn_unsupported_target_attribute"]={ | ["warn_unsupported_target_attribute"]={ | ||
[ | [g]="...... \'A\' in the \'...\' attribute string; \'...\' attribute ignored [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="%select{unsupported|duplicate|unknown}0%select{| CPU| tune CPU}1 \'%2\' in the \'%select{target|target_clones|target_version}3\' attribute string; \'%select{target|target_clones|target_version}3\' attribute ignored", | ||
[ | [f]=m, | ||
[ | [a]="(?:unsupported|duplicate|unknown)(?:| CPU| tune CPU) \'(.*?)\' in the \'(?:target|target_clones|target_version)\' attribute string; \'(?:target|target_clones|target_version)\' attribute ignored", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{C,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;"},{C,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;"},{C,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;"},{C,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;"},{C,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;"},{C,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;"},{C,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;"},{C,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;"},{C,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;"},{C,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;"},{C,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;"},{C,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;"},{C,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;"},{C,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:6:36: warning: unsupported \'default\' in the \'target_clones\' attribute string; \'target_clones\' attribute ignored [-Wignored-attributes]","clang/test/Sema/attr-target-clones-aarch64.c:55:35: warning: unsupported \'\' in the \'target_clones\' attribute string; \'target_clones\' attribute ignored [-Wignored-attributes]","clang/test/Sema/attr-target-clones-aarch64.c:59:36: warning: unsupported \'default\' in the \'target_clones\' attribute string; \'target_clones\' attribute ignored [-Wignored-attributes]","clang/test/Sema/attr-target-clones-aarch64.c:59:36: warning: unsupported \'default\' in the \'target_clones\' attribute string; \'target_clones\' attribute ignored [-Wignored-attributes]","clang/test/Sema/attr-target-clones-aarch64.c:61:36: warning: unsupported \'\' in the \'target_clones\' attribute string; \'target_clones\' attribute ignored [-Wignored-attributes]","clang/test/Sema/attr-target-clones-aarch64.c:64:36: warning: unsupported \'bs\' in the \'target_clones\' attribute string; \'target_clones\' attribute ignored [-Wignored-attributes]","clang/test/Sema/attr-target-clones-aarch64.c:68:46: warning: unsupported \'\' in the \'target_clones\' attribute string; \'target_clones\' attribute ignored [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_unused_but_set_parameter"]={ | ["warn_unused_but_set_parameter"]={ | ||
[ | [g]="parameter A set but not used [-Wunused-but-set-parameter]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={x,t,Xb,"unused-but-set-parameter"}, | ||
[ | [o]="unused-but-set-parameter", | ||
[ | [e]="parameter %0 set but not used", | ||
[ | [f]=m, | ||
[ | [a]="parameter (.*?) set but not used", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-but\\-set\\-parameter[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Qb,1615397021,Ob}, | ||
[j]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-unused-but-set-parameters-cpp.cpp"]={"clang/test/SemaCXX/warn-unused-but-set-parameters-cpp.cpp:4:12: warning: parameter \'y\' set but not used [-Wunused-but-set-parameter]","clang/test/SemaCXX/warn-unused-but-set-parameters-cpp.cpp:12:15: warning: parameter \'y\' set but not used [-Wunused-but-set-parameter]"} | |||
} | |||
}, | }, | ||
["warn_unused_but_set_variable"]={ | ["warn_unused_but_set_variable"]={ | ||
[ | [g]="variable A set but not used [-Wunused-but-set-variable]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,Y,"unused-but-set-variable"}, | ||
[ | [o]="unused-but-set-variable", | ||
[ | [e]="variable %0 set but not used", | ||
[ | [f]=m, | ||
[ | [a]="variable (.*?) set but not used", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-but\\-set\\-variable[^\\]]*\\]", | ||
[ | [h]=X, | ||
[i]={ | [i]={Qb,1615397021,Ob}, | ||
[j]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/objc-precise-lifetime-unused-variable.m"]={"clang/test/SemaObjC/objc-precise-lifetime-unused-variable.m:17:8: warning: variable \'y2\' set but not used [-Wunused-but-set-variable]","clang/test/SemaObjC/objc-precise-lifetime-unused-variable.m:10:6: warning: variable \'x2\' set but not used [-Wunused-but-set-variable]"} | |||
} | |||
}, | }, | ||
["warn_unused_call"]={ | ["warn_unused_call"]={ | ||
[ | [g]="ignoring return value of function declared with A attribute [-Wunused-value]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,Y,fb}, | ||
[ | [o]=fb, | ||
[ | [e]="ignoring return value of function declared with %0 attribute", | ||
[ | [f]=m, | ||
[ | [a]="ignoring return value of function declared with (.*?) attribute", | ||
[ | [b]=cc, | ||
[ | [h]=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]={{ | [j]={{S,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\";"},{S,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\";"}}, | ||
[p]={ | |||
["clang/test/Sema/unused-expr.c"]={"clang/test/Sema/unused-expr.c:28:3: warning: ignoring return value of function declared with const attribute [-Wunused-value]","clang/test/Sema/unused-expr.c:92:3: warning: ignoring return value of function declared with pure attribute [-Wunused-value]","clang/test/Sema/unused-expr.c:93:3: warning: ignoring return value of function declared with const attribute [-Wunused-value]","clang/test/Sema/unused-expr.c:94:3: warning: ignoring return value of function declared with const attribute [-Wunused-value]","clang/test/Sema/unused-expr.c:143:15: warning: ignoring return value of function declared with pure attribute [-Wunused-value]"} | |||
} | |||
}, | }, | ||
["warn_unused_comma_left_operand"]={ | ["warn_unused_comma_left_operand"]={ | ||
[ | [g]="left operand of comma operator has no effect [-Wunused-value]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,Y,fb}, | ||
[ | [o]=fb, | ||
[ | [e]="left operand of comma operator has no effect", | ||
[ | [f]=m, | ||
[ | [a]="left operand of comma operator has no effect", | ||
[ | [b]=cc, | ||
[ | [h]=X, | ||
[i]={ | [i]={Qb,1615397021,Ob}, | ||
[j]={{ | [j]={{A,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);"},{S,386,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n if (DiagID != diag::warn_unused_comma_left_operand || !isSFINAEContext())"}}, | ||
[p]={ | |||
["clang/test/Parser/objc-messaging-1.m"]={"clang/test/Parser/objc-messaging-1.m:9:26: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:9:28: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:11:26: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:11:28: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:13:26: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:13:28: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:13:35: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:13:37: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:15:34: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:15:37: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:17:33: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:17:36: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:19:37: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:19:40: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:23:3: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:23:6: warning: left operand of comma operator has no effect [-Wunused-value]"} | |||
} | |||
}, | }, | ||
["warn_unused_comparison"]={ | ["warn_unused_comparison"]={ | ||
[ | [g]="... comparison result unused [-Wunused-comparison]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,Y,"unused-comparison",fb}, | ||
[ | [o]="unused-comparison", | ||
[ | [e]="%select{equality|inequality|relational|three-way}0 comparison result unused", | ||
[ | [f]=m, | ||
[ | [a]="(?:equality|inequality|relational|three\\-way) comparison result unused", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-comparison[^\\]]*\\]", | ||
[ | [h]=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]={{ | [j]={{S,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/unused-expr.c"]={"clang/test/Sema/unused-expr.c:10:6: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:14:5: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:57:7: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:59:7: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:62:7: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:65:7: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:69:7: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:71:10: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:73:12: warning: relational comparison result unused [-Wunused-comparison]"} | |||
} | |||
}, | }, | ||
["warn_unused_const_variable"]={ | ["warn_unused_const_variable"]={ | ||
[ | [g]="unused variable A [-Wunused-const-variable]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,Y,"unused-const-variable","unused-variable"}, | ||
[ | [o]="unused-const-variable", | ||
[ | [e]="unused variable %0", | ||
[ | [f]=m, | ||
[ | [a]="unused variable (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-const\\-variable[^\\]]*\\]", | ||
[ | [h]=X, | ||
[i]={"c531daefd9cc",1378895855,"Split -Wunused-variable warning."}, | [i]={"c531daefd9cc",1378895855,"Split -Wunused-variable warning."}, | ||
[j]={{ | [j]={{W,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;"}}, | ||
[p]={ | |||
["clang/test/Misc/diag-unused-source-ranges.cpp"]={"clang/test/Misc/diag-unused-source-ranges.cpp:124:15:{124:15-124:27}: warning: unused variable \'const_unused\' [-Wunused-const-variable]"} | |||
} | |||
}, | }, | ||
["warn_unused_constructor"]={ | ["warn_unused_constructor"]={ | ||
[ | [g]="ignoring temporary created by a constructor declared with A attribute [-Wunused-value]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,Y,fb}, | ||
[ | [o]=fb, | ||
[ | [e]="ignoring temporary created by a constructor declared with %0 attribute", | ||
[ | [f]=m, | ||
[ | [a]="ignoring temporary created by a constructor declared with (.*?) attribute", | ||
[ | [b]=cc, | ||
[ | [h]=X, | ||
[i]={"46441fdb3c1d",1564067456,"Implement P1771"}, | [i]={"46441fdb3c1d",1564067456,"Implement P1771"}, | ||
[j]={{ | [j]={{S,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;"}}, | ||
[p]={ | |||
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp:98:3: warning: ignoring temporary created by a constructor declared with \'nodiscard\' attribute [-Wunused-value]"} | |||
} | |||
}, | }, | ||
["warn_unused_constructor_msg"]={ | ["warn_unused_constructor_msg"]={ | ||
[ | [g]="ignoring temporary created by a constructor declared with A attribute: B [-Wunused-value]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,Y,fb}, | ||
[ | [o]=fb, | ||
[ | [e]="ignoring temporary created by a constructor declared with %0 attribute: %1", | ||
[ | [f]=m, | ||
[ | [a]="ignoring temporary created by a constructor declared with (.*?) attribute\\: (.*?)", | ||
[ | [b]=cc, | ||
[ | [h]=X, | ||
[i]={"46441fdb3c1d",1564067456,"Implement P1771"}, | [i]={"46441fdb3c1d",1564067456,"Implement P1771"}, | ||
[j]={{ | [j]={{S,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;"}}, | ||
[p]={ | |||
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp:99:3: warning: ignoring temporary created by a constructor declared with \'nodiscard\' attribute: Don\'t let that S-Char go! [-Wunused-value]","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp:102:3: warning: ignoring temporary created by a constructor declared with \'nodiscard\' attribute: Don\'t throw me away either! [-Wunused-value]","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp:113:3: warning: ignoring temporary created by a constructor declared with \'nodiscard\' attribute: Don\'t throw me away! [-Wunused-value]","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp:115:3: warning: ignoring temporary created by a constructor declared with \'nodiscard\' attribute: Don\'t let that S-Char go! [-Wunused-value]","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp:121:3: warning: ignoring temporary created by a constructor declared with \'nodiscard\' attribute: Don\'t throw me away! [-Wunused-value]"} | |||
} | |||
}, | }, | ||
["warn_unused_container_subscript_expr"]={ | ["warn_unused_container_subscript_expr"]={ | ||
[ | [g]="container access result unused - container access should not be used for side effects [-Wunused-value]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,Y,fb}, | ||
[ | [o]=fb, | ||
[ | [e]="container access result unused - container access should not be used for side effects", | ||
[ | [f]=m, | ||
[ | [a]="container access result unused \\- container access should not be used for side effects", | ||
[ | [b]=cc, | ||
[ | [h]=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]={{ | [j]={{S,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/objc-container-subscripting-2.m"]={"clang/test/SemaObjC/objc-container-subscripting-2.m:25:3: warning: container access result unused - container access should not be used for side effects [-Wunused-value]","clang/test/SemaObjC/objc-container-subscripting-2.m:28:3: warning: container access result unused - container access should not be used for side effects [-Wunused-value]"} | |||
} | |||
}, | }, | ||
["warn_unused_exception_param"]={ | ["warn_unused_exception_param"]={ | ||
[ | [g]="unused exception parameter A [-Wunused-exception-parameter]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"unused-exception-parameter"}, | ||
[ | [o]="unused-exception-parameter", | ||
[ | [e]="unused exception parameter %0", | ||
[ | [f]=m, | ||
[ | [a]="unused exception parameter (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-exception\\-parameter[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/warn-unused-exception-param.m"]={"clang/test/SemaObjC/warn-unused-exception-param.m:3:21: warning: unused exception parameter \'a\' [-Wunused-exception-parameter]"} | |||
} | |||
}, | }, | ||
["warn_unused_expr"]={ | ["warn_unused_expr"]={ | ||
[ | [g]="expression result unused [-Wunused-value]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,Y,fb}, | ||
[ | [o]=fb, | ||
[ | [e]="expression result unused", | ||
[ | [f]=m, | ||
[ | [a]="expression result unused", | ||
[ | [b]=cc, | ||
[ | [h]=X, | ||
[i]={ | [i]={nc,1237025389,qc}, | ||
[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());"},{ | [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());"},{Ub,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);"}}, | ||
[p]={ | |||
["clang/test/CodeGen/2004-06-08-OpaqueStructArg.c"]={"clang/test/CodeGen/2004-06-08-OpaqueStructArg.c:6:7: warning: expression result unused [-Wunused-value]"} | |||
} | |||
}, | }, | ||
["warn_unused_function"]={ | ["warn_unused_function"]={ | ||
[ | [g]="unused function A [-Wunused-function]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,Y,"unused-function"}, | ||
[ | [o]="unused-function", | ||
[ | [e]="unused function %0", | ||
[ | [f]=m, | ||
[ | [a]="unused function (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-function[^\\]]*\\]", | ||
[ | [h]=X, | ||
[i]={"90073804fb1c",1265933250,"Implementing unused function warning."}, | [i]={"90073804fb1c",1265933250,"Implementing unused function warning."}, | ||
[j]={{ | [j]={{W,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;"}}, | ||
[p]={ | |||
["clang/test/Misc/diag-unused-source-ranges.cpp"]={"clang/test/Misc/diag-unused-source-ranges.cpp:52:12:{52:12-52:23}: warning: unused function \'unused_func\' [-Wunused-function]","clang/test/Misc/diag-unused-source-ranges.cpp:69:6:{69:6-69:21}: warning: unused function \'arrow_decl<int>\' [-Wunused-function]"} | |||
} | |||
}, | }, | ||
["warn_unused_label"]={ | ["warn_unused_label"]={ | ||
[ | [g]="unused label A [-Wunused-label]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,Y,"unused-label"}, | ||
[ | [o]="unused-label", | ||
[ | [e]="unused label %0", | ||
[ | [f]=m, | ||
[ | [a]="unused label (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-label[^\\]]*\\]", | ||
[ | [h]=X, | ||
[i]={"72664df10386",1284931285,"Implement -Wunused-label."}, | [i]={"72664df10386",1284931285,"Implement -Wunused-label."}, | ||
[j]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-unused-label-error.cpp"]={"clang/test/SemaCXX/warn-unused-label-error.cpp:7:5: warning: unused label \'A\' [-Wunused-label]"} | |||
} | |||
}, | }, | ||
["warn_unused_lambda_capture"]={ | ["warn_unused_lambda_capture"]={ | ||
[ | [g]="lambda capture A is not ... [-Wunused-lambda-capture]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,Y,"unused-lambda-capture"}, | ||
[ | [o]="unused-lambda-capture", | ||
[ | [e]="lambda capture %0 is not %select{used|required to be captured for this use}1", | ||
[ | [f]=m, | ||
[ | [a]="lambda capture (.*?) is not (?:used|required to be captured for this use)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-lambda\\-capture[^\\]]*\\]", | ||
[ | [h]=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",1879,"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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-unused-lambda-capture.cpp"]={"clang/test/SemaCXX/warn-unused-lambda-capture.cpp:43:36: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:44:43: warning: lambda capture \'i\' is not required to be captured for this use [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:45:45: warning: lambda capture \'i\' is not required to be captured for this use [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:46:42: warning: lambda capture \'k\' is not required to be captured for this use [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:49:41: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:52:50: warning: lambda capture \'j\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:55:45: warning: lambda capture \'j\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:58:51: warning: lambda capture \'j\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:64:38: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:68:37: warning: lambda capture \'trivial\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:71:53: warning: lambda capture \'cons\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:87:34: warning: lambda capture \'this\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:90:39: warning: lambda capture \'this\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:99:34: warning: lambda capture \'this\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:102:39: warning: lambda capture \'this\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:111:34: warning: lambda capture \'this\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:123:34: warning: lambda capture \'this\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:200:23: warning: lambda capture \'c\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:148:36: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:149:43: warning: lambda capture \'i\' is not required to be captured for this use [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:150:45: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:151:42: warning: lambda capture \'k\' is not required to be captured for this use [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:152:50: warning: lambda capture \'k\' is not required to be captured for this use [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:155:41: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:158:50: warning: lambda capture \'j\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:161:45: warning: lambda capture \'j\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:164:51: warning: lambda capture \'j\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:168:53: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:172:38: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:176:37: warning: lambda capture \'trivial\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:179:53: warning: lambda capture \'cons\' is not used [-Wunused-lambda-capture]"} | |||
} | |||
}, | }, | ||
["warn_unused_local_typedef"]={ | ["warn_unused_local_typedef"]={ | ||
[ | [g]="unused ... A [-Wunused-local-typedef]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,Y,"unused-local-typedef","unused-local-typedefs"}, | ||
[ | [o]="unused-local-typedef", | ||
[ | [e]="unused %select{typedef|type alias}0 %1", | ||
[ | [f]=m, | ||
[ | [a]="unused (?:typedef|type alias) (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-local\\-typedef[^\\]]*\\]", | ||
[ | [h]=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]={{ | [j]={{W,1022,"void Sema::emitAndClearUnusedLocalTypedefWarnings() {\n for (const TypedefNameDecl *TD : UnusedLocalTypedefNameCandidates) {\n Diag(TD->getLocation(), diag::warn_unused_local_typedef) << isa<TypeAliasDecl>(TD) << TD->getDeclName();"}}, | ||
[p]={ | |||
["clang/test/Sema/c2x-maybe_unused.c"]={"clang/test/Sema/c2x-maybe_unused.c:21:15: warning: unused typedef \'I\' [-Wunused-local-typedef]"} | |||
} | |||
}, | }, | ||
["warn_unused_member_function"]={ | ["warn_unused_member_function"]={ | ||
[ | [g]="unused member function A [-Wunused-member-function]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"unused-member-function"}, | ||
[ | [o]="unused-member-function", | ||
[ | [e]="unused member function %0", | ||
[ | [f]=m, | ||
[ | [a]="unused member function (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-member\\-function[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"beb71b315a89",1282082804,"Rename -Wunused-method -> -Wunused-member-function."}, | [i]={"beb71b315a89",1282082804,"Rename -Wunused-method -> -Wunused-member-function."}, | ||
[j]={{ | [j]={{W,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;"}}, | ||
[p]={ | |||
["clang/test/Misc/diag-unused-source-ranges.cpp"]={"clang/test/Misc/diag-unused-source-ranges.cpp:106:8:{106:8-106:11}: warning: unused member function \'fun\' [-Wunused-member-function]"} | |||
} | |||
}, | }, | ||
["warn_unused_parameter"]={ | ["warn_unused_parameter"]={ | ||
[ | [g]="unused parameter A [-Wunused-parameter]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={x,t,Xb,"unused-parameter"}, | ||
[ | [o]="unused-parameter", | ||
[ | [e]="unused parameter %0", | ||
[ | [f]=m, | ||
[ | [a]="unused parameter (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-parameter[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-unused.c"]={"clang/test/Sema/attr-unused.c:29:12: warning: unused parameter \'x\' [-Wunused-parameter]"} | |||
} | |||
}, | }, | ||
["warn_unused_private_field"]={ | ["warn_unused_private_field"]={ | ||
[ | [g]="private field A is not used [-Wunused-private-field]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,Y,"unused-private-field"}, | ||
[ | [o]="unused-private-field", | ||
[ | [e]="private field %0 is not used", | ||
[ | [f]=m, | ||
[ | [a]="private field (.*?) is not used", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-private\\-field[^\\]]*\\]", | ||
[ | [h]=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]={{ | [j]={{W,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())) {"},{W,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();"},{ab,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())) {"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-unused-private-field.cpp"]={"clang/test/SemaCXX/warn-unused-private-field.cpp:45:7: warning: private field \'unused_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:63:7: warning: private field \'unused_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:124:7: warning: private field \'primitive_type_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:125:6: warning: private field \'pointer_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:126:7: warning: private field \'no_initializer_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:127:7: warning: private field \'default_initializer_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:128:7: warning: private field \'other_initializer_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:129:14: warning: private field \'unused_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:130:7: warning: private field \'in_class_initializer_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:132:11: warning: private field \'trivial_initializer_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:137:11: warning: private field \'trivial_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:173:7: warning: private field \'unused_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:205:7: warning: private field \'d\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:240:9: warning: private field \'p_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:241:8: warning: private field \'b_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:242:6: warning: private field \'a_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:243:9: warning: private field \'p2_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:253:12: warning: private field \'p\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:262:7: warning: private field \'a\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:277:7: warning: private field \'n\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:285:7: warning: private field \'n\' is not used [-Wunused-private-field]"} | |||
} | |||
}, | }, | ||
["warn_unused_property_backing_ivar"]={ | ["warn_unused_property_backing_ivar"]={ | ||
[ | [g]="ivar A which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,Y,"unused-property-ivar"}, | ||
[ | [o]="unused-property-ivar", | ||
[ | [e]="ivar %0 which backs the property is not referenced in this property\'s accessor", | ||
[ | [f]=m, | ||
[ | [a]="ivar (.*?) which backs the property is not referenced in this property\'s accessor", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-property\\-ivar[^\\]]*\\]", | ||
[ | [h]=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]={{ | [j]={{P,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/unused-backing-ivar-warning.m"]={"clang/test/SemaObjC/unused-backing-ivar-warning.m:18:1: warning: ivar \'_x\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:21:1: warning: ivar \'_y\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:25:1: warning: ivar \'_v\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:38:1: warning: ivar \'_u\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:48:1: warning: ivar \'tIvar\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:122:1: warning: ivar \'q\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:123:1: warning: ivar \'q\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:124:1: warning: ivar \'r\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:145:1: warning: ivar \'_p2\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:200:1: warning: ivar \'_cidURL1\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]"} | |||
} | |||
}, | }, | ||
["warn_unused_property_expr"]={ | ["warn_unused_property_expr"]={ | ||
[ | [g]="property access result unused - getters should not be used for side effects [-Wunused-getter-return-value]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unused-getter-return-value"}, | ||
[ | [o]="unused-getter-return-value", | ||
[ | [e]="property access result unused - getters should not be used for side effects", | ||
[ | [f]=m, | ||
[ | [a]="property access result unused \\- getters should not be used for side effects", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-getter\\-return\\-value[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{S,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;"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/access-property-getter.m"]={"clang/test/SemaObjC/access-property-getter.m:8:5: warning: property access result unused - getters should not be used for side effects [-Wunused-getter-return-value]"} | |||
} | |||
}, | }, | ||
["warn_unused_result"]={ | ["warn_unused_result"]={ | ||
[ | [g]="ignoring return value of function declared with A attribute [-Wunused-result]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,Y,"unused-result",fb}, | ||
[ | [o]="unused-result", | ||
[ | [e]="ignoring return value of function declared with %0 attribute", | ||
[ | [f]=m, | ||
[ | [a]="ignoring return value of function declared with (.*?) attribute", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-result[^\\]]*\\]", | ||
[ | [h]=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]={{ | [j]={{S,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/unused-expr.c"]={"clang/test/Sema/unused-expr.c:79:3: warning: ignoring return value of function declared with \'warn_unused_result\' attribute [-Wunused-result]","clang/test/Sema/unused-expr.c:91:3: warning: ignoring return value of function declared with \'warn_unused_result\' attribute [-Wunused-result]","clang/test/Sema/unused-expr.c:95:12: warning: ignoring return value of function declared with \'warn_unused_result\' attribute [-Wunused-result]","clang/test/Sema/unused-expr.c:104:3: warning: ignoring return value of function declared with \'warn_unused_result\' attribute [-Wunused-result]","clang/test/Sema/unused-expr.c:148:3: warning: ignoring return value of function declared with \'warn_unused_result\' attribute [-Wunused-result]"} | |||
} | |||
}, | }, | ||
["warn_unused_result_msg"]={ | ["warn_unused_result_msg"]={ | ||
[ | [g]="ignoring return value of function declared with A attribute: B [-Wunused-result]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,Y,"unused-result",fb}, | ||
[ | [o]="unused-result", | ||
[ | [e]="ignoring return value of function declared with %0 attribute: %1", | ||
[ | [f]=m, | ||
[ | [a]="ignoring return value of function declared with (.*?) attribute\\: (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-result[^\\]]*\\]", | ||
[ | [h]=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]={{ | [j]={{S,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/c2x-nodiscard.c"]={"clang/test/Sema/c2x-nodiscard.c:35:3: warning: ignoring return value of function declared with \'nodiscard\' attribute: Wrong [-Wunused-result]"} | |||
} | |||
}, | }, | ||
["warn_unused_result_typedef_unsupported_spelling"]={ | ["warn_unused_result_typedef_unsupported_spelling"]={ | ||
[ | [g]="\'[[...]]\' attribute ignored when applied to a typedef; consider using \'__attribute__((warn_unused_result))\' or \'[[clang::warn_unused_result]]\' instead [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="\'[[%select{nodiscard|gnu::warn_unused_result}0]]\' attribute ignored when applied to a typedef; consider using \'__attribute__((warn_unused_result))\' or \'[[clang::warn_unused_result]]\' instead", | ||
[ | [f]=m, | ||
[ | [a]="\'\\[\\[(?:nodiscard|gnu\\:\\:warn_unused_result)\\]\\]\' attribute ignored when applied to a typedef; consider using \'__attribute__\\(\\(warn_unused_result\\)\\)\' or \'\\[\\[clang\\:\\:warn_unused_result\\]\\]\' instead", | ||
[ | [b]=V, | ||
[ | [h]=q, | ||
[i]={ | [i]={Vc,1620530452,Wc}, | ||
[j]={{ | [j]={{C,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();"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-unused-result.cpp"]={"clang/test/SemaCXX/warn-unused-result.cpp:271:3: warning: \'[[nodiscard]]\' attribute ignored when applied to a typedef; consider using \'__attribute__((warn_unused_result))\' or \'[[clang::warn_unused_result]]\' instead [-Wignored-attributes]","clang/test/SemaCXX/warn-unused-result.cpp:272:3: warning: \'[[gnu::warn_unused_result]]\' attribute ignored when applied to a typedef; consider using \'__attribute__((warn_unused_result))\' or \'[[clang::warn_unused_result]]\' instead [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_unused_template"]={ | ["warn_unused_template"]={ | ||
[ | [g]="unused ... template A [-Wunused-template]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"unused-template"}, | ||
[ | [o]="unused-template", | ||
[ | [e]="unused %select{function|variable}0 template %1", | ||
[ | [f]=m, | ||
[ | [a]="unused (?:function|variable) template (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-template[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{W,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;"},{W,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;"}}, | ||
[p]={ | |||
["clang/test/Misc/diag-unused-source-ranges.cpp"]={"clang/test/Misc/diag-unused-source-ranges.cpp:28:32:{28:32-28:37}: warning: unused function template \'templ\' [-Wunused-template]","clang/test/Misc/diag-unused-source-ranges.cpp:42:10:{42:10-42:13}: warning: unused function template \'foo\' [-Wunused-template]","clang/test/Misc/diag-unused-source-ranges.cpp:63:6:{63:6-63:16}: warning: unused function template \'arrow_decl\' [-Wunused-template]","clang/test/Misc/diag-unused-source-ranges.cpp:76:10:{76:10-76:20}: warning: unused function template \'func_templ\' [-Wunused-template]","clang/test/Misc/diag-unused-source-ranges.cpp:90:35:{90:35-90:47}: warning: unused function template \'never_called\' [-Wunused-template]","clang/test/Misc/diag-unused-source-ranges.cpp:97:22:{97:22-97:31}: warning: unused variable template \'var_templ\' [-Wunused-template]"} | |||
} | |||
}, | }, | ||
["warn_unused_variable"]={ | ["warn_unused_variable"]={ | ||
[ | [g]="unused variable A [-Wunused-variable]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,v,Y,"unused-variable"}, | ||
[ | [o]="unused-variable", | ||
[ | [e]="unused variable %0", | ||
[ | [f]=m, | ||
[ | [a]="unused variable (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-variable[^\\]]*\\]", | ||
[ | [h]=X, | ||
[i]={"3beaf9bbcdb3",1255037742,"Implement support for -Wunused-variable, from Oscar Bonilla!"}, | [i]={"3beaf9bbcdb3",1255037742,"Implement support for -Wunused-variable, from Oscar Bonilla!"}, | ||
[j]={{ | [j]={{W,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;"},{H,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;"}}, | ||
[p]={ | |||
["clang/test/SemaTemplate/unused-variables.cpp"]={"clang/test/SemaTemplate/unused-variables.cpp:12:6: warning: unused variable \'x1\' [-Wunused-variable]","clang/test/SemaTemplate/unused-variables.cpp:18:5: warning: unused variable \'u\' [-Wunused-variable]"} | |||
} | |||
}, | }, | ||
["warn_unused_voidptr"]={ | ["warn_unused_voidptr"]={ | ||
[ | [g]="expression result unused; should this cast be to \'void\'? [-Wunused-value]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,Y,fb}, | ||
[ | [o]=fb, | ||
[ | [e]="expression result unused; should this cast be to \'void\'?", | ||
[ | [f]=m, | ||
[ | [a]="expression result unused; should this cast be to \'void\'\\?", | ||
[ | [b]=cc, | ||
[ | [h]=X, | ||
[i]={"2351cb9139a4",1270592654,"Devote a special diagnostic to the typo"}, | [i]={"2351cb9139a4",1270592654,"Devote a special diagnostic to the typo"}, | ||
[j]={{ | [j]={{S,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());"}}, | ||
[p]={ | |||
["clang/test/Sema/unused-expr.c"]={"clang/test/Sema/unused-expr.c:112:3: warning: expression result unused; should this cast be to \'void\'? [-Wunused-value]"} | |||
} | |||
}, | }, | ||
["warn_unused_volatile"]={ | ["warn_unused_volatile"]={ | ||
[ | [g]="expression result unused; assign into a variable to force a volatile load [-Wunused-volatile-lvalue]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unused-volatile-lvalue"}, | ||
[ | [o]="unused-volatile-lvalue", | ||
[ | [e]="expression result unused; assign into a variable to force a volatile load", | ||
[ | [f]=m, | ||
[ | [a]="expression result unused; assign into a variable to force a volatile load", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunused\\-volatile\\-lvalue[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{S,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;"}}, | ||
[p]={ | |||
["clang/test/CodeGen/exprs.c"]={"clang/test/CodeGen/exprs.c:166:3: warning: expression result unused; assign into a variable to force a volatile load [-Wunused-volatile-lvalue]","clang/test/CodeGen/exprs.c:166:14: warning: expression result unused; assign into a variable to force a volatile load [-Wunused-volatile-lvalue]","clang/test/CodeGen/exprs.c:166:25: warning: expression result unused; assign into a variable to force a volatile load [-Wunused-volatile-lvalue]","clang/test/CodeGen/exprs.c:166:59: warning: expression result unused; assign into a variable to force a volatile load [-Wunused-volatile-lvalue]"} | |||
} | |||
}, | }, | ||
["warn_use_in_invalid_state"]={ | ["warn_use_in_invalid_state"]={ | ||
[ | [g]="invalid invocation of method \'A\' on object \'B\' while it is in the \'C\' state [-Wconsumed]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Bb}, | ||
[ | [o]=Bb, | ||
[ | [e]="invalid invocation of method \'%0\' on object \'%1\' while it is in the \'%2\' state", | ||
[ | [f]=m, | ||
[ | [a]="invalid invocation of method \'(.*?)\' on object \'(.*?)\' while it is in the \'(.*?)\' state", | ||
[ | [b]=Ic, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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);"}}, | ||
[p]={ | |||
[Zc]={ | |||
[1]="clang/test/SemaCXX/warn-consumed-analysis.cpp:95:3: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[2]="clang/test/SemaCXX/warn-consumed-analysis.cpp:96:3: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[3]="clang/test/SemaCXX/warn-consumed-analysis.cpp:99:3: warning: invalid invocation of method \'operator*\' on object \'var4\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[4]="clang/test/SemaCXX/warn-consumed-analysis.cpp:105:3: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[5]="clang/test/SemaCXX/warn-consumed-analysis.cpp:112:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[6]="clang/test/SemaCXX/warn-consumed-analysis.cpp:121:3: warning: invalid invocation of method \'operator*\' on object \'D2\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[7]="clang/test/SemaCXX/warn-consumed-analysis.cpp:123:6: warning: invalid invocation of method \'~DestructorTester\' on object \'D0\' while it is in the \'unconsumed\' state [-Wconsumed]", | |||
[8]="clang/test/SemaCXX/warn-consumed-analysis.cpp:125:3: warning: invalid invocation of method \'~DestructorTester\' on object \'D1\' while it is in the \'unconsumed\' state [-Wconsumed]", | |||
[9]="clang/test/SemaCXX/warn-consumed-analysis.cpp:125:3: warning: invalid invocation of method \'~DestructorTester\' on object \'D0\' while it is in the \'unconsumed\' state [-Wconsumed]", | |||
[10]="clang/test/SemaCXX/warn-consumed-analysis.cpp:150:3: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[11]="clang/test/SemaCXX/warn-consumed-analysis.cpp:156:3: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[12]="clang/test/SemaCXX/warn-consumed-analysis.cpp:165:5: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[13]="clang/test/SemaCXX/warn-consumed-analysis.cpp:169:5: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[14]="clang/test/SemaCXX/warn-consumed-analysis.cpp:177:5: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[15]="clang/test/SemaCXX/warn-consumed-analysis.cpp:183:5: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[16]="clang/test/SemaCXX/warn-consumed-analysis.cpp:187:5: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[17]="clang/test/SemaCXX/warn-consumed-analysis.cpp:201:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[18]="clang/test/SemaCXX/warn-consumed-analysis.cpp:202:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[19]="clang/test/SemaCXX/warn-consumed-analysis.cpp:210:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[20]="clang/test/SemaCXX/warn-consumed-analysis.cpp:211:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[21]="clang/test/SemaCXX/warn-consumed-analysis.cpp:219:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[22]="clang/test/SemaCXX/warn-consumed-analysis.cpp:220:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[23]="clang/test/SemaCXX/warn-consumed-analysis.cpp:224:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[24]="clang/test/SemaCXX/warn-consumed-analysis.cpp:225:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[25]="clang/test/SemaCXX/warn-consumed-analysis.cpp:233:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[26]="clang/test/SemaCXX/warn-consumed-analysis.cpp:234:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[27]="clang/test/SemaCXX/warn-consumed-analysis.cpp:242:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[28]="clang/test/SemaCXX/warn-consumed-analysis.cpp:243:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[29]="clang/test/SemaCXX/warn-consumed-analysis.cpp:251:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[30]="clang/test/SemaCXX/warn-consumed-analysis.cpp:252:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[31]="clang/test/SemaCXX/warn-consumed-analysis.cpp:260:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[32]="clang/test/SemaCXX/warn-consumed-analysis.cpp:261:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[33]="clang/test/SemaCXX/warn-consumed-analysis.cpp:274:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[34]="clang/test/SemaCXX/warn-consumed-analysis.cpp:275:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[35]="clang/test/SemaCXX/warn-consumed-analysis.cpp:276:5: warning: invalid invocation of method \'operator*\' on object \'var2\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[36]="clang/test/SemaCXX/warn-consumed-analysis.cpp:307:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[37]="clang/test/SemaCXX/warn-consumed-analysis.cpp:308:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[38]="clang/test/SemaCXX/warn-consumed-analysis.cpp:312:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[39]="clang/test/SemaCXX/warn-consumed-analysis.cpp:313:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[40]="clang/test/SemaCXX/warn-consumed-analysis.cpp:316:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[41]="clang/test/SemaCXX/warn-consumed-analysis.cpp:317:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[42]="clang/test/SemaCXX/warn-consumed-analysis.cpp:322:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[43]="clang/test/SemaCXX/warn-consumed-analysis.cpp:325:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[44]="clang/test/SemaCXX/warn-consumed-analysis.cpp:326:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[45]="clang/test/SemaCXX/warn-consumed-analysis.cpp:330:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[46]="clang/test/SemaCXX/warn-consumed-analysis.cpp:331:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[47]="clang/test/SemaCXX/warn-consumed-analysis.cpp:334:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[48]="clang/test/SemaCXX/warn-consumed-analysis.cpp:339:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[49]="clang/test/SemaCXX/warn-consumed-analysis.cpp:340:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[50]="clang/test/SemaCXX/warn-consumed-analysis.cpp:343:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[51]="clang/test/SemaCXX/warn-consumed-analysis.cpp:344:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[52]="clang/test/SemaCXX/warn-consumed-analysis.cpp:348:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[53]="clang/test/SemaCXX/warn-consumed-analysis.cpp:349:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[54]="clang/test/SemaCXX/warn-consumed-analysis.cpp:352:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[55]="clang/test/SemaCXX/warn-consumed-analysis.cpp:353:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[56]="clang/test/SemaCXX/warn-consumed-analysis.cpp:357:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[57]="clang/test/SemaCXX/warn-consumed-analysis.cpp:358:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[58]="clang/test/SemaCXX/warn-consumed-analysis.cpp:366:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[59]="clang/test/SemaCXX/warn-consumed-analysis.cpp:367:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[60]="clang/test/SemaCXX/warn-consumed-analysis.cpp:380:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[61]="clang/test/SemaCXX/warn-consumed-analysis.cpp:381:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[62]="clang/test/SemaCXX/warn-consumed-analysis.cpp:382:5: warning: invalid invocation of method \'operator*\' on object \'var2\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[63]="clang/test/SemaCXX/warn-consumed-analysis.cpp:422:3: warning: invalid invocation of method \'operator*\' on object \'param\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[64]="clang/test/SemaCXX/warn-consumed-analysis.cpp:451:3: warning: invalid invocation of method \'operator*\' on object \'Param0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[65]="clang/test/SemaCXX/warn-consumed-analysis.cpp:452:3: warning: invalid invocation of method \'operator*\' on object \'Param1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[66]="clang/test/SemaCXX/warn-consumed-analysis.cpp:489:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[67]="clang/test/SemaCXX/warn-consumed-analysis.cpp:512:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[68]="clang/test/SemaCXX/warn-consumed-analysis.cpp:516:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[69]="clang/test/SemaCXX/warn-consumed-analysis.cpp:520:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[70]="clang/test/SemaCXX/warn-consumed-analysis.cpp:538:3: warning: invalid invocation of method \'operator*\' on object \'param\' while it is in the \'unknown\' state [-Wconsumed]", | |||
[71]="clang/test/SemaCXX/warn-consumed-analysis.cpp:548:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[72]="clang/test/SemaCXX/warn-consumed-analysis.cpp:565:3: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[73]="clang/test/SemaCXX/warn-consumed-analysis.cpp:571:3: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[74]="clang/test/SemaCXX/warn-consumed-analysis.cpp:575:3: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[75]="clang/test/SemaCXX/warn-consumed-analysis.cpp:585:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[76]="clang/test/SemaCXX/warn-consumed-analysis.cpp:593:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[77]="clang/test/SemaCXX/warn-consumed-analysis.cpp:603:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[78]="clang/test/SemaCXX/warn-consumed-analysis.cpp:613:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[79]="clang/test/SemaCXX/warn-consumed-analysis.cpp:622:7: warning: invalid invocation of method \'unconsumedCall\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[80]="clang/test/SemaCXX/warn-consumed-analysis.cpp:642:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[81]="clang/test/SemaCXX/warn-consumed-analysis.cpp:646:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[82]="clang/test/SemaCXX/warn-consumed-analysis.cpp:649:3: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[83]="clang/test/SemaCXX/warn-consumed-analysis.cpp:658:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[84]="clang/test/SemaCXX/warn-consumed-analysis.cpp:662:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[85]="clang/test/SemaCXX/warn-consumed-analysis.cpp:665:3: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]", | |||
[86]="clang/test/SemaCXX/warn-consumed-analysis.cpp:777:1: warning: invalid invocation of method \'~Status\' on object \'s\' while it is in the \'unconsumed\' state [-Wconsumed]", | |||
[87]="clang/test/SemaCXX/warn-consumed-analysis.cpp:799:5: warning: invalid invocation of method \'clear\' on object \'s\' while it is in the \'unconsumed\' state [-Wconsumed]", | |||
[88]="clang/test/SemaCXX/warn-consumed-analysis.cpp:819:1: warning: invalid invocation of method \'~Status\' on object \'s\' while it is in the \'unconsumed\' state [-Wconsumed]", | |||
[89]="clang/test/SemaCXX/warn-consumed-analysis.cpp:827:1: warning: invalid invocation of method \'~Status\' on object \'s\' while it is in the \'unconsumed\' state [-Wconsumed]", | |||
[90]="clang/test/SemaCXX/warn-consumed-analysis.cpp:862:1: warning: invalid invocation of method \'~Status\' on object \'s2\' while it is in the \'unconsumed\' state [-Wconsumed]", | |||
[91]="clang/test/SemaCXX/warn-consumed-analysis.cpp:874:1: warning: invalid invocation of method \'~Status\' on object \'s2\' while it is in the \'unconsumed\' state [-Wconsumed]", | |||
[92]="clang/test/SemaCXX/warn-consumed-analysis.cpp:888:1: warning: invalid invocation of method \'~Status\' on object \'s2\' while it is in the \'unconsumed\' state [-Wconsumed]", | |||
[93]="clang/test/SemaCXX/warn-consumed-analysis.cpp:903:1: warning: invalid invocation of method \'~Status\' on object \'s2\' while it is in the \'unconsumed\' state [-Wconsumed]", | |||
[94]="clang/test/SemaCXX/warn-consumed-analysis.cpp:916:6: warning: invalid invocation of method \'operator=\' on object \'s1\' while it is in the \'unconsumed\' state [-Wconsumed]" | |||
} | |||
} | |||
}, | }, | ||
["warn_use_of_private_header_outside_module"]={ | ["warn_use_of_private_header_outside_module"]={ | ||
[ | [g]="use of private header from outside its module: \'A\' [-Wprivate-header]", | ||
[c]= | [c]=Cb, | ||
[d]= | [d]=Hb, | ||
[ | [n]={"private-header"}, | ||
[ | [o]="private-header", | ||
[ | [e]="use of private header from outside its module: \'%0\'", | ||
[ | [f]=Ib, | ||
[ | [a]="use of private header from outside its module\\: \'(.*?)\'", | ||
[ | [b]=" \\[[^\\]]*\\-Wprivate\\-header[^\\]]*\\]", | ||
[ | [h]=D, | ||
[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",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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/Modules/modulemaps-nomodules.cpp"]={"clang/test/Modules/modulemaps-nomodules.cpp:7:10: error: use of private header from outside its module: \'header.h\' [-Wprivate-header]"} | |||
} | |||
}, | }, | ||
["warn_use_of_temp_in_invalid_state"]={ | ["warn_use_of_temp_in_invalid_state"]={ | ||
[ | [g]="invalid invocation of method \'A\' on a temporary object while it is in the \'B\' state [-Wconsumed]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={Bb}, | ||
[ | [o]=Bb, | ||
[ | [e]="invalid invocation of method \'%0\' on a temporary object while it is in the \'%1\' state", | ||
[ | [f]=m, | ||
[ | [a]="invalid invocation of method \'(.*?)\' on a temporary object while it is in the \'(.*?)\' state", | ||
[ | [b]=Ic, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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);"}}, | ||
[p]={ | |||
[Zc]={"clang/test/SemaCXX/warn-consumed-analysis.cpp:138:27: warning: invalid invocation of method \'~DestructorTester\' on a temporary object while it is in the \'unconsumed\' state [-Wconsumed]","clang/test/SemaCXX/warn-consumed-analysis.cpp:143:3: warning: invalid invocation of method \'operator*\' on a temporary object while it is in the \'consumed\' state [-Wconsumed]","clang/test/SemaCXX/warn-consumed-analysis.cpp:764:3: warning: invalid invocation of method \'~Status\' on a temporary object while it is in the \'unconsumed\' state [-Wconsumed]","clang/test/SemaCXX/warn-consumed-analysis.cpp:780:21: warning: invalid invocation of method \'~Status\' on a temporary object while it is in the \'unconsumed\' state [-Wconsumed]"} | |||
} | |||
}, | }, | ||
["warn_used_but_marked_unused"]={ | ["warn_used_but_marked_unused"]={ | ||
[ | [g]="A was marked unused but was used [-Wused-but-marked-unused]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"used-but-marked-unused"}, | ||
[ | [o]="used-but-marked-unused", | ||
[ | [e]="%0 was marked unused but was used", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) was marked unused but was used", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wused\\-but\\-marked\\-unused[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{jb,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;"},{A,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-unused.c"]={"clang/test/Sema/attr-unused.c:23:3: warning: \'Int_unused\' was marked unused but was used [-Wused-but-marked-unused]","clang/test/Sema/attr-unused.c:26:10: warning: \'Test0_unused\' was marked unused but was used [-Wused-but-marked-unused]","clang/test/Sema/attr-unused.c:42:10: warning: \'x\' was marked unused but was used [-Wused-but-marked-unused]"} | |||
} | |||
}, | }, | ||
["warn_user_literal_reserved"]={ | ["warn_user_literal_reserved"]={ | ||
[ | [g]="user-defined literal suffixes ... are reserved... [-Wuser-defined-literals]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Oc,"user-defined-literals"}, | ||
[ | [o]="user-defined-literals", | ||
[ | [e]="user-defined literal suffixes %select{<ERROR>|not starting with \'_\'|containing \'__\'}0 are reserved%select{; no literal will invoke this operator|}1", | ||
[ | [f]=m, | ||
[ | [a]="user\\-defined literal suffixes (?:not starting with \'_\'|containing \'__\') are reserved(?:; no literal will invoke this operator|)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wuser\\-defined\\-literals[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{ab,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());"}}, | ||
[p]={ | |||
["clang/test/CXX/lex/lex.literal/lex.ext/p10.cpp"]={"clang/test/CXX/lex/lex.literal/lex.ext/p10.cpp:4:6: warning: user-defined literal suffixes not starting with \'_\' are reserved; no literal will invoke this operator [-Wuser-defined-literals]","clang/test/CXX/lex/lex.literal/lex.ext/p10.cpp:5:6: warning: user-defined literal suffixes not starting with \'_\' are reserved; no literal will invoke this operator [-Wuser-defined-literals]"} | |||
} | |||
}, | }, | ||
["warn_using_directive_in_header"]={ | ["warn_using_directive_in_header"]={ | ||
[ | [g]="using namespace directive in global context in header [-Wheader-hygiene]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"header-hygiene"}, | ||
[ | [o]="header-hygiene", | ||
[ | [e]="using namespace directive in global context in header", | ||
[ | [f]=m, | ||
[ | [a]="using namespace directive in global context in header", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wheader\\-hygiene[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{ab,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"]={ | ||
[ | [g]="treating Unicode character <U+A> as an identifier character rather than as \'B\' symbol [-Wunicode-homoglyph]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unicode-homoglyph"}, | ||
[ | [o]="unicode-homoglyph", | ||
[ | [e]="treating Unicode character <U+%0> as an identifier character rather than as \'%1\' symbol", | ||
[ | [f]=m, | ||
[ | [a]="treating Unicode character \\<U\\+(.*?)\\> as an identifier character rather than as \'(.*?)\' symbol", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunicode\\-homoglyph[^\\]]*\\]", | ||
[ | [h]=D, | ||
[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]={{ | [j]={{Lb,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;"}}, | ||
[p]={ | |||
["clang/test/Lexer/unicode.c"]={"clang/test/Lexer/unicode.c:89:6: warning: treating Unicode character <U+037E> as an identifier character rather than as \';\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:90:7: warning: treating Unicode character <U+A789> as an identifier character rather than as \':\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:90:10: warning: treating Unicode character <U+A789> as an identifier character rather than as \':\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:90:19: warning: treating Unicode character <U+037E> as an identifier character rather than as \';\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:6: warning: treating Unicode character <U+FF1D> as an identifier character rather than as \'=\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:9: warning: treating Unicode character <U+FF3B> as an identifier character rather than as \'[\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:12: warning: treating Unicode character <U+FF1D> as an identifier character rather than as \'=\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:15: warning: treating Unicode character <U+FF3D> as an identifier character rather than as \']\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:18: warning: treating Unicode character <U+FF08> as an identifier character rather than as \'(\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:25: warning: treating Unicode character <U+FF09> as an identifier character rather than as \')\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:28: warning: treating Unicode character <U+FF5B> as an identifier character rather than as \'{\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:37: warning: treating Unicode character <U+FF5E> as an identifier character rather than as \'~\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:41: warning: treating Unicode character <U+FF1B> as an identifier character rather than as \';\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:44: warning: treating Unicode character <U+FF5D> as an identifier character rather than as \'}\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:47: warning: treating Unicode character <U+FF08> as an identifier character rather than as \'(\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:50: warning: treating Unicode character <U+FF09> as an identifier character rather than as \')\' symbol [-Wunicode-homoglyph]"} | |||
} | |||
}, | }, | ||
["warn_utf8_symbol_zero_width"]={ | ["warn_utf8_symbol_zero_width"]={ | ||
[ | [g]="identifier contains Unicode character <U+A> that is invisible in some environments [-Wunicode-zero-width]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"unicode-zero-width"}, | ||
[ | [o]="unicode-zero-width", | ||
[ | [e]="identifier contains Unicode character <U+%0> that is invisible in some environments", | ||
[ | [f]=m, | ||
[ | [a]="identifier contains Unicode character \\<U\\+(.*?)\\> that is invisible in some environments", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunicode\\-zero\\-width[^\\]]*\\]", | ||
[ | [h]=D, | ||
[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]={{ | [j]={{Lb,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);"}}, | ||
[p]={ | |||
["clang/test/Lexer/unicode.c"]={"clang/test/Lexer/unicode.c:94:9: warning: identifier contains Unicode character <U+FEFF> that is invisible in some environments [-Wunicode-zero-width]","clang/test/Lexer/unicode.c:94:13: warning: identifier contains Unicode character <U+200D> that is invisible in some environments [-Wunicode-zero-width]","clang/test/Lexer/unicode.c:98:8: warning: identifier contains Unicode character <U+200B> that is invisible in some environments [-Wunicode-zero-width]"} | |||
} | |||
}, | }, | ||
["warn_va_start_type_is_undefined"]={ | ["warn_va_start_type_is_undefined"]={ | ||
[ | [g]="passing ... to \'va_start\' has undefined behavior [-Wvarargs]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Fc}, | ||
[ | [o]=Fc, | ||
[ | [e]="passing %select{an object that undergoes default argument promotion|an object of reference type|a parameter declared with the \'register\' keyword}0 to \'va_start\' has undefined behavior", | ||
[ | [f]=m, | ||
[ | [a]="passing (?:an object that undergoes default argument promotion|an object of reference type|a parameter declared with the \'register\' keyword) to \'va_start\' has undefined behavior", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wvarargs[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{y,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/varargs-x86-64.c"]={"clang/test/Sema/varargs-x86-64.c:32:29: warning: passing an object that undergoes default argument promotion to \'va_start\' has undefined behavior [-Wvarargs]","clang/test/Sema/varargs-x86-64.c:33:30: warning: passing an object that undergoes default argument promotion to \'va_start\' has undefined behavior [-Wvarargs]"} | |||
} | |||
}, | }, | ||
["warn_var_decl_not_read_only"]={ | ["warn_var_decl_not_read_only"]={ | ||
[ | [g]="object of type A cannot be placed in read-only memory [-Wread-only-types]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"read-only-types"}, | ||
[ | [o]="read-only-types", | ||
[ | [e]="object of type %0 cannot be placed in read-only memory", | ||
[ | [f]=m, | ||
[ | [a]="object of type (.*?) cannot be placed in read\\-only memory", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wread\\-only\\-types[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={rb,1625925174,qb}, | ||
[j]={{ | [j]={{H,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-read-only-placement.cpp"]={"clang/test/Sema/attr-read-only-placement.cpp:8:3: warning: object of type \'A\' cannot be placed in read-only memory [-Wread-only-types]","clang/test/Sema/attr-read-only-placement.cpp:11:3: warning: object of type \'A\' cannot be placed in read-only memory [-Wread-only-types]","clang/test/Sema/attr-read-only-placement.cpp:20:3: warning: object of type \'B\' cannot be placed in read-only memory [-Wread-only-types]","clang/test/Sema/attr-read-only-placement.cpp:24:3: warning: object of type \'B\' cannot be placed in read-only memory [-Wread-only-types]","clang/test/Sema/attr-read-only-placement.cpp:26:3: warning: object of type \'B\' cannot be placed in read-only memory [-Wread-only-types]","clang/test/Sema/attr-read-only-placement.cpp:28:3: warning: object of type \'B\' cannot be placed in read-only memory [-Wread-only-types]","clang/test/Sema/attr-read-only-placement.cpp:33:14: warning: object of type \'B\' cannot be placed in read-only memory [-Wread-only-types]","clang/test/Sema/attr-read-only-placement.cpp:44:3: warning: object of type \'C\' cannot be placed in read-only memory [-Wread-only-types]"} | |||
} | |||
}, | }, | ||
["warn_var_deref_requires_any_lock"]={ | ["warn_var_deref_requires_any_lock"]={ | ||
[ | [g]="... the value pointed to by A requires holding ... [-Wthread-safety-analysis]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,tb}, | ||
[ | [o]=tb, | ||
[ | [e]="%select{reading|writing}1 the value pointed to by %0 requires holding %select{any mutex|any mutex exclusively}1", | ||
[ | [f]=m, | ||
[ | [a]="(?:reading|writing) the value pointed to by (.*?) requires holding (?:any mutex|any mutex exclusively)", | ||
[ | [b]=bc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-thread-safety-analysis.c"]={"clang/test/Sema/warn-thread-safety-analysis.c:114:11: warning: reading the value pointed to by \'d_\' requires holding any mutex [-Wthread-safety-analysis]"} | |||
} | |||
}, | }, | ||
["warn_var_deref_requires_lock"]={ | ["warn_var_deref_requires_lock"]={ | ||
[ | [g]="... the value pointed to by A requires holding B ... [-Wthread-safety-analysis]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,tb}, | ||
[ | [o]=tb, | ||
[ | [e]="%select{reading|writing}3 the value pointed to by %1 requires holding %0 %select{\'%2\'|\'%2\' exclusively}3", | ||
[ | [f]=m, | ||
[ | [a]="(?:reading|writing) the value pointed to by (.*?) requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)", | ||
[ | [b]=bc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={ | |||
[1]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:422:6: warning: writing the value pointed to by \'pgb_field\' requires holding mutex \'sls_mu\' exclusively [-Wthread-safety-analysis]", | |||
[2]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:424:10: warning: reading the value pointed to by \'pgb_field\' requires holding mutex \'sls_mu\' [-Wthread-safety-analysis]", | |||
[3]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:426:7: warning: writing the value pointed to by \'pgb_field\' requires holding mutex \'sls_mu\' exclusively [-Wthread-safety-analysis]", | |||
[4]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:499:4: warning: writing the value pointed to by \'pgb_var\' requires holding mutex \'sls_mu\' exclusively [-Wthread-safety-analysis]", | |||
[5]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:504:12: warning: reading the value pointed to by \'pgb_var\' requires holding mutex \'sls_mu\' [-Wthread-safety-analysis]", | |||
[6]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:594:16: warning: reading the value pointed to by \'q\' requires holding mutex \'b1.mu\' [-Wthread-safety-analysis]", | |||
[7]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1372:4: warning: writing the value pointed to by \'p\' requires holding mutex \'mu\' exclusively [-Wthread-safety-analysis]", | |||
[8]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1377:16: warning: reading the value pointed to by \'q\' requires holding mutex \'mu\' [-Wthread-safety-analysis]", | |||
[9]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4328:4: warning: writing the value pointed to by \'d\' requires holding mutex \'mu2_\' exclusively [-Wthread-safety-analysis]", | |||
[10]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4334:12: warning: reading the value pointed to by \'d\' requires holding mutex \'mu2_\' [-Wthread-safety-analysis]", | |||
[11]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4458:5: warning: reading the value pointed to by \'datap2_\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]", | |||
[12]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4460:9: warning: reading the value pointed to by \'datap2_\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]", | |||
[13]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4463:7: warning: reading the value pointed to by \'datap2_\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]", | |||
[14]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4465:11: warning: reading the value pointed to by \'datap2_\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]", | |||
[15]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4487:6: warning: writing the value pointed to by \'datap2_\' requires holding mutex \'mu_\' exclusively [-Wthread-safety-analysis]", | |||
[16]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4491:14: warning: reading the value pointed to by \'datap2_\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]", | |||
[17]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4509:7: warning: reading the value pointed to by \'datap2_\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]", | |||
[18]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4571:10: warning: reading the value pointed to by \'foop\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]", | |||
[19]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4572:5: warning: writing the value pointed to by \'foop\' requires holding mutex \'mu_\' exclusively [-Wthread-safety-analysis]", | |||
[20]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4574:12: warning: reading the value pointed to by \'foop\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]", | |||
[21]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4575:7: warning: writing the value pointed to by \'foop\' requires holding mutex \'mu_\' exclusively [-Wthread-safety-analysis]", | |||
[22]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4582:5: warning: writing the value pointed to by \'foop\' requires holding mutex \'mu_\' exclusively [-Wthread-safety-analysis]", | |||
[23]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4584:5: warning: reading the value pointed to by \'foop\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]", | |||
[24]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4587:7: warning: writing the value pointed to by \'foop\' requires holding mutex \'mu_\' exclusively [-Wthread-safety-analysis]", | |||
[25]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4589:7: warning: reading the value pointed to by \'foop\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]", | |||
[26]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4957:10: warning: reading the value pointed to by \'a\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]", | |||
[27]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4958:6: warning: writing the value pointed to by \'a\' requires holding mutex \'mu2\' exclusively [-Wthread-safety-analysis]", | |||
[28]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4960:9: warning: reading the value pointed to by \'c\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]", | |||
[29]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4961:5: warning: writing the value pointed to by \'c\' requires holding mutex \'mu2\' exclusively [-Wthread-safety-analysis]", | |||
[30]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4962:5: warning: writing the value pointed to by \'c\' requires holding mutex \'mu2\' exclusively [-Wthread-safety-analysis]", | |||
[31]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4964:11: warning: reading the value pointed to by \'c\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]", | |||
[32]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4965:7: warning: writing the value pointed to by \'c\' requires holding mutex \'mu2\' exclusively [-Wthread-safety-analysis]", | |||
[33]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4966:7: warning: writing the value pointed to by \'c\' requires holding mutex \'mu2\' exclusively [-Wthread-safety-analysis]", | |||
[34]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4968:9: warning: reading the value pointed to by \'a\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]", | |||
[35]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4969:5: warning: writing the value pointed to by \'a\' requires holding mutex \'mu2\' exclusively [-Wthread-safety-analysis]", | |||
[36]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4970:9: warning: reading the value pointed to by \'c\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]", | |||
[37]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4971:5: warning: writing the value pointed to by \'c\' requires holding mutex \'mu2\' exclusively [-Wthread-safety-analysis]", | |||
[38]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5071:10: warning: reading the value pointed to by \'sp\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]", | |||
[39]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5072:6: warning: reading the value pointed to by \'sp\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]", | |||
[40]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5073:5: warning: reading the value pointed to by \'sq\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]", | |||
[41]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5074:5: warning: reading the value pointed to by \'sq\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]", | |||
[42]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5076:9: warning: reading the value pointed to by \'sp\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]", | |||
[43]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5077:5: warning: reading the value pointed to by \'sp\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]", | |||
[44]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5078:9: warning: reading the value pointed to by \'sq\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]", | |||
[45]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5079:5: warning: reading the value pointed to by \'sq\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]", | |||
[46]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5559:11: warning: reading the value pointed to by \'foop\' requires holding mutex \'mu\' [-Wthread-safety-analysis]", | |||
[47]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5566:11: warning: reading the value pointed to by \'foosp\' requires holding mutex \'mu\' [-Wthread-safety-analysis]", | |||
[48]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5567:13: warning: reading the value pointed to by \'foosp\' requires holding mutex \'mu\' [-Wthread-safety-analysis]", | |||
[49]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5568:17: warning: reading the value pointed to by \'foosp\' requires holding mutex \'mu\' [-Wthread-safety-analysis]", | |||
[50]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5569:12: warning: reading the value pointed to by \'foosp\' requires holding mutex \'mu\' [-Wthread-safety-analysis]", | |||
[51]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5570:16: warning: reading the value pointed to by \'foosp\' requires holding mutex \'mu\' [-Wthread-safety-analysis]", | |||
[52]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5571:21: warning: reading the value pointed to by \'foosp\' requires holding mutex \'mu\' [-Wthread-safety-analysis]", | |||
[53]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:6092:6: warning: reading the value pointed to by \'i\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]", | |||
[54]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:6101:6: warning: reading the value pointed to by \'i\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]" | |||
} | |||
} | |||
}, | }, | ||
["warn_var_deref_requires_lock_precise"]={ | ["warn_var_deref_requires_lock_precise"]={ | ||
[ | [g]="... the value pointed to by A requires holding B ... [-Wthread-safety-precise]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,"thread-safety-precise"}, | ||
[ | [o]="thread-safety-precise", | ||
[ | [e]="%select{reading|writing}3 the value pointed to by %1 requires holding %0 %select{\'%2\'|\'%2\' exclusively}3", | ||
[ | [f]=m, | ||
[ | [a]="(?:reading|writing) the value pointed to by (.*?) requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-precise[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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"]={ | ||
[ | [g]="instantiation of variable A required here, but no definition is available [-Wundefined-var-template]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"undefined-var-template"}, | ||
[ | [o]="undefined-var-template", | ||
[ | [e]="instantiation of variable %q0 required here, but no definition is available", | ||
[ | [f]=m, | ||
[ | [a]="instantiation of variable (.*?) required here, but no definition is available", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wundefined\\-var\\-template[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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",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;"}} | [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;"}}, | ||
[p]={ | |||
["clang/test/CXX/temp/temp.spec/temp.explicit/p1-emit.cpp"]={"clang/test/CXX/temp/temp.spec/temp.explicit/p1-emit.cpp:28:26: warning: instantiation of variable \'X<long>::member3\' required here, but no definition is available [-Wundefined-var-template]"} | |||
} | |||
}, | }, | ||
["warn_variable_requires_any_lock"]={ | ["warn_variable_requires_any_lock"]={ | ||
[ | [g]="... variable A requires holding ... [-Wthread-safety-analysis]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,tb}, | ||
[ | [o]=tb, | ||
[ | [e]="%select{reading|writing}1 variable %0 requires holding %select{any mutex|any mutex exclusively}1", | ||
[ | [f]=m, | ||
[ | [a]="(?:reading|writing) variable (.*?) requires holding (?:any mutex|any mutex exclusively)", | ||
[ | [b]=bc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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;"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-thread-safety-analysis.c"]={"clang/test/Sema/warn-thread-safety-analysis.c:113:3: warning: writing variable \'c_\' requires holding any mutex exclusively [-Wthread-safety-analysis]"} | |||
} | |||
}, | }, | ||
["warn_variable_requires_lock"]={ | ["warn_variable_requires_lock"]={ | ||
[ | [g]="... variable A requires holding B ... [-Wthread-safety-analysis]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,tb}, | ||
[ | [o]=tb, | ||
[ | [e]="%select{reading|writing}3 variable %1 requires holding %0 %select{\'%2\'|\'%2\' exclusively}3", | ||
[ | [f]=m, | ||
[ | [a]="(?:reading|writing) variable (.*?) requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)", | ||
[ | [b]=bc, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-thread-safety-verbose.cpp"]={"clang/test/SemaCXX/warn-thread-safety-verbose.cpp:31:5: warning: writing variable \'a\' requires holding mutex \'mu\' exclusively [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-verbose.cpp:35:13: warning: reading variable \'a\' requires holding mutex \'mu\' [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-verbose.cpp:54:5: warning: writing variable \'a\' requires holding mutex \'mu\' exclusively [-Wthread-safety-analysis]"} | |||
} | |||
}, | }, | ||
["warn_variable_requires_lock_precise"]={ | ["warn_variable_requires_lock_precise"]={ | ||
[ | [g]="... variable A requires holding B ... [-Wthread-safety-precise]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={ob,"thread-safety-precise"}, | ||
[ | [o]="thread-safety-precise", | ||
[ | [e]="%select{reading|writing}3 variable %1 requires holding %0 %select{\'%2\'|\'%2\' exclusively}3", | ||
[ | [f]=m, | ||
[ | [a]="(?:reading|writing) variable (.*?) requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-precise[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{E,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={"clang/test/SemaCXX/warn-thread-safety-analysis.cpp:583:8: warning: writing variable \'a\' requires holding mutex \'fooB.mu\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:604:12: warning: writing variable \'a\' requires holding mutex \'BarA.Foo.mu\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:613:20: warning: writing variable \'a\' requires holding mutex \'BarA.FooPointer->mu\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:622:13: warning: writing variable \'a\' requires holding mutex \'BarA.Foo2.mu\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1338:7: warning: writing variable \'a_\' requires holding mutex \'b2->mu1_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1369:12: warning: reading variable \'a_\' requires holding mutex \'b1.mu1_\' [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1374:6: warning: writing variable \'a_\' requires holding mutex \'b1.mu1_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1404:13: warning: writing variable \'a_\' requires holding mutex \'child->lock_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2461:18: warning: writing variable \'a\' requires holding mutex \'bar.getFooey().mu_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2467:18: warning: writing variable \'a\' requires holding mutex \'bar.getFoo2(b).mu_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2473:21: warning: writing variable \'a\' requires holding mutex \'bar.getFoo3(a, c).mu_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2479:21: warning: writing variable \'a\' requires holding mutex \'getBarFoo(bar, b).mu_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2485:39: warning: writing variable \'a\' requires holding mutex \'((0 < a) ? fooArray[b] : fooArray[c]).mu_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5200:31: warning: reading variable \'val\' requires holding mutex \'b.mu\' [-Wthread-safety-precise]"} | |||
} | |||
}, | }, | ||
["warn_variable_sized_ivar_visibility"]={ | ["warn_variable_sized_ivar_visibility"]={ | ||
[ | [g]="field A with variable sized type B is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,v,"objc-flexible-array"}, | ||
[ | [o]="objc-flexible-array", | ||
[ | [e]="field %0 with variable sized type %1 is not visible to subclasses and can conflict with their instance variables", | ||
[ | [f]=m, | ||
[ | [a]="field (.*?) with variable sized type (.*?) is not visible to subclasses and can conflict with their instance variables", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wobjc\\-flexible\\-array[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{P,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();"}}, | ||
[p]={ | |||
["clang/test/SemaObjC/flexible-array.m"]={"clang/test/SemaObjC/flexible-array.m:20:8: warning: field \'flexible\' with variable sized type \'char[]\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:27:8: warning: field \'flexible\' with variable sized type \'char[]\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:34:8: warning: field \'flexible\' with variable sized type \'char[]\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:62:8: warning: field \'flexible\' with variable sized type \'char[]\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:69:8: warning: field \'flexible\' with variable sized type \'char[]\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:94:8: warning: field \'flexible\' with variable sized type \'char[]\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:102:8: warning: field \'flexible\' with variable sized type \'char[]\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:189:17: warning: field \'flexible\' with variable sized type \'struct Packet\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:196:17: warning: field \'flexible\' with variable sized type \'struct Packet\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]"} | |||
} | |||
}, | }, | ||
["warn_variables_not_in_loop_body"]={ | ["warn_variables_not_in_loop_body"]={ | ||
[ | [g]="variable... used in loop condition not modified in loop body [-Wfor-loop-analysis]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={t,u,"for-loop-analysis","loop-analysis",v}, | ||
[ | [o]="for-loop-analysis", | ||
[ | [e]="variable%select{s| %1|s %1 and %2|s %1, %2, and %3|s %1, %2, %3, and %4}0 used in loop condition not modified in loop body", | ||
[ | [f]=m, | ||
[ | [a]="variable(?:s| (.*?)|s (.*?) and (.*?)|s (.*?), (.*?), and (.*?)|s (.*?), (.*?), (.*?), and (.*?)) used in loop condition not modified in loop body", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wfor\\-loop\\-analysis[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{S,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()))"},{S,1908,"void CheckForLoopConditionalStatement(Sema &S, Expr *Second, Expr *Third, Stmt *Body) {\n PartialDiagnostic PDiag = S.PDiag(diag::warn_variables_not_in_loop_body);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-loop-analysis.cpp"]={"clang/test/SemaCXX/warn-loop-analysis.cpp:17:15: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:24:15: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:31:17: warning: variable \'j\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:34:17: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:38:20: warning: variables \'i\' and \'j\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:49:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:53:10: warning: variables \'i\' and \'j\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:58:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:62:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:66:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:70:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:74:10: warning: variable \'ptr\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:78:11: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:82:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:86:10: warning: variables \'i\', \'j\', and \'k\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:90:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:95:10: warning: variables \'i\' and \'j\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:98:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:101:11: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:105:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:106:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:114:9: warning: variable \'x\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:125:10: warning: variable \'a\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:126:10: warning: variables \'a\' and \'b\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:127:10: warning: variables \'a\', \'b\', and \'c\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:128:10: warning: variables \'a\', \'b\', \'c\', and \'d\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:129:10: warning: variables used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:130:10: warning: variables used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:131:10: warning: variables \'a\', \'c\', \'d\', and \'b\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:132:10: warning: variables \'d\', \'c\', \'b\', and \'a\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:138:15: warning: variable \'a\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:140:15: warning: variable \'a\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:142:15: warning: variable \'a\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:144:15: warning: variable \'a\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:294:29: warning: variables \'a\' and \'b\' used in loop condition not modified in loop body [-Wfor-loop-analysis]"} | |||
} | |||
}, | }, | ||
["warn_vbase_moved_multiple_times"]={ | ["warn_vbase_moved_multiple_times"]={ | ||
[ | [g]="defaulted move assignment operator of A will move assign virtual base class B multiple times [-Wmultiple-move-vbase]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"multiple-move-vbase"}, | ||
[ | [o]="multiple-move-vbase", | ||
[ | [e]="defaulted move assignment operator of %0 will move assign virtual base class %1 multiple times", | ||
[ | [f]=m, | ||
[ | [a]="defaulted move assignment operator of (.*?) will move assign virtual base class (.*?) multiple times", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmultiple\\-move\\-vbase[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{ab,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;"}}, | ||
[p]={ | |||
["clang/test/CXX/special/class.copy/implicit-move.cpp"]={"clang/test/CXX/special/class.copy/implicit-move.cpp:278:45: warning: defaulted move assignment operator of \'F<DR1402::VbaseMove::B>\' will move assign virtual base class \'B\' multiple times [-Wmultiple-move-vbase]","clang/test/CXX/special/class.copy/implicit-move.cpp:278:45: warning: defaulted move assignment operator of \'F<DR1402::VbaseMove::D>\' will move assign virtual base class \'D\' multiple times [-Wmultiple-move-vbase]","clang/test/CXX/special/class.copy/implicit-move.cpp:278:45: warning: defaulted move assignment operator of \'J<DR1402::VbaseMove::B>\' will move assign virtual base class \'B\' multiple times [-Wmultiple-move-vbase]","clang/test/CXX/special/class.copy/implicit-move.cpp:278:45: warning: defaulted move assignment operator of \'J<DR1402::VbaseMove::D>\' will move assign virtual base class \'D\' multiple times [-Wmultiple-move-vbase]"} | |||
} | |||
}, | }, | ||
["warn_vector_long_decl_spec_combination"]={ | ["warn_vector_long_decl_spec_combination"]={ | ||
[ | [g]="Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={yb}, | ||
[ | [o]=yb, | ||
[ | [e]="Use of \'long\' with \'__vector\' is deprecated", | ||
[ | [f]=m, | ||
[ | [a]="Use of \'long\' with \'__vector\' is deprecated", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]", | ||
[ | [h]=Tb, | ||
[i]={"2233460de6ed",1265328742,"First stage of adding AltiVec support"}, | [i]={"2233460de6ed",1265328742,"First stage of adding AltiVec support"}, | ||
[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);"}} | [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);"}}, | ||
[p]={ | |||
["clang/test/Parser/altivec.c"]={"clang/test/Parser/altivec.c:59:10: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:62:17: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:65:19: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:68:10: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:71:17: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:74:19: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:77:8: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:80:15: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:83:17: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:86:8: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:89:15: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:92:17: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]"} | |||
} | |||
}, | }, | ||
["warn_vector_mode_deprecated"]={ | ["warn_vector_mode_deprecated"]={ | ||
[ | [g]="specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead [-Wdeprecated-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={yb,"deprecated-attributes"}, | ||
[ | [o]="deprecated-attributes", | ||
[ | [e]="specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead", | ||
[ | [f]=m, | ||
[ | [a]="specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-attributes[^\\]]*\\]", | ||
[ | [h]=Tb, | ||
[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]={{ | [j]={{C,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-mode-enums.c"]={"clang/test/Sema/attr-mode-enums.c:12:38: warning: specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead [-Wdeprecated-attributes]","clang/test/Sema/attr-mode-enums.c:14:31: warning: specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead [-Wdeprecated-attributes]","clang/test/Sema/attr-mode-enums.c:16:34: warning: specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead [-Wdeprecated-attributes]","clang/test/Sema/attr-mode-enums.c:18:35: warning: specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead [-Wdeprecated-attributes]","clang/test/Sema/attr-mode-enums.c:20:30: warning: specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead [-Wdeprecated-attributes]","clang/test/Sema/attr-mode-enums.c:22:23: warning: specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead [-Wdeprecated-attributes]"} | |||
} | |||
}, | }, | ||
["warn_verbatim_block_end_without_start"]={ | ["warn_verbatim_block_end_without_start"]={ | ||
[ | [g]="\'...A\' command does not terminate a verbatim text block [-Wdocumentation]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={xc}, | ||
[ | [o]=xc, | ||
[ | [e]="\'%select{\\|@}0%1\' command does not terminate a verbatim text block", | ||
[ | [f]=m, | ||
[ | [a]="\'(?:\\\\|@)(.*?)\' command does not terminate a verbatim text block", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdocumentation[^\\]]*\\]", | ||
[ | [h]="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",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());"}} | [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());"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-documentation-fixits.cpp"]={"clang/test/Sema/warn-documentation-fixits.cpp:123:5: warning: \'\\endcode\' command does not terminate a verbatim text block [-Wdocumentation]"} | |||
} | |||
}, | }, | ||
["warn_vla_used"]={ | ["warn_vla_used"]={ | ||
[ | [g]="variable length array used [-Wvla]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"vla"}, | ||
[ | [o]="vla", | ||
[ | [e]="variable length array used", | ||
[ | [f]=m, | ||
[ | [a]="variable length array used", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wvla[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"6c926ccbd2bd",1358971371,"Implement -Wvla correctly"}, | [i]={"6c926ccbd2bd",1358971371,"Implement -Wvla correctly"}, | ||
[j]={{ | [j]={{R,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;"}}, | ||
[p]={ | |||
[Uc]={"clang/test/Sema/cast.c:3:11: warning: variable length array used [-Wvla]"} | |||
} | |||
}, | }, | ||
["warn_void_pointer_to_enum_cast"]={ | ["warn_void_pointer_to_enum_cast"]={ | ||
[ | [g]="cast to smaller integer type A from B [-Wvoid-pointer-to-enum-cast]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"pointer-to-enum-cast",yc,yc,"void-pointer-to-enum-cast","void-pointer-to-int-cast"}, | ||
[ | [o]="void-pointer-to-enum-cast", | ||
[ | [e]="cast to smaller integer type %1 from %0", | ||
[ | [f]=m, | ||
[ | [a]="cast to smaller integer type (.*?) from (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wvoid\\-pointer\\-to\\-enum\\-cast[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={gc,1576908663,hc}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
[Uc]={"clang/test/Sema/cast.c:195:9: warning: cast to smaller integer type \'X\' from \'VoidPtr\' (aka \'void *\') [-Wvoid-pointer-to-enum-cast]"} | |||
} | |||
}, | }, | ||
["warn_void_pointer_to_int_cast"]={ | ["warn_void_pointer_to_int_cast"]={ | ||
[ | [g]="cast to smaller integer type A from B [-Wvoid-pointer-to-int-cast]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={yc,"void-pointer-to-int-cast"}, | ||
[ | [o]="void-pointer-to-int-cast", | ||
[ | [e]="cast to smaller integer type %1 from %0", | ||
[ | [f]=m, | ||
[ | [a]="cast to smaller integer type (.*?) from (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wvoid\\-pointer\\-to\\-int\\-cast[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={gc,1576908663,hc}, | ||
[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;"}} | [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;"}}, | ||
[p]={ | |||
[Uc]={"clang/test/Sema/cast.c:159:10: warning: cast to smaller integer type \'Int\' (aka \'int\') from \'VoidPtr\' (aka \'void *\') [-Wvoid-pointer-to-int-cast]"} | |||
} | |||
}, | }, | ||
["warn_wasm_dynamic_exception_spec_ignored"]={ | ["warn_wasm_dynamic_exception_spec_ignored"]={ | ||
[ | [g]="dynamic exception specifications with types are currently ignored in wasm [-Wwasm-exception-spec]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={"wasm-exception-spec"}, | ||
[ | [o]="wasm-exception-spec", | ||
[ | [e]="dynamic exception specifications with types are currently ignored in wasm", | ||
[ | [f]=m, | ||
[ | [a]="dynamic exception specifications with types are currently ignored in wasm", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wwasm\\-exception\\-spec[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={gc,1576908663,hc}, | ||
[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();"}} | [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();"}}, | ||
[p]={ | |||
["clang/test/CodeGenCXX/wasm-eh.cpp"]={"clang/test/CodeGenCXX/wasm-eh.cpp:389:6: warning: dynamic exception specifications with types are currently ignored in wasm [-Wwasm-exception-spec]"} | |||
} | |||
}, | }, | ||
["warn_weak_identifier_undeclared"]={ | ["warn_weak_identifier_undeclared"]={ | ||
[ | [g]="weak identifier A never declared", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="weak identifier %0 never declared", | ||
[ | [f]=m, | ||
[ | [a]="weak identifier (.*?) never declared", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[i]={"7d470f3466c0",1248923739,"PR3679 - handle #pragma weak"}, | [i]={"7d470f3466c0",1248923739,"PR3679 - handle #pragma weak"}, | ||
[j]={{ | [j]={{W,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;"}}, | ||
[p]={ | |||
["clang/test/Parser/pragma-weak.c"]={"clang/test/Parser/pragma-weak.c:13:76: warning: weak identifier \'y\' never declared"} | |||
} | |||
}, | }, | ||
["warn_weak_import"]={ | ["warn_weak_import"]={ | ||
[ | [g]="an already-declared variable is made a weak_import declaration A", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [e]="an already-declared variable is made a weak_import declaration %0", | ||
[ | [f]=m, | ||
[ | [a]="an already\\-declared variable is made a weak_import declaration (.*?)", | ||
[ | [b]=Q, | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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();"}}, | ||
[p]={ | |||
["clang/test/Sema/attr-weak.c"]={"clang/test/Sema/attr-weak.c:21:12: warning: an already-declared variable is made a weak_import declaration \'C\'"} | |||
} | |||
}, | }, | ||
["warn_weak_template_vtable"]={ | ["warn_weak_template_vtable"]={ | ||
[ | [g]="this warning is no longer in use and will be removed in the next release [-Wweak-template-vtables]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"weak-template-vtables"}, | ||
[ | [o]="weak-template-vtables", | ||
[ | [e]="this warning is no longer in use and will be removed in the next release", | ||
[ | [f]=m, | ||
[ | [a]="this warning is no longer in use and will be removed in the next release", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wweak\\-template\\-vtables[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"72b61203f447",1323455570,"Provide a separate warning for weak vtables in explicit template instantiations. There\'s no (current..."} | [i]={"72b61203f447",1323455570,"Provide a separate warning for weak vtables in explicit template instantiations. There\'s no (current..."} | ||
}, | }, | ||
["warn_weak_vtable"]={ | ["warn_weak_vtable"]={ | ||
[ | [g]="A has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit [-Wweak-vtables]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"weak-vtables"}, | ||
[ | [o]="weak-vtables", | ||
[ | [e]="%0 has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit", | ||
[ | [f]=m, | ||
[ | [a]="(.*?) has no out\\-of\\-line virtual method definitions; its vtable will be emitted in every translation unit", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wweak\\-vtables[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{ab,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;"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-weak-vtables.cpp"]={"clang/test/SemaCXX/warn-weak-vtables.cpp:10:8: warning: \'A\' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit [-Wweak-vtables]","clang/test/SemaCXX/warn-weak-vtables.cpp:53:7: warning: \'VeryDerived\' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit [-Wweak-vtables]","clang/test/SemaCXX/warn-weak-vtables.cpp:75:19: warning: \'TemplVirt<long>\' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit [-Wweak-vtables]"} | |||
} | |||
}, | }, | ||
["warn_wrong_absolute_value_type"]={ | ["warn_wrong_absolute_value_type"]={ | ||
[ | [g]="using ... absolute value function A when argument is of ... type [-Wabsolute-value]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={Gc}, | ||
[ | [o]=Gc, | ||
[ | [e]="using %select{integer|floating point|complex}1 absolute value function %0 when argument is of %select{integer|floating point|complex}2 type", | ||
[ | [f]=m, | ||
[ | [a]="using (?:integer|floating point|complex) absolute value function (.*?) when argument is of (?:integer|floating point|complex) type", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wabsolute\\-value[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."}, | [i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions."}, | ||
[j]={{ | [j]={{y,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,"}}, | ||
[p]={ | |||
["clang/test/Sema/warn-absolute-value-header.c"]={"clang/test/Sema/warn-absolute-value-header.c:27:9: warning: using integer absolute value function \'abs\' when argument is of floating point type [-Wabsolute-value]","clang/test/Sema/warn-absolute-value-header.c:31:9: warning: using integer absolute value function \'abs\' when argument is of floating point type [-Wabsolute-value]"} | |||
} | |||
}, | }, | ||
["warn_wrong_clang_attr_namespace"]={ | ["warn_wrong_clang_attr_namespace"]={ | ||
[ | [g]="\'__clang__\' is a predefined macro name, not an attribute scope specifier; did you mean \'_Clang\' instead? [-Wignored-attributes]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={U,G}, | ||
[ | [o]=G, | ||
[ | [e]="\'__clang__\' is a predefined macro name, not an attribute scope specifier; did you mean \'_Clang\' instead?", | ||
[ | [f]=m, | ||
[ | [a]="\'__clang__\' is a predefined macro name, not an attribute scope specifier; did you mean \'_Clang\' instead\\?", | ||
[ | [b]=V, | ||
[ | [h]=B, | ||
[i]={"c44c17424628",1541783985,"Introduce the _Clang scoped attribute token."}, | [i]={"c44c17424628",1541783985,"Introduce the _Clang scoped attribute token."}, | ||
[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\");"}} | [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\");"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/attr-optnone.cpp"]={"clang/test/SemaCXX/attr-optnone.cpp:77:3: warning: \'__clang__\' is a predefined macro name, not an attribute scope specifier; did you mean \'_Clang\' instead? [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["warn_xor_used_as_pow"]={ | ["warn_xor_used_as_pow"]={ | ||
[ | [g]="result of \'A\' is B; did you mean exponentiation? [-Wxor-used-as-pow]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={ic}, | ||
[ | [o]=ic, | ||
[ | [e]="result of \'%0\' is %1; did you mean exponentiation?", | ||
[ | [f]=m, | ||
[ | [a]="result of \'(.*?)\' is (.*?); did you mean exponentiation\\?", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wxor\\-used\\-as\\-pow[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={ | [i]={Ac,1567434909,zc}, | ||
[j]={{ | [j]={{A,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-xor-as-pow.cpp"]={"clang/test/SemaCXX/warn-xor-as-pow.cpp:83:11: warning: result of \'2 ^ 64\' is 66; did you mean exponentiation? [-Wxor-used-as-pow]"} | |||
} | |||
}, | }, | ||
["warn_xor_used_as_pow_base"]={ | ["warn_xor_used_as_pow_base"]={ | ||
[ | [g]="result of \'A\' is B; did you mean \'C\'? [-Wxor-used-as-pow]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={ic}, | ||
[ | [o]=ic, | ||
[ | [e]="result of \'%0\' is %1; did you mean \'%2\'?", | ||
[ | [f]=m, | ||
[ | [a]="result of \'(.*?)\' is (.*?); did you mean \'(.*?)\'\\?", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wxor\\-used\\-as\\-pow[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow"}, | [i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow"}, | ||
[j]={{ | [j]={{A,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);"},{A,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-xor-as-pow.cpp"]={"clang/test/SemaCXX/warn-xor-as-pow.cpp:80:11: warning: result of \'2 ^ 32\' is 34; did you mean \'1LL << 32\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:88:12: warning: result of \'10 ^ 0\' is 10; did you mean \'1e0\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:91:12: warning: result of \'10 ^ 1\' is 11; did you mean \'1e1\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:94:12: warning: result of \'10 ^ 2\' is 8; did you mean \'1e2\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:97:12: warning: result of \'10 ^ 4\' is 14; did you mean \'1e4\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:100:12: warning: result of \'10 ^ +4\' is 14; did you mean \'1e4\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:103:12: warning: result of \'10 ^ 10\' is 0; did you mean \'1e10\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:106:13: warning: result of \'TEN ^ 10\' is 0; did you mean \'1e10\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:109:12: warning: result of \'10 ^ TEN\' is 0; did you mean \'1e10\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:112:12: warning: result of \'10 ^ 100\' is 110; did you mean \'1e100\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:116:12: warning: result of \'10 ^ -EXP\' is -9; did you mean \'1e-3\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:119:12: warning: result of \'10 ^ +EXP\' is 9; did you mean \'1e3\'? [-Wxor-used-as-pow]"} | |||
} | |||
}, | }, | ||
["warn_xor_used_as_pow_base_extra"]={ | ["warn_xor_used_as_pow_base_extra"]={ | ||
[ | [g]="result of \'A\' is B; did you mean \'C\' (D)? [-Wxor-used-as-pow]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={ic}, | ||
[ | [o]=ic, | ||
[ | [e]="result of \'%0\' is %1; did you mean \'%2\' (%3)?", | ||
[ | [f]=m, | ||
[ | [a]="result of \'(.*?)\' is (.*?); did you mean \'(.*?)\' \\((.*?)\\)\\?", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wxor\\-used\\-as\\-pow[^\\]]*\\]", | ||
[ | [h]=q, | ||
[i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow"}, | [i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow"}, | ||
[j]={{ | [j]={{A,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);"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-xor-as-pow.cpp"]={"clang/test/SemaCXX/warn-xor-as-pow.cpp:36:11: warning: result of \'2 ^ 0\' is 2; did you mean \'1 << 0\' (1)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:39:11: warning: result of \'2 ^ 1\' is 3; did you mean \'1 << 1\' (2)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:42:11: warning: result of \'2 ^ 2\' is 0; did you mean \'1 << 2\' (4)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:45:11: warning: result of \'2 ^ 8\' is 10; did you mean \'1 << 8\' (256)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:48:11: warning: result of \'2 ^ +8\' is 10; did you mean \'1 << +8\' (256)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:51:13: warning: result of \'TWO ^ 8\' is 10; did you mean \'1 << 8\' (256)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:54:11: warning: result of \'2 ^ 16\' is 18; did you mean \'1 << 16\' (65536)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:57:11: warning: result of \'2 ^ TEN\' is 8; did you mean \'1 << TEN\' (1024)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:60:18: warning: result of \'2 ^ ALPHA_OFFSET\' is 1; did you mean \'1 << ALPHA_OFFSET\' (8)? [-Wxor-used-as-pow]"} | |||
} | |||
}, | }, | ||
["warn_zero_as_null_pointer_constant"]={ | ["warn_zero_as_null_pointer_constant"]={ | ||
[ | [g]="zero as null pointer constant [-Wzero-as-null-pointer-constant]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"zero-as-null-pointer-constant"}, | ||
[ | [o]="zero-as-null-pointer-constant", | ||
[ | [e]="zero as null pointer constant", | ||
[ | [f]=m, | ||
[ | [a]="zero as null pointer constant", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wzero\\-as\\-null\\-pointer\\-constant[^\\]]*\\]", | ||
[ | [h]=Mb, | ||
[i]={"d7ba86b6bf54",1494000668,"Introduce Wzero-as-null-pointer-constant."}, | [i]={"d7ba86b6bf54",1494000668,"Introduce Wzero-as-null-pointer-constant."}, | ||
[j]={{ | [j]={{W,598,"void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr *E) {\n if (Diags.isIgnored(diag::warn_zero_as_null_pointer_constant, E->getBeginLoc()))"},{W,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\");"}}, | ||
[p]={ | |||
["clang/test/SemaCXX/warn-zero-nullptr-cxx20.cpp"]={"clang/test/SemaCXX/warn-zero-nullptr-cxx20.cpp:48:14: warning: zero as null pointer constant [-Wzero-as-null-pointer-constant]","clang/test/SemaCXX/warn-zero-nullptr-cxx20.cpp:49:26: warning: zero as null pointer constant [-Wzero-as-null-pointer-constant]","clang/test/SemaCXX/warn-zero-nullptr-cxx20.cpp:50:33: warning: zero as null pointer constant [-Wzero-as-null-pointer-constant]"} | |||
} | |||
}, | }, | ||
["warn_zero_size_struct_union_compat"]={ | ["warn_zero_size_struct_union_compat"]={ | ||
[ | [g]="...... has size 0 in C, ... in C++ [-Wc++-compat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [r]=false, | ||
[ | [n]={"c++-compat"}, | ||
[ | [o]="c++-compat", | ||
[ | [e]="%select{|empty }0%select{struct|union}1 has size 0 in C, %select{size 1|non-zero size}2 in C++", | ||
[ | [f]=m, | ||
[ | [a]="(?:|empty )(?:struct|union) has size 0 in C, (?:size 1|non\\-zero size) in C\\+\\+", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+\\-compat[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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);"}}, | ||
[p]={ | |||
["clang/test/Sema/empty1.c"]={"clang/test/Sema/empty1.c:5:1: warning: empty struct has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:8:1: warning: empty union has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:11:1: warning: struct has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:15:1: warning: union has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:19:1: warning: struct has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:24:1: warning: union has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:29:1: warning: struct has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:33:1: warning: union has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:37:1: warning: struct has size 0 in C, non-zero size in C++ [-Wc++-compat]"} | |||
} | |||
}, | }, | ||
["warn_zero_size_struct_union_in_extern_c"]={ | ["warn_zero_size_struct_union_in_extern_c"]={ | ||
[ | [g]="...... has size 0 in C, ... in C++ [-Wextern-c-compat]", | ||
[c]=k, | [c]=k, | ||
[d]=l, | [d]=l, | ||
[ | [n]={t,u,"extern-c-compat",v}, | ||
[ | [o]="extern-c-compat", | ||
[ | [e]="%select{|empty }0%select{struct|union}1 has size 0 in C, %select{size 1|non-zero size}2 in C++", | ||
[ | [f]=m, | ||
[ | [a]="(?:|empty )(?:struct|union) has size 0 in C, (?:size 1|non\\-zero size) in C\\+\\+", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wextern\\-c\\-compat[^\\]]*\\]", | ||
[ | [h]=q, | ||
[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]={{ | [j]={{H,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);"}}, | ||
[p]={ | |||
["clang/test/CodeGenCXX/c-linkage.cpp"]={"clang/test/CodeGenCXX/c-linkage.cpp:29:3: warning: empty struct has size 0 in C, size 1 in C++ [-Wextern-c-compat]"} | |||
} | |||
} | } | ||
}; | }; |
edits