Module:ClangDiags/DiagsLongData8: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
No edit summary
Line 1: Line 1:
local a="commit";
local a="regex3";
local b="category";
local b="category_hist";
local c="message";
local c="id_hist";
local d="regex1";
local d="message_hist";
local e="regex2";
local e="regex1";
local f="regex3";
local f="commit";
local g="(?:warning|error|fatal error)\\: ";
local g="regex2";
local h="source";
local h="source";
local i="maingroup";
local i="(?:warning|error|fatal error)\\: ";
local j="groups";
local j="maingroup";
local k="tests2";
local k="groups";
local l="Semantic Issue";
local l="tests2";
local m="c++98-compat-pedantic";
local m="Semantic Issue";
local n="c++98-compat";
local n="c++98-compat-pedantic";
local o="c++11-compat-pedantic";
local o="c++98-compat";
local p="";
local p="c++11-compat-pedantic";
local q="c++14-compat-pedantic";
local q="10.0";
local r="clang/lib/Sema/SemaChecking.cpp";
local r="";
local s="c++11-compat";
local s="c++14-compat-pedantic";
local t="c++17-compat-pedantic";
local t="clang/lib/Sema/SemaChecking.cpp";
local u="c++0x-compat";
local u="c++11-compat";
local v="Parse Issue";
local v="c++17-compat-pedantic";
local w=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat[^\\]]*\\]";
local w="14.0";
local x="c++14-compat";
local x="9.0";
local y="clang/test/SemaCXX/cxx98-compat.cpp";
local y="c++0x-compat";
local z="10.0";
local z="11.0";
local A="pre-c++20-compat";
local A="Parse Issue";
local B="CL4";
local B="8.0";
local C="clang/lib/Sema/SemaDeclCXX.cpp";
local C="15.0";
local D="clang/lib/Sema/SemaDecl.cpp";
local D="7.0";
local E="clang/lib/Sema/SemaDeclAttr.cpp";
local E=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat[^\\]]*\\]";
local F="c++1z-compat";
local F="6.0";
local G="c++17-compat";
local G="c++14-compat";
local H="all";
local H="clang/test/SemaCXX/cxx98-compat.cpp";
local I="9.0";
local I="13.0";
local J="ignored-attributes";
local J="pre-c++20-compat";
local K="clang/lib/Sema/SemaExpr.cpp";
local K="CL4";
local L="Lexical or Preprocessor Issue";
local L="clang/lib/Sema/SemaDeclCXX.cpp";
local M="documentation";
local M="clang/lib/Sema/SemaDecl.cpp";
local N="most";
local N="clang/lib/Sema/SemaDeclAttr.cpp";
local O="c++2a-compat-pedantic";
local O="all";
local P="c++20-compat-pedantic";
local P="c++1z-compat";
local Q="14.0";
local Q="c++17-compat";
local R="non-gcc";
local R="ignored-attributes";
local S="pre-c++17-compat";
local S="clang/lib/Sema/SemaExpr.cpp";
local T="clang/lib/Driver/ToolChains/Clang.cpp";
local T="Lexical or Preprocessor Issue";
local U="c++20-compat";
local U="documentation";
local V="conversion";
local V="most";
local W="option-ignored";
local W="c++2a-compat-pedantic";
local X="pre-c++20-compat-pedantic";
local X="c++20-compat-pedantic";
local Y="Value Conversion Issue";
local Y="pre-c++17-compat";
local Z="c++98-c++11-c++14-c++17-compat-pedantic";
local Z="non-gcc";
local ab="deprecated";
local ab="clang/lib/Driver/ToolChains/Clang.cpp";
local bb="clang/lib/Parse/ParseDeclCXX.cpp";
local bb="16.0";
local cb="pre-c++23-compat";
local cb="c++20-compat";
local db="Deprecations";
local db="12.0";
local eb="7.0";
local eb="conversion";
local fb="clang/lib/Sema/SemaInit.cpp";
local fb="option-ignored";
local gb="clang/lib/Sema/AnalysisBasedWarnings.cpp";
local gb="pre-c++20-compat-pedantic";
local hb=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+20\\-compat[^\\]]*\\]";
local hb="Value Conversion Issue";
local ib="c++98-c++11-c++14-c++17-compat";
local ib="c++98-c++11-c++14-c++17-compat-pedantic";
local jb="13.0";
local jb="deprecated";
local kb="15.0";
local kb="clang/lib/Parse/ParseDeclCXX.cpp";
local lb="6.0";
local lb="pre-c++23-compat";
local mb="11.0";
local mb="clang/lib/Sema/SemaInit.cpp";
local nb="format";
local nb="c++98-c++11-c++14-c++17-compat";
local ob="8.0";
local ob="Deprecations";
local pb="Documentation Issue";
local pb=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+20\\-compat[^\\]]*\\]";
local qb="unused-command-line-argument";
local qb="clang/lib/Sema/AnalysisBasedWarnings.cpp";
local rb="c++2a-compat";
local rb="format";
local sb="pre-c++14-compat";
local sb="Documentation Issue";
local tb="7c11da0cfd33";
local tb="unused-command-line-argument";
local ub="attributes";
local ub="c++2a-compat";
local vb=" \\[(?:\\-Werror,)?\\-Wignored\\-attributes[^\\]]*\\]";
local vb="pre-c++14-compat";
local wb="clang/lib/AST/CommentSema.cpp";
local wb="pre-c++17-compat-pedantic";
local xb="pre-c++17-compat-pedantic";
local xb="7c11da0cfd33";
local yb="[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159";
local yb="[clang] New __attribute__((__clang_arm_mve_alias)).";
local zb="[clang] New __attribute__((__clang_arm_mve_alias)).";
local zb="attributes";
local Ab="clang/lib/Lex/Lexer.cpp";
local Ab="5.0";
local Bb="invalid-command-line-argument";
local Bb="clang/lib/AST/CommentSema.cpp";
local Cb="clang/lib/Sema/SemaStmt.cpp";
local Cb="[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159";
local Db="clang/lib/Sema/SemaTemplate.cpp";
local Db=" \\[(?:\\-Werror,)?\\-Wignored\\-attributes[^\\]]*\\]";
local Eb="95f50964fbf5";
local Eb="clang/lib/Sema/SemaTemplate.cpp";
local Fb="Implement P2361 Unevaluated string literals";
local Fb="clang/lib/Lex/Lexer.cpp";
local Gb="(?: \\[(?:\\-Werror)?[^\\]]*\\])?";
local Gb="invalid-command-line-argument";
local Hb="Implement P2361 Unevaluated string literals\n\nThis patch proposes to handle in an uniform fashion\nthe parsing of strings that are never evaluated,\nin asm statement, static assert, attrributes, extern,\netc.\n\nUnevaluated strings are UTF-8 internally and so currently\nbehave as narrow strings, but these things will diverge with\nD93031.\n\nThe big question both for this patch and the P2361 paper\nis whether we risk breaking code by disallowing\nencoding prefixes in this context.\nI hope this patch may allow to gather some data on that.\n\nFuture work:\nImprove the rendering of unicode characters, line break\nand so forth in static-assert messages\n\nReviewed By: aaron.ballman, shafik\n\nDifferential Revision: https://reviews.llvm.org/D105759";
local Hb="clang/lib/Sema/SemaStmt.cpp";
local Ib="c++98-c++11-c++14-compat-pedantic";
local Ib="(?: \\[(?:\\-Werror)?[^\\]]*\\])?";
local Jb="clang/lib/Sema/SemaType.cpp";
local Jb="Implement P2361 Unevaluated string literals\n\nThis patch proposes to handle in an uniform fashion\nthe parsing of strings that are never evaluated,\nin asm statement, static assert, attrributes, extern,\netc.\n\nUnevaluated strings are UTF-8 internally and so currently\nbehave as narrow strings, but these things will diverge with\nD93031.\n\nThe big question both for this patch and the P2361 paper\nis whether we risk breaking code by disallowing\nencoding prefixes in this context.\nI hope this patch may allow to gather some data on that.\n\nFuture work:\nImprove the rendering of unicode characters, line break\nand so forth in static-assert messages\n\nReviewed By: aaron.ballman, shafik\n\nDifferential Revision: https://reviews.llvm.org/D105759";
local Kb=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+17\\-compat[^\\]]*\\]";
local Kb="Implement P2361 Unevaluated string literals";
local Lb=" \\[(?:\\-Werror,)?\\-Wdocumentation[^\\]]*\\]";
local Lb="95f50964fbf5";
local Mb="c++98-c++11-c++14-compat";
local Mb="c++98-c++11-c++14-compat-pedantic";
local Nb="clang/lib/Driver/Driver.cpp";
local Nb="clang/lib/Sema/SemaType.cpp";
local Ob="5d164bc5e005";
local Ob="c++98-c++11-c++14-compat";
local Pb="Implement -Wc++98-compat warnings for the parser.";
local Pb=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+17\\-compat[^\\]]*\\]";
local Qb="thread-safety-analysis";
local Qb=" \\[(?:\\-Werror,)?\\-Wdocumentation[^\\]]*\\]";
local Rb="Implement -Wc++98-compat warnings for the parser.\n\nllvm-svn: 142056";
local Rb="Implement -Wc++98-compat warnings for the parser.\n\nllvm-svn: 142056";
local Sb="12.0";
local Sb="Implement -Wc++98-compat warnings for the parser.";
local Tb="clang/lib/Parse/ParseDecl.cpp";
local Tb="5d164bc5e005";
local Ub="5a8987ca5113";
local Ub="thread-safety-analysis";
local Vb=" \\[(?:\\-Werror,)?\\-Woption\\-ignored[^\\]]*\\]";
local Vb="clang/lib/Driver/Driver.cpp";
local Wb="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local Wb="clang/lib/Parse/ParseDecl.cpp";
local Xb="Update tablegen diagnostic files to be in sync with the def files.";
local Xb=" \\[(?:\\-Werror,)?\\-Woption\\-ignored[^\\]]*\\]";
local Yb=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+23\\-compat[^\\]]*\\]";
local Yb="5a8987ca5113";
local Zb="pre-c++23-compat-pedantic";
local Zb="Update tablegen diagnostic files to be in sync with the def files.";
local ac="Format String Issue";
local ac="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local bc="clang/lib/Sema/SemaExprCXX.cpp";
local bc="clang/lib/Sema/SemaExprCXX.cpp";
local cc="clang/lib/Parse/ParseExprCXX.cpp";
local cc="pre-c++23-compat-pedantic";
local dc="AMDGPU: Teach toolchain to link rocm device libs\n\nCurrently the library is separately linked, but this isn\'t correct to\nimplement fast math flags correctly. Each module should get the\nversion of the library appropriate for its combination of fast math\nand related flags, with the attributes propagated into its functions\nand internalized.\n\nHIP already maintains the list of libraries, but this is not used for\nOpenCL. Unfortunately, HIP uses a separate --hip-device-lib argument,\ndespite both languages using the same bitcode library. Eventually\nthese two searches need to be merged.\n\nAn additional problem is there are 3 different locations the libraries\nare installed, depending on which build is used. This also needs to be\nconsolidated (or at least the search logic needs to deal with this\nunnecessary complexity).";
local dc="Format String Issue";
local ec="-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 1.\n\nllvm-svn: 142419";
local ec=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+23\\-compat[^\\]]*\\]";
local fc="-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 1.";
local fc="clang/lib/Parse/ParseExprCXX.cpp";
local gc="clang/test/Sema/warn-documentation.cpp";
local gc="clang/test/Sema/warn-documentation.cpp";
local hc="0bf8a492fd75";
local hc="AMDGPU: Teach toolchain to link rocm device libs\n\nCurrently the library is separately linked, but this isn\'t correct to\nimplement fast math flags correctly. Each module should get the\nversion of the library appropriate for its combination of fast math\nand related flags, with the attributes propagated into its functions\nand internalized.\n\nHIP already maintains the list of libraries, but this is not used for\nOpenCL. Unfortunately, HIP uses a separate --hip-device-lib argument,\ndespite both languages using the same bitcode library. Eventually\nthese two searches need to be merged.\n\nAn additional problem is there are 3 different locations the libraries\nare installed, depending on which build is used. This also needs to be\nconsolidated (or at least the search logic needs to deal with this\nunnecessary complexity).";
local ic="AMDGPU: Teach toolchain to link rocm device libs";
local ic="AMDGPU: Teach toolchain to link rocm device libs";
local jc="4593e4131aff";
local jc="0bf8a492fd75";
local kc="clang/test/SemaCXX/cxx17-compat.cpp";
local kc="-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 1.";
local lc="return-type";
local lc="-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 1.\n\nllvm-svn: 142419";
local mc="pre-c++14-compat-pedantic";
local mc="4593e4131aff";
local nc="clang/lib/Parse/ParseStmt.cpp";
local nc="clang/lib/Parse/ParseStmt.cpp";
local oc="clang/lib/Sema/DeclSpec.cpp";
local oc="0687578728ea";
local pc="c++98-c++11-compat-pedantic";
local pc="pre-c++14-compat-pedantic";
local qc="0687578728ea";
local qc="c++98-c++11-compat-pedantic";
local rc="[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.";
local rc="return-type";
local sc="[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.\n\nThis is support for the user-facing options to create importable header units\nfrom headers in the user or system search paths (or to be given an absolute path).\n\nThis means that an incomplete header path will be passed by the driver and the\nlookup carried out using the search paths present when the front end is run.\n\nTo support this, we introduce file fypes for c++-{user,system,header-unit}-header.\nThese terms are the same as the ones used by GCC, to minimise the differences for\ntooling (and users).\n\nThe preprocessor checks for headers before issuing a warning for\n\"#pragma once\" in a header build.  We ensure that the importable header units\nare recognised as headers in order to avoid such warnings.\n\nDifferential Revision: https://reviews.llvm.org/D121096";
local sc="[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.\n\nThis is support for the user-facing options to create importable header units\nfrom headers in the user or system search paths (or to be given an absolute path).\n\nThis means that an incomplete header path will be passed by the driver and the\nlookup carried out using the search paths present when the front end is run.\n\nTo support this, we introduce file fypes for c++-{user,system,header-unit}-header.\nThese terms are the same as the ones used by GCC, to minimise the differences for\ntooling (and users).\n\nThe preprocessor checks for headers before issuing a warning for\n\"#pragma once\" in a header build.  We ensure that the importable header units\nare recognised as headers in order to avoid such warnings.\n\nDifferential Revision: https://reviews.llvm.org/D121096";
local tc="c++98-c++11-compat";
local tc="clang/test/SemaCXX/cxx17-compat.cpp";
local uc=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+14\\-compat[^\\]]*\\]";
local uc="clang/lib/Sema/DeclSpec.cpp";
local vc=" \\[(?:\\-Werror,)?\\-Wformat[^\\]]*\\]";
local vc="[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.";
local wc="clang/lib/Sema/SemaDeclObjC.cpp";
local wc="c++98-c++11-compat";
local xc="fortify-source";
local xc=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+14\\-compat[^\\]]*\\]";
local yc="16.0";
local yc=" \\[(?:\\-Werror,)?\\-Wformat[^\\]]*\\]";
local zc="empty-body";
local zc="fortify-source";
local Ac="thread-safety";
local Ac="deprecated-volatile";
local Bc="deprecated-volatile";
local Bc="gcc-compat";
local Cc="gcc-compat";
local Cc=" \\[(?:\\-Werror,)?\\-Wunused\\-command\\-line\\-argument[^\\]]*\\]";
local Dc="avr-rtlib-linking-quirks";
local Dc="empty-body";
local Ec=" \\[(?:\\-Werror,)?\\-Wunused\\-command\\-line\\-argument[^\\]]*\\]";
local Ec="avr-rtlib-linking-quirks";
local Fc="extra";
local Fc="thread-safety";
local Gc="clang/test/SemaCXX/cxx11-compat.cpp";
local Gc="clang/lib/Sema/SemaDeclObjC.cpp";
local Hc=" \\[(?:\\-Werror,)?\\-Wc\\+\\+20\\-compat[^\\]]*\\]";
local Hc="clang/lib/Parse/Parser.cpp";
local Ic="clang/lib/Frontend/CompilerInvocation.cpp";
local Ic="extra";
local Jc="clang/lib/Parse/ParseExpr.cpp";
local Jc="clang/lib/Frontend/CompilerInvocation.cpp";
local Kc=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-pedantic[^\\]]*\\]";
local Kc=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-pedantic[^\\]]*\\]";
local Lc="clang/lib/Parse/Parser.cpp";
local Lc=" \\[(?:\\-Werror,)?\\-Wc\\+\\+20\\-compat[^\\]]*\\]";
local Mc="Reland [clang] Check unsupported types in expressions\n\nThis was committed as ec6c847179fd, but then reverted after a failure\nin: https://lab.llvm.org/buildbot/#/builders/84/builds/13983\n\nI was not able to reproduce the problem, but I added an extra check\nfor a NULL QualType just in case.\n\nOriginal comit message:\n\nThe patch adds missing diagnostics for cases like:\n\n  float F3 = ((__float128)F1 * (__float128)F2) / 2.0f;\n\nSema::checkDeviceDecl (renamed to checkTypeSupport) is changed to work\nwith a type without the corresponding ValueDecl. It is also refactored\nso that host diagnostics for unsupported types can be added here as\nwell.\n\nDifferential Revision: https://reviews.llvm.org/D109315";
local Mc="clang/lib/Parse/ParseExpr.cpp";
local Nc="b15c11c81907";
local Nc="clang/test/SemaCXX/cxx11-compat.cpp";
local Oc="Add -Wc++98-compat warnings for uses of the new keywords \'alignof\', \'char16_t\',";
local Oc="clang/lib/Lex/ModuleMap.cpp";
local Pc="Add -Wc++98-compat warnings for uses of the new keywords \'alignof\', \'char16_t\',\n\'char32_t\', \'constexpr\', \'decltype\', \'noexcept\', \'nullptr\' and \'static_assert\'.\n\nllvm-svn: 142302";
local Pc="Add -Wc++98-compat warnings for uses of the new keywords \'alignof\', \'char16_t\',\n\'char32_t\', \'constexpr\', \'decltype\', \'noexcept\', \'nullptr\' and \'static_assert\'.\n\nllvm-svn: 142302";
local Qc="clang/lib/Sema/SemaObjCProperty.cpp";
local Qc="0208793e4101";
local Rc=" \\[(?:\\-Werror,)?\\-Winvalid\\-command\\-line\\-argument[^\\]]*\\]";
local Rc="clang/lib/Frontend/CompilerInstance.cpp";
local Sc="clang/lib/Sema/SemaExprObjC.cpp";
local Sc="documentation-html";
local Tc="3dbcea8b957a";
local Tc=" \\[(?:\\-Werror,)?\\-Winvalid\\-command\\-line\\-argument[^\\]]*\\]";
local Uc="documentation-html";
local Uc="clang/lib/Sema/SemaExprObjC.cpp";
local Vc=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]";
local Vc="Add most of the boilerplate support for scanf format string checking.  This includes";
local Wc="Lambda Issue";
local Wc="deprecated-declarations";
local Xc="clang/lib/Frontend/CompilerInstance.cpp";
local Xc="clang/lib/Sema/SemaObjCProperty.cpp";
local Yc="Reland [clang] Check unsupported types in expressions";
local Yc=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]";
local Zc="availability";
local Zc="availability";
local ad="Add most of the boilerplate support for scanf format string checking.  This includes\nhandling the parsing of scanf format strings and hooking the checking into Sema.\nMost of this checking logic piggybacks on what was already there for checking printf format\nstrings, but the checking logic has been refactored to support both.\n\nWhat is left to be done is to support argument type checking in format strings and of course\nfix the usual tail of bugs that will follow.\n\nllvm-svn: 108500";
local ad="Reland [clang] Check unsupported types in expressions\n\nThis was committed as ec6c847179fd, but then reverted after a failure\nin: https://lab.llvm.org/buildbot/#/builders/84/builds/13983\n\nI was not able to reproduce the problem, but I added an extra check\nfor a NULL QualType just in case.\n\nOriginal comit message:\n\nThe patch adds missing diagnostics for cases like:\n\n  float F3 = ((__float128)F1 * (__float128)F2) / 2.0f;\n\nSema::checkDeviceDecl (renamed to checkTypeSupport) is changed to work\nwith a type without the corresponding ValueDecl. It is also refactored\nso that host diagnostics for unsupported types can be added here as\nwell.\n\nDifferential Revision: https://reviews.llvm.org/D109315";
local bd="Add most of the boilerplate support for scanf format string checking.  This includes";
local bd="Reland [clang] Check unsupported types in expressions";
local cd="deprecated-declarations";
local cd="Add most of the boilerplate support for scanf format string checking.  This includes\nhandling the parsing of scanf format strings and hooking the checking into Sema.\nMost of this checking logic piggybacks on what was already there for checking printf format\nstrings, but the checking logic has been refactored to support both.\n\nWhat is left to be done is to support argument type checking in format strings and of course\nfix the usual tail of bugs that will follow.\n\nllvm-svn: 108500";
local dd="0208793e4101";
local dd="3dbcea8b957a";
local ed="clang/lib/Lex/ModuleMap.cpp";
local ed="b15c11c81907";
local fd="f60dc3caa673";
local fd="Add -Wc++98-compat warnings for uses of the new keywords \'alignof\', \'char16_t\',";
local gd="clang/lib/AST/ExprConstant.cpp";
local gd="Lambda Issue";
local hd="acd4d3d52abb";
local hd="pedantic";
local id="pedantic";
local id="clang/lib/Lex/LiteralSupport.cpp";
local jd="clang/lib/Lex/LiteralSupport.cpp";
local jd="f60dc3caa673";
local kd="[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119";
local kd="acd4d3d52abb";
local ld="[C++20][Modules] Adjust handling of exports of namespaces and using-decls.";
local ld="implicit-float-conversion";
local md="-Wc++98-compat warnings for the lexer.";
local md=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat[^\\]]*\\]";
local nd="5.0";
local nd="-Wc++98-compat warnings for the lexer.";
local od="clang/lib/Driver/ToolChains/Darwin.cpp";
local od="-Wc++98-compat warnings for the lexer.\n\nThis also adds a -Wc++98-compat-pedantic for warning on constructs which would\nbe diagnosed by -std=c++98 -pedantic (that is, it warns even on C++11 features\nwhich we enable by default, with no warning, in C++98 mode).\n\nllvm-svn: 142034";
local pd="-Wc++98-compat warnings for the lexer.\n\nThis also adds a -Wc++98-compat-pedantic for warning on constructs which would\nbe diagnosed by -std=c++98 -pedantic (that is, it warns even on C++11 features\nwhich we enable by default, with no warning, in C++98 mode).\n\nllvm-svn: 142034";
local pd="clang/test/SemaCXX/cxx98-compat-pedantic.cpp";
local qd=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat[^\\]]*\\]";
local qd="clang/lib/Driver/ToolChains/Darwin.cpp";
local rd="clang/test/SemaCXX/cxx98-compat-pedantic.cpp";
local rd="clang/lib/AST/ExprConstant.cpp";
local sd="implicit-float-conversion";
local sd="[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119";
local td="c++11-narrowing";
local td="[C++20][Modules] Adjust handling of exports of namespaces and using-decls.";
local ud="[WebAssembly] Improve clang diagnostics for wasm attributes";
local ud="literal-range";
local vd="clang/lib/Lex/PPDirectives.cpp";
local vd=" \\[(?:\\-Werror,)?\\-Wreturn\\-type[^\\]]*\\]";
local wd="clang/lib/Driver/ToolChains/Arch/ARM.cpp";
local wd="clang/lib/Driver/ToolChains/Arch/ARM.cpp";
local xd="format-non-iso";
local xd="[WebAssembly] Improve clang diagnostics for wasm attributes";
local yd="main";
local yd="[C++20][Modules][3/8] Initial handling for module partitions.\n\nThis implements the parsing and recognition of module partition CMIs\nand removes the FIXMEs in the parser.\n\nModule partitions are recognised in the base computation of visibility,\nhowever additional amendments to visibility follow in subsequent patches.\n\nDifferential Revision: https://reviews.llvm.org/D118586";
local zd="literal-range";
local zd="c++11-narrowing";
local Ad="objc-method-access";
local Ad="b1c4d5507fad";
local Bd="931fcd3ba011";
local Bd="clang/lib/Lex/PPDirectives.cpp";
local Cd=" \\[(?:\\-Werror,)?\\-Wreturn\\-type[^\\]]*\\]";
local Cd="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local Dd="private-module";
local Dd="cuda-compat";
local Ed="[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n  turned out to be ineffective anyway since functions can be defined later\n  in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520";
local Ed="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomplete) test conversions of the existing def files to this format.\n\nllvm-svn: 66064";
local Fd="sign-conversion";
local Fd="main";
local Gd="shadow-all";
local Gd="%0";
local Hd="unknown-argument";
local Hd="Backend Issue";
local Id="Backend Issue";
local Id="clang/lib/Driver/SanitizerArgs.cpp";
local Jd="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local Jd="[C++20][Modules][3/8] Initial handling for module partitions.";
local Kd="b1c4d5507fad";
local Kd="dangling";
local Ld="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomplete) test conversions of the existing def files to this format.\n\nllvm-svn: 66064";
local Ld="931fcd3ba011";
local Md="clang/lib/Driver/SanitizerArgs.cpp";
local Md="69350e569dc4";
local Nd="cuda-compat";
local Nd="objc-method-access";


return {
return {
["warn_conv_to_void_not_used"]={
["warn_conv_to_void_not_used"]={
[j]={"class-conversion"},
[k]={"class-conversion"},
[i]="class-conversion",
[j]="class-conversion",
[c]="conversion function converting %0 to %1 will never be used",
[c]="warn_conv_to_void_not_used",
[d]=g,
[d]="conversion function converting %0 to %1 will never be used",
[e]="conversion function converting (.*?) to (.*?) will never be used",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wclass\\-conversion[^\\]]*\\]",
[g]="conversion function converting (.*?) to (.*?) will never be used",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wclass\\-conversion[^\\]]*\\]",
[a]={Ub,1237025389,Xb,Wb},
[b]=m,
[h]={{C,11180,"/// ActOnConversionDeclarator - Called by ActOnDeclarator to complete\n/// the declaration of the given C++ conversion function. This routine\n/// is responsible for recording the conversion function in the C++\n/// class, if possible.\nDecl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {\n  // ...\n  if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared && Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)\n  // ...\n  else if (Conversion->size_overridden_methods() != 0)\n  // ...\n  else if (ConvType->isRecordType()) {\n  // ...\n  } else if (ConvType->isVoidType()) {\n    Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used) << ClassType << ConvType;"}},
[f]={Yb,1237025389,Zb,ac},
[k]={
[h]={{L,11180,"/// ActOnConversionDeclarator - Called by ActOnDeclarator to complete\n/// the declaration of the given C++ conversion function. This routine\n/// is responsible for recording the conversion function in the C++\n/// class, if possible.\nDecl *Sema::ActOnConversionDeclarator(CXXConversionDecl *Conversion) {\n  // ...\n  if (Conversion->getTemplateSpecializationKind() != TSK_Undeclared && Conversion->getTemplateSpecializationKind() != TSK_ExplicitSpecialization)\n  // ...\n  else if (Conversion->size_overridden_methods() != 0)\n  // ...\n  else if (ConvType->isRecordType()) {\n  // ...\n  } else if (ConvType->isVoidType()) {\n    Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used) << ClassType << ConvType;"}},
[l]={
["clang/test/SemaCXX/conversion-function.cpp"]={"clang/test/SemaCXX/conversion-function.cpp:62:3: warning: conversion function converting \'B\' to \'const void\' will never be used [-Wclass-conversion]"}
["clang/test/SemaCXX/conversion-function.cpp"]={"clang/test/SemaCXX/conversion-function.cpp:62:3: warning: conversion function converting \'B\' to \'const void\' will never be used [-Wclass-conversion]"}
}
}
},
},
["warn_coroutine_handle_address_invalid_return_type"]={
["warn_coroutine_handle_address_invalid_return_type"]={
[j]={"coroutine"},
[k]={"coroutine"},
[i]="coroutine",
[j]="coroutine",
[c]={{nil,mb,"return type of \'coroutine_handle<>::address should be \'void*\' (have %0) in order to get capability with existing async C API."}},
[c]={{nil,z,"warn_coroutine_handle_address_invalid_return_type"}},
[d]=g,
[d]={{nil,z,"return type of \'coroutine_handle<>::address should be \'void*\' (have %0) in order to get capability with existing async C API."}},
[e]="return type of \'coroutine_handle\\<\\>\\:\\:address should be \'void\\*\' \\(have (.*?)\\) in order to get capability with existing async C API\\.",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wcoroutine[^\\]]*\\]",
[g]="return type of \'coroutine_handle\\<\\>\\:\\:address should be \'void\\*\' \\(have (.*?)\\) in order to get capability with existing async C API\\.",
[b]="Coroutines Issue",
[a]=" \\[(?:\\-Werror,)?\\-Wcoroutine[^\\]]*\\]",
[a]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574"},
[b]={{nil,z,"Coroutines Issue"}},
[f]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574"},
[h]={{"clang/lib/Sema/SemaCoroutine.cpp",350,"// See if return type is coroutine-handle and if so, invoke builtin coro-resume\n// on its address. This is to enable the support for coroutine-handle\n// returning await_suspend that results in a guaranteed tail call to the target\n// coroutine.\nstatic Expr *maybeTailCall(Sema &S, QualType RetType, Expr *E, SourceLocation Loc) {\n  // ...\n  // Check that the type of AddressExpr is void*\n  if (!JustAddress->getType().getTypePtr()->isVoidPointerType())\n    S.Diag(cast<CallExpr>(JustAddress)->getCalleeDecl()->getLocation(), diag::warn_coroutine_handle_address_invalid_return_type) << JustAddress->getType();"}},
[h]={{"clang/lib/Sema/SemaCoroutine.cpp",350,"// See if return type is coroutine-handle and if so, invoke builtin coro-resume\n// on its address. This is to enable the support for coroutine-handle\n// returning await_suspend that results in a guaranteed tail call to the target\n// coroutine.\nstatic Expr *maybeTailCall(Sema &S, QualType RetType, Expr *E, SourceLocation Loc) {\n  // ...\n  // Check that the type of AddressExpr is void*\n  if (!JustAddress->getType().getTypePtr()->isVoidPointerType())\n    S.Diag(cast<CallExpr>(JustAddress)->getCalleeDecl()->getLocation(), diag::warn_coroutine_handle_address_invalid_return_type) << JustAddress->getType();"}},
[k]={
[l]={
["clang/test/SemaCXX/coroutine_handle-address-return-type.cpp"]={"clang/test/SemaCXX/coroutine_handle-address-return-type.cpp:56:41: warning: return type of \'coroutine_handle<>::address should be \'void*\' (have \'coroutine_handle<task::promise_type> *\') in order to get capability with existing async C API. [-Wcoroutine]"}
["clang/test/SemaCXX/coroutine_handle-address-return-type.cpp"]={"clang/test/SemaCXX/coroutine_handle-address-return-type.cpp:56:41: warning: return type of \'coroutine_handle<>::address should be \'void*\' (have \'coroutine_handle<task::promise_type> *\') in order to get capability with existing async C API. [-Wcoroutine]"}
}
}
},
},
["warn_coroutine_promise_unhandled_exception_required_with_exceptions"]={
["warn_coroutine_promise_unhandled_exception_required_with_exceptions"]={
[j]={"coroutine","coroutine-missing-unhandled-exception"},
[k]={"coroutine","coroutine-missing-unhandled-exception"},
[i]="coroutine-missing-unhandled-exception",
[j]="coroutine-missing-unhandled-exception",
[c]={{nil,nd,"%0 is required to declare the member \'unhandled_exception()\' when exceptions are enabled"}},
[c]={{nil,Ab,"warn_coroutine_promise_unhandled_exception_required_with_exceptions"}},
[d]=g,
[d]={{nil,Ab,"%0 is required to declare the member \'unhandled_exception()\' when exceptions are enabled"}},
[e]="(.*?) is required to declare the member \'unhandled_exception\\(\\)\' when exceptions are enabled",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wcoroutine\\-missing\\-unhandled\\-exception[^\\]]*\\]",
[g]="(.*?) is required to declare the member \'unhandled_exception\\(\\)\' when exceptions are enabled",
[b]="Coroutines Issue",
[a]=" \\[(?:\\-Werror,)?\\-Wcoroutine\\-missing\\-unhandled\\-exception[^\\]]*\\]",
[a]={"a9fdb346dbc6",1490229213,"[coroutines] Implement unhandled_exception changes.","[coroutines] Implement unhandled_exception changes.\n\nSummary:\nThis patch adopts the recent changes that renamed `set_exception(exception_pointer)` to `unhandled_exception()`. \n\nAdditionally `unhandled_exception()` is now required, and so an error is emitted when exceptions are enabled but the promise type does not provide the member.\nWhen exceptions are disabled a warning is emitted instead of an error, The warning notes that the `unhandled_exception()` function is required when exceptions are enabled.\n\nReviewers: rsmith, GorNishanov, aaron.ballman, majnemer\n\nReviewed By: GorNishanov\n\nSubscribers: mehdi_amini, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D30859\n\nllvm-svn: 298565"},
[b]={{nil,Ab,"Coroutines Issue"}},
[f]={"a9fdb346dbc6",1490229213,"[coroutines] Implement unhandled_exception changes.","[coroutines] Implement unhandled_exception changes.\n\nSummary:\nThis patch adopts the recent changes that renamed `set_exception(exception_pointer)` to `unhandled_exception()`. \n\nAdditionally `unhandled_exception()` is now required, and so an error is emitted when exceptions are enabled but the promise type does not provide the member.\nWhen exceptions are disabled a warning is emitted instead of an error, The warning notes that the `unhandled_exception()` function is required when exceptions are enabled.\n\nReviewers: rsmith, GorNishanov, aaron.ballman, majnemer\n\nReviewed By: GorNishanov\n\nSubscribers: mehdi_amini, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D30859\n\nllvm-svn: 298565"},
[h]={{"clang/lib/Sema/SemaCoroutine.cpp",1681,"bool CoroutineStmtBuilder::makeOnException() {\n  // ...\n  if (!lookupMember(S, \"unhandled_exception\", PromiseRecordDecl, Loc)) {\n    auto DiagID = RequireUnhandledException ? diag::err_coroutine_promise_unhandled_exception_required : diag::warn_coroutine_promise_unhandled_exception_required_with_exceptions;"}},
[h]={{"clang/lib/Sema/SemaCoroutine.cpp",1681,"bool CoroutineStmtBuilder::makeOnException() {\n  // ...\n  if (!lookupMember(S, \"unhandled_exception\", PromiseRecordDecl, Loc)) {\n    auto DiagID = RequireUnhandledException ? diag::err_coroutine_promise_unhandled_exception_required : diag::warn_coroutine_promise_unhandled_exception_required_with_exceptions;"}},
[k]={
[l]={
["clang/test/CodeGenCoroutines/coro-return.cpp"]={"clang/test/CodeGenCoroutines/coro-return.cpp:34:17: warning: \'promise_type\' is required to declare the member \'unhandled_exception()\' when exceptions are enabled [-Wcoroutine-missing-unhandled-exception]","clang/test/CodeGenCoroutines/coro-return.cpp:53:16: warning: \'promise_type\' is required to declare the member \'unhandled_exception()\' when exceptions are enabled [-Wcoroutine-missing-unhandled-exception]"}
["clang/test/CodeGenCoroutines/coro-return.cpp"]={"clang/test/CodeGenCoroutines/coro-return.cpp:34:17: warning: \'promise_type\' is required to declare the member \'unhandled_exception()\' when exceptions are enabled [-Wcoroutine-missing-unhandled-exception]","clang/test/CodeGenCoroutines/coro-return.cpp:53:16: warning: \'promise_type\' is required to declare the member \'unhandled_exception()\' when exceptions are enabled [-Wcoroutine-missing-unhandled-exception]"}
}
}
},
},
["warn_correct_comment_command_name"]={
["warn_correct_comment_command_name"]={
[j]={"documentation-pedantic","documentation-unknown-command"},
[k]={"documentation-pedantic","documentation-unknown-command"},
[i]="documentation-unknown-command",
[j]="documentation-unknown-command",
[c]="unknown command tag name \'%0\'; did you mean \'%1\'?",
[c]="warn_correct_comment_command_name",
[d]=g,
[d]="unknown command tag name \'%0\'; did you mean \'%1\'?",
[e]="unknown command tag name \'(.*?)\'; did you mean \'(.*?)\'\\?",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-unknown\\-command[^\\]]*\\]",
[g]="unknown command tag name \'(.*?)\'; did you mean \'(.*?)\'\\?",
[b]=pb,
[a]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-unknown\\-command[^\\]]*\\]",
[a]={"6c7a16666dbb",1368040860,"documentation parsing. Patch to do typo correction for ","documentation parsing. Patch to do typo correction for \ndocumentation commands. Patch was reviewed, along with\ngreat suggestions for improvement, by Doug. \n// rdar://12381408\n\nllvm-svn: 181458"},
[b]=sb,
[f]={"6c7a16666dbb",1368040860,"documentation parsing. Patch to do typo correction for ","documentation parsing. Patch to do typo correction for \ndocumentation commands. Patch was reviewed, along with\ngreat suggestions for improvement, by Doug. \n// rdar://12381408\n\nllvm-svn: 181458"},
[h]={{"clang/lib/AST/CommentLexer.cpp",411,"void Lexer::lexCommentText(Token &T) {\n  // ...\n  case \'\\\\\':\n  case \'@\': {\n    // ...\n    if (!Info) {\n      if ((Info = Traits.getTypoCorrectCommandInfo(CommandName))) {\n        // ...\n        Diag(Loc, diag::warn_correct_comment_command_name) << FullRange << CommandName << CorrectedName << FixItHint::CreateReplacement(CommandRange, CorrectedName);"}},
[h]={{"clang/lib/AST/CommentLexer.cpp",411,"void Lexer::lexCommentText(Token &T) {\n  // ...\n  case \'\\\\\':\n  case \'@\': {\n    // ...\n    if (!Info) {\n      if ((Info = Traits.getTypoCorrectCommandInfo(CommandName))) {\n        // ...\n        Diag(Loc, diag::warn_correct_comment_command_name) << FullRange << CommandName << CorrectedName << FixItHint::CreateReplacement(CommandRange, CorrectedName);"}},
[k]={
[l]={
["clang/test/Sema/warn-documentation-fixits.cpp"]={"clang/test/Sema/warn-documentation-fixits.cpp:110:5: warning: unknown command tag name \'retur\'; did you mean \'return\'? [-Wdocumentation-unknown-command]","clang/test/Sema/warn-documentation-fixits.cpp:114:5: warning: unknown command tag name \'fooba\'; did you mean \'foobar\'? [-Wdocumentation-unknown-command]","clang/test/Sema/warn-documentation-fixits.cpp:123:5: warning: unknown command tag name \'encode\'; did you mean \'endcode\'? [-Wdocumentation-unknown-command]"}
["clang/test/Sema/warn-documentation-fixits.cpp"]={"clang/test/Sema/warn-documentation-fixits.cpp:110:5: warning: unknown command tag name \'retur\'; did you mean \'return\'? [-Wdocumentation-unknown-command]","clang/test/Sema/warn-documentation-fixits.cpp:114:5: warning: unknown command tag name \'fooba\'; did you mean \'foobar\'? [-Wdocumentation-unknown-command]","clang/test/Sema/warn-documentation-fixits.cpp:123:5: warning: unknown command tag name \'encode\'; did you mean \'endcode\'? [-Wdocumentation-unknown-command]"}
}
}
},
},
["warn_cstruct_memaccess"]={
["warn_cstruct_memaccess"]={
[j]={"nontrivial-memaccess","suspicious-memaccess"},
[k]={"nontrivial-memaccess","suspicious-memaccess"},
[i]="nontrivial-memaccess",
[j]="nontrivial-memaccess",
[c]={{nil,eb,"%select{destination for|source of|first operand of|second operand of}0 this %1 call is a pointer to record %2 that is not trivial to %select{primitive-default-initialize|primitive-copy}3"}},
[c]={{nil,D,"warn_cstruct_memaccess"}},
[d]=g,
[d]={{nil,D,"%select{destination for|source of|first operand of|second operand of}0 this %1 call is a pointer to record %2 that is not trivial to %select{primitive-default-initialize|primitive-copy}3"}},
[e]="(?:destination for|source of|first operand of|second operand of) this (.*?) call is a pointer to record (.*?) that is not trivial to (?:primitive\\-default\\-initialize|primitive\\-copy)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wnontrivial\\-memaccess[^\\]]*\\]",
[g]="(?:destination for|source of|first operand of|second operand of) this (.*?) call is a pointer to record (.*?) that is not trivial to (?:primitive\\-default\\-initialize|primitive\\-copy)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wnontrivial\\-memaccess[^\\]]*\\]",
[a]={"2be0441e770d",1523992421,"[Sema] Warn about memcpy\'ing non-trivial C structs.","[Sema] Warn about memcpy\'ing non-trivial C structs.\n\nIssue a warning when non-trivial C structs are copied or initialized by\ncalls to memset, bzero, memcpy, or memmove.\n\nrdar://problem/36124208\n\nDifferential Revision: https://reviews.llvm.org/D45310\n\nllvm-svn: 330202"},
[b]={{nil,D,m}},
[h]={{r,12587,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  // ...\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    // ...\n    if (const CXXRecordDecl *ContainedRD = getContainedDynamicClass(PointeeTy, IsContained)) {\n    // ...\n    } else if (PointeeTy.hasNonTrivialObjCLifetime() && BId != Builtin::BImemset)\n    // ...\n    else if (const auto *RT = PointeeTy->getAs<RecordType>()) {\n      if ((BId == Builtin::BImemset || BId == Builtin::BIbzero) && RT->getDecl()->isNonTrivialToPrimitiveDefaultInitialize()) {\n        DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_cstruct_memaccess) << ArgIdx << FnName << PointeeTy << 0);"},{r,12593,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  // ...\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    // ...\n    if (const CXXRecordDecl *ContainedRD = getContainedDynamicClass(PointeeTy, IsContained)) {\n    // ...\n    } else if (PointeeTy.hasNonTrivialObjCLifetime() && BId != Builtin::BImemset)\n    // ...\n    else if (const auto *RT = PointeeTy->getAs<RecordType>()) {\n      if ((BId == Builtin::BImemset || BId == Builtin::BIbzero) && RT->getDecl()->isNonTrivialToPrimitiveDefaultInitialize()) {\n      // ...\n      } else if ((BId == Builtin::BImemcpy || BId == Builtin::BImemmove) && RT->getDecl()->isNonTrivialToPrimitiveCopy()) {\n        DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_cstruct_memaccess) << ArgIdx << FnName << PointeeTy << 1);"}},
[f]={"2be0441e770d",1523992421,"[Sema] Warn about memcpy\'ing non-trivial C structs.","[Sema] Warn about memcpy\'ing non-trivial C structs.\n\nIssue a warning when non-trivial C structs are copied or initialized by\ncalls to memset, bzero, memcpy, or memmove.\n\nrdar://problem/36124208\n\nDifferential Revision: https://reviews.llvm.org/D45310\n\nllvm-svn: 330202"},
[k]={
[h]={{t,12587,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  // ...\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    // ...\n    if (const CXXRecordDecl *ContainedRD = getContainedDynamicClass(PointeeTy, IsContained)) {\n    // ...\n    } else if (PointeeTy.hasNonTrivialObjCLifetime() && BId != Builtin::BImemset)\n    // ...\n    else if (const auto *RT = PointeeTy->getAs<RecordType>()) {\n      if ((BId == Builtin::BImemset || BId == Builtin::BIbzero) && RT->getDecl()->isNonTrivialToPrimitiveDefaultInitialize()) {\n        DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_cstruct_memaccess) << ArgIdx << FnName << PointeeTy << 0);"},{t,12593,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  // ...\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    // ...\n    if (const CXXRecordDecl *ContainedRD = getContainedDynamicClass(PointeeTy, IsContained)) {\n    // ...\n    } else if (PointeeTy.hasNonTrivialObjCLifetime() && BId != Builtin::BImemset)\n    // ...\n    else if (const auto *RT = PointeeTy->getAs<RecordType>()) {\n      if ((BId == Builtin::BImemset || BId == Builtin::BIbzero) && RT->getDecl()->isNonTrivialToPrimitiveDefaultInitialize()) {\n      // ...\n      } else if ((BId == Builtin::BImemcpy || BId == Builtin::BImemmove) && RT->getDecl()->isNonTrivialToPrimitiveCopy()) {\n        DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_cstruct_memaccess) << ArgIdx << FnName << PointeeTy << 1);"}},
[l]={
["clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m"]={"clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:34:10: warning: destination for this \'memset\' call is a pointer to record \'struct NonTrivial1\' that is not trivial to primitive-default-initialize [-Wnontrivial-memaccess]","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:36:9: warning: destination for this \'bzero\' call is a pointer to record \'struct NonTrivial1\' that is not trivial to primitive-default-initialize [-Wnontrivial-memaccess]","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:37:10: warning: destination for this \'memcpy\' call is a pointer to record \'struct NonTrivial1\' that is not trivial to primitive-copy [-Wnontrivial-memaccess]","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:38:11: warning: destination for this \'memmove\' call is a pointer to record \'struct NonTrivial1\' that is not trivial to primitive-copy [-Wnontrivial-memaccess]"}
["clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m"]={"clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:34:10: warning: destination for this \'memset\' call is a pointer to record \'struct NonTrivial1\' that is not trivial to primitive-default-initialize [-Wnontrivial-memaccess]","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:36:9: warning: destination for this \'bzero\' call is a pointer to record \'struct NonTrivial1\' that is not trivial to primitive-default-initialize [-Wnontrivial-memaccess]","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:37:10: warning: destination for this \'memcpy\' call is a pointer to record \'struct NonTrivial1\' that is not trivial to primitive-copy [-Wnontrivial-memaccess]","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:38:11: warning: destination for this \'memmove\' call is a pointer to record \'struct NonTrivial1\' that is not trivial to primitive-copy [-Wnontrivial-memaccess]"}
}
}
},
},
["warn_cstyle_param"]={
["warn_cstyle_param"]={
[j]={ab,cd},
[k]={jb,Wc},
[i]=cd,
[j]=Wc,
[c]="use of C-style parameters in Objective-C method declarations is deprecated",
[c]="warn_cstyle_param",
[d]=g,
[d]="use of C-style parameters in Objective-C method declarations is deprecated",
[e]="use of C\\-style parameters in Objective\\-C method declarations is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]",
[g]="use of C\\-style parameters in Objective\\-C method declarations is deprecated",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]",
[a]={"45337f53df65",1340304188,"objective-c: deprecated C-like parameters in Objective-C ","objective-c: deprecated C-like parameters in Objective-C \nmethod declarations.\n// rdar://11578353.\n\nllvm-svn: 158929"},
[b]=ob,
[f]={"45337f53df65",1340304188,"objective-c: deprecated C-like parameters in Objective-C ","objective-c: deprecated C-like parameters in Objective-C \nmethod declarations.\n// rdar://11578353.\n\nllvm-svn: 158929"},
[h]={{"clang/lib/Parse/ParseObjc.cpp",1528,"///  objc-method-decl:\n///    objc-selector\n///    objc-keyword-selector objc-parmlist[opt]\n///    objc-type-name objc-selector\n///    objc-type-name objc-keyword-selector objc-parmlist[opt]\n///\n///  objc-keyword-selector:\n///    objc-keyword-decl\n///    objc-keyword-selector objc-keyword-decl\n///\n///  objc-keyword-decl:\n///    objc-selector \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    objc-selector \':\' objc-keyword-attributes[opt] identifier\n///    \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    \':\' objc-keyword-attributes[opt] identifier\n///\n///  objc-parmlist:\n///    objc-parms objc-ellipsis[opt]\n///\n///  objc-parms:\n///    objc-parms , parameter-declaration\n///\n///  objc-ellipsis:\n///    , ...\n///\n///  objc-keyword-attributes:        [OBJC2]\n///    __attribute__((unused))\n///\nDecl *Parser::ParseObjCMethodDecl(SourceLocation mLoc, tok::TokenKind mType, tok::ObjCKeywordKind MethodImplKind, bool MethodDefinition) {\n  // ...\n  // Parse the (optional) parameter list.\n  while (Tok.is(tok::comma)) {\n    // ...\n    if (!cStyleParamWarned) {\n      Diag(Tok, diag::warn_cstyle_param);"}},
[h]={{"clang/lib/Parse/ParseObjc.cpp",1528,"///  objc-method-decl:\n///    objc-selector\n///    objc-keyword-selector objc-parmlist[opt]\n///    objc-type-name objc-selector\n///    objc-type-name objc-keyword-selector objc-parmlist[opt]\n///\n///  objc-keyword-selector:\n///    objc-keyword-decl\n///    objc-keyword-selector objc-keyword-decl\n///\n///  objc-keyword-decl:\n///    objc-selector \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    objc-selector \':\' objc-keyword-attributes[opt] identifier\n///    \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    \':\' objc-keyword-attributes[opt] identifier\n///\n///  objc-parmlist:\n///    objc-parms objc-ellipsis[opt]\n///\n///  objc-parms:\n///    objc-parms , parameter-declaration\n///\n///  objc-ellipsis:\n///    , ...\n///\n///  objc-keyword-attributes:        [OBJC2]\n///    __attribute__((unused))\n///\nDecl *Parser::ParseObjCMethodDecl(SourceLocation mLoc, tok::TokenKind mType, tok::ObjCKeywordKind MethodImplKind, bool MethodDefinition) {\n  // ...\n  // Parse the (optional) parameter list.\n  while (Tok.is(tok::comma)) {\n    // ...\n    if (!cStyleParamWarned) {\n      Diag(Tok, diag::warn_cstyle_param);"}},
[k]={
[l]={
["clang/test/SemaObjC/method-prototype-scope.m"]={"clang/test/SemaObjC/method-prototype-scope.m:10:19: warning: use of C-style parameters in Objective-C method declarations is deprecated [-Wdeprecated-declarations]","clang/test/SemaObjC/method-prototype-scope.m:26:19: warning: use of C-style parameters in Objective-C method declarations is deprecated [-Wdeprecated-declarations]"}
["clang/test/SemaObjC/method-prototype-scope.m"]={"clang/test/SemaObjC/method-prototype-scope.m:10:19: warning: use of C-style parameters in Objective-C method declarations is deprecated [-Wdeprecated-declarations]","clang/test/SemaObjC/method-prototype-scope.m:26:19: warning: use of C-style parameters in Objective-C method declarations is deprecated [-Wdeprecated-declarations]"}
}
}
},
},
["warn_ctad_maybe_unsupported"]={
["warn_ctad_maybe_unsupported"]={
[j]={"ctad-maybe-unsupported"},
[k]={"ctad-maybe-unsupported"},
[i]="ctad-maybe-unsupported",
[j]="ctad-maybe-unsupported",
[c]={{nil,I,"%0 may not intend to support class template argument deduction"}},
[c]={{nil,x,"warn_ctad_maybe_unsupported"}},
[d]=g,
[d]={{nil,x,"%0 may not intend to support class template argument deduction"}},
[e]="(.*?) may not intend to support class template argument deduction",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wctad\\-maybe\\-unsupported[^\\]]*\\]",
[g]="(.*?) may not intend to support class template argument deduction",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wctad\\-maybe\\-unsupported[^\\]]*\\]",
[a]={"73b51ae160af",1547761464,"Add -Wctad-maybe-unsupported to diagnose CTAD on types with no user defined deduction guides.","Add -Wctad-maybe-unsupported to diagnose CTAD on types with no user defined deduction guides.\n\nSummary:\nSome style guides want to allow using CTAD only on types that \"opt-in\"; i.e. on types that are designed to support it and not just types that *happen* to work with it.\n\nThis patch implements the `-Wctad-maybe-unsupported` warning, which is off by default, which warns when CTAD is used on a type that does not define any deduction guides.\n\nThe following pattern can be used to suppress the warning in cases where the type intentionally doesn\'t define any deduction guides:\n\n```\nstruct allow_ctad_t;\n\ntemplate <class T>\nstruct TestSuppression {\n  TestSuppression(T) {}\n};\nTestSuppression(allow_ctad_t)->TestSuppression<void>; // guides with incomplete parameter types are never considered.\n```\n\nReviewers: rsmith, james.dennett, gromer\n\nReviewed By: rsmith\n\nSubscribers: jdennett, Quuxplusone, lebedev.ri, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D56731\n\nllvm-svn: 351484"},
[b]={{nil,x,m}},
[h]={{fb,10917,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // ...\n  // Warn if CTAD was used on a type that does not have any user-defined\n  // deduction guides.\n  if (!FoundDeductionGuide) {\n    Diag(TSInfo->getTypeLoc().getBeginLoc(), diag::warn_ctad_maybe_unsupported) << TemplateName;"}},
[f]={"73b51ae160af",1547761464,"Add -Wctad-maybe-unsupported to diagnose CTAD on types with no user defined deduction guides.","Add -Wctad-maybe-unsupported to diagnose CTAD on types with no user defined deduction guides.\n\nSummary:\nSome style guides want to allow using CTAD only on types that \"opt-in\"; i.e. on types that are designed to support it and not just types that *happen* to work with it.\n\nThis patch implements the `-Wctad-maybe-unsupported` warning, which is off by default, which warns when CTAD is used on a type that does not define any deduction guides.\n\nThe following pattern can be used to suppress the warning in cases where the type intentionally doesn\'t define any deduction guides:\n\n```\nstruct allow_ctad_t;\n\ntemplate <class T>\nstruct TestSuppression {\n  TestSuppression(T) {}\n};\nTestSuppression(allow_ctad_t)->TestSuppression<void>; // guides with incomplete parameter types are never considered.\n```\n\nReviewers: rsmith, james.dennett, gromer\n\nReviewed By: rsmith\n\nSubscribers: jdennett, Quuxplusone, lebedev.ri, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D56731\n\nllvm-svn: 351484"},
[k]={
[h]={{mb,10917,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // ...\n  // Warn if CTAD was used on a type that does not have any user-defined\n  // deduction guides.\n  if (!FoundDeductionGuide) {\n    Diag(TSInfo->getTypeLoc().getBeginLoc(), diag::warn_ctad_maybe_unsupported) << TemplateName;"}},
[l]={
["clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp"]={"clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:458:1: warning: \'NoExplicit\' may not intend to support class template argument deduction [-Wctad-maybe-unsupported]","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:477:1: warning: \'AmateurPair\' may not intend to support class template argument deduction [-Wctad-maybe-unsupported]","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:486:1: warning: \'AmateurPair2\' may not intend to support class template argument deduction [-Wctad-maybe-unsupported]"}
["clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp"]={"clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:458:1: warning: \'NoExplicit\' may not intend to support class template argument deduction [-Wctad-maybe-unsupported]","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:477:1: warning: \'AmateurPair\' may not intend to support class template argument deduction [-Wctad-maybe-unsupported]","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:486:1: warning: \'AmateurPair2\' may not intend to support class template argument deduction [-Wctad-maybe-unsupported]"}
}
}
},
},
["warn_ctor_parm_shadows_field"]={
["warn_ctor_parm_shadows_field"]={
[j]={Gd,"shadow-field-in-constructor"},
[k]={"shadow-all","shadow-field-in-constructor"},
[i]="shadow-field-in-constructor",
[j]="shadow-field-in-constructor",
[c]="constructor parameter %0 shadows the field %1 of %2",
[c]="warn_ctor_parm_shadows_field",
[d]=g,
[d]="constructor parameter %0 shadows the field %1 of %2",
[e]="constructor parameter (.*?) shadows the field (.*?) of (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wshadow\\-field\\-in\\-constructor[^\\]]*\\]",
[g]="constructor parameter (.*?) shadows the field (.*?) of (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wshadow\\-field\\-in\\-constructor[^\\]]*\\]",
[a]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields","Avoid -Wshadow warnings about constructor parameters named after fields\n\nUsually these parameters are used solely to initialize the field in the\ninitializer list, and there is no real shadowing confusion.\n\nThere is a new warning under -Wshadow called\n-Wshadow-field-in-constructor-modified. It attempts to find\nmodifications of such constructor parameters that probably intended to\nmodify the field.\n\nIt has some false negatives, though, so there is another warning group,\n-Wshadow-field-in-constructor, which always warns on this special case.\nFor users who just want the old behavior and don\'t care about these fine\ngrained groups, we have a new warning group called -Wshadow-all that\nactivates everything.\n\nFixes PR16088.\n\nReviewers: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D18271\n\nllvm-svn: 267957"},
[b]=m,
[h]={{D,2281,"void Sema::ActOnPopScope(SourceLocation Loc, Scope *S) {\n  // ...\n  for (auto *TmpD : S->decls()) {\n    // ...\n    if (ShadowI != ShadowingDecls.end()) {\n      if (const auto *FD = dyn_cast<FieldDecl>(ShadowI->second)) {\n        addDiagWithPrev(D->getLocation(), FD->getLocation(), PDiag(diag::warn_ctor_parm_shadows_field) << D << FD << FD->getParent());"}},
[f]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields","Avoid -Wshadow warnings about constructor parameters named after fields\n\nUsually these parameters are used solely to initialize the field in the\ninitializer list, and there is no real shadowing confusion.\n\nThere is a new warning under -Wshadow called\n-Wshadow-field-in-constructor-modified. It attempts to find\nmodifications of such constructor parameters that probably intended to\nmodify the field.\n\nIt has some false negatives, though, so there is another warning group,\n-Wshadow-field-in-constructor, which always warns on this special case.\nFor users who just want the old behavior and don\'t care about these fine\ngrained groups, we have a new warning group called -Wshadow-all that\nactivates everything.\n\nFixes PR16088.\n\nReviewers: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D18271\n\nllvm-svn: 267957"},
[k]={
[h]={{M,2281,"void Sema::ActOnPopScope(SourceLocation Loc, Scope *S) {\n  // ...\n  for (auto *TmpD : S->decls()) {\n    // ...\n    if (ShadowI != ShadowingDecls.end()) {\n      if (const auto *FD = dyn_cast<FieldDecl>(ShadowI->second)) {\n        addDiagWithPrev(D->getLocation(), FD->getLocation(), PDiag(diag::warn_ctor_parm_shadows_field) << D << FD << FD->getParent());"}},
[l]={
["clang/test/SemaCXX/warn-shadow.cpp"]={"clang/test/SemaCXX/warn-shadow.cpp:62:9: warning: constructor parameter \'f1\' shadows the field \'f1\' of \'A\' [-Wshadow-field-in-constructor]","clang/test/SemaCXX/warn-shadow.cpp:62:17: warning: constructor parameter \'f2\' shadows the field \'f2\' of \'A\' [-Wshadow-field-in-constructor]","clang/test/SemaCXX/warn-shadow.cpp:62:25: warning: constructor parameter \'f3\' shadows the field \'f3\' of \'A\' [-Wshadow-field-in-constructor]","clang/test/SemaCXX/warn-shadow.cpp:62:33: warning: constructor parameter \'f4\' shadows the field \'f4\' of \'A\' [-Wshadow-field-in-constructor]"}
["clang/test/SemaCXX/warn-shadow.cpp"]={"clang/test/SemaCXX/warn-shadow.cpp:62:9: warning: constructor parameter \'f1\' shadows the field \'f1\' of \'A\' [-Wshadow-field-in-constructor]","clang/test/SemaCXX/warn-shadow.cpp:62:17: warning: constructor parameter \'f2\' shadows the field \'f2\' of \'A\' [-Wshadow-field-in-constructor]","clang/test/SemaCXX/warn-shadow.cpp:62:25: warning: constructor parameter \'f3\' shadows the field \'f3\' of \'A\' [-Wshadow-field-in-constructor]","clang/test/SemaCXX/warn-shadow.cpp:62:33: warning: constructor parameter \'f4\' shadows the field \'f4\' of \'A\' [-Wshadow-field-in-constructor]"}
}
}
},
},
["warn_ctu_incompat_triple"]={
["warn_ctu_incompat_triple"]={
[j]={"ctu"},
[k]={"ctu"},
[i]="ctu",
[j]="ctu",
[c]={{nil,ob,"imported AST from \'%0\' had been generated for a different target, current: %1, imported: %2"}},
[c]={{nil,B,"warn_ctu_incompat_triple"}},
[d]=g,
[d]={{nil,B,"imported AST from \'%0\' had been generated for a different target, current: %1, imported: %2"}},
[e]="imported AST from \'(.*?)\' had been generated for a different target, current\\: (.*?), imported\\: (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wctu[^\\]]*\\]",
[g]="imported AST from \'(.*?)\' had been generated for a different target, current\\: (.*?), imported\\: (.*?)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wctu[^\\]]*\\]",
[a]={"32aff2eb793c",1544200363,"[CTU] Add triple/lang mismatch handling","[CTU] Add triple/lang mismatch handling\n\nSummary:\nWe introduce a strict policy for C++ CTU. It can work across TUs only if\nthe C++ dialects are the same. We neither allow C vs C++ CTU.  We do this\nbecause the same constructs might be represented with different properties in\nthe corresponding AST nodes or even the nodes might be completely different (a\nstruct will be RecordDecl in C, but it will be a CXXRectordDecl in C++, thus it\nmay cause certain assertions during cast operations).\n\nReviewers: xazax.hun, a_sidorin\n\nSubscribers: rnkovacs, dkrupp, Szelethus, gamesh411, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D55134\n\nllvm-svn: 348610"},
[b]={{nil,B,r}},
[f]={"32aff2eb793c",1544200363,"[CTU] Add triple/lang mismatch handling","[CTU] Add triple/lang mismatch handling\n\nSummary:\nWe introduce a strict policy for C++ CTU. It can work across TUs only if\nthe C++ dialects are the same. We neither allow C vs C++ CTU.  We do this\nbecause the same constructs might be represented with different properties in\nthe corresponding AST nodes or even the nodes might be completely different (a\nstruct will be RecordDecl in C, but it will be a CXXRectordDecl in C++, thus it\nmay cause certain assertions during cast operations).\n\nReviewers: xazax.hun, a_sidorin\n\nSubscribers: rnkovacs, dkrupp, Szelethus, gamesh411, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D55134\n\nllvm-svn: 348610"},
[h]={{"clang/lib/CrossTU/CrossTranslationUnit.cpp",386,"void CrossTranslationUnitContext::emitCrossTUDiagnostics(const IndexError &IE) {\n  // ...\n  case index_error_code::triple_mismatch:\n    Context.getDiagnostics().Report(diag::warn_ctu_incompat_triple) << IE.getFileName() << IE.getTripleToName() << IE.getTripleFromName();"}}
[h]={{"clang/lib/CrossTU/CrossTranslationUnit.cpp",386,"void CrossTranslationUnitContext::emitCrossTUDiagnostics(const IndexError &IE) {\n  // ...\n  case index_error_code::triple_mismatch:\n    Context.getDiagnostics().Report(diag::warn_ctu_incompat_triple) << IE.getFileName() << IE.getTripleToName() << IE.getTripleFromName();"}}
},
},
["warn_cuda_attr_lambda_position"]={
["warn_cuda_attr_lambda_position"]={
[j]={Nd},
[k]={Dd},
[i]=Nd,
[j]=Dd,
[c]={{nil,Q,"nvcc does not allow \'__%0__\' to appear after the parameter list in lambdas"},{jb,nil,"nvcc does not allow \'__%0__\' to appear after \'()\' in lambdas"}},
[c]="warn_cuda_attr_lambda_position",
[d]=g,
[d]={{nil,w,"nvcc does not allow \'__%0__\' to appear after the parameter list in lambdas"},{I,nil,"nvcc does not allow \'__%0__\' to appear after \'()\' in lambdas"}},
[e]="nvcc does not allow \'__(.*?)__\' to appear after the parameter list in lambdas",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]",
[g]="nvcc does not allow \'__(.*?)__\' to appear after the parameter list in lambdas",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]",
[a]={"e46ea72d97e5",1475265355,"[CUDA] Emit a warning if a CUDA host/device/global attribute is placed after \'(...)\'.","[CUDA] Emit a warning if a CUDA host/device/global attribute is placed after \'(...)\'.\n\nSummary:\nThis is probably the sane place for the attribute to go, but nvcc\nspecifically rejects it.  Other GNU-style attributes are allowed in this\nposition (although judging from the warning it emits for\nhost/device/global, those attributes are applied to the lambda\'s\nanonymous struct, not to the function itself).\n\nIt would be nice to have a FixIt message here, but doing so, or even\njust getting the correct range for the attribute, including its \'((\' and\n\'))\'s, is apparently Hard.\n\nReviewers: rnk\n\nSubscribers: cfe-commits, tra\n\nDifferential Revision: https://reviews.llvm.org/D25115\n\nllvm-svn: 282911"},
[b]=A,
[h]={{cc,1323,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  // ...\n  // Helper to emit a warning if we see a CUDA host/device/global attribute\n  // after \'(...)\'. nvcc doesn\'t accept this.\n  auto WarnIfHasCUDATargetAttr = [&] {\n    if (getLangOpts().CUDA)\n      for (const ParsedAttr &A : Attributes)\n        if (A.getKind() == ParsedAttr::AT_CUDADevice || A.getKind() == ParsedAttr::AT_CUDAHost || A.getKind() == ParsedAttr::AT_CUDAGlobal)\n          Diag(A.getLoc(), diag::warn_cuda_attr_lambda_position) << A.getAttrName()->getName();"}},
[f]={"e46ea72d97e5",1475265355,"[CUDA] Emit a warning if a CUDA host/device/global attribute is placed after \'(...)\'.","[CUDA] Emit a warning if a CUDA host/device/global attribute is placed after \'(...)\'.\n\nSummary:\nThis is probably the sane place for the attribute to go, but nvcc\nspecifically rejects it.  Other GNU-style attributes are allowed in this\nposition (although judging from the warning it emits for\nhost/device/global, those attributes are applied to the lambda\'s\nanonymous struct, not to the function itself).\n\nIt would be nice to have a FixIt message here, but doing so, or even\njust getting the correct range for the attribute, including its \'((\' and\n\'))\'s, is apparently Hard.\n\nReviewers: rnk\n\nSubscribers: cfe-commits, tra\n\nDifferential Revision: https://reviews.llvm.org/D25115\n\nllvm-svn: 282911"},
[k]={
[h]={{fc,1323,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  // ...\n  // Helper to emit a warning if we see a CUDA host/device/global attribute\n  // after \'(...)\'. nvcc doesn\'t accept this.\n  auto WarnIfHasCUDATargetAttr = [&] {\n    if (getLangOpts().CUDA)\n      for (const ParsedAttr &A : Attributes)\n        if (A.getKind() == ParsedAttr::AT_CUDADevice || A.getKind() == ParsedAttr::AT_CUDAHost || A.getKind() == ParsedAttr::AT_CUDAGlobal)\n          Diag(A.getLoc(), diag::warn_cuda_attr_lambda_position) << A.getAttrName()->getName();"}},
[l]={
["clang/test/Parser/lambda-attr.cu"]={"clang/test/Parser/lambda-attr.cu:8:24: warning: nvcc does not allow \'__device__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:13:25: warning: nvcc does not allow \'__device__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:18:28: warning: nvcc does not allow \'__device__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:28:24: warning: nvcc does not allow \'__host__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:28:46: warning: nvcc does not allow \'__device__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:34:25: warning: nvcc does not allow \'__host__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:34:47: warning: nvcc does not allow \'__device__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:40:28: warning: nvcc does not allow \'__host__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:40:50: warning: nvcc does not allow \'__device__\' to appear after the parameter list in lambdas [-Wcuda-compat]"}
["clang/test/Parser/lambda-attr.cu"]={"clang/test/Parser/lambda-attr.cu:8:24: warning: nvcc does not allow \'__device__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:13:25: warning: nvcc does not allow \'__device__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:18:28: warning: nvcc does not allow \'__device__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:28:24: warning: nvcc does not allow \'__host__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:28:46: warning: nvcc does not allow \'__device__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:34:25: warning: nvcc does not allow \'__host__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:34:47: warning: nvcc does not allow \'__device__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:40:28: warning: nvcc does not allow \'__host__\' to appear after the parameter list in lambdas [-Wcuda-compat]","clang/test/Parser/lambda-attr.cu:40:50: warning: nvcc does not allow \'__device__\' to appear after the parameter list in lambdas [-Wcuda-compat]"}
}
}
},
},
["warn_cxx11_compat_binary_literal"]={
["warn_cxx11_compat_binary_literal"]={
[j]={"binary-literal",o,"c++98-c++11-compat-binary-literal",pc,m,mc},
[k]={"binary-literal",p,"c++98-c++11-compat-binary-literal",qc,n,pc},
[i]="c++98-c++11-compat-binary-literal",
[j]="c++98-c++11-compat-binary-literal",
[c]="binary integer literals are incompatible with C++ standards before C++14",
[c]="warn_cxx11_compat_binary_literal",
[d]=g,
[d]="binary integer literals are incompatible with C++ standards before C++14",
[e]="binary integer literals are incompatible with C\\+\\+ standards before C\\+\\+14",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-c\\+\\+11\\-compat\\-binary\\-literal[^\\]]*\\]",
[g]="binary integer literals are incompatible with C\\+\\+ standards before C\\+\\+14",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-c\\+\\+11\\-compat\\-binary\\-literal[^\\]]*\\]",
[a]={"c5c27f2a1f26",1366404440,"Note that we support (and in fact have supported since the dawn of time itself)","Note that we support (and in fact have supported since the dawn of time itself)\nC++1y binary literals.\n\nllvm-svn: 179883"},
[b]=T,
[h]={{jd,1347,"/// ParseNumberStartingWithZero - This method is called when the first character\n/// of the number is found to be a zero.  This means it is either an octal\n/// number (like \'04\') or a hex number (\'0x123a\') a binary number (\'0b1010\') or\n/// a floating point number (01239.123e4).  Eat the prefix, determining the\n/// radix etc.\nvoid NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {\n  // ...\n  // Handle simple binary numbers 0b01010\n  if ((c1 == \'b\' || c1 == \'B\') && (s[1] == \'0\' || s[1] == \'1\')) {\n    // ...\n    Diags.Report(TokLoc, LangOpts.CPlusPlus14 ? diag::warn_cxx11_compat_binary_literal : LangOpts.CPlusPlus ? diag::ext_binary_literal_cxx14 : diag::ext_binary_literal);"}},
[f]={"c5c27f2a1f26",1366404440,"Note that we support (and in fact have supported since the dawn of time itself)","Note that we support (and in fact have supported since the dawn of time itself)\nC++1y binary literals.\n\nllvm-svn: 179883"},
[k]={
[h]={{id,1347,"/// ParseNumberStartingWithZero - This method is called when the first character\n/// of the number is found to be a zero.  This means it is either an octal\n/// number (like \'04\') or a hex number (\'0x123a\') a binary number (\'0b1010\') or\n/// a floating point number (01239.123e4).  Eat the prefix, determining the\n/// radix etc.\nvoid NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {\n  // ...\n  // Handle simple binary numbers 0b01010\n  if ((c1 == \'b\' || c1 == \'B\') && (s[1] == \'0\' || s[1] == \'1\')) {\n    // ...\n    Diags.Report(TokLoc, LangOpts.CPlusPlus14 ? diag::warn_cxx11_compat_binary_literal : LangOpts.CPlusPlus ? diag::ext_binary_literal_cxx14 : diag::ext_binary_literal);"}},
[l]={
["clang/test/SemaCXX/cxx98-compat-flags.cpp"]={"clang/test/SemaCXX/cxx98-compat-flags.cpp:36:11: warning: binary integer literals are incompatible with C++ standards before C++14 [-Wc++98-c++11-compat-binary-literal]"}
["clang/test/SemaCXX/cxx98-compat-flags.cpp"]={"clang/test/SemaCXX/cxx98-compat-flags.cpp:36:11: warning: binary integer literals are incompatible with C++ standards before C++14 [-Wc++98-c++11-compat-binary-literal]"}
}
}
},
},
["warn_cxx11_compat_constexpr_body_invalid_stmt"]={
["warn_cxx11_compat_constexpr_body_invalid_stmt"]={
[j]={u,s,o,o,tc,pc,n,m,m,sb,mc},
[k]={y,u,p,p,wc,qc,o,n,n,vb,pc},
[i]=sb,
[j]=vb,
[c]="use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14",
[c]="warn_cxx11_compat_constexpr_body_invalid_stmt",
[d]=g,
[d]="use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14",
[e]="use of this statement in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+14",
[e]=i,
[f]=uc,
[g]="use of this statement in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+14",
[b]=l,
[a]=xc,
[a]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and","C++1y constexpr extensions, round 1: Allow most forms of declaration and\nstatement in constexpr functions. Everything which doesn\'t require variable\nmutation is also allowed as an extension in C++11. \'void\' becomes a literal\ntype to support constexpr functions which return \'void\'.\n\nllvm-svn: 180022"},
[b]=m,
[h]={{C,2300,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (Kind == Sema::CheckConstexprKind::CheckValid) {\n  // ...\n  } else if (Cxx2bLoc.isValid()) {\n  // ...\n  } else if (Cxx2aLoc.isValid()) {\n  // ...\n  } else if (Cxx1yLoc.isValid()) {\n    SemaRef.Diag(Cxx1yLoc, SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl);"}}
[f]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and","C++1y constexpr extensions, round 1: Allow most forms of declaration and\nstatement in constexpr functions. Everything which doesn\'t require variable\nmutation is also allowed as an extension in C++11. \'void\' becomes a literal\ntype to support constexpr functions which return \'void\'.\n\nllvm-svn: 180022"},
[h]={{L,2300,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (Kind == Sema::CheckConstexprKind::CheckValid) {\n  // ...\n  } else if (Cxx2bLoc.isValid()) {\n  // ...\n  } else if (Cxx2aLoc.isValid()) {\n  // ...\n  } else if (Cxx1yLoc.isValid()) {\n    SemaRef.Diag(Cxx1yLoc, SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["warn_cxx11_compat_constexpr_body_multiple_return"]={
["warn_cxx11_compat_constexpr_body_multiple_return"]={
[j]={u,s,o,o,tc,pc,n,m,m,sb,mc},
[k]={y,u,p,p,wc,qc,o,n,n,vb,pc},
[i]=sb,
[j]=vb,
[c]="multiple return statements in constexpr function is incompatible with C++ standards before C++14",
[c]="warn_cxx11_compat_constexpr_body_multiple_return",
[d]=g,
[d]="multiple return statements in constexpr function is incompatible with C++ standards before C++14",
[e]="multiple return statements in constexpr function is incompatible with C\\+\\+ standards before C\\+\\+14",
[e]=i,
[f]=uc,
[g]="multiple return statements in constexpr function is incompatible with C\\+\\+ standards before C\\+\\+14",
[b]=l,
[a]=xc,
[a]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and","C++1y constexpr extensions, round 1: Allow most forms of declaration and\nstatement in constexpr functions. Everything which doesn\'t require variable\nmutation is also allowed as an extension in C++11. \'void\' becomes a literal\ntype to support constexpr functions which return \'void\'.\n\nllvm-svn: 180022"},
[b]=m,
[h]={{C,2399,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  // ...\n  } else {\n    if (ReturnStmts.empty()) {\n    // ...\n    } else if (ReturnStmts.size() > 1) {\n      // ...\n      case Sema::CheckConstexprKind::Diagnose:\n        SemaRef.Diag(ReturnStmts.back(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_body_multiple_return : diag::ext_constexpr_body_multiple_return);"}}
[f]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and","C++1y constexpr extensions, round 1: Allow most forms of declaration and\nstatement in constexpr functions. Everything which doesn\'t require variable\nmutation is also allowed as an extension in C++11. \'void\' becomes a literal\ntype to support constexpr functions which return \'void\'.\n\nllvm-svn: 180022"},
[h]={{L,2399,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  // ...\n  } else {\n    if (ReturnStmts.empty()) {\n    // ...\n    } else if (ReturnStmts.size() > 1) {\n      // ...\n      case Sema::CheckConstexprKind::Diagnose:\n        SemaRef.Diag(ReturnStmts.back(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_body_multiple_return : diag::ext_constexpr_body_multiple_return);"}}
},
},
["warn_cxx11_compat_constexpr_body_no_return"]={
["warn_cxx11_compat_constexpr_body_no_return"]={
[j]={u,s,o,o,tc,pc,n,m,m,sb,mc},
[k]={y,u,p,p,wc,qc,o,n,n,vb,pc},
[i]=sb,
[j]=vb,
[c]="constexpr function with no return statements is incompatible with C++ standards before C++14",
[c]="warn_cxx11_compat_constexpr_body_no_return",
[d]=g,
[d]="constexpr function with no return statements is incompatible with C++ standards before C++14",
[e]="constexpr function with no return statements is incompatible with C\\+\\+ standards before C\\+\\+14",
[e]=i,
[f]=uc,
[g]="constexpr function with no return statements is incompatible with C\\+\\+ standards before C\\+\\+14",
[b]=l,
[a]=xc,
[a]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and","C++1y constexpr extensions, round 1: Allow most forms of declaration and\nstatement in constexpr functions. Everything which doesn\'t require variable\nmutation is also allowed as an extension in C++11. \'void\' becomes a literal\ntype to support constexpr functions which return \'void\'.\n\nllvm-svn: 180022"},
[b]=m,
[h]={{C,2378,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  // ...\n  } else {\n    if (ReturnStmts.empty()) {\n      // ...\n      case Sema::CheckConstexprKind::Diagnose:\n        SemaRef.Diag(Dcl->getLocation(), OK ? diag::warn_cxx11_compat_constexpr_body_no_return : diag::err_constexpr_body_no_return) << Dcl->isConsteval();"}}
[f]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and","C++1y constexpr extensions, round 1: Allow most forms of declaration and\nstatement in constexpr functions. Everything which doesn\'t require variable\nmutation is also allowed as an extension in C++11. \'void\' becomes a literal\ntype to support constexpr functions which return \'void\'.\n\nllvm-svn: 180022"},
[h]={{L,2378,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  // ...\n  } else {\n    if (ReturnStmts.empty()) {\n      // ...\n      case Sema::CheckConstexprKind::Diagnose:\n        SemaRef.Diag(Dcl->getLocation(), OK ? diag::warn_cxx11_compat_constexpr_body_no_return : diag::err_constexpr_body_no_return) << Dcl->isConsteval();"}}
},
},
["warn_cxx11_compat_constexpr_local_var"]={
["warn_cxx11_compat_constexpr_local_var"]={
[j]={u,s,o,o,tc,pc,n,m,m,sb,mc},
[k]={y,u,p,p,wc,qc,o,n,n,vb,pc},
[i]=sb,
[j]=vb,
[c]="variable declaration in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14",
[c]="warn_cxx11_compat_constexpr_local_var",
[d]=g,
[d]="variable declaration in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14",
[e]="variable declaration in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+14",
[e]=i,
[f]=uc,
[g]="variable declaration in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+14",
[b]=l,
[a]=xc,
[a]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and","C++1y constexpr extensions, round 1: Allow most forms of declaration and\nstatement in constexpr functions. Everything which doesn\'t require variable\nmutation is also allowed as an extension in C++11. \'void\' becomes a literal\ntype to support constexpr functions which return \'void\'.\n\nllvm-svn: 180022"},
[b]=m,
[h]={{C,1971,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Var:\n    case Decl::Decomposition: {\n      // ...\n      if (Kind == Sema::CheckConstexprKind::Diagnose) {\n        SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_local_var : diag::ext_constexpr_local_var) << isa<CXXConstructorDecl>(Dcl);"}}
[f]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and","C++1y constexpr extensions, round 1: Allow most forms of declaration and\nstatement in constexpr functions. Everything which doesn\'t require variable\nmutation is also allowed as an extension in C++11. \'void\' becomes a literal\ntype to support constexpr functions which return \'void\'.\n\nllvm-svn: 180022"},
[h]={{L,1971,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Var:\n    case Decl::Decomposition: {\n      // ...\n      if (Kind == Sema::CheckConstexprKind::Diagnose) {\n        SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_local_var : diag::ext_constexpr_local_var) << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["warn_cxx11_compat_constexpr_type_definition"]={
["warn_cxx11_compat_constexpr_type_definition"]={
[j]={u,s,o,o,tc,pc,n,m,m,sb,mc},
[k]={y,u,p,p,wc,qc,o,n,n,vb,pc},
[i]=sb,
[j]=vb,
[c]="type definition in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14",
[c]="warn_cxx11_compat_constexpr_type_definition",
[d]=g,
[d]="type definition in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14",
[e]="type definition in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+14",
[e]=i,
[f]=uc,
[g]="type definition in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+14",
[b]=l,
[a]=xc,
[a]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and","C++1y constexpr extensions, round 1: Allow most forms of declaration and\nstatement in constexpr functions. Everything which doesn\'t require variable\nmutation is also allowed as an extension in C++11. \'void\' becomes a literal\ntype to support constexpr functions which return \'void\'.\n\nllvm-svn: 180022"},
[b]=m,
[h]={{C,1906,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Enum:\n    case Decl::CXXRecord:\n      // C++1y allows types to be defined, not just declared.\n      if (cast<TagDecl>(DclIt)->isThisDeclarationADefinition()) {\n        if (Kind == Sema::CheckConstexprKind::Diagnose) {\n          SemaRef.Diag(DS->getBeginLoc(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_type_definition : diag::ext_constexpr_type_definition) << isa<CXXConstructorDecl>(Dcl);"}}
[f]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and","C++1y constexpr extensions, round 1: Allow most forms of declaration and\nstatement in constexpr functions. Everything which doesn\'t require variable\nmutation is also allowed as an extension in C++11. \'void\' becomes a literal\ntype to support constexpr functions which return \'void\'.\n\nllvm-svn: 180022"},
[h]={{L,1906,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Enum:\n    case Decl::CXXRecord:\n      // C++1y allows types to be defined, not just declared.\n      if (cast<TagDecl>(DclIt)->isThisDeclarationADefinition()) {\n        if (Kind == Sema::CheckConstexprKind::Diagnose) {\n          SemaRef.Diag(DS->getBeginLoc(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_type_definition : diag::ext_constexpr_type_definition) << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["warn_cxx11_compat_decltype_auto_type_specifier"]={
["warn_cxx11_compat_decltype_auto_type_specifier"]={
[j]={u,s,o,o,tc,pc,n,m,m,sb,mc},
[k]={y,u,p,p,wc,qc,o,n,n,vb,pc},
[i]=sb,
[j]=vb,
[c]="\'decltype(auto)\' type specifier is incompatible with C++ standards before C++14",
[c]="warn_cxx11_compat_decltype_auto_type_specifier",
[d]=g,
[d]="\'decltype(auto)\' type specifier is incompatible with C++ standards before C++14",
[e]="\'decltype\\(auto\\)\' type specifier is incompatible with C\\+\\+ standards before C\\+\\+14",
[e]=i,
[f]=uc,
[g]="\'decltype\\(auto\\)\' type specifier is incompatible with C\\+\\+ standards before C\\+\\+14",
[b]=v,
[a]=xc,
[a]={"74aeef50a0cc",1366992935,"Implement C++1y decltype(auto).","Implement C++1y decltype(auto).\n\nllvm-svn: 180610"},
[b]=A,
[h]={{bb,1104,"/// ParseDecltypeSpecifier - Parse a C++11 decltype specifier.\n///\n/// \'decltype\' ( expression )\n/// \'decltype\' ( \'auto\' )      [C++1y]\n///\nSourceLocation Parser::ParseDecltypeSpecifier(DeclSpec &DS) {\n  // ...\n  if (Tok.is(tok::annot_decltype)) {\n  // ...\n  } else {\n    // ...\n    // Check for C++1y \'decltype(auto)\'.\n    if (Tok.is(tok::kw_auto) && NextToken().is(tok::r_paren)) {\n      // ...\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_decltype_auto_type_specifier : diag::ext_decltype_auto_type_specifier);"}},
[f]={"74aeef50a0cc",1366992935,"Implement C++1y decltype(auto).","Implement C++1y decltype(auto).\n\nllvm-svn: 180610"},
[k]={
[h]={{kb,1104,"/// ParseDecltypeSpecifier - Parse a C++11 decltype specifier.\n///\n/// \'decltype\' ( expression )\n/// \'decltype\' ( \'auto\' )      [C++1y]\n///\nSourceLocation Parser::ParseDecltypeSpecifier(DeclSpec &DS) {\n  // ...\n  if (Tok.is(tok::annot_decltype)) {\n  // ...\n  } else {\n    // ...\n    // Check for C++1y \'decltype(auto)\'.\n    if (Tok.is(tok::kw_auto) && NextToken().is(tok::r_paren)) {\n      // ...\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_decltype_auto_type_specifier : diag::ext_decltype_auto_type_specifier);"}},
[Gc]={"clang/test/SemaCXX/cxx11-compat.cpp:50:10: warning: \'decltype(auto)\' type specifier is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx11-compat.cpp:61:10: warning: \'decltype(auto)\' type specifier is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]"}
[l]={
[Nc]={"clang/test/SemaCXX/cxx11-compat.cpp:50:10: warning: \'decltype(auto)\' type specifier is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx11-compat.cpp:61:10: warning: \'decltype(auto)\' type specifier is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]"}
}
}
},
},
["warn_cxx11_compat_deduced_return_type"]={
["warn_cxx11_compat_deduced_return_type"]={
[j]={u,s,o,o,tc,pc,n,m,m,sb,mc},
[k]={y,u,p,p,wc,qc,o,n,n,vb,pc},
[i]=sb,
[j]=vb,
[c]={{nil,ob,"return type deduction is incompatible with C++ standards before C++14"}},
[c]={{nil,B,"warn_cxx11_compat_deduced_return_type"}},
[d]=g,
[d]={{nil,B,"return type deduction is incompatible with C++ standards before C++14"}},
[e]="return type deduction is incompatible with C\\+\\+ standards before C\\+\\+14",
[e]=i,
[f]=uc,
[g]="return type deduction is incompatible with C\\+\\+ standards before C\\+\\+14",
[b]=l,
[a]=xc,
[a]={"218538ebe952",1535656595,"Add missing -Wc++11-compat / -Wc++14-compat warnings for:","Add missing -Wc++11-compat / -Wc++14-compat warnings for:\n\n * generic lambdas\n * return type deduction\n * class template argument deduction\n\nllvm-svn: 341098"},
[b]={{nil,B,m}},
[h]={{Jb,3750,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // ...\n  // C++11 [dcl.spec.auto]p5: reject \'auto\' if it is not in an allowed context.\n  if (Deduced) {\n    // ...\n    if (Error != -1) {\n    // ...\n    } else if (Auto && D.getContext() != DeclaratorContext::LambdaExpr) {\n      // ...\n      SemaRef.Diag(AutoRange.getBegin(), D.getContext() == DeclaratorContext::LambdaExprParameter ? diag::warn_cxx11_compat_generic_lambda : IsDeducedReturnType ? diag::warn_cxx11_compat_deduced_return_type : diag::warn_cxx98_compat_auto_type_specifier) << AutoRange;"},{Jb,5205,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::Function: {\n      // ...\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n          if (!S.getLangOpts().CPlusPlus14) {\n          // ...\n          } else {\n            S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), diag::warn_cxx11_compat_deduced_return_type);"}},
[f]={"218538ebe952",1535656595,"Add missing -Wc++11-compat / -Wc++14-compat warnings for:","Add missing -Wc++11-compat / -Wc++14-compat warnings for:\n\n * generic lambdas\n * return type deduction\n * class template argument deduction\n\nllvm-svn: 341098"},
[k]={
[h]={{Nb,3750,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // ...\n  // C++11 [dcl.spec.auto]p5: reject \'auto\' if it is not in an allowed context.\n  if (Deduced) {\n    // ...\n    if (Error != -1) {\n    // ...\n    } else if (Auto && D.getContext() != DeclaratorContext::LambdaExpr) {\n      // ...\n      SemaRef.Diag(AutoRange.getBegin(), D.getContext() == DeclaratorContext::LambdaExprParameter ? diag::warn_cxx11_compat_generic_lambda : IsDeducedReturnType ? diag::warn_cxx11_compat_deduced_return_type : diag::warn_cxx98_compat_auto_type_specifier) << AutoRange;"},{Nb,5205,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::Function: {\n      // ...\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n          if (!S.getLangOpts().CPlusPlus14) {\n          // ...\n          } else {\n            S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), diag::warn_cxx11_compat_deduced_return_type);"}},
[Gc]={"clang/test/SemaCXX/cxx11-compat.cpp:59:1: warning: return type deduction is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx11-compat.cpp:60:1: warning: return type deduction is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx11-compat.cpp:61:1: warning: return type deduction is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx11-compat.cpp:66:3: warning: return type deduction is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx11-compat.cpp:70:40: warning: return type deduction is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx11-compat.cpp:73:12: warning: return type deduction is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]"}
[l]={
[Nc]={"clang/test/SemaCXX/cxx11-compat.cpp:59:1: warning: return type deduction is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx11-compat.cpp:60:1: warning: return type deduction is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx11-compat.cpp:61:1: warning: return type deduction is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx11-compat.cpp:66:3: warning: return type deduction is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx11-compat.cpp:70:40: warning: return type deduction is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx11-compat.cpp:73:12: warning: return type deduction is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]"}
}
}
},
},
["warn_cxx11_compat_digit_separator"]={
["warn_cxx11_compat_digit_separator"]={
[j]={u,s,o,o,tc,pc,n,m,m,sb,mc},
[k]={y,u,p,p,wc,qc,o,n,n,vb,pc},
[i]=sb,
[j]=vb,
[c]="digit separators are incompatible with C++ standards before C++14",
[c]="warn_cxx11_compat_digit_separator",
[d]=g,
[d]="digit separators are incompatible with C++ standards before C++14",
[e]="digit separators are incompatible with C\\+\\+ standards before C\\+\\+14",
[e]=i,
[f]=uc,
[g]="digit separators are incompatible with C\\+\\+ standards before C\\+\\+14",
[b]=L,
[a]=xc,
[a]={"fde948529789",1380166386,"Implement C++1y digit separator proposal (\' as a digit separator). This is not","Implement C++1y digit separator proposal (\' as a digit separator). This is not\nyet approved by full committee, but was unanimously supported by EWG.\n\nllvm-svn: 191417"},
[b]=T,
[h]={{Ab,1962,"/// LexNumericConstant - Lex the remainder of a integer or floating point\n/// constant. From[-1] is the first character lexed.  Return the end of the\n/// constant.\nbool Lexer::LexNumericConstant(Token &Result, const char *CurPtr) {\n  // ...\n  // If we have a digit separator, continue.\n  if (C == \'\\\'\' && (LangOpts.CPlusPlus14 || LangOpts.C2x)) {\n    // ...\n    if (isAsciiIdentifierContinue(Next)) {\n      if (!isLexingRawMode())\n        Diag(CurPtr, LangOpts.CPlusPlus ? diag::warn_cxx11_compat_digit_separator : diag::warn_c2x_compat_digit_separator);"}},
[f]={"fde948529789",1380166386,"Implement C++1y digit separator proposal (\' as a digit separator). This is not","Implement C++1y digit separator proposal (\' as a digit separator). This is not\nyet approved by full committee, but was unanimously supported by EWG.\n\nllvm-svn: 191417"},
[k]={
[h]={{Fb,1962,"/// LexNumericConstant - Lex the remainder of a integer or floating point\n/// constant. From[-1] is the first character lexed.  Return the end of the\n/// constant.\nbool Lexer::LexNumericConstant(Token &Result, const char *CurPtr) {\n  // ...\n  // If we have a digit separator, continue.\n  if (C == \'\\\'\' && (LangOpts.CPlusPlus14 || LangOpts.C2x)) {\n    // ...\n    if (isAsciiIdentifierContinue(Next)) {\n      if (!isLexingRawMode())\n        Diag(CurPtr, LangOpts.CPlusPlus ? diag::warn_cxx11_compat_digit_separator : diag::warn_c2x_compat_digit_separator);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:410:21: warning: digit separators are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:410:21: warning: digit separators are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]"}
}
}
},
},
["warn_cxx11_compat_generic_lambda"]={
["warn_cxx11_compat_generic_lambda"]={
[j]={u,s,o,o,tc,pc,n,m,m,sb,mc},
[k]={y,u,p,p,wc,qc,o,n,n,vb,pc},
[i]=sb,
[j]=vb,
[c]={{nil,ob,"generic lambdas are incompatible with C++11"}},
[c]={{nil,B,"warn_cxx11_compat_generic_lambda"}},
[d]=g,
[d]={{nil,B,"generic lambdas are incompatible with C++11"}},
[e]="generic lambdas are incompatible with C\\+\\+11",
[e]=i,
[f]=uc,
[g]="generic lambdas are incompatible with C\\+\\+11",
[b]=Wc,
[a]=xc,
[a]={"218538ebe952",1535656595,"Add missing -Wc++11-compat / -Wc++14-compat warnings for:","Add missing -Wc++11-compat / -Wc++14-compat warnings for:\n\n * generic lambdas\n * return type deduction\n * class template argument deduction\n\nllvm-svn: 341098"},
[b]={{nil,B,gd}},
[h]={{Jb,3748,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // ...\n  // C++11 [dcl.spec.auto]p5: reject \'auto\' if it is not in an allowed context.\n  if (Deduced) {\n    // ...\n    if (Error != -1) {\n    // ...\n    } else if (Auto && D.getContext() != DeclaratorContext::LambdaExpr) {\n      // ...\n      SemaRef.Diag(AutoRange.getBegin(), D.getContext() == DeclaratorContext::LambdaExprParameter ? diag::warn_cxx11_compat_generic_lambda : IsDeducedReturnType ? diag::warn_cxx11_compat_deduced_return_type : diag::warn_cxx98_compat_auto_type_specifier) << AutoRange;"}},
[f]={"218538ebe952",1535656595,"Add missing -Wc++11-compat / -Wc++14-compat warnings for:","Add missing -Wc++11-compat / -Wc++14-compat warnings for:\n\n * generic lambdas\n * return type deduction\n * class template argument deduction\n\nllvm-svn: 341098"},
[k]={
[h]={{Nb,3748,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // ...\n  // C++11 [dcl.spec.auto]p5: reject \'auto\' if it is not in an allowed context.\n  if (Deduced) {\n    // ...\n    if (Error != -1) {\n    // ...\n    } else if (Auto && D.getContext() != DeclaratorContext::LambdaExpr) {\n      // ...\n      SemaRef.Diag(AutoRange.getBegin(), D.getContext() == DeclaratorContext::LambdaExprParameter ? diag::warn_cxx11_compat_generic_lambda : IsDeducedReturnType ? diag::warn_cxx11_compat_deduced_return_type : diag::warn_cxx98_compat_auto_type_specifier) << AutoRange;"}},
[Gc]={"clang/test/SemaCXX/cxx11-compat.cpp:56:8: warning: generic lambdas are incompatible with C++11 [-Wpre-c++14-compat]"}
[l]={
[Nc]={"clang/test/SemaCXX/cxx11-compat.cpp:56:8: warning: generic lambdas are incompatible with C++11 [-Wpre-c++14-compat]"}
}
}
},
},
["warn_cxx11_compat_init_capture"]={
["warn_cxx11_compat_init_capture"]={
[j]={u,s,o,o,tc,pc,n,m,m,sb,mc},
[k]={y,u,p,p,wc,qc,o,n,n,vb,pc},
[i]=sb,
[j]=vb,
[c]="initialized lambda captures are incompatible with C++ standards before C++14",
[c]="warn_cxx11_compat_init_capture",
[d]=g,
[d]="initialized lambda captures are incompatible with C++ standards before C++14",
[e]="initialized lambda captures are incompatible with C\\+\\+ standards before C\\+\\+14",
[e]=i,
[f]=uc,
[g]="initialized lambda captures are incompatible with C\\+\\+ standards before C\\+\\+14",
[b]=Wc,
[a]=xc,
[a]={"5b013f505068",1380346707,"Add compat/extension warnings for init captures.","Add compat/extension warnings for init captures.\n\nllvm-svn: 191609"},
[b]=gd,
[f]={"5b013f505068",1380346707,"Add compat/extension warnings for init captures.","Add compat/extension warnings for init captures.\n\nllvm-svn: 191609"},
[h]={{"clang/lib/Sema/SemaLambda.cpp",1071,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // ...\n    if (C->Init.isUsable()) {\n      Diag(C->Loc, getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_init_capture : diag::ext_init_capture);"}},
[h]={{"clang/lib/Sema/SemaLambda.cpp",1071,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // ...\n    if (C->Init.isUsable()) {\n      Diag(C->Loc, getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_init_capture : diag::ext_init_capture);"}},
[k]={
[l]={
[Gc]={"clang/test/SemaCXX/cxx11-compat.cpp:52:22: warning: initialized lambda captures are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]"}
[Nc]={"clang/test/SemaCXX/cxx11-compat.cpp:52:22: warning: initialized lambda captures are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]"}
}
}
},
},
["warn_cxx11_compat_reserved_user_defined_literal"]={
["warn_cxx11_compat_reserved_user_defined_literal"]={
[j]={u,s,o,"c++11-compat-reserved-user-defined-literal","reserved-user-defined-literal"},
[k]={y,u,p,"c++11-compat-reserved-user-defined-literal","reserved-user-defined-literal"},
[i]="c++11-compat-reserved-user-defined-literal",
[j]="c++11-compat-reserved-user-defined-literal",
[c]="identifier after literal will be treated as a reserved user-defined literal suffix in C++11",
[c]="warn_cxx11_compat_reserved_user_defined_literal",
[d]=g,
[d]="identifier after literal will be treated as a reserved user-defined literal suffix in C++11",
[e]="identifier after literal will be treated as a reserved user\\-defined literal suffix in C\\+\\+11",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat\\-reserved\\-user\\-defined\\-literal[^\\]]*\\]",
[g]="identifier after literal will be treated as a reserved user\\-defined literal suffix in C\\+\\+11",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat\\-reserved\\-user\\-defined\\-literal[^\\]]*\\]",
[a]={"0df56f4a9000",1331174361,"Implement C++11 [lex.ext]p10 for string and character literals: a ud-suffix not","Implement C++11 [lex.ext]p10 for string and character literals: a ud-suffix not\nstarting with an underscore is ill-formed.\n\nSince this rule rejects programs that were using <inttypes.h>\'s macros, recover\nfrom this error by treating the ud-suffix as a separate preprocessing-token,\nwith a DefaultError ExtWarn. The approach of treating such cases as two tokens\nis under discussion for standardization, but is in any case a conforming\nextension and allows existing codebases to keep building while the committee\nmakes up its mind.\n\nReword the warning on the definition of literal operators not starting with\nunderscores (which are, strangely, legal) to more explicitly state that such\noperators can\'t be called by literals. Remove the special-case diagnostic for\nhexfloats, since it was both triggering in the wrong cases and incorrect.\n\nllvm-svn: 152287"},
[b]=T,
[h]={{Ab,2007,"/// LexUDSuffix - Lex the ud-suffix production for user-defined literal suffixes\n/// in C++11, or warn on a ud-suffix in C++98.\nconst char *Lexer::LexUDSuffix(Token &Result, const char *CurPtr, bool IsStringLiteral) {\n  // ...\n  if (!LangOpts.CPlusPlus11) {\n    if (!isLexingRawMode())\n      Diag(CurPtr, C == \'_\' ? diag::warn_cxx11_compat_user_defined_literal : diag::warn_cxx11_compat_reserved_user_defined_literal) << FixItHint::CreateInsertion(getSourceLocation(CurPtr), \" \");"}},
[f]={"0df56f4a9000",1331174361,"Implement C++11 [lex.ext]p10 for string and character literals: a ud-suffix not","Implement C++11 [lex.ext]p10 for string and character literals: a ud-suffix not\nstarting with an underscore is ill-formed.\n\nSince this rule rejects programs that were using <inttypes.h>\'s macros, recover\nfrom this error by treating the ud-suffix as a separate preprocessing-token,\nwith a DefaultError ExtWarn. The approach of treating such cases as two tokens\nis under discussion for standardization, but is in any case a conforming\nextension and allows existing codebases to keep building while the committee\nmakes up its mind.\n\nReword the warning on the definition of literal operators not starting with\nunderscores (which are, strangely, legal) to more explicitly state that such\noperators can\'t be called by literals. Remove the special-case diagnostic for\nhexfloats, since it was both triggering in the wrong cases and incorrect.\n\nllvm-svn: 152287"},
[k]={
[h]={{Fb,2007,"/// LexUDSuffix - Lex the ud-suffix production for user-defined literal suffixes\n/// in C++11, or warn on a ud-suffix in C++98.\nconst char *Lexer::LexUDSuffix(Token &Result, const char *CurPtr, bool IsStringLiteral) {\n  // ...\n  if (!LangOpts.CPlusPlus11) {\n    if (!isLexingRawMode())\n      Diag(CurPtr, C == \'_\' ? diag::warn_cxx11_compat_user_defined_literal : diag::warn_cxx11_compat_reserved_user_defined_literal) << FixItHint::CreateInsertion(getSourceLocation(CurPtr), \" \");"}},
[l]={
["clang/test/Lexer/ms-extensions.cpp"]={"clang/test/Lexer/ms-extensions.cpp:5:15: warning: identifier after literal will be treated as a reserved user-defined literal suffix in C++11 [-Wc++11-compat-reserved-user-defined-literal]"}
["clang/test/Lexer/ms-extensions.cpp"]={"clang/test/Lexer/ms-extensions.cpp:5:15: warning: identifier after literal will be treated as a reserved user-defined literal suffix in C++11 [-Wc++11-compat-reserved-user-defined-literal]"}
}
}
},
},
["warn_cxx11_compat_user_defined_literal"]={
["warn_cxx11_compat_user_defined_literal"]={
[j]={u,s,o},
[k]={y,u,p},
[i]=s,
[j]=u,
[c]="identifier after literal will be treated as a user-defined literal suffix in C++11",
[c]="warn_cxx11_compat_user_defined_literal",
[d]=g,
[d]="identifier after literal will be treated as a user-defined literal suffix in C++11",
[e]="identifier after literal will be treated as a user\\-defined literal suffix in C\\+\\+11",
[e]=i,
[f]=qd,
[g]="identifier after literal will be treated as a user\\-defined literal suffix in C\\+\\+11",
[b]=L,
[a]=md,
[a]={"3e4a60a2cd88",1331089980,"Add -Wc++11-compat warning for string and character literals followed by","Add -Wc++11-compat warning for string and character literals followed by\nidentifiers, in cases where those identifiers would be treated as\nuser-defined literal suffixes in C++11.\n\nllvm-svn: 152198"},
[b]=T,
[h]={{Ab,2006,"/// LexUDSuffix - Lex the ud-suffix production for user-defined literal suffixes\n/// in C++11, or warn on a ud-suffix in C++98.\nconst char *Lexer::LexUDSuffix(Token &Result, const char *CurPtr, bool IsStringLiteral) {\n  // ...\n  if (!LangOpts.CPlusPlus11) {\n    if (!isLexingRawMode())\n      Diag(CurPtr, C == \'_\' ? diag::warn_cxx11_compat_user_defined_literal : diag::warn_cxx11_compat_reserved_user_defined_literal) << FixItHint::CreateInsertion(getSourceLocation(CurPtr), \" \");"}},
[f]={"3e4a60a2cd88",1331089980,"Add -Wc++11-compat warning for string and character literals followed by","Add -Wc++11-compat warning for string and character literals followed by\nidentifiers, in cases where those identifiers would be treated as\nuser-defined literal suffixes in C++11.\n\nllvm-svn: 152198"},
[k]={
[h]={{Fb,2006,"/// LexUDSuffix - Lex the ud-suffix production for user-defined literal suffixes\n/// in C++11, or warn on a ud-suffix in C++98.\nconst char *Lexer::LexUDSuffix(Token &Result, const char *CurPtr, bool IsStringLiteral) {\n  // ...\n  if (!LangOpts.CPlusPlus11) {\n    if (!isLexingRawMode())\n      Diag(CurPtr, C == \'_\' ? diag::warn_cxx11_compat_user_defined_literal : diag::warn_cxx11_compat_reserved_user_defined_literal) << FixItHint::CreateInsertion(getSourceLocation(CurPtr), \" \");"}},
[Gc]={"clang/test/SemaCXX/cxx11-compat.cpp:42:13: warning: identifier after literal will be treated as a user-defined literal suffix in C++11 [-Wc++11-compat]"}
[l]={
[Nc]={"clang/test/SemaCXX/cxx11-compat.cpp:42:13: warning: identifier after literal will be treated as a user-defined literal suffix in C++11 [-Wc++11-compat]"}
}
}
},
},
["warn_cxx11_compat_variable_template"]={
["warn_cxx11_compat_variable_template"]={
[j]={u,s,o,o,tc,pc,n,m,m,sb,mc},
[k]={y,u,p,p,wc,qc,o,n,n,vb,pc},
[i]=sb,
[j]=vb,
[c]="variable templates are incompatible with C++ standards before C++14",
[c]="warn_cxx11_compat_variable_template",
[d]=g,
[d]="variable templates are incompatible with C++ standards before C++14",
[e]="variable templates are incompatible with C\\+\\+ standards before C\\+\\+14",
[e]=i,
[f]=uc,
[g]="variable templates are incompatible with C\\+\\+ standards before C\\+\\+14",
[b]=l,
[a]=xc,
[a]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som...","Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention...\n\nllvm-svn: 187762"},
[b]=m,
[h]={{D,7652,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    if (TemplateParams) {\n      if (!TemplateParams->size() && D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n      // ...\n      } else {\n        // ...\n        if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {\n        // ...\n        } else { // if (TemplateParams->size() > 0)\n          // ...\n          Diag(D.getIdentifierLoc(), getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_variable_template : diag::ext_variable_template);"}},
[f]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som...","Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention...\n\nllvm-svn: 187762"},
[k]={
[h]={{M,7652,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    if (TemplateParams) {\n      if (!TemplateParams->size() && D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n      // ...\n      } else {\n        // ...\n        if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {\n        // ...\n        } else { // if (TemplateParams->size() > 0)\n          // ...\n          Diag(D.getIdentifierLoc(), getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_variable_template : diag::ext_variable_template);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:365:24: warning: variable templates are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx98-compat.cpp:380:33: warning: variable templates are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx98-compat.cpp:390:43: warning: variable templates are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx98-compat.cpp:397:27: warning: variable templates are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:365:24: warning: variable templates are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx98-compat.cpp:380:33: warning: variable templates are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx98-compat.cpp:390:43: warning: variable templates are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]","clang/test/SemaCXX/cxx98-compat.cpp:397:27: warning: variable templates are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]"}
}
}
},
},
["warn_cxx11_gnu_attribute_on_type"]={
["warn_cxx11_gnu_attribute_on_type"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]="attribute %0 ignored, because it cannot be applied to a type",
[c]="warn_cxx11_gnu_attribute_on_type",
[d]=g,
[d]="attribute %0 ignored, because it cannot be applied to a type",
[e]="attribute (.*?) ignored, because it cannot be applied to a type",
[e]=i,
[f]=vb,
[g]="attribute (.*?) ignored, because it cannot be applied to a type",
[b]=l,
[a]=Db,
[a]={"368ca52cd91b",1358149981,"Accept [[gnu::*]] for all __attribute__((*))s which are:","Accept [[gnu::*]] for all __attribute__((*))s which are:\n 1) Supported by Clang, and\n 2) Supported by GCC, and\n 3) Documented in GCC\'s manual.\n\ng++ allows its C++11-style attributes to appertain only to the entity being\ndeclared, and never to a type (even for a type attribute), so we do the same.\n\nllvm-svn: 172382"},
[b]=m,
[h]={{Jb,8546,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  // ...\n  for (ParsedAttr &attr : AttrsCopy) {\n    // ...\n    if (attr.isStandardAttributeSyntax() || attr.isRegularKeywordAttribute()) {\n      // [[gnu::...]] attributes are treated as declaration attributes, so may\n      // not appertain to a DeclaratorChunk. If we handle them as type\n      // attributes, accept them in that position and diagnose the GCC\n      // incompatibility.\n      if (attr.isGNUScope()) {\n        // ...\n        if (TAL == TAL_DeclChunk) {\n          state.getSema().Diag(attr.getLoc(), IsTypeAttr ? diag::warn_gcc_ignores_type_attr : diag::warn_cxx11_gnu_attribute_on_type) << attr;"}},
[f]={"368ca52cd91b",1358149981,"Accept [[gnu::*]] for all __attribute__((*))s which are:","Accept [[gnu::*]] for all __attribute__((*))s which are:\n 1) Supported by Clang, and\n 2) Supported by GCC, and\n 3) Documented in GCC\'s manual.\n\ng++ allows its C++11-style attributes to appertain only to the entity being\ndeclared, and never to a type (even for a type attribute), so we do the same.\n\nllvm-svn: 172382"},
[k]={
[h]={{Nb,8546,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  // ...\n  for (ParsedAttr &attr : AttrsCopy) {\n    // ...\n    if (attr.isStandardAttributeSyntax() || attr.isRegularKeywordAttribute()) {\n      // [[gnu::...]] attributes are treated as declaration attributes, so may\n      // not appertain to a DeclaratorChunk. If we handle them as type\n      // attributes, accept them in that position and diagnose the GCC\n      // incompatibility.\n      if (attr.isGNUScope()) {\n        // ...\n        if (TAL == TAL_DeclChunk) {\n          state.getSema().Diag(attr.getLoc(), IsTypeAttr ? diag::warn_gcc_ignores_type_attr : diag::warn_cxx11_gnu_attribute_on_type) << attr;"}},
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:9:22: warning: attribute \'noreturn\' ignored, because it cannot be applied to a type [-Wignored-attributes]"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:9:22: warning: attribute \'noreturn\' ignored, because it cannot be applied to a type [-Wignored-attributes]"}
}
}
},
},
["warn_cxx11_keyword"]={
["warn_cxx11_keyword"]={
[j]={u,s,o},
[k]={y,u,p},
[i]=s,
[j]=u,
[c]="\'%0\' is a keyword in C++11",
[c]="warn_cxx11_keyword",
[d]=g,
[d]="\'%0\' is a keyword in C++11",
[e]="\'(.*?)\' is a keyword in C\\+\\+11",
[e]=i,
[f]=qd,
[g]="\'(.*?)\' is a keyword in C\\+\\+11",
[b]=L,
[a]=md,
[a]={"4dd85d6fa114",1318363072,"Add a -Wc++0x-compat warning for C++11 keywords used as identifiers when in","Add a -Wc++0x-compat warning for C++11 keywords used as identifiers when in\nC++98 mode. Only the first occurrence of each keyword will produce a warning.\n\nllvm-svn: 141700"},
[b]=T,
[f]={"4dd85d6fa114",1318363072,"Add a -Wc++0x-compat warning for C++11 keywords used as identifiers when in","Add a -Wc++0x-compat warning for C++11 keywords used as identifiers when in\nC++98 mode. Only the first occurrence of each keyword will produce a warning.\n\nllvm-svn: 141700"},
[h]={{"clang/lib/Basic/IdentifierTable.cpp",907,"#include \"clang/Basic/TokenKinds.def\"\n  // ...\n  if (LangOpts.CPlusPlus) {\n    if ((Flags & KEYCXX11) == KEYCXX11)\n      return diag::warn_cxx11_keyword;"}},
[h]={{"clang/lib/Basic/IdentifierTable.cpp",907,"#include \"clang/Basic/TokenKinds.def\"\n  // ...\n  if (LangOpts.CPlusPlus) {\n    if ((Flags & KEYCXX11) == KEYCXX11)\n      return diag::warn_cxx11_keyword;"}},
[k]={
[l]={
["clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp"]={"clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:9:21: warning: \'nullptr\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:17:15: warning: \'decltype\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:19:12: warning: \'alignof\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:27:5: warning: \'alignas\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:29:5: warning: \'char16_t\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:30:5: warning: \'char32_t\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:31:5: warning: \'constexpr\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:33:5: warning: \'noexcept\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:35:5: warning: \'static_assert\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:36:5: warning: \'thread_local\' is a keyword in C++11 [-Wc++11-compat]"}
["clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp"]={"clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:9:21: warning: \'nullptr\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:17:15: warning: \'decltype\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:19:12: warning: \'alignof\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:27:5: warning: \'alignas\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:29:5: warning: \'char16_t\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:30:5: warning: \'char32_t\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:31:5: warning: \'constexpr\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:33:5: warning: \'noexcept\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:35:5: warning: \'static_assert\' is a keyword in C++11 [-Wc++11-compat]","clang/test/Lexer/cxx0x_keyword_as_cxx98.cpp:36:5: warning: \'thread_local\' is a keyword in C++11 [-Wc++11-compat]"}
}
}
},
},
["warn_cxx11_right_shift_in_template_arg"]={
["warn_cxx11_right_shift_in_template_arg"]={
[j]={u,s,o},
[k]={y,u,p},
[i]=s,
[j]=u,
[c]="use of right-shift operator (\'>>\') in template argument will require parentheses in C++11",
[c]="warn_cxx11_right_shift_in_template_arg",
[d]=g,
[d]="use of right-shift operator (\'>>\') in template argument will require parentheses in C++11",
[e]="use of right\\-shift operator \\(\'\\>\\>\'\\) in template argument will require parentheses in C\\+\\+11",
[e]=i,
[f]=qd,
[g]="use of right\\-shift operator \\(\'\\>\\>\'\\) in template argument will require parentheses in C\\+\\+11",
[b]=v,
[a]=md,
[a]={Kd,1236199783,Jd,Ld},
[b]=A,
[h]={{Jc,627,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  // ...\n  while (true) {\n    // ...\n    if (!LHS.isInvalid()) {\n      // Combine the LHS and RHS into the LHS (e.g. build AST).\n      if (TernaryMiddle.isInvalid()) {\n        // If we\'re using \'>>\' as an operator within a template\n        // argument list (in C++98), suggest the addition of\n        // parentheses so that the code remains well-formed in C++0x.\n        if (!GreaterThanIsOperator && OpToken.is(tok::greatergreater))\n          SuggestParentheses(OpToken.getLocation(), diag::warn_cxx11_right_shift_in_template_arg, SourceRange(Actions.getExprRange(LHS.get()).getBegin(), Actions.getExprRange(RHS.get()).getEnd()));"}},
[f]={Ad,1236199783,Cd,Ed},
[k]={
[h]={{Mc,627,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  // ...\n  while (true) {\n    // ...\n    if (!LHS.isInvalid()) {\n      // Combine the LHS and RHS into the LHS (e.g. build AST).\n      if (TernaryMiddle.isInvalid()) {\n        // If we\'re using \'>>\' as an operator within a template\n        // argument list (in C++98), suggest the addition of\n        // parentheses so that the code remains well-formed in C++0x.\n        if (!GreaterThanIsOperator && OpToken.is(tok::greatergreater))\n          SuggestParentheses(OpToken.getLocation(), diag::warn_cxx11_right_shift_in_template_arg, SourceRange(Actions.getExprRange(LHS.get()).getBegin(), Actions.getExprRange(RHS.get()).getEnd()));"}},
[l]={
["clang/test/CXX/temp/temp.param/p15.cpp"]={"clang/test/CXX/temp/temp.param/p15.cpp:12:5: warning: use of right-shift operator (\'>>\') in template argument will require parentheses in C++11 [-Wc++11-compat]"}
["clang/test/CXX/temp/temp.param/p15.cpp"]={"clang/test/CXX/temp/temp.param/p15.cpp:12:5: warning: use of right-shift operator (\'>>\') in template argument will require parentheses in C++11 [-Wc++11-compat]"}
}
}
},
},
["warn_cxx14_compat_class_template_argument_deduction"]={
["warn_cxx14_compat_class_template_argument_deduction"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]={{nil,ob,"class template argument deduction is incompatible with C++ standards before C++17%select{|; for compatibility, use explicit type name %1}0"}},
[c]={{nil,B,"warn_cxx14_compat_class_template_argument_deduction"}},
[d]=g,
[d]={{nil,B,"class template argument deduction is incompatible with C++ standards before C++17%select{|; for compatibility, use explicit type name %1}0"}},
[e]="class template argument deduction is incompatible with C\\+\\+ standards before C\\+\\+17(?:|; for compatibility, use explicit type name (.*?))",
[e]=i,
[f]=Kb,
[g]="class template argument deduction is incompatible with C\\+\\+ standards before C\\+\\+17(?:|; for compatibility, use explicit type name (.*?))",
[b]=l,
[a]=Pb,
[a]={"218538ebe952",1535656595,"Add missing -Wc++11-compat / -Wc++14-compat warnings for:","Add missing -Wc++11-compat / -Wc++14-compat warnings for:\n\n * generic lambdas\n * return type deduction\n * class template argument deduction\n\nllvm-svn: 341098"},
[b]={{nil,B,m}},
[h]={{fb,10585,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // ...\n  // Can\'t deduce from dependent arguments.\n  if (Expr::hasAnyTypeDependentArguments(Inits)) {\n    Diag(TSInfo->getTypeLoc().getBeginLoc(), diag::warn_cxx14_compat_class_template_argument_deduction) << TSInfo->getTypeLoc().getSourceRange() << 0;"},{fb,10910,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // ...\n  Diag(TSInfo->getTypeLoc().getBeginLoc(), diag::warn_cxx14_compat_class_template_argument_deduction) << TSInfo->getTypeLoc().getSourceRange() << 1 << DeducedType;"}},
[f]={"218538ebe952",1535656595,"Add missing -Wc++11-compat / -Wc++14-compat warnings for:","Add missing -Wc++11-compat / -Wc++14-compat warnings for:\n\n * generic lambdas\n * return type deduction\n * class template argument deduction\n\nllvm-svn: 341098"},
[k]={
[h]={{mb,10585,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // ...\n  // Can\'t deduce from dependent arguments.\n  if (Expr::hasAnyTypeDependentArguments(Inits)) {\n    Diag(TSInfo->getTypeLoc().getBeginLoc(), diag::warn_cxx14_compat_class_template_argument_deduction) << TSInfo->getTypeLoc().getSourceRange() << 0;"},{mb,10910,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // ...\n  Diag(TSInfo->getTypeLoc().getBeginLoc(), diag::warn_cxx14_compat_class_template_argument_deduction) << TSInfo->getTypeLoc().getSourceRange() << 1 << DeducedType;"}},
[l]={
["clang/test/SemaCXX/cxx14-compat.cpp"]={"clang/test/SemaCXX/cxx14-compat.cpp:19:1: warning: class template argument deduction is incompatible with C++ standards before C++17; for compatibility, use explicit type name \'X<>\' [-Wpre-c++17-compat]","clang/test/SemaCXX/cxx14-compat.cpp:25:3: warning: class template argument deduction is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]","clang/test/SemaCXX/cxx14-compat.cpp:29:3: warning: class template argument deduction is incompatible with C++ standards before C++17; for compatibility, use explicit type name \'typename A::X<A>\' (aka \'A::X<A>\') [-Wpre-c++17-compat]"}
["clang/test/SemaCXX/cxx14-compat.cpp"]={"clang/test/SemaCXX/cxx14-compat.cpp:19:1: warning: class template argument deduction is incompatible with C++ standards before C++17; for compatibility, use explicit type name \'X<>\' [-Wpre-c++17-compat]","clang/test/SemaCXX/cxx14-compat.cpp:25:3: warning: class template argument deduction is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]","clang/test/SemaCXX/cxx14-compat.cpp:29:3: warning: class template argument deduction is incompatible with C++ standards before C++17; for compatibility, use explicit type name \'typename A::X<A>\' (aka \'A::X<A>\') [-Wpre-c++17-compat]"}
}
}
},
},
["warn_cxx14_compat_constexpr_if"]={
["warn_cxx14_compat_constexpr_if"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]="constexpr if is incompatible with C++ standards before C++1z",
[c]="warn_cxx14_compat_constexpr_if",
[d]=g,
[d]="constexpr if is incompatible with C++ standards before C++1z",
[e]="constexpr if is incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="constexpr if is incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=v,
[a]=Pb,
[a]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature.","Implement p0292r2 (constexpr if), a likely C++1z feature.\n\nllvm-svn: 273602"},
[b]=A,
[f]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature.","Implement p0292r2 (constexpr if), a likely C++1z feature.\n\nllvm-svn: 273602"},
[h]={{nc,1469,"/// ParseIfStatement\n///      if-statement: [C99 6.8.4.1]\n///        \'if\' \'(\' expression \')\' statement\n///        \'if\' \'(\' expression \')\' statement \'else\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement \'else\' statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement \'else\' statement\n///\nStmtResult Parser::ParseIfStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  if (Tok.is(tok::kw_constexpr)) {\n    Diag(Tok, getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_constexpr_if : diag::ext_constexpr_if);"}}
[h]={{nc,1469,"/// ParseIfStatement\n///      if-statement: [C99 6.8.4.1]\n///        \'if\' \'(\' expression \')\' statement\n///        \'if\' \'(\' expression \')\' statement \'else\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement \'else\' statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement \'else\' statement\n///\nStmtResult Parser::ParseIfStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  if (Tok.is(tok::kw_constexpr)) {\n    Diag(Tok, getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_constexpr_if : diag::ext_constexpr_if);"}}
},
},
["warn_cxx14_compat_constexpr_not_const"]={
["warn_cxx14_compat_constexpr_not_const"]={
[j]={"constexpr-not-const"},
[k]={"constexpr-not-const"},
[i]="constexpr-not-const",
[j]="constexpr-not-const",
[c]="\'constexpr\' non-static member function will not be implicitly \'const\' in C++14; add \'const\' to avoid a change in behavior",
[c]="warn_cxx14_compat_constexpr_not_const",
[d]=g,
[d]="\'constexpr\' non-static member function will not be implicitly \'const\' in C++14; add \'const\' to avoid a change in behavior",
[e]="\'constexpr\' non\\-static member function will not be implicitly \'const\' in C\\+\\+14; add \'const\' to avoid a change in behavior",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wconstexpr\\-not\\-const[^\\]]*\\]",
[g]="\'constexpr\' non\\-static member function will not be implicitly \'const\' in C\\+\\+14; add \'const\' to avoid a change in behavior",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wconstexpr\\-not\\-const[^\\]]*\\]",
[a]={"034185c2f9e3",1366506530,"The \'constexpr implies const\' rule for non-static member functions is gone in","The \'constexpr implies const\' rule for non-static member functions is gone in\nC++1y, so stop adding the \'const\' there. Provide a compatibility warning for\ncode relying on this in C++11, with a fix-it hint. Update our lazily-written\ntests to add the const, except for those ones which were testing our\nimplementation of this rule.\n\nllvm-svn: 179969"},
[b]=m,
[h]={{D,11810,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (!getLangOpts().CPlusPlus14 && MD && MD->isConstexpr() && !MD->isStatic() && !isa<CXXConstructorDecl>(MD) && !isa<CXXDestructorDecl>(MD) && !MD->getMethodQualifiers().hasConst()) {\n    // ...\n    if (!OldMD || !OldMD->isStatic()) {\n      // ...\n      // Warn that we did this, if we\'re not performing template instantiation.\n      // In that case, we\'ll have warned already when the template was defined.\n      if (!inTemplateInstantiation()) {\n        // ...\n        Diag(MD->getLocation(), diag::warn_cxx14_compat_constexpr_not_const) << FixItHint::CreateInsertion(AddConstLoc, \" const\");"}},
[f]={"034185c2f9e3",1366506530,"The \'constexpr implies const\' rule for non-static member functions is gone in","The \'constexpr implies const\' rule for non-static member functions is gone in\nC++1y, so stop adding the \'const\' there. Provide a compatibility warning for\ncode relying on this in C++11, with a fix-it hint. Update our lazily-written\ntests to add the const, except for those ones which were testing our\nimplementation of this rule.\n\nllvm-svn: 179969"},
[k]={
[h]={{M,11810,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (!getLangOpts().CPlusPlus14 && MD && MD->isConstexpr() && !MD->isStatic() && !isa<CXXConstructorDecl>(MD) && !isa<CXXDestructorDecl>(MD) && !MD->getMethodQualifiers().hasConst()) {\n    // ...\n    if (!OldMD || !OldMD->isStatic()) {\n      // ...\n      // Warn that we did this, if we\'re not performing template instantiation.\n      // In that case, we\'ll have warned already when the template was defined.\n      if (!inTemplateInstantiation()) {\n        // ...\n        Diag(MD->getLocation(), diag::warn_cxx14_compat_constexpr_not_const) << FixItHint::CreateInsertion(AddConstLoc, \" const\");"}},
[l]={
["clang/test/CXX/temp/temp.spec/temp.explicit/p1-0x.cpp"]={"clang/test/CXX/temp/temp.spec/temp.explicit/p1-0x.cpp:12:17: warning: \'constexpr\' non-static member function will not be implicitly \'const\' in C++14; add \'const\' to avoid a change in behavior [-Wconstexpr-not-const]"}
["clang/test/CXX/temp/temp.spec/temp.explicit/p1-0x.cpp"]={"clang/test/CXX/temp/temp.spec/temp.explicit/p1-0x.cpp:12:17: warning: \'constexpr\' non-static member function will not be implicitly \'const\' in C++14; add \'const\' to avoid a change in behavior [-Wconstexpr-not-const]"}
}
}
},
},
["warn_cxx14_compat_constexpr_on_lambda"]={
["warn_cxx14_compat_constexpr_on_lambda"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]="constexpr on lambda expressions is incompatible with C++ standards before C++1z",
[c]="warn_cxx14_compat_constexpr_on_lambda",
[d]=g,
[d]="constexpr on lambda expressions is incompatible with C++ standards before C++1z",
[e]="constexpr on lambda expressions is incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="constexpr on lambda expressions is incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=v,
[a]=Pb,
[a]={"a734ab980865",1459008697,"[Cxx1z-constexpr-lambda-P0170R1]  Support parsing of constexpr specifier (and its inference) on lamb...","[Cxx1z-constexpr-lambda-P0170R1]  Support parsing of constexpr specifier (and its inference) on lambda expressions\n\nSupport the constexpr specifier on lambda expressions - and support its inference from the lambda call operator\'s body.\n\ni.e.\n  auto L = [] () constexpr { return 5; };\n  static_assert(L() == 5); // OK\n  auto Implicit = [] (auto a) { return a; };\n  static_assert(Implicit(5) == 5); \n\nWe do not support evaluation of lambda\'s within constant expressions just yet.\n\nImplementation Strategy:\n  - teach ParseLambdaExpressionAfterIntroducer to expect a constexpr specifier and mark the invented function call operator\'s declarator\'s decl-specifier with it; Have it emit fixits for multiple decl-specifiers (mutable or constexpr) in this location.\n  - for cases where constexpr is not explicitly specified, have buildLambdaExpr check whether the invented function call operator satisfies the requirements of a constexpr function, by calling CheckConstexprFunctionDecl/Body.\n\nMuch obliged to Richard Smith for his patience and his care, in ensuring the code is clang-worthy.\n\nllvm-svn: 264513"},
[b]=A,
[h]={{cc,1228,"static void addConstexprToLambdaDeclSpecifier(Parser &P, SourceLocation ConstexprLoc, DeclSpec &DS) {\n  if (ConstexprLoc.isValid()) {\n    P.Diag(ConstexprLoc, !P.getLangOpts().CPlusPlus17 ? diag::ext_constexpr_on_lambda_cxx17 : diag::warn_cxx14_compat_constexpr_on_lambda);"}}
[f]={"a734ab980865",1459008697,"[Cxx1z-constexpr-lambda-P0170R1]  Support parsing of constexpr specifier (and its inference) on lamb...","[Cxx1z-constexpr-lambda-P0170R1]  Support parsing of constexpr specifier (and its inference) on lambda expressions\n\nSupport the constexpr specifier on lambda expressions - and support its inference from the lambda call operator\'s body.\n\ni.e.\n  auto L = [] () constexpr { return 5; };\n  static_assert(L() == 5); // OK\n  auto Implicit = [] (auto a) { return a; };\n  static_assert(Implicit(5) == 5); \n\nWe do not support evaluation of lambda\'s within constant expressions just yet.\n\nImplementation Strategy:\n  - teach ParseLambdaExpressionAfterIntroducer to expect a constexpr specifier and mark the invented function call operator\'s declarator\'s decl-specifier with it; Have it emit fixits for multiple decl-specifiers (mutable or constexpr) in this location.\n  - for cases where constexpr is not explicitly specified, have buildLambdaExpr check whether the invented function call operator satisfies the requirements of a constexpr function, by calling CheckConstexprFunctionDecl/Body.\n\nMuch obliged to Richard Smith for his patience and his care, in ensuring the code is clang-worthy.\n\nllvm-svn: 264513"},
[h]={{fc,1228,"static void addConstexprToLambdaDeclSpecifier(Parser &P, SourceLocation ConstexprLoc, DeclSpec &DS) {\n  if (ConstexprLoc.isValid()) {\n    P.Diag(ConstexprLoc, !P.getLangOpts().CPlusPlus17 ? diag::ext_constexpr_on_lambda_cxx17 : diag::warn_cxx14_compat_constexpr_on_lambda);"}}
},
},
["warn_cxx14_compat_decomp_decl"]={
["warn_cxx14_compat_decomp_decl"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]="decomposition declarations are incompatible with C++ standards before C++1z",
[c]="warn_cxx14_compat_decomp_decl",
[d]=g,
[d]="decomposition declarations are incompatible with C++ standards before C++1z",
[e]="decomposition declarations are incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="decomposition declarations are incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=l,
[a]=Pb,
[a]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z","P0217R3: Parsing support and framework for AST representation of C++1z\ndecomposition declarations.\n\nThere are a couple of things in the wording that seem strange here:\ndecomposition declarations are permitted at namespace scope (which we partially\nsupport here) and they are permitted as the declaration in a template (which we\nreject).\n\nllvm-svn: 276492"},
[b]=m,
[h]={{C,755,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  Diag(Decomp.getLSquareLoc(), !getLangOpts().CPlusPlus17 ? diag::ext_decomp_decl : D.getContext() == DeclaratorContext::Condition ? diag::ext_decomp_decl_cond : diag::warn_cxx14_compat_decomp_decl) << Decomp.getSourceRange();"}}
[f]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z","P0217R3: Parsing support and framework for AST representation of C++1z\ndecomposition declarations.\n\nThere are a couple of things in the wording that seem strange here:\ndecomposition declarations are permitted at namespace scope (which we partially\nsupport here) and they are permitted as the declaration in a template (which we\nreject).\n\nllvm-svn: 276492"},
[h]={{L,755,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  Diag(Decomp.getLSquareLoc(), !getLangOpts().CPlusPlus17 ? diag::ext_decomp_decl : D.getContext() == DeclaratorContext::Condition ? diag::ext_decomp_decl_cond : diag::warn_cxx14_compat_decomp_decl) << Decomp.getSourceRange();"}}
},
},
["warn_cxx14_compat_fold_expression"]={
["warn_cxx14_compat_fold_expression"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]="pack fold expression is incompatible with C++ standards before C++1z",
[c]="warn_cxx14_compat_fold_expression",
[d]=g,
[d]="pack fold expression is incompatible with C++ standards before C++1z",
[e]="pack fold expression is incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="pack fold expression is incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=v,
[a]=Pb,
[a]={"0f0af19b0581",1415423236,"[c++1z] N4295: fold-expressions.","[c++1z] N4295: fold-expressions.\n\nThis is a new form of expression of the form:\n\n  (expr op ... op expr)\n\nwhere one of the exprs is a parameter pack. It expands into\n\n  (expr1 op (expr2onwards op ... op expr))\n\n(and likewise if the pack is on the right). The non-pack operand can be\nomitted; in that case, an empty pack gives a fallback value or an error,\ndepending on the operator.\n\nllvm-svn: 221573"},
[b]=A,
[h]={{Jc,3454,"/// Parse A C++1z fold-expression after the opening paren and optional\n/// left-hand-side expression.\n///\n/// \\verbatim\n///  fold-expression:\n///      ( cast-expression fold-operator ... )\n///      ( ... fold-operator cast-expression )\n///      ( cast-expression fold-operator ... fold-operator cast-expression )\nExprResult Parser::ParseFoldExpression(ExprResult LHS, BalancedDelimiterTracker &T) {\n  // ...\n  Diag(EllipsisLoc, getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_fold_expression : diag::ext_fold_expression);"}},
[f]={"0f0af19b0581",1415423236,"[c++1z] N4295: fold-expressions.","[c++1z] N4295: fold-expressions.\n\nThis is a new form of expression of the form:\n\n  (expr op ... op expr)\n\nwhere one of the exprs is a parameter pack. It expands into\n\n  (expr1 op (expr2onwards op ... op expr))\n\n(and likewise if the pack is on the right). The non-pack operand can be\nomitted; in that case, an empty pack gives a fallback value or an error,\ndepending on the operator.\n\nllvm-svn: 221573"},
[k]={
[h]={{Mc,3454,"/// Parse A C++1z fold-expression after the opening paren and optional\n/// left-hand-side expression.\n///\n/// \\verbatim\n///  fold-expression:\n///      ( cast-expression fold-operator ... )\n///      ( ... fold-operator cast-expression )\n///      ( cast-expression fold-operator ... fold-operator cast-expression )\nExprResult Parser::ParseFoldExpression(ExprResult LHS, BalancedDelimiterTracker &T) {\n  // ...\n  Diag(EllipsisLoc, getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_fold_expression : diag::ext_fold_expression);"}},
[l]={
["clang/test/SemaCXX/cxx14-compat.cpp"]={"clang/test/SemaCXX/cxx14-compat.cpp:13:42: warning: pack fold expression is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]"}
["clang/test/SemaCXX/cxx14-compat.cpp"]={"clang/test/SemaCXX/cxx14-compat.cpp:13:42: warning: pack fold expression is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]"}
}
}
},
},
["warn_cxx14_compat_init_statement"]={
["warn_cxx14_compat_init_statement"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]="%select{if|switch}0 initialization statements are incompatible with C++ standards before C++1z",
[c]="warn_cxx14_compat_init_statement",
[d]=g,
[d]="%select{if|switch}0 initialization statements are incompatible with C++ standards before C++1z",
[e]="(?:if|switch) initialization statements are incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="(?:if|switch) initialization statements are incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=v,
[a]=Pb,
[a]={"fccb5128b201",1476822436,"Add missing warning for use of C++1z init-statements in C++14 and before.","Add missing warning for use of C++1z init-statements in C++14 and before.\n\nllvm-svn: 284530"},
[b]=A,
[h]={{cc,2074,"/// ParseCXXCondition - if/switch/while condition expression.\n///\n///      condition:\n///        expression\n///        type-specifier-seq declarator \'=\' assignment-expression\n/// [C++11] type-specifier-seq declarator \'=\' initializer-clause\n/// [C++11] type-specifier-seq declarator braced-init-list\n/// [Clang] type-specifier-seq ref-qualifier[opt] \'[\' identifier-list \']\'\n///            brace-or-equal-initializer\n/// [GNU]  type-specifier-seq declarator simple-asm-expr[opt] attributes[opt]\n///            \'=\' assignment-expression\n///\n/// In C++1z, a condition may in some contexts be preceded by an\n/// optional init-statement. This function will parse that too.\n///\n/// \\param InitStmt If non-null, an init-statement is permitted, and if present\n/// will be parsed and stored here.\n///\n/// \\param Loc The location of the start of the statement that requires this\n/// condition, e.g., the \"for\" in a for loop.\n///\n/// \\param MissingOK Whether an empty condition is acceptable here. Otherwise\n/// it is considered an error to be recovered from.\n///\n/// \\param FRI If non-null, a for range declaration is permitted, and if\n/// present will be parsed and stored here, and a null result will be returned.\n///\n/// \\param EnterForConditionScope If true, enter a continue/break scope at the\n/// appropriate moment for a \'for\' loop.\n///\n/// \\returns The parsed condition.\nSema::ConditionResult Parser::ParseCXXCondition(StmtResult *InitStmt, SourceLocation Loc, Sema::ConditionKind CK, bool MissingOK, ForRangeInfo *FRI, bool EnterForConditionScope) {\n  // ...\n  const auto WarnOnInit = [this, &CK] { Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_init_statement : diag::ext_init_statement) << (CK == Sema::ConditionKind::Switch); };"}},
[f]={"fccb5128b201",1476822436,"Add missing warning for use of C++1z init-statements in C++14 and before.","Add missing warning for use of C++1z init-statements in C++14 and before.\n\nllvm-svn: 284530"},
[k]={
[h]={{fc,2074,"/// ParseCXXCondition - if/switch/while condition expression.\n///\n///      condition:\n///        expression\n///        type-specifier-seq declarator \'=\' assignment-expression\n/// [C++11] type-specifier-seq declarator \'=\' initializer-clause\n/// [C++11] type-specifier-seq declarator braced-init-list\n/// [Clang] type-specifier-seq ref-qualifier[opt] \'[\' identifier-list \']\'\n///            brace-or-equal-initializer\n/// [GNU]  type-specifier-seq declarator simple-asm-expr[opt] attributes[opt]\n///            \'=\' assignment-expression\n///\n/// In C++1z, a condition may in some contexts be preceded by an\n/// optional init-statement. This function will parse that too.\n///\n/// \\param InitStmt If non-null, an init-statement is permitted, and if present\n/// will be parsed and stored here.\n///\n/// \\param Loc The location of the start of the statement that requires this\n/// condition, e.g., the \"for\" in a for loop.\n///\n/// \\param MissingOK Whether an empty condition is acceptable here. Otherwise\n/// it is considered an error to be recovered from.\n///\n/// \\param FRI If non-null, a for range declaration is permitted, and if\n/// present will be parsed and stored here, and a null result will be returned.\n///\n/// \\param EnterForConditionScope If true, enter a continue/break scope at the\n/// appropriate moment for a \'for\' loop.\n///\n/// \\returns The parsed condition.\nSema::ConditionResult Parser::ParseCXXCondition(StmtResult *InitStmt, SourceLocation Loc, Sema::ConditionKind CK, bool MissingOK, ForRangeInfo *FRI, bool EnterForConditionScope) {\n  // ...\n  const auto WarnOnInit = [this, &CK] { Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_init_statement : diag::ext_init_statement) << (CK == Sema::ConditionKind::Switch); };"}},
[l]={
["clang/test/CXX/stmt.stmt/stmt.select/p3.cpp"]={"clang/test/CXX/stmt.stmt/stmt.select/p3.cpp:24:7: warning: if initialization statements are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]","clang/test/CXX/stmt.stmt/stmt.select/p3.cpp:25:16: warning: if initialization statements are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]","clang/test/CXX/stmt.stmt/stmt.select/p3.cpp:26:7: warning: if initialization statements are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]","clang/test/CXX/stmt.stmt/stmt.select/p3.cpp:41:11: warning: switch initialization statements are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]","clang/test/CXX/stmt.stmt/stmt.select/p3.cpp:42:20: warning: switch initialization statements are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]","clang/test/CXX/stmt.stmt/stmt.select/p3.cpp:43:11: warning: switch initialization statements are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]"}
["clang/test/CXX/stmt.stmt/stmt.select/p3.cpp"]={"clang/test/CXX/stmt.stmt/stmt.select/p3.cpp:24:7: warning: if initialization statements are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]","clang/test/CXX/stmt.stmt/stmt.select/p3.cpp:25:16: warning: if initialization statements are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]","clang/test/CXX/stmt.stmt/stmt.select/p3.cpp:26:7: warning: if initialization statements are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]","clang/test/CXX/stmt.stmt/stmt.select/p3.cpp:41:11: warning: switch initialization statements are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]","clang/test/CXX/stmt.stmt/stmt.select/p3.cpp:42:20: warning: switch initialization statements are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]","clang/test/CXX/stmt.stmt/stmt.select/p3.cpp:43:11: warning: switch initialization statements are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]"}
}
}
},
},
["warn_cxx14_compat_inline_variable"]={
["warn_cxx14_compat_inline_variable"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]="inline variables are incompatible with C++ standards before C++1z",
[c]="warn_cxx14_compat_inline_variable",
[d]=g,
[d]="inline variables are incompatible with C++ standards before C++1z",
[e]="inline variables are incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="inline variables are incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=l,
[a]=Pb,
[a]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a","Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a\nvariable weak discardable linkage and partially-ordered initialization, and is\nimplied for constexpr static data members.)\n\nllvm-svn: 273754"},
[b]=m,
[h]={{D,7731,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.getDeclSpec().isInlineSpecified()) {\n    if (!getLangOpts().CPlusPlus) {\n    // ...\n    } else if (CurContext->isFunctionOrMethod()) {\n    // ...\n    } else {\n      Diag(D.getDeclSpec().getInlineSpecLoc(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_inline_variable : diag::ext_inline_variable);"}},
[f]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a","Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a\nvariable weak discardable linkage and partially-ordered initialization, and is\nimplied for constexpr static data members.)\n\nllvm-svn: 273754"},
[k]={
[h]={{M,7731,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.getDeclSpec().isInlineSpecified()) {\n    if (!getLangOpts().CPlusPlus) {\n    // ...\n    } else if (CurContext->isFunctionOrMethod()) {\n    // ...\n    } else {\n      Diag(D.getDeclSpec().getInlineSpecLoc(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_inline_variable : diag::ext_inline_variable);"}},
[l]={
["clang/test/SemaCXX/inline.cpp"]={"clang/test/SemaCXX/inline.cpp:17:1: warning: inline variables are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]"}
["clang/test/SemaCXX/inline.cpp"]={"clang/test/SemaCXX/inline.cpp:17:1: warning: inline variables are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]"}
}
}
},
},
["warn_cxx14_compat_nested_namespace_definition"]={
["warn_cxx14_compat_nested_namespace_definition"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]="nested namespace definition is incompatible with C++ standards before C++1z",
[c]="warn_cxx14_compat_nested_namespace_definition",
[d]=g,
[d]="nested namespace definition is incompatible with C++ standards before C++1z",
[e]="nested namespace definition is incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="nested namespace definition is incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=v,
[a]=Pb,
[a]={"13307f5f2429",1415425054,"[c++1z] Implement nested-namespace-definitions.","[c++1z] Implement nested-namespace-definitions.\n\nThis allows \'namespace A::B { ... }\' as a shorthand for \'namespace A {\nnamespace B { ... } }\'. We already supported this correctly for error recovery;\npromote that support to a full implementation.\n\nThis is not the right implementation: we do not maintain source fidelity\nbecause we desugar the nested namespace definition in the parser. This is\ntricky to avoid, since the definition genuinely does inject one named\nentity per level in the namespace name.\n\nllvm-svn: 221574"},
[b]=A,
[h]={{bb,175,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  if (ExtraNSs.empty()) {\n  // ...\n  } else if (InlineLoc.isValid()) {\n  // ...\n  } else if (getLangOpts().CPlusPlus20) {\n    Diag(ExtraNSs[0].NamespaceLoc, diag::warn_cxx14_compat_nested_namespace_definition);"},{bb,181,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  if (ExtraNSs.empty()) {\n  // ...\n  } else if (InlineLoc.isValid()) {\n  // ...\n  } else if (getLangOpts().CPlusPlus20) {\n  // ...\n  } else if (getLangOpts().CPlusPlus17) {\n    Diag(ExtraNSs[0].NamespaceLoc, diag::warn_cxx14_compat_nested_namespace_definition);"}},
[f]={"13307f5f2429",1415425054,"[c++1z] Implement nested-namespace-definitions.","[c++1z] Implement nested-namespace-definitions.\n\nThis allows \'namespace A::B { ... }\' as a shorthand for \'namespace A {\nnamespace B { ... } }\'. We already supported this correctly for error recovery;\npromote that support to a full implementation.\n\nThis is not the right implementation: we do not maintain source fidelity\nbecause we desugar the nested namespace definition in the parser. This is\ntricky to avoid, since the definition genuinely does inject one named\nentity per level in the namespace name.\n\nllvm-svn: 221574"},
[k]={
[h]={{kb,175,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  if (ExtraNSs.empty()) {\n  // ...\n  } else if (InlineLoc.isValid()) {\n  // ...\n  } else if (getLangOpts().CPlusPlus20) {\n    Diag(ExtraNSs[0].NamespaceLoc, diag::warn_cxx14_compat_nested_namespace_definition);"},{kb,181,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  if (ExtraNSs.empty()) {\n  // ...\n  } else if (InlineLoc.isValid()) {\n  // ...\n  } else if (getLangOpts().CPlusPlus20) {\n  // ...\n  } else if (getLangOpts().CPlusPlus17) {\n    Diag(ExtraNSs[0].NamespaceLoc, diag::warn_cxx14_compat_nested_namespace_definition);"}},
[l]={
["clang/test/Parser/cxx1z-nested-namespace-definition.cpp"]={"clang/test/Parser/cxx1z-nested-namespace-definition.cpp:7:15: warning: nested namespace definition is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]"}
["clang/test/Parser/cxx1z-nested-namespace-definition.cpp"]={"clang/test/Parser/cxx1z-nested-namespace-definition.cpp:7:15: warning: nested namespace definition is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]"}
}
}
},
},
["warn_cxx14_compat_ns_enum_attribute"]={
["warn_cxx14_compat_ns_enum_attribute"]={
[j]={o,q,Ib,m,xb},
[k]={p,s,Mb,n,wb},
[i]=xb,
[j]=wb,
[c]={{nil,lb,"attributes on %select{a namespace|an enumerator}0 declaration are incompatible with C++ standards before C++17"}},
[c]={{nil,F,"warn_cxx14_compat_ns_enum_attribute"}},
[d]=g,
[d]={{nil,F,"attributes on %select{a namespace|an enumerator}0 declaration are incompatible with C++ standards before C++17"}},
[e]="attributes on (?:a namespace|an enumerator) declaration are incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+17\\-compat\\-pedantic[^\\]]*\\]",
[g]="attributes on (?:a namespace|an enumerator) declaration are incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+17\\-compat\\-pedantic[^\\]]*\\]",
[a]={"40e202f7d996",1507942584,"Fix backwards warning for use of C++17 attributes-on-namespaces-and-enumerators feature.","Fix backwards warning for use of C++17 attributes-on-namespaces-and-enumerators feature.\n\nllvm-svn: 315784"},
[b]={{nil,F,A}},
[h]={{Tb,5202,"/// ParseEnumBody - Parse a {} enclosed enumerator-list.\n///      enumerator-list:\n///        enumerator\n///        enumerator-list \',\' enumerator\n///      enumerator:\n///        enumeration-constant attributes[opt]\n///        enumeration-constant attributes[opt] \'=\' constant-expression\n///      enumeration-constant:\n///        identifier\n///\nvoid Parser::ParseEnumBody(SourceLocation StartLoc, Decl *EnumDecl) {\n  // ...\n  // Parse the enumerator-list.\n  while (Tok.isNot(tok::r_brace)) {\n    // ...\n    if (isAllowedCXX11AttributeSpecifier()) {\n      if (getLangOpts().CPlusPlus)\n        Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_ns_enum_attribute : diag::ext_ns_enum_attribute) << 1 /*enumerator*/;"},{bb,93,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  auto ReadAttributes = [&] {\n    // ...\n    do {\n      // ...\n      if (getLangOpts().CPlusPlus11 && isCXX11AttributeSpecifier()) {\n        Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_ns_enum_attribute : diag::ext_ns_enum_attribute) << 0 /*namespace*/;"}},
[f]={"40e202f7d996",1507942584,"Fix backwards warning for use of C++17 attributes-on-namespaces-and-enumerators feature.","Fix backwards warning for use of C++17 attributes-on-namespaces-and-enumerators feature.\n\nllvm-svn: 315784"},
[k]={
[h]={{Wb,5202,"/// ParseEnumBody - Parse a {} enclosed enumerator-list.\n///      enumerator-list:\n///        enumerator\n///        enumerator-list \',\' enumerator\n///      enumerator:\n///        enumeration-constant attributes[opt]\n///        enumeration-constant attributes[opt] \'=\' constant-expression\n///      enumeration-constant:\n///        identifier\n///\nvoid Parser::ParseEnumBody(SourceLocation StartLoc, Decl *EnumDecl) {\n  // ...\n  // Parse the enumerator-list.\n  while (Tok.isNot(tok::r_brace)) {\n    // ...\n    if (isAllowedCXX11AttributeSpecifier()) {\n      if (getLangOpts().CPlusPlus)\n        Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_ns_enum_attribute : diag::ext_ns_enum_attribute) << 1 /*enumerator*/;"},{kb,93,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  auto ReadAttributes = [&] {\n    // ...\n    do {\n      // ...\n      if (getLangOpts().CPlusPlus11 && isCXX11AttributeSpecifier()) {\n        Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_ns_enum_attribute : diag::ext_ns_enum_attribute) << 0 /*namespace*/;"}},
[l]={
["clang/test/SemaCXX/cxx14-compat.cpp"]={"clang/test/SemaCXX/cxx14-compat.cpp:15:11: warning: attributes on a namespace declaration are incompatible with C++ standards before C++17 [-Wpre-c++17-compat-pedantic]","clang/test/SemaCXX/cxx14-compat.cpp:16:10: warning: attributes on an enumerator declaration are incompatible with C++ standards before C++17 [-Wpre-c++17-compat-pedantic]"}
["clang/test/SemaCXX/cxx14-compat.cpp"]={"clang/test/SemaCXX/cxx14-compat.cpp:15:11: warning: attributes on a namespace declaration are incompatible with C++ standards before C++17 [-Wpre-c++17-compat-pedantic]","clang/test/SemaCXX/cxx14-compat.cpp:16:10: warning: attributes on an enumerator declaration are incompatible with C++ standards before C++17 [-Wpre-c++17-compat-pedantic]"}
}
}
},
},
["warn_cxx14_compat_star_this_lambda_capture"]={
["warn_cxx14_compat_star_this_lambda_capture"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]="by value capture of \'*this\' is incompatible with C++ standards before C++1z",
[c]="warn_cxx14_compat_star_this_lambda_capture",
[d]=g,
[d]="by value capture of \'*this\' is incompatible with C++ standards before C++1z",
[e]="by value capture of \'\\*this\' is incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="by value capture of \'\\*this\' is incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=Wc,
[a]=Pb,
[a]={"dc6b596ebbd3",1458552337,"[Cxx1z] Implement Lambda Capture of *this by Value as [=,*this] (P0018R3)","[Cxx1z] Implement Lambda Capture of *this by Value as [=,*this] (P0018R3)\n\nImplement lambda capture of *this by copy.\nFor e.g.:\nstruct A {\n\n  int d = 10;\n  auto foo() { return [*this] (auto a) mutable { d+=a; return d; }; }\n\n};\n\nauto L = A{}.foo(); // A{}\'s lifetime is gone.\n\n// Below is still ok, because *this was captured by value.\nassert(L(10) == 20);\nassert(L(100) == 120);\n\nIf the capture was implicit, or [this] (i.e. *this was captured by reference), this code would be otherwise undefined.\n\nImplementation Strategy:\n  - amend the parser to accept *this in the lambda introducer\n  - add a new king of capture LCK_StarThis\n  - teach Sema::CheckCXXThisCapture to handle by copy captures of the\n    enclosing object (i.e. *this)\n  - when CheckCXXThisCapture does capture by copy, the corresponding \n    initializer expression for the closure\'s data member \n    direct-initializes it thus making a copy of \'*this\'.\n  - in codegen, when assigning to CXXThisValue, if *this was captured by \n    copy, make sure it points to the corresponding field member, and\n    not, unlike when captured by reference, what the field member points\n    to.\n  - mark feature as implemented in svn\n\nMuch gratitude to Richard Smith for his carefully illuminating reviews!  \n\nllvm-svn: 263921"},
[b]=gd,
[f]={"dc6b596ebbd3",1458552337,"[Cxx1z] Implement Lambda Capture of *this by Value as [=,*this] (P0018R3)","[Cxx1z] Implement Lambda Capture of *this by Value as [=,*this] (P0018R3)\n\nImplement lambda capture of *this by copy.\nFor e.g.:\nstruct A {\n\n  int d = 10;\n  auto foo() { return [*this] (auto a) mutable { d+=a; return d; }; }\n\n};\n\nauto L = A{}.foo(); // A{}\'s lifetime is gone.\n\n// Below is still ok, because *this was captured by value.\nassert(L(10) == 20);\nassert(L(100) == 120);\n\nIf the capture was implicit, or [this] (i.e. *this was captured by reference), this code would be otherwise undefined.\n\nImplementation Strategy:\n  - amend the parser to accept *this in the lambda introducer\n  - add a new king of capture LCK_StarThis\n  - teach Sema::CheckCXXThisCapture to handle by copy captures of the\n    enclosing object (i.e. *this)\n  - when CheckCXXThisCapture does capture by copy, the corresponding \n    initializer expression for the closure\'s data member \n    direct-initializes it thus making a copy of \'*this\'.\n  - in codegen, when assigning to CXXThisValue, if *this was captured by \n    copy, make sure it points to the corresponding field member, and\n    not, unlike when captured by reference, what the field member points\n    to.\n  - mark feature as implemented in svn\n\nMuch gratitude to Richard Smith for his carefully illuminating reviews!  \n\nllvm-svn: 263921"},
[h]={{"clang/lib/Sema/SemaLambda.cpp",1023,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      if (C->Kind == LCK_StarThis)\n        Diag(C->Loc, !getLangOpts().CPlusPlus17 ? diag::ext_star_this_lambda_capture_cxx17 : diag::warn_cxx14_compat_star_this_lambda_capture);"}}
[h]={{"clang/lib/Sema/SemaLambda.cpp",1023,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      if (C->Kind == LCK_StarThis)\n        Diag(C->Loc, !getLangOpts().CPlusPlus17 ? diag::ext_star_this_lambda_capture_cxx17 : diag::warn_cxx14_compat_star_this_lambda_capture);"}}
},
},
["warn_cxx14_compat_static_assert_no_message"]={
["warn_cxx14_compat_static_assert_no_message"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]="static_assert with no message is incompatible with C++ standards before C++1z",
[c]="warn_cxx14_compat_static_assert_no_message",
[d]=g,
[d]="static_assert with no message is incompatible with C++ standards before C++1z",
[e]="\'static_assert\' with no message is incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="\'static_assert\' with no message is incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=v,
[a]=Pb,
[a]={"085a64ffc5d4",1403294232,"[C++1z] Implement N3928: message in static_assert is optional.","[C++1z] Implement N3928: message in static_assert is optional.\n\nllvm-svn: 211394"},
[b]={{nil,B,A},{"7.1",nil,m}},
[h]={{bb,1005,"/// ParseStaticAssertDeclaration - Parse C++0x or C11 static_assert-declaration.\n///\n/// [C++0x] static_assert-declaration:\n///          static_assert ( constant-expression  ,  string-literal  ) ;\n///\n/// [C11]  static_assert-declaration:\n///          _Static_assert ( constant-expression  ,  string-literal  ) ;\n///\nDecl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd) {\n  // ...\n  if (Tok.is(tok::r_paren)) {\n    // ...\n    if (getLangOpts().CPlusPlus17)\n      DiagVal = diag::warn_cxx14_compat_static_assert_no_message;"}},
[f]={"085a64ffc5d4",1403294232,"[C++1z] Implement N3928: message in static_assert is optional.","[C++1z] Implement N3928: message in static_assert is optional.\n\nllvm-svn: 211394"},
[k]={
[h]={{kb,1005,"/// ParseStaticAssertDeclaration - Parse C++0x or C11 static_assert-declaration.\n///\n/// [C++0x] static_assert-declaration:\n///          static_assert ( constant-expression  ,  string-literal  ) ;\n///\n/// [C11]  static_assert-declaration:\n///          _Static_assert ( constant-expression  ,  string-literal  ) ;\n///\nDecl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd) {\n  // ...\n  if (Tok.is(tok::r_paren)) {\n    // ...\n    if (getLangOpts().CPlusPlus17)\n      DiagVal = diag::warn_cxx14_compat_static_assert_no_message;"}},
[l]={
["clang/test/SemaCXX/cxx14-compat.cpp"]={"clang/test/SemaCXX/cxx14-compat.cpp:11:19: warning: \'static_assert\' with no message is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]"}
["clang/test/SemaCXX/cxx14-compat.cpp"]={"clang/test/SemaCXX/cxx14-compat.cpp:11:19: warning: \'static_assert\' with no message is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]"}
}
}
},
},
["warn_cxx14_compat_template_nontype_parm_auto_type"]={
["warn_cxx14_compat_template_nontype_parm_auto_type"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]="non-type template parameters declared with %0 are incompatible with C++ standards before C++1z",
[c]="warn_cxx14_compat_template_nontype_parm_auto_type",
[d]=g,
[d]="non-type template parameters declared with %0 are incompatible with C++ standards before C++1z",
[e]="non\\-type template parameters declared with (.*?) are incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="non\\-type template parameters declared with (.*?) are incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=l,
[a]=Pb,
[a]={"5f274389d1d9",1475106927,"P0127R2: Support type deduction for types of non-type template parameters in","P0127R2: Support type deduction for types of non-type template parameters in\nC++1z.\n\nPatch by James Touton! Some bugfixes and rebasing by me.\n\nllvm-svn: 282651"},
[b]=m,
[h]={{Db,1556,"NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, unsigned Depth, unsigned Position, SourceLocation EqualLoc, Expr *Default) {\n  // ...\n  if (const auto *T = TInfo->getType()->getContainedDeducedType())\n    if (isa<AutoType>(T))\n      Diag(D.getIdentifierLoc(), diag::warn_cxx14_compat_template_nontype_parm_auto_type) << QualType(TInfo->getType()->getContainedAutoType(), 0);"}},
[f]={"5f274389d1d9",1475106927,"P0127R2: Support type deduction for types of non-type template parameters in","P0127R2: Support type deduction for types of non-type template parameters in\nC++1z.\n\nPatch by James Touton! Some bugfixes and rebasing by me.\n\nllvm-svn: 282651"},
[k]={
[h]={{Eb,1556,"NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, unsigned Depth, unsigned Position, SourceLocation EqualLoc, Expr *Default) {\n  // ...\n  if (const auto *T = TInfo->getType()->getContainedDeducedType())\n    if (isa<AutoType>(T))\n      Diag(D.getIdentifierLoc(), diag::warn_cxx14_compat_template_nontype_parm_auto_type) << QualType(TInfo->getType()->getContainedAutoType(), 0);"}},
[l]={
["clang/test/SemaTemplate/temp_arg_nontype_diagnostic_cxx17.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_diagnostic_cxx17.cpp:3:26: warning: non-type template parameters declared with \'decltype(auto)\' are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]","clang/test/SemaTemplate/temp_arg_nontype_diagnostic_cxx17.cpp:6:16: warning: non-type template parameters declared with \'auto\' are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]"}
["clang/test/SemaTemplate/temp_arg_nontype_diagnostic_cxx17.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_diagnostic_cxx17.cpp:3:26: warning: non-type template parameters declared with \'decltype(auto)\' are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]","clang/test/SemaTemplate/temp_arg_nontype_diagnostic_cxx17.cpp:6:16: warning: non-type template parameters declared with \'auto\' are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]"}
}
}
},
},
["warn_cxx14_compat_template_template_param_typename"]={
["warn_cxx14_compat_template_template_param_typename"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]="template template parameter using \'typename\' is incompatible with C++ standards before C++1z",
[c]="warn_cxx14_compat_template_template_param_typename",
[d]=g,
[d]="template template parameter using \'typename\' is incompatible with C++ standards before C++1z",
[e]="template template parameter using \'typename\' is incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="template template parameter using \'typename\' is incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=v,
[a]=Pb,
[a]={"78e1ca692bf0",1402933882,"[C++1z] Implement N4051: \'typename\' is permitted instead of \'class\' when declaring a template templa...","[C++1z] Implement N4051: \'typename\' is permitted instead of \'class\' when declaring a template template parameter.\n\nllvm-svn: 211031"},
[b]=A,
[f]={"78e1ca692bf0",1402933882,"[C++1z] Implement N4051: \'typename\' is permitted instead of \'class\' when declaring a template templa...","[C++1z] Implement N4051: \'typename\' is permitted instead of \'class\' when declaring a template template parameter.\n\nllvm-svn: 211031"},
[h]={{"clang/lib/Parse/ParseTemplate.cpp",934,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // ...\n  // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n  // Generate a meaningful error if the user forgot to put class before the\n  // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n  // or greater appear immediately or after \'struct\'. In the latter case,\n  // replace the keyword with \'class\'.\n  if (!TryConsumeToken(tok::kw_class)) {\n    // ...\n    if (Tok.is(tok::kw_typename)) {\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_template_template_param_typename : diag::ext_template_template_param_typename) << (!getLangOpts().CPlusPlus17 ? FixItHint::CreateReplacement(Tok.getLocation(), \"class\") : FixItHint());"}}
[h]={{"clang/lib/Parse/ParseTemplate.cpp",934,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // ...\n  // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n  // Generate a meaningful error if the user forgot to put class before the\n  // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n  // or greater appear immediately or after \'struct\'. In the latter case,\n  // replace the keyword with \'class\'.\n  if (!TryConsumeToken(tok::kw_class)) {\n    // ...\n    if (Tok.is(tok::kw_typename)) {\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_template_template_param_typename : diag::ext_template_template_param_typename) << (!getLangOpts().CPlusPlus17 ? FixItHint::CreateReplacement(Tok.getLocation(), \"class\") : FixItHint());"}}
},
},
["warn_cxx14_compat_u8_character_literal"]={
["warn_cxx14_compat_u8_character_literal"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]="unicode literals are incompatible with C++ standards before C++1z",
[c]="warn_cxx14_compat_u8_character_literal",
[d]=g,
[d]="unicode literals are incompatible with C++ standards before C++1z",
[e]="unicode literals are incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="unicode literals are incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=L,
[a]=Pb,
[a]={"3e3a705062fe",1415426922,"[c++1z] Support for u8 character literals.","[c++1z] Support for u8 character literals.\n\nllvm-svn: 221576"},
[b]=T,
[h]={{Ab,2306,"/// LexCharConstant - Lex the remainder of a character constant, after having\n/// lexed either \' or L\' or u8\' or u\' or U\'.\nbool Lexer::LexCharConstant(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // ...\n  if (!isLexingRawMode()) {\n    if (Kind == tok::utf16_char_constant || Kind == tok::utf32_char_constant)\n    // ...\n    else if (Kind == tok::utf8_char_constant)\n      Diag(BufferPtr, diag::warn_cxx14_compat_u8_character_literal);"}}
[f]={"3e3a705062fe",1415426922,"[c++1z] Support for u8 character literals.","[c++1z] Support for u8 character literals.\n\nllvm-svn: 221576"},
[h]={{Fb,2306,"/// LexCharConstant - Lex the remainder of a character constant, after having\n/// lexed either \' or L\' or u8\' or u\' or U\'.\nbool Lexer::LexCharConstant(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // ...\n  if (!isLexingRawMode()) {\n    if (Kind == tok::utf16_char_constant || Kind == tok::utf32_char_constant)\n    // ...\n    else if (Kind == tok::utf8_char_constant)\n      Diag(BufferPtr, diag::warn_cxx14_compat_u8_character_literal);"}}
},
},
["warn_cxx14_compat_using_attribute_ns"]={
["warn_cxx14_compat_using_attribute_ns"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]="default scope specifier for attributes is incompatible with C++ standards before C++1z",
[c]="warn_cxx14_compat_using_attribute_ns",
[d]=g,
[d]="default scope specifier for attributes is incompatible with C++ standards before C++1z",
[e]="default scope specifier for attributes is incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="default scope specifier for attributes is incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=v,
[a]=Pb,
[a]={"b7d7a046d8e0",1466770512,"Using for attributes voted into C++17.","Using for attributes voted into C++17.\n\nllvm-svn: 273666"},
[b]=A,
[h]={{bb,4539,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  // ...\n  if (Tok.is(tok::kw_using)) {\n    Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_using_attribute_ns : diag::ext_using_attribute_ns);"}}
[f]={"b7d7a046d8e0",1466770512,"Using for attributes voted into C++17.","Using for attributes voted into C++17.\n\nllvm-svn: 273666"},
[h]={{kb,4539,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  // ...\n  if (Tok.is(tok::kw_using)) {\n    Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_using_attribute_ns : diag::ext_using_attribute_ns);"}}
},
},
["warn_cxx17_compat_adl_only_template_id"]={
["warn_cxx17_compat_adl_only_template_id"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"use of function template name with no prior function template declaration in function call with explicit template arguments is incompatible with C++ standards before C++20"},{I,I,"use of function template name with no prior function template declaration in function call with explicit template arguments is incompatible with C++ standards before C++2a"}},
[c]={{nil,x,"warn_cxx17_compat_adl_only_template_id"}},
[d]=g,
[d]={{nil,q,"use of function template name with no prior function template declaration in function call with explicit template arguments is incompatible with C++ standards before C++20"},{x,x,"use of function template name with no prior function template declaration in function call with explicit template arguments is incompatible with C++ standards before C++2a"}},
[e]="use of function template name with no prior function template declaration in function call with explicit template arguments is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="use of function template name with no prior function template declaration in function call with explicit template arguments is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={"b23c5e8c3df8",1557372687,"[c++20] Implement P0846R0: allow (ADL-only) calls to template-ids whose","[c++20] Implement P0846R0: allow (ADL-only) calls to template-ids whose\ntemplate name is not visible to unqualified lookup.\n\nIn order to support this without a severe degradation in our ability to\ndiagnose typos in template names, this change significantly restructures\nthe way we handle template-id-shaped syntax for which lookup of the\ntemplate name finds nothing.\n\nInstead of eagerly diagnosing an undeclared template name, we now form a\nplaceholder template-name representing a name that is known to not find\nany templates. When the parser sees such a name, it attempts to\ndisambiguate whether we have a less-than comparison or a template-id.\nAny diagnostics or typo-correction for the name are delayed until its\npoint of use.\n\nThe upshot should be a small improvement of our diagostic quality\noverall: we now take more syntactic context into account when trying to\nresolve an undeclared identifier on the left hand side of a \'<\'. In\nfact, this works well enough that the backwards-compatible portion (for\nan undeclared identifier rather than a lookup that finds functions but\nno function templates) is enabled in all language modes.\n\nllvm-svn: 360308"},
[b]={{nil,x,m}},
[h]={{K,7044,"ExprResult Sema::ActOnCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig) {\n  // ...\n  // Diagnose uses of the C++20 \"ADL-only template-id call\" feature in earlier\n  // language modes.\n  if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(Fn)) {\n    if (ULE->hasExplicitTemplateArgs() && ULE->decls_begin() == ULE->decls_end()) {\n      Diag(Fn->getExprLoc(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_adl_only_template_id : diag::ext_adl_only_template_id) << ULE->getName();"}}
[f]={"b23c5e8c3df8",1557372687,"[c++20] Implement P0846R0: allow (ADL-only) calls to template-ids whose","[c++20] Implement P0846R0: allow (ADL-only) calls to template-ids whose\ntemplate name is not visible to unqualified lookup.\n\nIn order to support this without a severe degradation in our ability to\ndiagnose typos in template names, this change significantly restructures\nthe way we handle template-id-shaped syntax for which lookup of the\ntemplate name finds nothing.\n\nInstead of eagerly diagnosing an undeclared template name, we now form a\nplaceholder template-name representing a name that is known to not find\nany templates. When the parser sees such a name, it attempts to\ndisambiguate whether we have a less-than comparison or a template-id.\nAny diagnostics or typo-correction for the name are delayed until its\npoint of use.\n\nThe upshot should be a small improvement of our diagostic quality\noverall: we now take more syntactic context into account when trying to\nresolve an undeclared identifier on the left hand side of a \'<\'. In\nfact, this works well enough that the backwards-compatible portion (for\nan undeclared identifier rather than a lookup that finds functions but\nno function templates) is enabled in all language modes.\n\nllvm-svn: 360308"},
[h]={{S,7044,"ExprResult Sema::ActOnCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig) {\n  // ...\n  // Diagnose uses of the C++20 \"ADL-only template-id call\" feature in earlier\n  // language modes.\n  if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(Fn)) {\n    if (ULE->hasExplicitTemplateArgs() && ULE->decls_begin() == ULE->decls_end()) {\n      Diag(Fn->getExprLoc(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_adl_only_template_id : diag::ext_adl_only_template_id) << ULE->getName();"}}
},
},
["warn_cxx17_compat_aggregate_init_paren_list"]={
["warn_cxx17_compat_aggregate_init_paren_list"]={
[j]={"c++20-extensions","c++2a-extensions"},
[k]={"c++20-extensions","c++2a-extensions"},
[i]="c++20-extensions",
[j]="c++20-extensions",
[c]={{nil,yc,"aggregate initialization of type %0 from a parenthesized list of values is a C++20 extension"}},
[c]={{nil,bb,"warn_cxx17_compat_aggregate_init_paren_list"}},
[d]=g,
[d]={{nil,bb,"aggregate initialization of type %0 from a parenthesized list of values is a C++20 extension"}},
[e]="aggregate initialization of type (.*?) from a parenthesized list of values is a C\\+\\+20 extension",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+20\\-extensions[^\\]]*\\]",
[g]="aggregate initialization of type (.*?) from a parenthesized list of values is a C\\+\\+20 extension",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+20\\-extensions[^\\]]*\\]",
[a]={Eb,1625925174,Fb,Hb},
[b]={{nil,bb,m}},
[h]={{fb,5658,"static void TryOrBuildParenListInitialization(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result = nullptr) {\n  // ...\n  if (VerifyOnly) {\n  // ...\n  } else if (Result) {\n    // ...\n    S.Diag(Kind.getLocation(), diag::warn_cxx17_compat_aggregate_init_paren_list) << Kind.getLocation() << SR << ResultType;"}},
[f]={Lb,1625925174,Kb,Jb},
[k]={
[h]={{mb,5658,"static void TryOrBuildParenListInitialization(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result = nullptr) {\n  // ...\n  if (VerifyOnly) {\n  // ...\n  } else if (Result) {\n    // ...\n    S.Diag(Kind.getLocation(), diag::warn_cxx17_compat_aggregate_init_paren_list) << Kind.getLocation() << SR << ResultType;"}},
[l]={
["clang/test/SemaCXX/paren-list-agg-init.cpp"]={"clang/test/SemaCXX/paren-list-agg-init.cpp:83:5: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:96:5: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:99:5: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:102:10: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:105:10: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:108:10: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:114:8: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:114:5: warning: aggregate initialization of type \'B\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:118:7: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:123:5: warning: aggregate initialization of type \'D\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:126:10: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:126:8: warning: aggregate initialization of type \'C\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:131:23: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:150:15: warning: aggregate initialization of type \'const F\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:154:15: warning: aggregate initialization of type \'const F\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:160:11: warning: aggregate initialization of type \'G<char>\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:166:5: warning: aggregate initialization of type \'L\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:170:7: warning: aggregate initialization of type \'int[2]\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:173:7: warning: aggregate initialization of type \'int[2]\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:185:5: warning: aggregate initialization of type \'M\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:243:3: warning: aggregate initialization of type \'M\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:247:3: warning: aggregate initialization of type \'N\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:260:3: warning: aggregate initialization of type \'O\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:263:3: warning: aggregate initialization of type \'O\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:271:14: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:289:5: warning: aggregate initialization of type \'S\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:310:15: warning: aggregate initialization of type \'const S\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:83:5: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:89:10: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]"}
["clang/test/SemaCXX/paren-list-agg-init.cpp"]={"clang/test/SemaCXX/paren-list-agg-init.cpp:83:5: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:96:5: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:99:5: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:102:10: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:105:10: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:108:10: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:114:8: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:114:5: warning: aggregate initialization of type \'B\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:118:7: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:123:5: warning: aggregate initialization of type \'D\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:126:10: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:126:8: warning: aggregate initialization of type \'C\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:131:23: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:150:15: warning: aggregate initialization of type \'const F\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:154:15: warning: aggregate initialization of type \'const F\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:160:11: warning: aggregate initialization of type \'G<char>\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:166:5: warning: aggregate initialization of type \'L\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:170:7: warning: aggregate initialization of type \'int[2]\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:173:7: warning: aggregate initialization of type \'int[2]\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:185:5: warning: aggregate initialization of type \'M\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:243:3: warning: aggregate initialization of type \'M\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:247:3: warning: aggregate initialization of type \'N\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:260:3: warning: aggregate initialization of type \'O\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:263:3: warning: aggregate initialization of type \'O\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:271:14: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:289:5: warning: aggregate initialization of type \'S\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:310:15: warning: aggregate initialization of type \'const S\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:83:5: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/paren-list-agg-init.cpp:89:10: warning: aggregate initialization of type \'A\' from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]"}
}
}
},
},
["warn_cxx17_compat_bitfield_member_init"]={
["warn_cxx17_compat_bitfield_member_init"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"default member initializer for bit-field is incompatible with C++ standards before C++20"},{I,lb,"default member initializer for bit-field is incompatible with C++ standards before C++2a"}},
[c]={{nil,F,"warn_cxx17_compat_bitfield_member_init"}},
[d]=g,
[d]={{nil,q,"default member initializer for bit-field is incompatible with C++ standards before C++20"},{x,F,"default member initializer for bit-field is incompatible with C++ standards before C++2a"}},
[e]="default member initializer for bit\\-field is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="default member initializer for bit\\-field is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=v,
[a]=pb,
[a]={"6b8e3c02ca44",1503880094,"[c++2a] P0683R1: Permit default member initializers for bit-fields.","[c++2a] P0683R1: Permit default member initializers for bit-fields.\n\nThis would be trivial, except that our in-memory and serialized representations\nfor FieldDecls assumed that this can\'t happen.\n\nllvm-svn: 311867"},
[b]={{nil,F,A}},
[h]={{bb,3036,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  // ...\n  while (true) {\n    // ...\n    if (Tok.isOneOf(tok::equal, tok::l_brace) && PureSpecLoc.isInvalid()) {\n      // DRXXXX: Anonymous bit-fields cannot have a brace-or-equal-initializer.\n      if (BitfieldSize.isUsable() && !DeclaratorInfo.hasName()) {\n      // ...\n      } else if (DeclaratorInfo.isDeclarationOfFunction()) {\n      // ...\n      } else if (DeclaratorInfo.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static && DeclaratorInfo.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef && !DS.isFriendSpecified()) {\n        // It\'s a default member initializer.\n        if (BitfieldSize.get())\n          Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_bitfield_member_init : diag::ext_bitfield_member_init);"}},
[f]={"6b8e3c02ca44",1503880094,"[c++2a] P0683R1: Permit default member initializers for bit-fields.","[c++2a] P0683R1: Permit default member initializers for bit-fields.\n\nThis would be trivial, except that our in-memory and serialized representations\nfor FieldDecls assumed that this can\'t happen.\n\nllvm-svn: 311867"},
[k]={
[h]={{kb,3036,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  // ...\n  while (true) {\n    // ...\n    if (Tok.isOneOf(tok::equal, tok::l_brace) && PureSpecLoc.isInvalid()) {\n      // DRXXXX: Anonymous bit-fields cannot have a brace-or-equal-initializer.\n      if (BitfieldSize.isUsable() && !DeclaratorInfo.hasName()) {\n      // ...\n      } else if (DeclaratorInfo.isDeclarationOfFunction()) {\n      // ...\n      } else if (DeclaratorInfo.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static && DeclaratorInfo.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef && !DS.isFriendSpecified()) {\n        // It\'s a default member initializer.\n        if (BitfieldSize.get())\n          Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_bitfield_member_init : diag::ext_bitfield_member_init);"}},
[kc]={"clang/test/SemaCXX/cxx17-compat.cpp:23:13: warning: default member initializer for bit-field is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
[l]={
[tc]={"clang/test/SemaCXX/cxx17-compat.cpp:23:13: warning: default member initializer for bit-field is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
}
}
},
},
["warn_cxx17_compat_capture_binding"]={
["warn_cxx17_compat_capture_binding"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,yc,"captured structured bindings are incompatible with C++ standards before C++20"}},
[c]={{nil,bb,"warn_cxx17_compat_capture_binding"}},
[d]=g,
[d]={{nil,bb,"captured structured bindings are incompatible with C++ standards before C++20"}},
[e]="captured structured bindings are incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="captured structured bindings are incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={Eb,1625925174,Fb,Hb},
[b]={{nil,bb,m}},
[h]={{K,19209,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  // ...\n  if (isa<BindingDecl>(Var)) {\n    if (!IsLambda || !S.getLangOpts().CPlusPlus) {\n    // ...\n    } else if (Diagnose && S.getLangOpts().CPlusPlus) {\n      S.Diag(Loc, S.LangOpts.CPlusPlus20 ? diag::warn_cxx17_compat_capture_binding : diag::ext_capture_binding) << Var;"}},
[f]={Lb,1625925174,Kb,Jb},
[k]={
[h]={{S,19209,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  // ...\n  if (isa<BindingDecl>(Var)) {\n    if (!IsLambda || !S.getLangOpts().CPlusPlus) {\n    // ...\n    } else if (Diagnose && S.getLangOpts().CPlusPlus) {\n      S.Diag(Loc, S.LangOpts.CPlusPlus20 ? diag::warn_cxx17_compat_capture_binding : diag::ext_capture_binding) << Var;"}},
[l]={
["clang/test/SemaCXX/cxx1z-decomposition.cpp"]={"clang/test/SemaCXX/cxx1z-decomposition.cpp:75:22: warning: captured structured bindings are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx1z-decomposition.cpp:76:10: warning: captured structured bindings are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx1z-decomposition.cpp:89:11: warning: captured structured bindings are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx1z-decomposition.cpp:98:22: warning: captured structured bindings are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
["clang/test/SemaCXX/cxx1z-decomposition.cpp"]={"clang/test/SemaCXX/cxx1z-decomposition.cpp:75:22: warning: captured structured bindings are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx1z-decomposition.cpp:76:10: warning: captured structured bindings are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx1z-decomposition.cpp:89:11: warning: captured structured bindings are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx1z-decomposition.cpp:98:22: warning: captured structured bindings are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
}
}
},
},
["warn_cxx17_compat_constexpr_body_invalid_stmt"]={
["warn_cxx17_compat_constexpr_body_invalid_stmt"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++20"},{I,ob,"use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++2a"}},
[c]={{nil,B,"warn_cxx17_compat_constexpr_body_invalid_stmt"}},
[d]=g,
[d]={{nil,q,"use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++20"},{x,B,"use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++2a"}},
[e]="use of this statement in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="use of this statement in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={"5c1399a58237",1544468592,"[constexpr][c++2a] Try-catch blocks in constexpr functions","[constexpr][c++2a] Try-catch blocks in constexpr functions\n\nImplement support for try-catch blocks in constexpr functions, as\nproposed in http://wg21.link/P1002 and voted in San Diego for c++20.\n\nThe idea is that we can still never throw inside constexpr, so the catch\nblock is never entered. A try-catch block like this:\n\ntry { f(); } catch (...) { }\n\nis then morally equivalent to just\n\n{ f(); }\n\nSame idea should apply for function/constructor try blocks.\n\nrdar://problem/45530773\n\nDifferential Revision: https://reviews.llvm.org/D55097\n\nllvm-svn: 348789"},
[b]={{nil,B,m}},
[h]={{C,2294,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (Kind == Sema::CheckConstexprKind::CheckValid) {\n  // ...\n  } else if (Cxx2bLoc.isValid()) {\n  // ...\n  } else if (Cxx2aLoc.isValid()) {\n    SemaRef.Diag(Cxx2aLoc, SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt_cxx20) << isa<CXXConstructorDecl>(Dcl);"}}
[f]={"5c1399a58237",1544468592,"[constexpr][c++2a] Try-catch blocks in constexpr functions","[constexpr][c++2a] Try-catch blocks in constexpr functions\n\nImplement support for try-catch blocks in constexpr functions, as\nproposed in http://wg21.link/P1002 and voted in San Diego for c++20.\n\nThe idea is that we can still never throw inside constexpr, so the catch\nblock is never entered. A try-catch block like this:\n\ntry { f(); } catch (...) { }\n\nis then morally equivalent to just\n\n{ f(); }\n\nSame idea should apply for function/constructor try blocks.\n\nrdar://problem/45530773\n\nDifferential Revision: https://reviews.llvm.org/D55097\n\nllvm-svn: 348789"},
[h]={{L,2294,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (Kind == Sema::CheckConstexprKind::CheckValid) {\n  // ...\n  } else if (Cxx2bLoc.isValid()) {\n  // ...\n  } else if (Cxx2aLoc.isValid()) {\n    SemaRef.Diag(Cxx2aLoc, SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt_cxx20) << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["warn_cxx17_compat_constexpr_ctor_missing_init"]={
["warn_cxx17_compat_constexpr_ctor_missing_init"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"constexpr constructor that does not initialize all members is incompatible with C++ standards before C++20"}},
[c]={{nil,q,"warn_cxx17_compat_constexpr_ctor_missing_init"}},
[d]=g,
[d]={{nil,q,"constexpr constructor that does not initialize all members is incompatible with C++ standards before C++20"}},
[e]="constexpr constructor that does not initialize all members is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="constexpr constructor that does not initialize all members is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,m}},
[h]={{C,2044,"/// Check that the given field is initialized within a constexpr constructor.\n///\n/// \\param Dcl The constexpr constructor being checked.\n/// \\param Field The field being checked. This may be a member of an anonymous\n///        struct or union nested within the class being checked.\n/// \\param Inits All declarations, including anonymous struct/union members and\n///        indirect members, for which any initialization was provided.\n/// \\param Diagnosed Whether we\'ve emitted the error message yet. Used to attach\n///        multiple notes for different members to the same error.\n/// \\param Kind Whether we\'re diagnosing a constructor as written or determining\n///        whether the formal requirements are satisfied.\n/// \\return \\c false if we\'re checking for validity and the constructor does\n///        not satisfy the requirements on a constexpr constructor.\nstatic bool CheckConstexprCtorInitializer(Sema &SemaRef, const FunctionDecl *Dcl, FieldDecl *Field, llvm::SmallSet<Decl *, 16> &Inits, bool &Diagnosed, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (!Inits.count(Field)) {\n    if (Kind == Sema::CheckConstexprKind::Diagnose) {\n      if (!Diagnosed) {\n        SemaRef.Diag(Dcl->getLocation(), SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_ctor_missing_init : diag::ext_constexpr_ctor_missing_init);"}}
[f]={xb,1567434909,yb,Cb},
[h]={{L,2044,"/// Check that the given field is initialized within a constexpr constructor.\n///\n/// \\param Dcl The constexpr constructor being checked.\n/// \\param Field The field being checked. This may be a member of an anonymous\n///        struct or union nested within the class being checked.\n/// \\param Inits All declarations, including anonymous struct/union members and\n///        indirect members, for which any initialization was provided.\n/// \\param Diagnosed Whether we\'ve emitted the error message yet. Used to attach\n///        multiple notes for different members to the same error.\n/// \\param Kind Whether we\'re diagnosing a constructor as written or determining\n///        whether the formal requirements are satisfied.\n/// \\return \\c false if we\'re checking for validity and the constructor does\n///        not satisfy the requirements on a constexpr constructor.\nstatic bool CheckConstexprCtorInitializer(Sema &SemaRef, const FunctionDecl *Dcl, FieldDecl *Field, llvm::SmallSet<Decl *, 16> &Inits, bool &Diagnosed, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (!Inits.count(Field)) {\n    if (Kind == Sema::CheckConstexprKind::Diagnose) {\n      if (!Diagnosed) {\n        SemaRef.Diag(Dcl->getLocation(), SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_ctor_missing_init : diag::ext_constexpr_ctor_missing_init);"}}
},
},
["warn_cxx17_compat_constexpr_function_try_block"]={
["warn_cxx17_compat_constexpr_function_try_block"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"function try block in constexpr %select{function|constructor}0 is incompatible with C++ standards before C++20"},{I,ob,"function try block in constexpr %select{function|constructor}0 is incompatible with C++ standards before C++2a"}},
[c]={{nil,B,"warn_cxx17_compat_constexpr_function_try_block"}},
[d]=g,
[d]={{nil,q,"function try block in constexpr %select{function|constructor}0 is incompatible with C++ standards before C++20"},{x,B,"function try block in constexpr %select{function|constructor}0 is incompatible with C++ standards before C++2a"}},
[e]="function try block in constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="function try block in constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={"5c1399a58237",1544468592,"[constexpr][c++2a] Try-catch blocks in constexpr functions","[constexpr][c++2a] Try-catch blocks in constexpr functions\n\nImplement support for try-catch blocks in constexpr functions, as\nproposed in http://wg21.link/P1002 and voted in San Diego for c++20.\n\nThe idea is that we can still never throw inside constexpr, so the catch\nblock is never entered. A try-catch block like this:\n\ntry { f(); } catch (...) { }\n\nis then morally equivalent to just\n\n{ f(); }\n\nSame idea should apply for function/constructor try blocks.\n\nrdar://problem/45530773\n\nDifferential Revision: https://reviews.llvm.org/D55097\n\nllvm-svn: 348789"},
[b]={{nil,B,m}},
[h]={{C,2259,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (isa<CXXTryStmt>(Body)) {\n    // ...\n    case Sema::CheckConstexprKind::Diagnose:\n      SemaRef.Diag(Body->getBeginLoc(), !SemaRef.getLangOpts().CPlusPlus20 ? diag::ext_constexpr_function_try_block_cxx20 : diag::warn_cxx17_compat_constexpr_function_try_block) << isa<CXXConstructorDecl>(Dcl);"}}
[f]={"5c1399a58237",1544468592,"[constexpr][c++2a] Try-catch blocks in constexpr functions","[constexpr][c++2a] Try-catch blocks in constexpr functions\n\nImplement support for try-catch blocks in constexpr functions, as\nproposed in http://wg21.link/P1002 and voted in San Diego for c++20.\n\nThe idea is that we can still never throw inside constexpr, so the catch\nblock is never entered. A try-catch block like this:\n\ntry { f(); } catch (...) { }\n\nis then morally equivalent to just\n\n{ f(); }\n\nSame idea should apply for function/constructor try blocks.\n\nrdar://problem/45530773\n\nDifferential Revision: https://reviews.llvm.org/D55097\n\nllvm-svn: 348789"},
[h]={{L,2259,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (isa<CXXTryStmt>(Body)) {\n    // ...\n    case Sema::CheckConstexprKind::Diagnose:\n      SemaRef.Diag(Body->getBeginLoc(), !SemaRef.getLangOpts().CPlusPlus20 ? diag::ext_constexpr_function_try_block_cxx20 : diag::warn_cxx17_compat_constexpr_function_try_block) << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["warn_cxx17_compat_constexpr_local_var_no_init"]={
["warn_cxx17_compat_constexpr_local_var_no_init"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"uninitialized variable in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++20"}},
[c]={{nil,q,"warn_cxx17_compat_constexpr_local_var_no_init"}},
[d]=g,
[d]={{nil,q,"uninitialized variable in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++20"}},
[e]="uninitialized variable in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="uninitialized variable in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,m}},
[h]={{C,1959,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Var:\n    case Decl::Decomposition: {\n      // ...\n      if (VD->isThisDeclarationADefinition()) {\n        // ...\n        if (!VD->getType()->isDependentType() && !VD->hasInit() && !VD->isCXXForRangeDecl()) {\n          if (Kind == Sema::CheckConstexprKind::Diagnose) {\n            SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_local_var_no_init : diag::ext_constexpr_local_var_no_init) << isa<CXXConstructorDecl>(Dcl);"}}
[f]={xb,1567434909,yb,Cb},
[h]={{L,1959,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Var:\n    case Decl::Decomposition: {\n      // ...\n      if (VD->isThisDeclarationADefinition()) {\n        // ...\n        if (!VD->getType()->isDependentType() && !VD->hasInit() && !VD->isCXXForRangeDecl()) {\n          if (Kind == Sema::CheckConstexprKind::Diagnose) {\n            SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_local_var_no_init : diag::ext_constexpr_local_var_no_init) << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["warn_cxx17_compat_constexpr_union_ctor_no_init"]={
["warn_cxx17_compat_constexpr_union_ctor_no_init"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"constexpr union constructor that does not initialize any member is incompatible with C++ standards before C++20"}},
[c]={{nil,q,"warn_cxx17_compat_constexpr_union_ctor_no_init"}},
[d]=g,
[d]={{nil,q,"constexpr union constructor that does not initialize any member is incompatible with C++ standards before C++20"}},
[e]="constexpr union constructor that does not initialize any member is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="constexpr union constructor that does not initialize any member is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,m}},
[h]={{C,2321,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n    // ...\n    // DR1359:\n    // - every non-variant non-static data member and base class sub-object\n    //  shall be initialized;\n    // DR1460:\n    // - if the class is a union having variant members, exactly one of them\n    //  shall be initialized;\n    if (RD->isUnion()) {\n      if (Constructor->getNumCtorInitializers() == 0 && RD->hasVariantMembers()) {\n        if (Kind == Sema::CheckConstexprKind::Diagnose) {\n          SemaRef.Diag(Dcl->getLocation(), SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_union_ctor_no_init : diag::ext_constexpr_union_ctor_no_init);"}}
[f]={xb,1567434909,yb,Cb},
[h]={{L,2321,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n    // ...\n    // DR1359:\n    // - every non-variant non-static data member and base class sub-object\n    //  shall be initialized;\n    // DR1460:\n    // - if the class is a union having variant members, exactly one of them\n    //  shall be initialized;\n    if (RD->isUnion()) {\n      if (Constructor->getNumCtorInitializers() == 0 && RD->hasVariantMembers()) {\n        if (Kind == Sema::CheckConstexprKind::Diagnose) {\n          SemaRef.Diag(Dcl->getLocation(), SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_union_ctor_no_init : diag::ext_constexpr_union_ctor_no_init);"}}
},
},
["warn_cxx17_compat_constexpr_virtual"]={
["warn_cxx17_compat_constexpr_virtual"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"virtual constexpr functions are incompatible with C++ standards before C++20"},{I,I,"virtual constexpr functions are incompatible with C++ standards before C++2a"}},
[c]={{nil,x,"warn_cxx17_compat_constexpr_virtual"}},
[d]=g,
[d]={{nil,q,"virtual constexpr functions are incompatible with C++ standards before C++20"},{x,x,"virtual constexpr functions are incompatible with C++ standards before C++2a"}},
[e]="virtual constexpr functions are incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="virtual constexpr functions are incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={"5c5be6b2f7fc",1557733330,"[c++20] P1064R0: Allow virtual function calls in constant expression","[c++20] P1064R0: Allow virtual function calls in constant expression\nevaluation.\n\nllvm-svn: 360559"},
[b]={{nil,x,m}},
[h]={{C,1808,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  // ...\n  if (!isa<CXXConstructorDecl>(NewFD)) {\n    // ...\n    if (Method && Method->isVirtual()) {\n      if (getLangOpts().CPlusPlus20) {\n        if (Kind == CheckConstexprKind::Diagnose)\n          Diag(Method->getLocation(), diag::warn_cxx17_compat_constexpr_virtual);"}},
[f]={"5c5be6b2f7fc",1557733330,"[c++20] P1064R0: Allow virtual function calls in constant expression","[c++20] P1064R0: Allow virtual function calls in constant expression\nevaluation.\n\nllvm-svn: 360559"},
[k]={
[h]={{L,1808,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  // ...\n  if (!isa<CXXConstructorDecl>(NewFD)) {\n    // ...\n    if (Method && Method->isVirtual()) {\n      if (getLangOpts().CPlusPlus20) {\n        if (Kind == CheckConstexprKind::Diagnose)\n          Diag(Method->getLocation(), diag::warn_cxx17_compat_constexpr_virtual);"}},
[kc]={"clang/test/SemaCXX/cxx17-compat.cpp:68:26: warning: virtual constexpr functions are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
[l]={
[tc]={"clang/test/SemaCXX/cxx17-compat.cpp:68:26: warning: virtual constexpr functions are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
}
}
},
},
["warn_cxx17_compat_decomp_decl_spec"]={
["warn_cxx17_compat_decomp_decl_spec"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"decomposition declaration declared %plural{1:\'%1\'|:with \'%1\' specifiers}0 is incompatible with C++ standards before C++20"},{I,I,"decomposition declaration declared %plural{1:\'%1\'|:with \'%1\' specifiers}0 is incompatible with C++ standards before C++2a"}},
[c]={{nil,x,"warn_cxx17_compat_decomp_decl_spec"}},
[d]=g,
[d]={{nil,q,"decomposition declaration declared %plural{1:\'%1\'|:with \'%1\' specifiers}0 is incompatible with C++ standards before C++20"},{x,x,"decomposition declaration declared %plural{1:\'%1\'|:with \'%1\' specifiers}0 is incompatible with C++ standards before C++2a"}},
[e]="decomposition declaration declared (?:\'(.*?)\'|with \'(.*?)\' specifiers) is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="decomposition declaration declared (?:\'(.*?)\'|with \'(.*?)\' specifiers) is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={"13bf9892dc2a",1558554775,"Part of P1091R3: permit structured bindings to be declared \'static\' and","Part of P1091R3: permit structured bindings to be declared \'static\' and\n\'thread_local\' in C++20.\n\nllvm-svn: 361424"},
[b]={{nil,x,m}},
[h]={{C,812,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  {\n    // ...\n    if (!BadSpecifiers.empty()) {\n    // ...\n    } else if (!CPlusPlus20Specifiers.empty()) {\n      auto &&Warn = Diag(CPlusPlus20SpecifierLocs.front(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_decomp_decl_spec : diag::ext_decomp_decl_spec);"}},
[f]={"13bf9892dc2a",1558554775,"Part of P1091R3: permit structured bindings to be declared \'static\' and","Part of P1091R3: permit structured bindings to be declared \'static\' and\n\'thread_local\' in C++20.\n\nllvm-svn: 361424"},
[k]={
[h]={{L,812,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  {\n    // ...\n    if (!BadSpecifiers.empty()) {\n    // ...\n    } else if (!CPlusPlus20Specifiers.empty()) {\n      auto &&Warn = Diag(CPlusPlus20SpecifierLocs.front(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_decomp_decl_spec : diag::ext_decomp_decl_spec);"}},
[kc]={"clang/test/SemaCXX/cxx17-compat.cpp:77:1: warning: decomposition declaration declared \'static\' is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx17-compat.cpp:84:3: warning: decomposition declaration declared with \'static thread_local\' specifiers is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
[l]={
[tc]={"clang/test/SemaCXX/cxx17-compat.cpp:77:1: warning: decomposition declaration declared \'static\' is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx17-compat.cpp:84:3: warning: decomposition declaration declared with \'static thread_local\' specifiers is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
}
}
},
},
["warn_cxx17_compat_defaulted_comparison"]={
["warn_cxx17_compat_defaulted_comparison"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"defaulted comparison operators are incompatible with C++ standards before C++20"}},
[c]={{nil,q,"warn_cxx17_compat_defaulted_comparison"}},
[d]=g,
[d]={{nil,q,"defaulted comparison operators are incompatible with C++ standards before C++20"}},
[e]="defaulted comparison operators are incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="defaulted comparison operators are incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,m}},
[h]={{C,17883,"void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {\n  // ...\n  // Issue compatibility warning. We already warned if the operator is\n  // \'operator<=>\' when parsing the \'<=>\' token.\n  if (DefKind.isComparison() && DefKind.asComparison() != DefaultedComparisonKind::ThreeWay) {\n    Diag(DefaultLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_defaulted_comparison : diag::ext_defaulted_comparison);"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{L,17883,"void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {\n  // ...\n  // Issue compatibility warning. We already warned if the operator is\n  // \'operator<=>\' when parsing the \'<=>\' token.\n  if (DefKind.isComparison() && DefKind.asComparison() != DefaultedComparisonKind::ThreeWay) {\n    Diag(DefaultLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_defaulted_comparison : diag::ext_defaulted_comparison);"}},
[kc]={"clang/test/SemaCXX/cxx17-compat.cpp:93:56: warning: defaulted comparison operators are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx17-compat.cpp:94:56: warning: defaulted comparison operators are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx17-compat.cpp:108:55: warning: defaulted comparison operators are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx17-compat.cpp:109:56: warning: defaulted comparison operators are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx17-compat.cpp:110:55: warning: defaulted comparison operators are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx17-compat.cpp:111:56: warning: defaulted comparison operators are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
[l]={
[tc]={"clang/test/SemaCXX/cxx17-compat.cpp:93:56: warning: defaulted comparison operators are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx17-compat.cpp:94:56: warning: defaulted comparison operators are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx17-compat.cpp:108:55: warning: defaulted comparison operators are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx17-compat.cpp:109:56: warning: defaulted comparison operators are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx17-compat.cpp:110:55: warning: defaulted comparison operators are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx17-compat.cpp:111:56: warning: defaulted comparison operators are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
}
}
},
},
["warn_cxx17_compat_defaulted_method_type_mismatch"]={
["warn_cxx17_compat_defaulted_method_type_mismatch"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"explicitly defaulting this %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 with a type different from the implicit type is incompatible with C++ standards before C++20"},{I,ob,"explicitly defaulting this %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 with a type different from the implicit type is incompatible with C++ standards before C++2a"}},
[c]={{nil,B,"warn_cxx17_compat_defaulted_method_type_mismatch"}},
[d]=g,
[d]={{nil,q,"explicitly defaulting this %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 with a type different from the implicit type is incompatible with C++ standards before C++20"},{x,B,"explicitly defaulting this %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 with a type different from the implicit type is incompatible with C++ standards before C++2a"}},
[e]="explicitly defaulting this (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) with a type different from the implicit type is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="explicitly defaulting this (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) with a type different from the implicit type is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={"9b2c5e7c44fd",1538097403,"[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only","[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only\nrender the function deleted instead of rendering the program ill-formed.\n\nThis change also adds an enabled-by-default warning for the case where\nan explicitly-defaulted special member function of a non-template class\nis implicitly deleted by the type checking rules. (This fires either due\nto this language change or due to pre-C++20 reasons for the member being\nimplicitly deleted). I\'ve tested this on a large codebase and found only\nbugs (where the program means something that\'s clearly different from\nwhat the programmer intended), so this is enabled by default, but we\nshould revisit this if there are problems with this being enabled by\ndefault.\n\nllvm-svn: 343285"},
[b]={{nil,B,m}},
[h]={{C,7784,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n      // ...\n      if (ShouldDeleteForTypeMismatch && !HadError) {\n        Diag(MD->getLocation(), diag::warn_cxx17_compat_defaulted_method_type_mismatch) << CSM;"}},
[f]={"9b2c5e7c44fd",1538097403,"[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only","[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only\nrender the function deleted instead of rendering the program ill-formed.\n\nThis change also adds an enabled-by-default warning for the case where\nan explicitly-defaulted special member function of a non-template class\nis implicitly deleted by the type checking rules. (This fires either due\nto this language change or due to pre-C++20 reasons for the member being\nimplicitly deleted). I\'ve tested this on a large codebase and found only\nbugs (where the program means something that\'s clearly different from\nwhat the programmer intended), so this is enabled by default, but we\nshould revisit this if there are problems with this being enabled by\ndefault.\n\nllvm-svn: 343285"},
[k]={
[h]={{L,7784,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n      // ...\n      if (ShouldDeleteForTypeMismatch && !HadError) {\n        Diag(MD->getLocation(), diag::warn_cxx17_compat_defaulted_method_type_mismatch) << CSM;"}},
[kc]={"clang/test/SemaCXX/cxx17-compat.cpp:50:3: warning: explicitly defaulting this copy constructor with a type different from the implicit type is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
[l]={
[tc]={"clang/test/SemaCXX/cxx17-compat.cpp:50:3: warning: explicitly defaulting this copy constructor with a type different from the implicit type is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
}
}
},
},
["warn_cxx17_compat_designated_init"]={
["warn_cxx17_compat_designated_init"]={
[j]={o,q,t,Z,m,X},
[k]={p,s,v,ib,n,gb},
[i]=X,
[j]=gb,
[c]={{nil,z,"designated initializers are incompatible with C++ standards before C++20"}},
[c]={{nil,q,"warn_cxx17_compat_designated_init"}},
[d]=g,
[d]={{nil,q,"designated initializers are incompatible with C++ standards before C++20"}},
[e]="designated initializers are incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+20\\-compat\\-pedantic[^\\]]*\\]",
[g]="designated initializers are incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+20\\-compat\\-pedantic[^\\]]*\\]",
[a]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated","[c++20] Implement semantic restrictions for C++20 designated\ninitializers.\n\nThis has some interesting interactions with our existing extensions to\nsupport C99 designated initializers as an extension in C++. Those are\nresolved as follows:\n\n * We continue to permit the full breadth of C99 designated initializers\n  in C++, with the exception that we disallow a partial overwrite of an\n  initializer with a non-trivially-destructible type. (Full overwrite\n  is OK, because we won\'t run the first initializer at all.)\n\n * The C99 extensions are disallowed in SFINAE contexts and during\n  overload resolution, where they could change the meaning of valid\n  programs.\n\n * C++20 disallows reordering of initializers. We only check for that for\n  the simple cases that the C++20 rules permit (designators of the form\n  \'.field_name =\' and continue to allow reordering in other cases).\n  It would be nice to improve this behavior in future.\n\n * All C99 designated initializer extensions produce a warning by\n  default in C++20 mode. People are going to learn the C++ rules based\n  on what Clang diagnoses, so it\'s important we diagnose these properly\n  by default.\n\n * In C++ <= 17, we apply the C++20 rules rather than the C99 rules, and\n  so still diagnose C99 extensions as described above. We continue to\n  accept designated C++20-compatible initializers in C++ <= 17 silently\n  by default (but naturally still reject under -pedantic-errors).\n\nThis is not a complete implementation of P0329R4. In particular, that\npaper introduces new non-C99-compatible syntax { .field { init } }, and\nwe do not support that yet.\n\nThis is based on a previous patch by Don Hinton, though I\'ve made\nsubstantial changes when addressing the above interactions.\n\nDifferential Revision: https://reviews.llvm.org/D59754\n\nllvm-svn: 370544"},
[b]={{nil,q,m}},
[h]={{K,7831,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n  // ...\n  if (FirstDesignator.isValid()) {\n    // Only diagnose designated initiaization as a C++20 extension if we didn\'t\n    // already diagnose use of (non-C++20) C99 designator syntax.\n    if (getLangOpts().CPlusPlus && !DiagnosedArrayDesignator && !DiagnosedNestedDesignator && !DiagnosedMixedDesignator) {\n      Diag(FirstDesignator, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_designated_init : diag::ext_cxx_designated_init);"}}
[f]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated","[c++20] Implement semantic restrictions for C++20 designated\ninitializers.\n\nThis has some interesting interactions with our existing extensions to\nsupport C99 designated initializers as an extension in C++. Those are\nresolved as follows:\n\n * We continue to permit the full breadth of C99 designated initializers\n  in C++, with the exception that we disallow a partial overwrite of an\n  initializer with a non-trivially-destructible type. (Full overwrite\n  is OK, because we won\'t run the first initializer at all.)\n\n * The C99 extensions are disallowed in SFINAE contexts and during\n  overload resolution, where they could change the meaning of valid\n  programs.\n\n * C++20 disallows reordering of initializers. We only check for that for\n  the simple cases that the C++20 rules permit (designators of the form\n  \'.field_name =\' and continue to allow reordering in other cases).\n  It would be nice to improve this behavior in future.\n\n * All C99 designated initializer extensions produce a warning by\n  default in C++20 mode. People are going to learn the C++ rules based\n  on what Clang diagnoses, so it\'s important we diagnose these properly\n  by default.\n\n * In C++ <= 17, we apply the C++20 rules rather than the C99 rules, and\n  so still diagnose C99 extensions as described above. We continue to\n  accept designated C++20-compatible initializers in C++ <= 17 silently\n  by default (but naturally still reject under -pedantic-errors).\n\nThis is not a complete implementation of P0329R4. In particular, that\npaper introduces new non-C99-compatible syntax { .field { init } }, and\nwe do not support that yet.\n\nThis is based on a previous patch by Don Hinton, though I\'ve made\nsubstantial changes when addressing the above interactions.\n\nDifferential Revision: https://reviews.llvm.org/D59754\n\nllvm-svn: 370544"},
[h]={{S,7831,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n  // ...\n  if (FirstDesignator.isValid()) {\n    // Only diagnose designated initiaization as a C++20 extension if we didn\'t\n    // already diagnose use of (non-C++20) C99 designator syntax.\n    if (getLangOpts().CPlusPlus && !DiagnosedArrayDesignator && !DiagnosedNestedDesignator && !DiagnosedMixedDesignator) {\n      Diag(FirstDesignator, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_designated_init : diag::ext_cxx_designated_init);"}}
},
},
["warn_cxx17_compat_equals_this_lambda_capture"]={
["warn_cxx17_compat_equals_this_lambda_capture"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"explicit capture of \'this\' with a capture default of \'=\' is incompatible with C++ standards before C++20"},{I,lb,"explicit capture of \'this\' with a capture default of \'=\' is incompatible with C++ standards before C++2a"}},
[c]={{nil,F,"warn_cxx17_compat_equals_this_lambda_capture"}},
[d]=g,
[d]={{nil,q,"explicit capture of \'this\' with a capture default of \'=\' is incompatible with C++ standards before C++20"},{x,F,"explicit capture of \'this\' with a capture default of \'=\' is incompatible with C++ standards before C++2a"}},
[e]="explicit capture of \'this\' with a capture default of \'\\=\' is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="explicit capture of \'this\' with a capture default of \'\\=\' is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=Wc,
[a]=pb,
[a]={"8194a3e975e5",1503114187,"[c++2a] Implement P0409R2 - Allow lambda capture [=,this] (by hamzasood)","[c++2a] Implement P0409R2 - Allow lambda capture [=,this] (by hamzasood)\n\nThis patch, by hamzasood, implements P0409R2, and allows [=, this] pre-C++2a as an extension (with appropriate warnings) for consistency.\n\nhttps://reviews.llvm.org/D36572\n\nThanks Hamza!\n\nllvm-svn: 311224"},
[b]={{nil,F,gd}},
[f]={"8194a3e975e5",1503114187,"[c++2a] Implement P0409R2 - Allow lambda capture [=,this] (by hamzasood)","[c++2a] Implement P0409R2 - Allow lambda capture [=,this] (by hamzasood)\n\nThis patch, by hamzasood, implements P0409R2, and allows [=, this] pre-C++2a as an extension (with appropriate warnings) for consistency.\n\nhttps://reviews.llvm.org/D36572\n\nThanks Hamza!\n\nllvm-svn: 311224"},
[h]={{"clang/lib/Sema/SemaLambda.cpp",1044,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      // ...\n      // C++20 [expr.prim.lambda]p8:\n      //  If a lambda-capture includes a capture-default that is =,\n      //  each simple-capture of that lambda-capture shall be of the form\n      //  \"&identifier\", \"this\", or \"* this\". [ Note: The form [&,this] is\n      //  redundant but accepted for compatibility with ISO C++14. --end note ]\n      if (Intro.Default == LCD_ByCopy && C->Kind != LCK_StarThis)\n        Diag(C->Loc, !getLangOpts().CPlusPlus20 ? diag::ext_equals_this_lambda_capture_cxx20 : diag::warn_cxx17_compat_equals_this_lambda_capture);"}},
[h]={{"clang/lib/Sema/SemaLambda.cpp",1044,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      // ...\n      // C++20 [expr.prim.lambda]p8:\n      //  If a lambda-capture includes a capture-default that is =,\n      //  each simple-capture of that lambda-capture shall be of the form\n      //  \"&identifier\", \"this\", or \"* this\". [ Note: The form [&,this] is\n      //  redundant but accepted for compatibility with ISO C++14. --end note ]\n      if (Intro.Default == LCD_ByCopy && C->Kind != LCK_StarThis)\n        Diag(C->Loc, !getLangOpts().CPlusPlus20 ? diag::ext_equals_this_lambda_capture_cxx20 : diag::warn_cxx17_compat_equals_this_lambda_capture);"}},
[k]={
[l]={
[kc]={"clang/test/SemaCXX/cxx17-compat.cpp:15:16: warning: explicit capture of \'this\' with a capture default of \'=\' is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
[tc]={"clang/test/SemaCXX/cxx17-compat.cpp:15:16: warning: explicit capture of \'this\' with a capture default of \'=\' is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
}
}
},
},
["warn_cxx17_compat_exception_spec_in_signature"]={
["warn_cxx17_compat_exception_spec_in_signature"]={
[j]={G,"c++17-compat-mangling",t,F,"c++1z-compat-mangling","noexcept-type"},
[k]={Q,"c++17-compat-mangling",v,P,"c++1z-compat-mangling","noexcept-type"},
[i]="c++17-compat-mangling",
[j]="c++17-compat-mangling",
[c]={{nil,lb,"mangled name of %0 will change in C++17 due to non-throwing exception specification in function signature"}},
[c]={{nil,F,"warn_cxx17_compat_exception_spec_in_signature"}},
[d]=g,
[d]={{nil,F,"mangled name of %0 will change in C++17 due to non-throwing exception specification in function signature"}},
[e]="mangled name of (.*?) will change in C\\+\\+17 due to non\\-throwing exception specification in function signature",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+17\\-compat\\-mangling[^\\]]*\\]",
[g]="mangled name of (.*?) will change in C\\+\\+17 due to non\\-throwing exception specification in function signature",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+17\\-compat\\-mangling[^\\]]*\\]",
[a]={"fda59e585121",1477443954,"Implement name mangling proposal for exception specifications from cxx-abi-dev 2016-10-11.","Implement name mangling proposal for exception specifications from cxx-abi-dev 2016-10-11.\n\nThis has the following ABI impact:\n\n 1) Functions whose parameter or return types are non-throwing function pointer\n    types have different manglings in c++1z mode from prior modes. This is\n    necessary because c++1z permits overloading on the noexceptness of function\n    pointer parameter types. A warning is issued for cases that will change\n    manglings in c++1z mode.\n\n 2) Functions whose parameter or return types contain instantiation-dependent\n    exception specifications change manglings in all modes. This is necessary\n    to support overloading on / SFINAE in these exception specifications, which\n    a careful reading of the standard indicates has essentially always been\n    permitted.\n\nNote that, in order to be affected by these changes, the code in question must\nspecify an exception specification on a function pointer/reference type that is\nwritten syntactically within the declaration of another function. Such\ndeclarations are very rare, and I have so far been unable to find any code\nthat would be affected by this. (Note that such things will probably become\nmore common in C++17, since it\'s a lot easier to get a noexcept function type\nas a function parameter / return type there.)\n\nThis change does not affect the set of symbols produced by a build of clang,\nlibc++, or libc++abi.\n\nllvm-svn: 285150"},
[b]={{nil,F,m}},
[h]={{D,12057,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // C++1z [dcl.fct]p6:\n    //  [...] whether the function has a non-throwing exception-specification\n    //  [is] part of the function type\n    //\n    // This results in an ABI break between C++14 and C++17 for functions whose\n    // declared type includes an exception-specification in a parameter or\n    // return type. (Exception specifications on the function itself are OK in\n    // most cases, and exception specifications are not permitted in most other\n    // contexts where they could make it into a mangling.)\n    if (!getLangOpts().CPlusPlus17 && !NewFD->getPrimaryTemplate()) {\n      // ...\n      if (AnyNoexcept)\n        Diag(NewFD->getLocation(), diag::warn_cxx17_compat_exception_spec_in_signature) << NewFD;"}},
[f]={"fda59e585121",1477443954,"Implement name mangling proposal for exception specifications from cxx-abi-dev 2016-10-11.","Implement name mangling proposal for exception specifications from cxx-abi-dev 2016-10-11.\n\nThis has the following ABI impact:\n\n 1) Functions whose parameter or return types are non-throwing function pointer\n    types have different manglings in c++1z mode from prior modes. This is\n    necessary because c++1z permits overloading on the noexceptness of function\n    pointer parameter types. A warning is issued for cases that will change\n    manglings in c++1z mode.\n\n 2) Functions whose parameter or return types contain instantiation-dependent\n    exception specifications change manglings in all modes. This is necessary\n    to support overloading on / SFINAE in these exception specifications, which\n    a careful reading of the standard indicates has essentially always been\n    permitted.\n\nNote that, in order to be affected by these changes, the code in question must\nspecify an exception specification on a function pointer/reference type that is\nwritten syntactically within the declaration of another function. Such\ndeclarations are very rare, and I have so far been unable to find any code\nthat would be affected by this. (Note that such things will probably become\nmore common in C++17, since it\'s a lot easier to get a noexcept function type\nas a function parameter / return type there.)\n\nThis change does not affect the set of symbols produced by a build of clang,\nlibc++, or libc++abi.\n\nllvm-svn: 285150"},
[k]={
[h]={{M,12057,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // C++1z [dcl.fct]p6:\n    //  [...] whether the function has a non-throwing exception-specification\n    //  [is] part of the function type\n    //\n    // This results in an ABI break between C++14 and C++17 for functions whose\n    // declared type includes an exception-specification in a parameter or\n    // return type. (Exception specifications on the function itself are OK in\n    // most cases, and exception specifications are not permitted in most other\n    // contexts where they could make it into a mangling.)\n    if (!getLangOpts().CPlusPlus17 && !NewFD->getPrimaryTemplate()) {\n      // ...\n      if (AnyNoexcept)\n        Diag(NewFD->getLocation(), diag::warn_cxx17_compat_exception_spec_in_signature) << NewFD;"}},
[l]={
["clang/test/CodeGenCXX/mangle-exception-spec.cpp"]={"clang/test/CodeGenCXX/mangle-exception-spec.cpp:8:6: warning: mangled name of \'b\' will change in C++17 due to non-throwing exception specification in function signature [-Wc++17-compat-mangling]","clang/test/CodeGenCXX/mangle-exception-spec.cpp:11:6: warning: mangled name of \'c\' will change in C++17 due to non-throwing exception specification in function signature [-Wc++17-compat-mangling]","clang/test/CodeGenCXX/mangle-exception-spec.cpp:16:6: warning: mangled name of \'e\' will change in C++17 due to non-throwing exception specification in function signature [-Wc++17-compat-mangling]"}
["clang/test/CodeGenCXX/mangle-exception-spec.cpp"]={"clang/test/CodeGenCXX/mangle-exception-spec.cpp:8:6: warning: mangled name of \'b\' will change in C++17 due to non-throwing exception specification in function signature [-Wc++17-compat-mangling]","clang/test/CodeGenCXX/mangle-exception-spec.cpp:11:6: warning: mangled name of \'c\' will change in C++17 due to non-throwing exception specification in function signature [-Wc++17-compat-mangling]","clang/test/CodeGenCXX/mangle-exception-spec.cpp:16:6: warning: mangled name of \'e\' will change in C++17 due to non-throwing exception specification in function signature [-Wc++17-compat-mangling]"}
}
}
},
},
["warn_cxx17_compat_explicit_bool"]={
["warn_cxx17_compat_explicit_bool"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"explicit(bool) is incompatible with C++ standards before C++20"}},
[c]={{nil,q,"warn_cxx17_compat_explicit_bool"}},
[d]=g,
[d]={{nil,q,"explicit(bool) is incompatible with C++ standards before C++20"}},
[e]="explicit\\(bool\\) is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="explicit\\(bool\\) is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=v,
[a]=pb,
[a]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit\n\nSee\nhttps://docs.google.com/document/d/1xMkTZMKx9llnMPgso0jrx3ankI4cv60xeZ0y4ksf4wc/preview\nfor background discussion.\n\nThis adds a warning, flags and pragmas to limit the number of\npre-processor tokens either at a certain point in a translation unit, or\noverall.\n\nThe idea is that this would allow projects to limit the size of certain\nwidely included headers, or for translation units overall, as a way to\ninsert backstops for header bloat and prevent compile-time regressions.\n\nDifferential revision: https://reviews.llvm.org/D72703"},
[b]={{nil,q,A}},
[h]={{Tb,4047,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  while (true) {\n    // ...\n    case tok::kw_explicit: {\n      // ...\n      if (Tok.is(tok::l_paren)) {\n        if (getLangOpts().CPlusPlus20 || isExplicitBool() == TPResult::True) {\n          Diag(Tok.getLocation(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_explicit_bool : diag::ext_explicit_bool);"}},
[f]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit\n\nSee\nhttps://docs.google.com/document/d/1xMkTZMKx9llnMPgso0jrx3ankI4cv60xeZ0y4ksf4wc/preview\nfor background discussion.\n\nThis adds a warning, flags and pragmas to limit the number of\npre-processor tokens either at a certain point in a translation unit, or\noverall.\n\nThe idea is that this would allow projects to limit the size of certain\nwidely included headers, or for translation units overall, as a way to\ninsert backstops for header bloat and prevent compile-time regressions.\n\nDifferential revision: https://reviews.llvm.org/D72703"},
[k]={
[h]={{Wb,4047,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  while (true) {\n    // ...\n    case tok::kw_explicit: {\n      // ...\n      if (Tok.is(tok::l_paren)) {\n        if (getLangOpts().CPlusPlus20 || isExplicitBool() == TPResult::True) {\n          Diag(Tok.getLocation(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_explicit_bool : diag::ext_explicit_bool);"}},
[l]={
["clang/test/Parser/explicit-bool.cpp"]={"clang/test/Parser/explicit-bool.cpp:12:22: warning: explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/Parser/explicit-bool.cpp:22:22: warning: explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/Parser/explicit-bool.cpp:27:12: warning: explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/Parser/explicit-bool.cpp:32:12: warning: explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/Parser/explicit-bool.cpp:47:12: warning: explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/Parser/explicit-bool.cpp:52:12: warning: explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/Parser/explicit-bool.cpp:56:12: warning: explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
["clang/test/Parser/explicit-bool.cpp"]={"clang/test/Parser/explicit-bool.cpp:12:22: warning: explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/Parser/explicit-bool.cpp:22:22: warning: explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/Parser/explicit-bool.cpp:27:12: warning: explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/Parser/explicit-bool.cpp:32:12: warning: explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/Parser/explicit-bool.cpp:47:12: warning: explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/Parser/explicit-bool.cpp:52:12: warning: explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/Parser/explicit-bool.cpp:56:12: warning: explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
}
}
},
},
["warn_cxx17_compat_for_range_init_stmt"]={
["warn_cxx17_compat_for_range_init_stmt"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"range-based for loop initialization statements are incompatible with C++ standards before C++20"},{I,ob,"range-based for loop initialization statements are incompatible with C++ standards before C++2a"}},
[c]={{nil,B,"warn_cxx17_compat_for_range_init_stmt"}},
[d]=g,
[d]={{nil,q,"range-based for loop initialization statements are incompatible with C++ standards before C++20"},{x,B,"range-based for loop initialization statements are incompatible with C++ standards before C++2a"}},
[e]="range\\-based for loop initialization statements are incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="range\\-based for loop initialization statements are incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=v,
[a]=pb,
[a]={"8baa50013c86",1538160249,"[cxx2a] P0614R1: Support init-statements in range-based for loops.","[cxx2a] P0614R1: Support init-statements in range-based for loops.\n\nWe don\'t yet support this for the case where a range-based for loop is\nimplicitly rewritten to an ObjC for..in statement.\n\nllvm-svn: 343350"},
[b]={{nil,B,A}},
[f]={"8baa50013c86",1538160249,"[cxx2a] P0614R1: Support init-statements in range-based for loops.","[cxx2a] P0614R1: Support init-statements in range-based for loops.\n\nWe don\'t yet support this for the case where a range-based for loop is\nimplicitly rewritten to an ObjC for..in statement.\n\nllvm-svn: 343350"},
[h]={{nc,2171,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  // Parse the second part of the for specifier.\n  if (!ForEach && !ForRangeInfo.ParsedForRangeDecl() && !SecondPart.isInvalid()) {\n    // Parse the second part of the for specifier.\n    if (Tok.is(tok::semi)) { // for (...;;\n    // ...\n    } else if (Tok.is(tok::r_paren)) {\n    // ...\n    } else {\n      if (getLangOpts().CPlusPlus) {\n        // ...\n        if (ForRangeInfo.ParsedForRangeDecl()) {\n          Diag(FirstPart.get() ? FirstPart.get()->getBeginLoc() : ForRangeInfo.ColonLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_for_range_init_stmt : diag::ext_for_range_init_stmt) << (FirstPart.get() ? FirstPart.get()->getSourceRange() : SourceRange());"}},
[h]={{nc,2171,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  // Parse the second part of the for specifier.\n  if (!ForEach && !ForRangeInfo.ParsedForRangeDecl() && !SecondPart.isInvalid()) {\n    // Parse the second part of the for specifier.\n    if (Tok.is(tok::semi)) { // for (...;;\n    // ...\n    } else if (Tok.is(tok::r_paren)) {\n    // ...\n    } else {\n      if (getLangOpts().CPlusPlus) {\n        // ...\n        if (ForRangeInfo.ParsedForRangeDecl()) {\n          Diag(FirstPart.get() ? FirstPart.get()->getBeginLoc() : ForRangeInfo.ColonLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_for_range_init_stmt : diag::ext_for_range_init_stmt) << (FirstPart.get() ? FirstPart.get()->getSourceRange() : SourceRange());"}},
[k]={
[l]={
[kc]={"clang/test/SemaCXX/cxx17-compat.cpp:59:8: warning: range-based for loop initialization statements are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
[tc]={"clang/test/SemaCXX/cxx17-compat.cpp:59:8: warning: range-based for loop initialization statements are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
}
}
},
},
["warn_cxx17_compat_implicit_typename"]={
["warn_cxx17_compat_implicit_typename"]={
[j]={U,P,rb,O},
[k]={cb,X,ub,W},
[i]=U,
[j]=cb,
[c]={{nil,yc,"use of implicit \'typename\' is incompatible with C++ standards before C++20"}},
[c]={{nil,bb,"warn_cxx17_compat_implicit_typename"}},
[d]=g,
[d]={{nil,bb,"use of implicit \'typename\' is incompatible with C++ standards before C++20"}},
[e]="use of implicit \'typename\' is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=Hc,
[g]="use of implicit \'typename\' is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=Lc,
[a]={Eb,1625925174,Fb,Hb},
[b]={{nil,bb,m}},
[h]={{D,372,"/// If the identifier refers to a type name within this scope,\n/// return the declaration of that type.\n///\n/// This routine performs ordinary name lookup of the identifier II\n/// within the given scope, with optional C++ scope specifier SS, to\n/// determine whether the name refers to a type. If so, returns an\n/// opaque pointer (actually a QualType) corresponding to that\n/// type. Otherwise, returns NULL.\nParsedType Sema::getTypeName(const IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec *SS, bool isClassName, bool HasTrailingDot, ParsedType ObjectTypePtr, bool IsCtorOrDtorName, bool WantNontrivialTypeSourceInfo, bool IsClassTemplateDeductionContext, ImplicitTypenameContext AllowImplicitTypename, IdentifierInfo **CorrectedII) {\n  // ...\n  if (ObjectTypePtr) {\n  // ...\n  } else if (SS && SS->isNotEmpty()) {\n    // ...\n    if (!LookupCtx) {\n      if (isDependentScopeSpecifier(*SS)) {\n        // ...\n        if (IsImplicitTypename) {\n          // ...\n          if (getLangOpts().CPlusPlus20)\n            Diag(QualifiedLoc, diag::warn_cxx17_compat_implicit_typename);"},{Db,4147,"TypeResult Sema::ActOnTemplateIdType(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, IdentifierInfo *TemplateII, SourceLocation TemplateIILoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, bool IsCtorOrDtorName, bool IsClassName, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  if (!IsCtorOrDtorName && !IsClassName && SS.isSet()) {\n    // ...\n    // C++ [temp.res]p3:\n    //  A qualified-id that refers to a type and in which the\n    //  nested-name-specifier depends on a template-parameter (14.6.2)\n    //  shall be prefixed by the keyword typename to indicate that the\n    //  qualified-id denotes a type, forming an\n    //  elaborated-type-specifier (7.1.5.3).\n    if (!LookupCtx && isDependentScopeSpecifier(SS)) {\n      // C++2a relaxes some of those restrictions in [temp.res]p5.\n      if (AllowImplicitTypename == ImplicitTypenameContext::Yes) {\n        if (getLangOpts().CPlusPlus20)\n          Diag(SS.getBeginLoc(), diag::warn_cxx17_compat_implicit_typename);"}}
[f]={Lb,1625925174,Kb,Jb},
[h]={{M,372,"/// If the identifier refers to a type name within this scope,\n/// return the declaration of that type.\n///\n/// This routine performs ordinary name lookup of the identifier II\n/// within the given scope, with optional C++ scope specifier SS, to\n/// determine whether the name refers to a type. If so, returns an\n/// opaque pointer (actually a QualType) corresponding to that\n/// type. Otherwise, returns NULL.\nParsedType Sema::getTypeName(const IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec *SS, bool isClassName, bool HasTrailingDot, ParsedType ObjectTypePtr, bool IsCtorOrDtorName, bool WantNontrivialTypeSourceInfo, bool IsClassTemplateDeductionContext, ImplicitTypenameContext AllowImplicitTypename, IdentifierInfo **CorrectedII) {\n  // ...\n  if (ObjectTypePtr) {\n  // ...\n  } else if (SS && SS->isNotEmpty()) {\n    // ...\n    if (!LookupCtx) {\n      if (isDependentScopeSpecifier(*SS)) {\n        // ...\n        if (IsImplicitTypename) {\n          // ...\n          if (getLangOpts().CPlusPlus20)\n            Diag(QualifiedLoc, diag::warn_cxx17_compat_implicit_typename);"},{Eb,4147,"TypeResult Sema::ActOnTemplateIdType(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, IdentifierInfo *TemplateII, SourceLocation TemplateIILoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, bool IsCtorOrDtorName, bool IsClassName, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  if (!IsCtorOrDtorName && !IsClassName && SS.isSet()) {\n    // ...\n    // C++ [temp.res]p3:\n    //  A qualified-id that refers to a type and in which the\n    //  nested-name-specifier depends on a template-parameter (14.6.2)\n    //  shall be prefixed by the keyword typename to indicate that the\n    //  qualified-id denotes a type, forming an\n    //  elaborated-type-specifier (7.1.5.3).\n    if (!LookupCtx && isDependentScopeSpecifier(SS)) {\n      // C++2a relaxes some of those restrictions in [temp.res]p5.\n      if (AllowImplicitTypename == ImplicitTypenameContext::Yes) {\n        if (getLangOpts().CPlusPlus20)\n          Diag(SS.getBeginLoc(), diag::warn_cxx17_compat_implicit_typename);"}}
},
},
["warn_cxx17_compat_init_capture_pack"]={
["warn_cxx17_compat_init_capture_pack"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"initialized lambda capture packs are incompatible with C++ standards before C++20"},{I,I,"initialized lambda capture packs are incompatible with C++ standards before C++2a"}},
[c]={{nil,x,"warn_cxx17_compat_init_capture_pack"}},
[d]=g,
[d]={{nil,q,"initialized lambda capture packs are incompatible with C++ standards before C++20"},{x,x,"initialized lambda capture packs are incompatible with C++ standards before C++2a"}},
[e]="initialized lambda capture packs are incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="initialized lambda capture packs are incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=Wc,
[a]=pb,
[a]={"b2997f579a8b",1558469450,"[c++20] P0780R2: Support pack-expansion of init-captures.","[c++20] P0780R2: Support pack-expansion of init-captures.\n\nThis permits an init-capture to introduce a new pack:\n\n  template<typename ...T> auto x = [...a = T()] { /* a is a pack */ };\n\nTo support this, the mechanism for allowing ParmVarDecls to be packs has\nbeen extended to support arbitrary local VarDecls.\n\nllvm-svn: 361300"},
[b]={{nil,x,gd}},
[f]={"b2997f579a8b",1558469450,"[c++20] P0780R2: Support pack-expansion of init-captures.","[c++20] P0780R2: Support pack-expansion of init-captures.\n\nThis permits an init-capture to introduce a new pack:\n\n  template<typename ...T> auto x = [...a = T()] { /* a is a pack */ };\n\nTo support this, the mechanism for allowing ParmVarDecls to be packs has\nbeen extended to support arbitrary local VarDecls.\n\nllvm-svn: 361300"},
[h]={{"clang/lib/Sema/SemaLambda.cpp",728,"QualType Sema::buildLambdaInitCaptureInitialization(SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc, std::optional<unsigned> NumExpansions, IdentifierInfo *Id, bool IsDirectInit, Expr *&Init) {\n  // ...\n  if (EllipsisLoc.isValid()) {\n    if (Init->containsUnexpandedParameterPack()) {\n      Diag(EllipsisLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_init_capture_pack : diag::ext_init_capture_pack);"}}
[h]={{"clang/lib/Sema/SemaLambda.cpp",728,"QualType Sema::buildLambdaInitCaptureInitialization(SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc, std::optional<unsigned> NumExpansions, IdentifierInfo *Id, bool IsDirectInit, Expr *&Init) {\n  // ...\n  if (EllipsisLoc.isValid()) {\n    if (Init->containsUnexpandedParameterPack()) {\n      Diag(EllipsisLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_init_capture_pack : diag::ext_init_capture_pack);"}}
},
},
["warn_cxx17_compat_inline_nested_namespace_definition"]={
["warn_cxx17_compat_inline_nested_namespace_definition"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"inline nested namespace definition is incompatible with C++ standards before C++20"},{I,ob,"inline nested namespace definition is incompatible with C++ standards before C++2a"}},
[c]={{nil,B,"warn_cxx17_compat_inline_nested_namespace_definition"}},
[d]=g,
[d]={{nil,q,"inline nested namespace definition is incompatible with C++ standards before C++20"},{x,B,"inline nested namespace definition is incompatible with C++ standards before C++2a"}},
[e]="inline nested namespace definition is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="inline nested namespace definition is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=v,
[a]=pb,
[a]={"53f391dcb323",1542043188,"Implement P1094R2 (nested inline namespaces)","Implement P1094R2 (nested inline namespaces)\n\nAs approved for the Working Paper in San Diego, support annotating\ninline namespaces with \'inline\'.\n\nChange-Id: I51a654e11ffb475bf27cccb2458768151619e384\nllvm-svn: 346677"},
[b]={{nil,B,A}},
[h]={{bb,178,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  if (ExtraNSs.empty()) {\n  // ...\n  } else if (InlineLoc.isValid()) {\n  // ...\n  } else if (getLangOpts().CPlusPlus20) {\n    // ...\n    if (FirstNestedInlineLoc.isValid())\n      Diag(FirstNestedInlineLoc, diag::warn_cxx17_compat_inline_nested_namespace_definition);"}},
[f]={"53f391dcb323",1542043188,"Implement P1094R2 (nested inline namespaces)","Implement P1094R2 (nested inline namespaces)\n\nAs approved for the Working Paper in San Diego, support annotating\ninline namespaces with \'inline\'.\n\nChange-Id: I51a654e11ffb475bf27cccb2458768151619e384\nllvm-svn: 346677"},
[k]={
[h]={{kb,178,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  if (ExtraNSs.empty()) {\n  // ...\n  } else if (InlineLoc.isValid()) {\n  // ...\n  } else if (getLangOpts().CPlusPlus20) {\n    // ...\n    if (FirstNestedInlineLoc.isValid())\n      Diag(FirstNestedInlineLoc, diag::warn_cxx17_compat_inline_nested_namespace_definition);"}},
[l]={
["clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp"]={"clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp:19:27: warning: inline nested namespace definition is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp:36:27: warning: inline nested namespace definition is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
["clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp"]={"clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp:19:27: warning: inline nested namespace definition is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp:36:27: warning: inline nested namespace definition is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
}
}
},
},
["warn_cxx17_compat_lambda_def_ctor_assign"]={
["warn_cxx17_compat_lambda_def_ctor_assign"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"%select{default construction|assignment}0 of lambda is incompatible with C++ standards before C++20"},{I,ob,"%select{default construction|assignment}0 of lambda is incompatible with C++ standards before C++2a"}},
[c]={{nil,B,"warn_cxx17_compat_lambda_def_ctor_assign"}},
[d]=g,
[d]={{nil,q,"%select{default construction|assignment}0 of lambda is incompatible with C++ standards before C++20"},{x,B,"%select{default construction|assignment}0 of lambda is incompatible with C++ standards before C++2a"}},
[e]="(?:default construction|assignment) of lambda is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="(?:default construction|assignment) of lambda is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=Wc,
[a]=pb,
[a]={"864949bda1db",1538088424,"[cxx2a] P0624R2: Lambdas with no capture-default are","[cxx2a] P0624R2: Lambdas with no capture-default are\ndefault-constructible and assignable.\n\nllvm-svn: 343279"},
[b]={{nil,B,gd}},
[h]={{K,321,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // ...\n  if (auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    // Lambdas are only default-constructible or assignable in C++2a onwards.\n    if (MD->getParent()->isLambda() && ((isa<CXXConstructorDecl>(MD) && cast<CXXConstructorDecl>(MD)->isDefaultConstructor()) || MD->isCopyAssignmentOperator() || MD->isMoveAssignmentOperator())) {\n      Diag(Loc, diag::warn_cxx17_compat_lambda_def_ctor_assign) << !isa<CXXConstructorDecl>(MD);"}},
[f]={"864949bda1db",1538088424,"[cxx2a] P0624R2: Lambdas with no capture-default are","[cxx2a] P0624R2: Lambdas with no capture-default are\ndefault-constructible and assignable.\n\nllvm-svn: 343279"},
[k]={
[h]={{S,321,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // ...\n  if (auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    // Lambdas are only default-constructible or assignable in C++2a onwards.\n    if (MD->getParent()->isLambda() && ((isa<CXXConstructorDecl>(MD) && cast<CXXConstructorDecl>(MD)->isDefaultConstructor()) || MD->isCopyAssignmentOperator() || MD->isMoveAssignmentOperator())) {\n      Diag(Loc, diag::warn_cxx17_compat_lambda_def_ctor_assign) << !isa<CXXConstructorDecl>(MD);"}},
[kc]={"clang/test/SemaCXX/cxx17-compat.cpp:32:18: warning: default construction of lambda is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx17-compat.cpp:39:29: warning: assignment of lambda is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
[l]={
[tc]={"clang/test/SemaCXX/cxx17-compat.cpp:32:18: warning: default construction of lambda is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]","clang/test/SemaCXX/cxx17-compat.cpp:39:29: warning: assignment of lambda is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
}
}
},
},
["warn_cxx17_compat_lambda_template_parameter_list"]={
["warn_cxx17_compat_lambda_template_parameter_list"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"explicit template parameter list for lambdas is incompatible with C++ standards before C++20"},{I,I,"explicit template parameter list for lambdas is incompatible with C++ standards before C++2a"}},
[c]={{nil,x,"warn_cxx17_compat_lambda_template_parameter_list"}},
[d]=g,
[d]={{nil,q,"explicit template parameter list for lambdas is incompatible with C++ standards before C++20"},{x,x,"explicit template parameter list for lambdas is incompatible with C++ standards before C++2a"}},
[e]="explicit template parameter list for lambdas is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="explicit template parameter list for lambdas is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=v,
[a]=pb,
[a]={"8205a814a691",1556966986,"[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas","[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas\n\nDifferential Revision: https://reviews.llvm.org/D36527\n\nllvm-svn: 359967"},
[b]={{nil,x,A}},
[h]={{cc,1330,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  // ...\n  if (Tok.is(tok::less)) {\n    Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_lambda_template_parameter_list : diag::ext_lambda_template_parameter_list);"}}
[f]={"8205a814a691",1556966986,"[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas","[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas\n\nDifferential Revision: https://reviews.llvm.org/D36527\n\nllvm-svn: 359967"},
[h]={{fc,1330,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  // ...\n  if (Tok.is(tok::less)) {\n    Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_lambda_template_parameter_list : diag::ext_lambda_template_parameter_list);"}}
},
},
["warn_cxx17_compat_missing_varargs_arg"]={
["warn_cxx17_compat_missing_varargs_arg"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,Q,"passing no argument for the \'...\' parameter of a variadic macro is incompatible with C++ standards before C++20"}},
[c]={{nil,w,"warn_cxx17_compat_missing_varargs_arg"}},
[d]=g,
[d]={{nil,w,"passing no argument for the \'...\' parameter of a variadic macro is incompatible with C++ standards before C++20"}},
[e]="passing no argument for the \'\\.\\.\\.\' parameter of a variadic macro is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="passing no argument for the \'\\.\\.\\.\' parameter of a variadic macro is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=L,
[a]=pb,
[a]={Eb,1625925174,Fb,Hb},
[b]={{nil,w,T}},
[f]={Lb,1625925174,Kb,Jb},
[h]={{"clang/lib/Lex/PPMacroExpansion.cpp",1000,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // ...\n  if (NumActuals < MinArgsExpected) {\n    // There are several cases where too few arguments is ok, handle them now.\n    if (NumActuals == 0 && MinArgsExpected == 1) {\n    // ...\n    } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected ||          // A(x, ...) -> A(X)\n      // ...\n      // Varargs where the named vararg parameter is missing: OK as extension.\n      //  #define A(x, ...)\n      //  A(\"blah\")\n      //\n      // If the macro contains the comma pasting extension, the diagnostic\n      // is suppressed; we know we\'ll get another diagnostic later.\n      if (!MI->hasCommaPasting()) {\n        // ...\n        Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_missing_varargs_arg : diag::ext_missing_varargs_arg);"}},
[h]={{"clang/lib/Lex/PPMacroExpansion.cpp",1000,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // ...\n  if (NumActuals < MinArgsExpected) {\n    // There are several cases where too few arguments is ok, handle them now.\n    if (NumActuals == 0 && MinArgsExpected == 1) {\n    // ...\n    } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected ||          // A(x, ...) -> A(X)\n      // ...\n      // Varargs where the named vararg parameter is missing: OK as extension.\n      //  #define A(x, ...)\n      //  A(\"blah\")\n      //\n      // If the macro contains the comma pasting extension, the diagnostic\n      // is suppressed; we know we\'ll get another diagnostic later.\n      if (!MI->hasCommaPasting()) {\n        // ...\n        Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_missing_varargs_arg : diag::ext_missing_varargs_arg);"}},
[k]={
[l]={
["clang/test/Preprocessor/empty_va_arg.cpp"]={"clang/test/Preprocessor/empty_va_arg.cpp:9:9: warning: passing no argument for the \'...\' parameter of a variadic macro is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
["clang/test/Preprocessor/empty_va_arg.cpp"]={"clang/test/Preprocessor/empty_va_arg.cpp:9:9: warning: passing no argument for the \'...\' parameter of a variadic macro is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
}
}
},
},
["warn_cxx17_compat_multi_using_declaration"]={
["warn_cxx17_compat_multi_using_declaration"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]={{nil,lb,"use of multiple declarators in a single using declaration is incompatible with C++ standards before C++17"}},
[c]={{nil,F,"warn_cxx17_compat_multi_using_declaration"}},
[d]=g,
[d]={{nil,F,"use of multiple declarators in a single using declaration is incompatible with C++ standards before C++17"}},
[e]="use of multiple declarators in a single using declaration is incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="use of multiple declarators in a single using declaration is incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=v,
[a]=Pb,
[a]={"6f1daa4660ed",1481849928,"[c++1z] P0195R2: Allow multiple using-declarators in a single using-declaration.","[c++1z] P0195R2: Allow multiple using-declarators in a single using-declaration.\n\nllvm-svn: 289905"},
[b]={{nil,F,A}},
[h]={{bb,854,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  // ...\n  if (DeclsInGroup.size() > 1)\n    Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx17_compat_multi_using_declaration : diag::ext_multi_using_declaration);"}}
[f]={"6f1daa4660ed",1481849928,"[c++1z] P0195R2: Allow multiple using-declarators in a single using-declaration.","[c++1z] P0195R2: Allow multiple using-declarators in a single using-declaration.\n\nllvm-svn: 289905"},
[h]={{kb,854,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  // ...\n  if (DeclsInGroup.size() > 1)\n    Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx17_compat_multi_using_declaration : diag::ext_multi_using_declaration);"}}
},
},
["warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue"]={
["warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue"]={
[j]={o,q,t,Z,m,X},
[k]={p,s,v,ib,n,gb},
[i]=X,
[j]=gb,
[c]={{nil,z,"invoking a pointer to a \'const &\' member function on an rvalue is incompatible with C++ standards before C++20"},{I,lb,"invoking a pointer to a \'const &\' member function on an rvalue is incompatible with C++ standards before C++2a"}},
[c]={{nil,F,"warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue"}},
[d]=g,
[d]={{nil,q,"invoking a pointer to a \'const &\' member function on an rvalue is incompatible with C++ standards before C++20"},{x,F,"invoking a pointer to a \'const &\' member function on an rvalue is incompatible with C++ standards before C++2a"}},
[e]="invoking a pointer to a \'const &\' member function on an rvalue is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+20\\-compat\\-pedantic[^\\]]*\\]",
[g]="invoking a pointer to a \'const &\' member function on an rvalue is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+20\\-compat\\-pedantic[^\\]]*\\]",
[a]={"2592327dae05",1503625675,"[c++2a] P0704R1: Allow pointers to const& member functions to be called on rvalues.","[c++2a] P0704R1: Allow pointers to const& member functions to be called on rvalues.\n\nPatch by Blitz Rakete!\n\nllvm-svn: 311744"},
[b]={{nil,F,m}},
[f]={"2592327dae05",1503625675,"[c++2a] P0704R1: Allow pointers to const& member functions to be called on rvalues.","[c++2a] P0704R1: Allow pointers to const& member functions to be called on rvalues.\n\nPatch by Blitz Rakete!\n\nllvm-svn: 311744"},
[h]={{bc,6091,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  // C++0x [expr.mptr.oper]p6:\n  //  In a .* expression whose object expression is an rvalue, the program is\n  //  ill-formed if the second operand is a pointer to member function with\n  //  ref-qualifier &. In a ->* expression or in a .* expression whose object\n  //  expression is an lvalue, the program is ill-formed if the second operand\n  //  is a pointer to member function with ref-qualifier &&.\n  if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) {\n    // ...\n    case RQ_LValue:\n      if (!isIndirect && !LHS.get()->Classify(Context).isLValue()) {\n        // C++2a allows functions with ref-qualifier & if their cv-qualifier-seq\n        // is (exactly) \'const\'.\n        if (Proto->isConst() && !Proto->isVolatile())\n          Diag(Loc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue : diag::ext_pointer_to_const_ref_member_on_rvalue);"}},
[h]={{bc,6091,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  // C++0x [expr.mptr.oper]p6:\n  //  In a .* expression whose object expression is an rvalue, the program is\n  //  ill-formed if the second operand is a pointer to member function with\n  //  ref-qualifier &. In a ->* expression or in a .* expression whose object\n  //  expression is an lvalue, the program is ill-formed if the second operand\n  //  is a pointer to member function with ref-qualifier &&.\n  if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) {\n    // ...\n    case RQ_LValue:\n      if (!isIndirect && !LHS.get()->Classify(Context).isLValue()) {\n        // C++2a allows functions with ref-qualifier & if their cv-qualifier-seq\n        // is (exactly) \'const\'.\n        if (Proto->isConst() && !Proto->isVolatile())\n          Diag(Loc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue : diag::ext_pointer_to_const_ref_member_on_rvalue);"}},
[k]={
[l]={
[kc]={"clang/test/SemaCXX/cxx17-compat.cpp:6:18: warning: invoking a pointer to a \'const &\' member function on an rvalue is incompatible with C++ standards before C++20 [-Wpre-c++20-compat-pedantic]"}
[tc]={"clang/test/SemaCXX/cxx17-compat.cpp:6:18: warning: invoking a pointer to a \'const &\' member function on an rvalue is incompatible with C++ standards before C++20 [-Wpre-c++20-compat-pedantic]"}
}
}
},
},
["warn_cxx17_compat_spaceship"]={
["warn_cxx17_compat_spaceship"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,z,"\'<=>\' operator is incompatible with C++ standards before C++20"},{I,lb,"\'<=>\' operator is incompatible with C++ standards before C++2a"}},
[c]={{nil,F,"warn_cxx17_compat_spaceship"}},
[d]=g,
[d]={{nil,q,"\'<=>\' operator is incompatible with C++ standards before C++20"},{x,F,"\'<=>\' operator is incompatible with C++ standards before C++2a"}},
[e]="\'\\<\\=\\>\' operator is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="\'\\<\\=\\>\' operator is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=L,
[a]=pb,
[a]={"edbf5972a4c9",1512090430,"[c++2a] P0515R3: lexer support for new <=> token.","[c++2a] P0515R3: lexer support for new <=> token.\n\nllvm-svn: 319509"},
[b]={{nil,F,T}},
[h]={{Ab,4120,"LexStart:\n  // ...\n  case \'<\':\n    // ...\n    if (ParsingFilename) {\n    // ...\n    } else if (Char == \'<\') {\n    // ...\n    } else if (Char == \'=\') {\n      // ...\n      if (After == \'>\') {\n        if (LangOpts.CPlusPlus20) {\n          if (!isLexingRawMode())\n            Diag(BufferPtr, diag::warn_cxx17_compat_spaceship);"}},
[f]={"edbf5972a4c9",1512090430,"[c++2a] P0515R3: lexer support for new <=> token.","[c++2a] P0515R3: lexer support for new <=> token.\n\nllvm-svn: 319509"},
[k]={
[h]={{Fb,4120,"LexStart:\n  // ...\n  case \'<\':\n    // ...\n    if (ParsingFilename) {\n    // ...\n    } else if (Char == \'<\') {\n    // ...\n    } else if (Char == \'=\') {\n      // ...\n      if (After == \'>\') {\n        if (LangOpts.CPlusPlus20) {\n          if (!isLexingRawMode())\n            Diag(BufferPtr, diag::warn_cxx17_compat_spaceship);"}},
[kc]={"clang/test/SemaCXX/cxx17-compat.cpp:102:16: warning: \'<=>\' operator is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
[l]={
[tc]={"clang/test/SemaCXX/cxx17-compat.cpp:102:16: warning: \'<=>\' operator is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
}
}
},
},
["warn_cxx17_compat_template_nontype_parm_type"]={
["warn_cxx17_compat_template_nontype_parm_type"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,Sb,"non-type template parameter of type %0 is incompatible with C++ standards before C++20"}},
[c]={{nil,db,"warn_cxx17_compat_template_nontype_parm_type"}},
[d]=g,
[d]={{nil,db,"non-type template parameter of type %0 is incompatible with C++ standards before C++20"}},
[e]="non\\-type template parameter of type (.*?) is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="non\\-type template parameter of type (.*?) is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
[b]={{nil,db,m}},
[h]={{Db,1488,"QualType Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {\n  // ...\n  Diag(Loc, diag::warn_cxx17_compat_template_nontype_parm_type) << T;"}},
[f]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
[k]={
[h]={{Eb,1488,"QualType Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {\n  // ...\n  Diag(Loc, diag::warn_cxx17_compat_template_nontype_parm_type) << T;"}},
[kc]={"clang/test/SemaCXX/cxx17-compat.cpp:127:13: warning: non-type template parameter of type \'A\' is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
[l]={
[tc]={"clang/test/SemaCXX/cxx17-compat.cpp:127:13: warning: non-type template parameter of type \'A\' is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]"}
}
}
},
},
["warn_cxx17_compat_unicode_type"]={
["warn_cxx17_compat_unicode_type"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,eb,"\'char8_t\' type specifier is incompatible with C++ standards before C++20"}},
[c]={{nil,D,"warn_cxx17_compat_unicode_type"}},
[d]=g,
[d]={{nil,D,"\'char8_t\' type specifier is incompatible with C++ standards before C++20"}},
[e]="\'char8_t\' type specifier is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="\'char8_t\' type specifier is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type.","Implement P0482R2, support for char8_t type.\n\nThis is not yet part of any C++ working draft, and so is controlled by the flag\n-fchar8_t rather than a -std= flag. (The GCC implementation is controlled by a\nflag with the same name.)\n\nThis implementation is experimental, and will be removed or revised\nsubstantially to match the proposal as it makes its way through the C++\ncommittee.\n\nllvm-svn: 331244"},
[b]={{nil,D,m}},
[h]={{oc,1375,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType == TST_char8)\n    S.Diag(TSTLoc, diag::warn_cxx17_compat_unicode_type);"}}
[f]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type.","Implement P0482R2, support for char8_t type.\n\nThis is not yet part of any C++ working draft, and so is controlled by the flag\n-fchar8_t rather than a -std= flag. (The GCC implementation is controlled by a\nflag with the same name.)\n\nThis implementation is experimental, and will be removed or revised\nsubstantially to match the proposal as it makes its way through the C++\ncommittee.\n\nllvm-svn: 331244"},
[h]={{uc,1375,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType == TST_char8)\n    S.Diag(TSTLoc, diag::warn_cxx17_compat_unicode_type);"}}
},
},
["warn_cxx17_compat_using_decl_class_member_enumerator"]={
["warn_cxx17_compat_using_decl_class_member_enumerator"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,jb,"member using declaration naming a non-member enumerator is incompatible with C++ standards before C++20"}},
[c]={{nil,I,"warn_cxx17_compat_using_decl_class_member_enumerator"}},
[d]=g,
[d]={{nil,I,"member using declaration naming a non-member enumerator is incompatible with C++ standards before C++20"}},
[e]="member using declaration naming a non\\-member enumerator is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="member using declaration naming a non\\-member enumerator is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={Tc,1615397021,Yc,Mc},
[b]={{nil,I,m}},
[h]={{C,13056,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  // ...\n  if (!CurContext->isRecord()) {\n    // ...\n    Diag(NameLoc, Cxx20Enumerator ? diag::warn_cxx17_compat_using_decl_class_member_enumerator : diag::err_using_decl_can_not_refer_to_class_member) << SS.getRange();"}}
[f]={dd,1615397021,bd,ad},
[h]={{L,13056,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  // ...\n  if (!CurContext->isRecord()) {\n    // ...\n    Diag(NameLoc, Cxx20Enumerator ? diag::warn_cxx17_compat_using_decl_class_member_enumerator : diag::err_using_decl_can_not_refer_to_class_member) << SS.getRange();"}}
},
},
["warn_cxx17_compat_using_decl_non_member_enumerator"]={
["warn_cxx17_compat_using_decl_non_member_enumerator"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,jb,"member using declaration naming non-class \'%0\' enumerator is incompatible with C++ standards before C++20"}},
[c]={{nil,I,"warn_cxx17_compat_using_decl_non_member_enumerator"}},
[d]=g,
[d]={{nil,I,"member using declaration naming non-class \'%0\' enumerator is incompatible with C++ standards before C++20"}},
[e]="member using declaration naming non\\-class \'(.*?)\' enumerator is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="member using declaration naming non\\-class \'(.*?)\' enumerator is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={Tc,1615397021,Yc,Mc},
[b]={{nil,I,m}},
[h]={{C,13140,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  // ...\n  // The current scope is a record.\n  if (!NamedContext->isRecord()) {\n    // ...\n    Diag(SS.getBeginLoc(), Cxx20Enumerator ? diag::warn_cxx17_compat_using_decl_non_member_enumerator : diag::err_using_decl_nested_name_specifier_is_not_class) << SS.getScopeRep() << SS.getRange();"},{C,13164,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  // ...\n  if (getLangOpts().CPlusPlus11) {\n    // ...\n    if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(cast<CXXRecordDecl>(NamedContext))) {\n      if (Cxx20Enumerator) {\n        Diag(NameLoc, diag::warn_cxx17_compat_using_decl_non_member_enumerator) << SS.getRange();"}}
[f]={dd,1615397021,bd,ad},
[h]={{L,13140,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  // ...\n  // The current scope is a record.\n  if (!NamedContext->isRecord()) {\n    // ...\n    Diag(SS.getBeginLoc(), Cxx20Enumerator ? diag::warn_cxx17_compat_using_decl_non_member_enumerator : diag::err_using_decl_nested_name_specifier_is_not_class) << SS.getScopeRep() << SS.getRange();"},{L,13164,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  // ...\n  if (getLangOpts().CPlusPlus11) {\n    // ...\n    if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(cast<CXXRecordDecl>(NamedContext))) {\n      if (Cxx20Enumerator) {\n        Diag(NameLoc, diag::warn_cxx17_compat_using_decl_non_member_enumerator) << SS.getRange();"}}
},
},
["warn_cxx17_compat_using_decl_scoped_enumerator"]={
["warn_cxx17_compat_using_decl_scoped_enumerator"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,jb,"using declaration naming a scoped enumerator is incompatible with C++ standards before C++20"}},
[c]={{nil,I,"warn_cxx17_compat_using_decl_scoped_enumerator"}},
[d]=g,
[d]={{nil,I,"using declaration naming a scoped enumerator is incompatible with C++ standards before C++20"}},
[e]="using declaration naming a scoped enumerator is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="using declaration naming a scoped enumerator is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=pb,
[a]={Tc,1615397021,Yc,Mc},
[b]={{nil,I,m}},
[h]={{C,13031,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  // ...\n  if (NamedContext) {\n    // ...\n    if (auto *ED = dyn_cast<EnumDecl>(NamedContext)) {\n      // C++14 [namespace.udecl]p7:\n      // A using-declaration shall not name a scoped enumerator.\n      // C++20 p1099 permits enumerators.\n      if (EC && R && ED->isScoped())\n        Diag(SS.getBeginLoc(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_using_decl_scoped_enumerator : diag::ext_using_decl_scoped_enumerator) << SS.getRange();"}}
[f]={dd,1615397021,bd,ad},
[h]={{L,13031,"/// Checks that the given nested-name qualifier used in a using decl\n/// in the current context is appropriately related to the current\n/// scope.  If an error is found, diagnoses it and returns true.\n/// R is nullptr, if the caller has not (yet) done a lookup, otherwise it\'s the\n/// result of that lookup. UD is likewise nullptr, except when we have an\n/// already-populated UsingDecl whose shadow decls contain the same information\n/// (i.e. we\'re instantiating a UsingDecl with non-dependent scope).\nbool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, bool HasTypename, const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, SourceLocation NameLoc, const LookupResult *R, const UsingDecl *UD) {\n  // ...\n  if (NamedContext) {\n    // ...\n    if (auto *ED = dyn_cast<EnumDecl>(NamedContext)) {\n      // C++14 [namespace.udecl]p7:\n      // A using-declaration shall not name a scoped enumerator.\n      // C++20 p1099 permits enumerators.\n      if (EC && R && ED->isScoped())\n        Diag(SS.getBeginLoc(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_using_decl_scoped_enumerator : diag::ext_using_decl_scoped_enumerator) << SS.getRange();"}}
},
},
["warn_cxx17_compat_using_declaration_pack"]={
["warn_cxx17_compat_using_declaration_pack"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]={{nil,lb,"pack expansion using declaration is incompatible with C++ standards before C++17"}},
[c]={{nil,F,"warn_cxx17_compat_using_declaration_pack"}},
[d]=g,
[d]={{nil,F,"pack expansion using declaration is incompatible with C++ standards before C++17"}},
[e]="pack expansion using declaration is incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="pack expansion using declaration is incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=v,
[a]=Pb,
[a]={"22a250cd5d8e",1482120533,"[c++1z] P0195R2: Support pack-expansion of using-declarations.","[c++1z] P0195R2: Support pack-expansion of using-declarations.\n\nThis change introduces UsingPackDecl as a marker for the set of UsingDecls\nproduced by pack expansion of a single (unresolved) using declaration. This is\nnot strictly necessary (we just need to be able to map from the original using\ndeclaration to its expansions somehow), but it\'s useful to maintain the\ninvariant that each declaration reference instantiates to refer to one\ndeclaration.\n\nllvm-svn: 290080"},
[b]={{nil,F,A}},
[h]={{bb,661,"/// Parse a using-declarator (or the identifier in a C++11 alias-declaration).\n///\n///    using-declarator:\n///      \'typename\'[opt] nested-name-specifier unqualified-id\n///\nbool Parser::ParseUsingDeclarator(DeclaratorContext Context, UsingDeclarator &D) {\n  // ...\n  if (TryConsumeToken(tok::ellipsis, D.EllipsisLoc))\n    Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx17_compat_using_declaration_pack : diag::ext_using_declaration_pack);"}}
[f]={"22a250cd5d8e",1482120533,"[c++1z] P0195R2: Support pack-expansion of using-declarations.","[c++1z] P0195R2: Support pack-expansion of using-declarations.\n\nThis change introduces UsingPackDecl as a marker for the set of UsingDecls\nproduced by pack expansion of a single (unresolved) using declaration. This is\nnot strictly necessary (we just need to be able to map from the original using\ndeclaration to its expansions somehow), but it\'s useful to maintain the\ninvariant that each declaration reference instantiates to refer to one\ndeclaration.\n\nllvm-svn: 290080"},
[h]={{kb,661,"/// Parse a using-declarator (or the identifier in a C++11 alias-declaration).\n///\n///    using-declarator:\n///      \'typename\'[opt] nested-name-specifier unqualified-id\n///\nbool Parser::ParseUsingDeclarator(DeclaratorContext Context, UsingDeclarator &D) {\n  // ...\n  if (TryConsumeToken(tok::ellipsis, D.EllipsisLoc))\n    Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx17_compat_using_declaration_pack : diag::ext_using_declaration_pack);"}}
},
},
["warn_cxx17_compat_using_enum_declaration"]={
["warn_cxx17_compat_using_enum_declaration"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,ib,Z,n,m,m,A,X},
[k]={y,u,p,p,G,s,s,Q,v,v,P,nb,ib,o,n,n,J,gb},
[i]=A,
[j]=J,
[c]={{nil,jb,"using enum declaration is incompatible with C++ standards before C++20"}},
[c]={{nil,I,"warn_cxx17_compat_using_enum_declaration"}},
[d]=g,
[d]={{nil,I,"using enum declaration is incompatible with C++ standards before C++20"}},
[e]="using enum declaration is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=hb,
[g]="using enum declaration is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=v,
[a]=pb,
[a]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions.\n\nThis implements the parsing and recognition of module partition CMIs\nand removes the FIXMEs in the parser.\n\nModule partitions are recognised in the base computation of visibility,\nhowever additional amendments to visibility follow in subsequent patches.\n\nDifferential Revision: https://reviews.llvm.org/D118586"},
[b]={{nil,I,A}},
[h]={{bb,701,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  // ...\n  if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n    // ...\n    Diag(UELoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_using_enum_declaration : diag::ext_using_enum_declaration);"}}
[f]={Md,1612659633,Jd,yd},
[h]={{kb,701,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  // ...\n  if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n    // ...\n    Diag(UELoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_using_enum_declaration : diag::ext_using_enum_declaration);"}}
},
},
["warn_cxx17_hex_literal"]={
["warn_cxx17_hex_literal"]={
[j]={o,q,Ib,m,xb},
[k]={p,s,Mb,n,wb},
[i]=xb,
[j]=wb,
[c]={{nil,lb,"hexadecimal floating literals are incompatible with C++ standards before C++17"}},
[c]={{nil,F,"warn_cxx17_hex_literal"}},
[d]=g,
[d]={{nil,F,"hexadecimal floating literals are incompatible with C++ standards before C++17"}},
[e]="hexadecimal floating literals are incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+17\\-compat\\-pedantic[^\\]]*\\]",
[g]="hexadecimal floating literals are incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+17\\-compat\\-pedantic[^\\]]*\\]",
[a]={"560a3579b29a",1457130726,"Update diagnostics now that hexadecimal literals look likely to be part of C++17.","Update diagnostics now that hexadecimal literals look likely to be part of C++17.\n\nllvm-svn: 262753"},
[b]={{nil,F,T}},
[h]={{jd,1332,"/// ParseNumberStartingWithZero - This method is called when the first character\n/// of the number is found to be a zero.  This means it is either an octal\n/// number (like \'04\') or a hex number (\'0x123a\') a binary number (\'0b1010\') or\n/// a floating point number (01239.123e4).  Eat the prefix, determining the\n/// radix etc.\nvoid NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {\n  // ...\n  // Handle a hex number like 0x1234.\n  if ((c1 == \'x\' || c1 == \'X\') && (isHexDigit(s[1]) || s[1] == \'.\')) {\n    // ...\n    // A binary exponent can appear with or with a \'.\'. If dotted, the\n    // binary exponent is required.\n    if (*s == \'p\' || *s == \'P\') {\n      // ...\n      if (!LangOpts.HexFloats)\n      // ...\n      else if (LangOpts.CPlusPlus17)\n        Diags.Report(TokLoc, diag::warn_cxx17_hex_literal);"}}
[f]={"560a3579b29a",1457130726,"Update diagnostics now that hexadecimal literals look likely to be part of C++17.","Update diagnostics now that hexadecimal literals look likely to be part of C++17.\n\nllvm-svn: 262753"},
[h]={{id,1332,"/// ParseNumberStartingWithZero - This method is called when the first character\n/// of the number is found to be a zero.  This means it is either an octal\n/// number (like \'04\') or a hex number (\'0x123a\') a binary number (\'0b1010\') or\n/// a floating point number (01239.123e4).  Eat the prefix, determining the\n/// radix etc.\nvoid NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {\n  // ...\n  // Handle a hex number like 0x1234.\n  if ((c1 == \'x\' || c1 == \'X\') && (isHexDigit(s[1]) || s[1] == \'.\')) {\n    // ...\n    // A binary exponent can appear with or with a \'.\'. If dotted, the\n    // binary exponent is required.\n    if (*s == \'p\' || *s == \'P\') {\n      // ...\n      if (!LangOpts.HexFloats)\n      // ...\n      else if (LangOpts.CPlusPlus17)\n        Diags.Report(TokLoc, diag::warn_cxx17_hex_literal);"}}
},
},
["warn_cxx20_alias_in_init_statement"]={
["warn_cxx20_alias_in_init_statement"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,U,P,P,rb,O,O,n,m,m,cb,Zb},
[k]={y,u,p,p,G,s,s,Q,v,v,P,cb,X,X,ub,W,W,o,n,n,lb,cc},
[i]=cb,
[j]=lb,
[c]="alias declaration in this context is incompatible with C++ standards before C++23",
[c]={{nil,w,"warn_cxx20_alias_in_init_statement"}},
[d]=g,
[d]="alias declaration in this context is incompatible with C++ standards before C++23",
[e]="alias declaration in this context is incompatible with C\\+\\+ standards before C\\+\\+23",
[e]=i,
[f]=Yb,
[g]="alias declaration in this context is incompatible with C\\+\\+ standards before C\\+\\+23",
[b]=v,
[a]=ec,
[a]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions.\n\nThis implements the parsing and recognition of module partition CMIs\nand removes the FIXMEs in the parser.\n\nModule partitions are recognised in the base computation of visibility,\nhowever additional amendments to visibility follow in subsequent patches.\n\nDifferential Revision: https://reviews.llvm.org/D118586"},
[b]={{nil,w,A}},
[h]={{cc,2004,"Parser::DeclGroupPtrTy Parser::ParseAliasDeclarationInInitStatement(DeclaratorContext Context, ParsedAttributes &Attrs) {\n  // ...\n  Diag(DeclStart, !getLangOpts().CPlusPlus23 ? diag::ext_alias_in_init_statement : diag::warn_cxx20_alias_in_init_statement) << SourceRange(DeclStart, DeclEnd);"}}
[f]={Md,1612659633,Jd,yd},
[h]={{fc,2004,"Parser::DeclGroupPtrTy Parser::ParseAliasDeclarationInInitStatement(DeclaratorContext Context, ParsedAttributes &Attrs) {\n  // ...\n  Diag(DeclStart, !getLangOpts().CPlusPlus23 ? diag::ext_alias_in_init_statement : diag::warn_cxx20_alias_in_init_statement) << SourceRange(DeclStart, DeclEnd);"}}
},
},
["warn_cxx20_compat_aggregate_init_with_ctors"]={
["warn_cxx20_compat_aggregate_init_with_ctors"]={
[j]={U,P,rb,O},
[k]={cb,X,ub,W},
[i]=U,
[j]=cb,
[c]={{nil,mb,"aggregate initialization of type %0 with user-declared constructors is incompatible with C++20"}},
[c]={{nil,z,"warn_cxx20_compat_aggregate_init_with_ctors"}},
[d]=g,
[d]={{nil,z,"aggregate initialization of type %0 with user-declared constructors is incompatible with C++20"}},
[e]="aggregate initialization of type (.*?) with user\\-declared constructors is incompatible with C\\+\\+20",
[e]=i,
[f]=Hc,
[g]="aggregate initialization of type (.*?) with user\\-declared constructors is incompatible with C\\+\\+20",
[b]=l,
[a]=Lc,
[a]={"79c88c31056f",1537988416,"P1008R1 Classes with user-declared constructors are never aggregates in","P1008R1 Classes with user-declared constructors are never aggregates in\nC++20.\n\nllvm-svn: 343131"},
[b]={{nil,z,m}},
[h]={{fb,1163,"/// Check whether the range of the initializer \\p ParentIList from element\n/// \\p Index onwards can be used to initialize an object of type \\p T. Update\n/// \\p Index to indicate how many elements of the list were consumed.\n///\n/// This also fills in \\p StructuredList, from element \\p StructuredIndex\n/// onwards, with the fully-braced, desugared form of the initialization.\nvoid InitListChecker::CheckImplicitInitList(const InitializedEntity &Entity, InitListExpr *ParentIList, QualType T, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  // ...\n  if (StructuredSubobjectInitList) {\n    // ...\n    if (!VerifyOnly && CXXRD && CXXRD->hasUserDeclaredConstructor()) {\n      SemaRef.Diag(StructuredSubobjectInitList->getBeginLoc(), diag::warn_cxx20_compat_aggregate_init_with_ctors) << StructuredSubobjectInitList->getSourceRange() << T;"},{fb,1314,"/// Check whether the initializer \\p IList (that was written with explicit\n/// braces) can be used to initialize an object of type \\p T.\n///\n/// This also fills in \\p StructuredList with the fully-braced, desugared\n/// form of the initialization.\nvoid InitListChecker::CheckExplicitInitList(const InitializedEntity &Entity, InitListExpr *IList, QualType &T, InitListExpr *StructuredList, bool TopLevelObject) {\n  // ...\n  if (!VerifyOnly) {\n    // ...\n    if (CXXRD && CXXRD->hasUserDeclaredConstructor()) {\n      // ...\n      if (!HasEquivCtor) {\n        SemaRef.Diag(IList->getBeginLoc(), diag::warn_cxx20_compat_aggregate_init_with_ctors) << IList->getSourceRange() << T;"}},
[f]={"79c88c31056f",1537988416,"P1008R1 Classes with user-declared constructors are never aggregates in","P1008R1 Classes with user-declared constructors are never aggregates in\nC++20.\n\nllvm-svn: 343131"},
[k]={
[h]={{mb,1163,"/// Check whether the range of the initializer \\p ParentIList from element\n/// \\p Index onwards can be used to initialize an object of type \\p T. Update\n/// \\p Index to indicate how many elements of the list were consumed.\n///\n/// This also fills in \\p StructuredList, from element \\p StructuredIndex\n/// onwards, with the fully-braced, desugared form of the initialization.\nvoid InitListChecker::CheckImplicitInitList(const InitializedEntity &Entity, InitListExpr *ParentIList, QualType T, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  // ...\n  if (StructuredSubobjectInitList) {\n    // ...\n    if (!VerifyOnly && CXXRD && CXXRD->hasUserDeclaredConstructor()) {\n      SemaRef.Diag(StructuredSubobjectInitList->getBeginLoc(), diag::warn_cxx20_compat_aggregate_init_with_ctors) << StructuredSubobjectInitList->getSourceRange() << T;"},{mb,1314,"/// Check whether the initializer \\p IList (that was written with explicit\n/// braces) can be used to initialize an object of type \\p T.\n///\n/// This also fills in \\p StructuredList with the fully-braced, desugared\n/// form of the initialization.\nvoid InitListChecker::CheckExplicitInitList(const InitializedEntity &Entity, InitListExpr *IList, QualType &T, InitListExpr *StructuredList, bool TopLevelObject) {\n  // ...\n  if (!VerifyOnly) {\n    // ...\n    if (CXXRD && CXXRD->hasUserDeclaredConstructor()) {\n      // ...\n      if (!HasEquivCtor) {\n        SemaRef.Diag(IList->getBeginLoc(), diag::warn_cxx20_compat_aggregate_init_with_ctors) << IList->getSourceRange() << T;"}},
[l]={
["clang/test/SemaCXX/cxx2a-compat.cpp"]={"clang/test/SemaCXX/cxx2a-compat.cpp:8:8: warning: aggregate initialization of type \'A\' with user-declared constructors is incompatible with C++20 [-Wc++20-compat]","clang/test/SemaCXX/cxx2a-compat.cpp:18:9: warning: aggregate initialization of type \'A\' with user-declared constructors is incompatible with C++20 [-Wc++20-compat]","clang/test/SemaCXX/cxx2a-compat.cpp:18:15: warning: aggregate initialization of type \'A\' with user-declared constructors is incompatible with C++20 [-Wc++20-compat]"}
["clang/test/SemaCXX/cxx2a-compat.cpp"]={"clang/test/SemaCXX/cxx2a-compat.cpp:8:8: warning: aggregate initialization of type \'A\' with user-declared constructors is incompatible with C++20 [-Wc++20-compat]","clang/test/SemaCXX/cxx2a-compat.cpp:18:9: warning: aggregate initialization of type \'A\' with user-declared constructors is incompatible with C++20 [-Wc++20-compat]","clang/test/SemaCXX/cxx2a-compat.cpp:18:15: warning: aggregate initialization of type \'A\' with user-declared constructors is incompatible with C++20 [-Wc++20-compat]"}
}
}
},
},
["warn_cxx20_compat_auto_expr"]={
["warn_cxx20_compat_auto_expr"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,U,P,P,rb,O,O,n,m,m,cb,Zb},
[k]={y,u,p,p,G,s,s,Q,v,v,P,cb,X,X,ub,W,W,o,n,n,lb,cc},
[i]=cb,
[j]=lb,
[c]="\'auto\' as a functional-style cast is incompatible with C++ standards before C++23",
[c]={{nil,C,"warn_cxx20_compat_auto_expr"}},
[d]=g,
[d]="\'auto\' as a functional-style cast is incompatible with C++ standards before C++23",
[e]="\'auto\' as a functional\\-style cast is incompatible with C\\+\\+ standards before C\\+\\+23",
[e]=i,
[f]=Yb,
[g]="\'auto\' as a functional\\-style cast is incompatible with C\\+\\+ standards before C\\+\\+23",
[b]=l,
[a]=ec,
[a]={fd,1620118562,ld,kd},
[b]={{nil,C,m}},
[f]={jd,1620118562,td,sd},
[h]={{bc,1521,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (getLangOpts().CPlusPlus23) {\n      if (Ty->getAs<AutoType>())\n        Diag(TyBeginLoc, diag::warn_cxx20_compat_auto_expr) << FullRange;"}},
[h]={{bc,1521,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (getLangOpts().CPlusPlus23) {\n      if (Ty->getAs<AutoType>())\n        Diag(TyBeginLoc, diag::warn_cxx20_compat_auto_expr) << FullRange;"}},
[k]={
[l]={
["clang/test/Parser/cxx2b-auto-x.cpp"]={"clang/test/Parser/cxx2b-auto-x.cpp:5:12: warning: \'auto\' as a functional-style cast is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-auto-x.cpp:21:12: warning: \'auto\' as a functional-style cast is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-auto-x.cpp:24:12: warning: \'auto\' as a functional-style cast is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-auto-x.cpp:39:5: warning: \'auto\' as a functional-style cast is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-auto-x.cpp:46:14: warning: \'auto\' as a functional-style cast is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-auto-x.cpp:50:14: warning: \'auto\' as a functional-style cast is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
["clang/test/Parser/cxx2b-auto-x.cpp"]={"clang/test/Parser/cxx2b-auto-x.cpp:5:12: warning: \'auto\' as a functional-style cast is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-auto-x.cpp:21:12: warning: \'auto\' as a functional-style cast is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-auto-x.cpp:24:12: warning: \'auto\' as a functional-style cast is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-auto-x.cpp:39:5: warning: \'auto\' as a functional-style cast is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-auto-x.cpp:46:14: warning: \'auto\' as a functional-style cast is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-auto-x.cpp:50:14: warning: \'auto\' as a functional-style cast is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
}
}
},
},
["warn_cxx20_compat_consteval"]={
["warn_cxx20_compat_consteval"]={
[j]={U,P,rb,O},
[k]={cb,X,ub,W},
[i]=U,
[j]=cb,
[c]={{nil,z,"\'consteval\' specifier is incompatible with C++ standards before C++20"},{I,I,"consteval is incompatible with C++ standards before C++20"}},
[c]={{nil,x,"warn_cxx20_compat_consteval"}},
[d]=g,
[d]={{nil,q,"\'consteval\' specifier is incompatible with C++ standards before C++20"},{x,x,"consteval is incompatible with C++ standards before C++20"}},
[e]="\'consteval\' specifier is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=Hc,
[g]="\'consteval\' specifier is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=v,
[a]=Lc,
[a]={"796ed03b8412",1560502580,"[C++20] add Basic consteval specifier","[C++20] add Basic consteval specifier\n\nSummary:\nthis revision adds Lexing, Parsing and Basic Semantic for the consteval specifier as specified by http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1073r3.html\n\nwith this patch, the consteval specifier is treated as constexpr but can only be applied to function declaration.\n\nChanges:\n - add the consteval keyword.\n - add parsing of consteval specifier for normal declarations and lambdas expressions.\n - add the whether a declaration is constexpr is now represented by and enum everywhere except for variable because they can\'t be consteval.\n - adapt diagnostic about constexpr to print constexpr or consteval depending on the case.\n - add tests for basic semantic.\n\nReviewers: rsmith, martong, shafik\n\nReviewed By: rsmith\n\nSubscribers: eraman, efriedma, rnkovacs, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D61790\n\nllvm-svn: 363362"},
[b]={{nil,q,A},{x,x,r}},
[h]={{cc,1242,"static void addConstevalToLambdaDeclSpecifier(Parser &P, SourceLocation ConstevalLoc, DeclSpec &DS) {\n  if (ConstevalLoc.isValid()) {\n    P.Diag(ConstevalLoc, diag::warn_cxx20_compat_consteval);"},{oc,1382,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  if (getConstexprSpecifier() == ConstexprSpecKind::Constexpr)\n  // ...\n  else if (getConstexprSpecifier() == ConstexprSpecKind::Consteval)\n    S.Diag(ConstexprLoc, diag::warn_cxx20_compat_consteval);"}}
[f]={"796ed03b8412",1560502580,"[C++20] add Basic consteval specifier","[C++20] add Basic consteval specifier\n\nSummary:\nthis revision adds Lexing, Parsing and Basic Semantic for the consteval specifier as specified by http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1073r3.html\n\nwith this patch, the consteval specifier is treated as constexpr but can only be applied to function declaration.\n\nChanges:\n - add the consteval keyword.\n - add parsing of consteval specifier for normal declarations and lambdas expressions.\n - add the whether a declaration is constexpr is now represented by and enum everywhere except for variable because they can\'t be consteval.\n - adapt diagnostic about constexpr to print constexpr or consteval depending on the case.\n - add tests for basic semantic.\n\nReviewers: rsmith, martong, shafik\n\nReviewed By: rsmith\n\nSubscribers: eraman, efriedma, rnkovacs, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D61790\n\nllvm-svn: 363362"},
[h]={{fc,1242,"static void addConstevalToLambdaDeclSpecifier(Parser &P, SourceLocation ConstevalLoc, DeclSpec &DS) {\n  if (ConstevalLoc.isValid()) {\n    P.Diag(ConstevalLoc, diag::warn_cxx20_compat_consteval);"},{uc,1382,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  if (getConstexprSpecifier() == ConstexprSpecKind::Constexpr)\n  // ...\n  else if (getConstexprSpecifier() == ConstexprSpecKind::Consteval)\n    S.Diag(ConstexprLoc, diag::warn_cxx20_compat_consteval);"}}
},
},
["warn_cxx20_compat_consteval_if"]={
["warn_cxx20_compat_consteval_if"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,U,P,P,rb,O,O,n,m,m,cb,Zb},
[k]={y,u,p,p,G,s,s,Q,v,v,P,cb,X,X,ub,W,W,o,n,n,lb,cc},
[i]=cb,
[j]=lb,
[c]="consteval if is incompatible with C++ standards before C++23",
[c]={{nil,w,"warn_cxx20_compat_consteval_if"}},
[d]=g,
[d]="consteval if is incompatible with C++ standards before C++23",
[e]="consteval if is incompatible with C\\+\\+ standards before C\\+\\+23",
[e]=i,
[f]=Yb,
[g]="consteval if is incompatible with C\\+\\+ standards before C\\+\\+23",
[b]=v,
[a]=ec,
[a]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions.\n\nThis implements the parsing and recognition of module partition CMIs\nand removes the FIXMEs in the parser.\n\nModule partitions are recognised in the base computation of visibility,\nhowever additional amendments to visibility follow in subsequent patches.\n\nDifferential Revision: https://reviews.llvm.org/D118586"},
[b]={{nil,w,A}},
[f]={Md,1612659633,Jd,yd},
[h]={{nc,1479,"/// ParseIfStatement\n///      if-statement: [C99 6.8.4.1]\n///        \'if\' \'(\' expression \')\' statement\n///        \'if\' \'(\' expression \')\' statement \'else\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement \'else\' statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement \'else\' statement\n///\nStmtResult Parser::ParseIfStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  if (Tok.is(tok::kw_constexpr)) {\n  // ...\n  } else {\n    // ...\n    if (Tok.is(tok::kw_consteval)) {\n      Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_consteval_if : diag::ext_consteval_if);"}}
[h]={{nc,1479,"/// ParseIfStatement\n///      if-statement: [C99 6.8.4.1]\n///        \'if\' \'(\' expression \')\' statement\n///        \'if\' \'(\' expression \')\' statement \'else\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement \'else\' statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement \'else\' statement\n///\nStmtResult Parser::ParseIfStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  if (Tok.is(tok::kw_constexpr)) {\n  // ...\n  } else {\n    // ...\n    if (Tok.is(tok::kw_consteval)) {\n      Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_consteval_if : diag::ext_consteval_if);"}}
},
},
["warn_cxx20_compat_constexpr_body_invalid_stmt"]={
["warn_cxx20_compat_constexpr_body_invalid_stmt"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,U,P,P,rb,O,O,n,m,m,cb,Zb},
[k]={y,u,p,p,G,s,s,Q,v,v,P,cb,X,X,ub,W,W,o,n,n,lb,cc},
[i]=cb,
[j]=lb,
[c]="use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++23",
[c]={{nil,C,"warn_cxx20_compat_constexpr_body_invalid_stmt"}},
[d]=g,
[d]="use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++23",
[e]="use of this statement in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+23",
[e]=i,
[f]=Yb,
[g]="use of this statement in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+23",
[b]=l,
[a]=ec,
[a]={fd,1620118562,ld,kd},
[b]={{nil,C,m}},
[h]={{C,2288,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (Kind == Sema::CheckConstexprKind::CheckValid) {\n  // ...\n  } else if (Cxx2bLoc.isValid()) {\n    SemaRef.Diag(Cxx2bLoc, SemaRef.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt_cxx23) << isa<CXXConstructorDecl>(Dcl);"}},
[f]={jd,1620118562,td,sd},
[k]={
[h]={{L,2288,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (Kind == Sema::CheckConstexprKind::CheckValid) {\n  // ...\n  } else if (Cxx2bLoc.isValid()) {\n    SemaRef.Diag(Cxx2bLoc, SemaRef.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt_cxx23) << isa<CXXConstructorDecl>(Dcl);"}},
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:18:3: warning: use of this statement in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:25:1: warning: use of this statement in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:18:3: warning: use of this statement in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:25:1: warning: use of this statement in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
}
}
},
},
["warn_cxx20_compat_constexpr_var"]={
["warn_cxx20_compat_constexpr_var"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,U,P,P,rb,O,O,n,m,m,cb,Zb},
[k]={y,u,p,p,G,s,s,Q,v,v,P,cb,X,X,ub,W,W,o,n,n,lb,cc},
[i]=cb,
[j]=lb,
[c]="definition of a %select{static variable|thread_local variable|variable of non-literal type}1 in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++23",
[c]={{nil,C,"warn_cxx20_compat_constexpr_var"}},
[d]=g,
[d]="definition of a %select{static variable|thread_local variable|variable of non-literal type}1 in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++23",
[e]="definition of a (?:static variable|thread_local variable|variable of non\\-literal type) in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+23",
[e]=i,
[f]=Yb,
[g]="definition of a (?:static variable|thread_local variable|variable of non\\-literal type) in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+23",
[b]=l,
[a]=ec,
[a]={fd,1620118562,ld,kd},
[b]={{nil,C,m}},
[h]={{C,1934,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Var:\n    case Decl::Decomposition: {\n      // ...\n      if (VD->isThisDeclarationADefinition()) {\n        if (VD->isStaticLocal()) {\n          if (Kind == Sema::CheckConstexprKind::Diagnose) {\n            SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_constexpr_var : diag::ext_constexpr_static_var) << isa<CXXConstructorDecl>(Dcl) << (VD->getTLSKind() == VarDecl::TLS_Dynamic);"},{C,1944,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Var:\n    case Decl::Decomposition: {\n      // ...\n      if (VD->isThisDeclarationADefinition()) {\n        // ...\n        if (SemaRef.LangOpts.CPlusPlus23) {\n          CheckLiteralType(SemaRef, Kind, VD->getLocation(), VD->getType(), diag::warn_cxx20_compat_constexpr_var, isa<CXXConstructorDecl>(Dcl),"}},
[f]={jd,1620118562,td,sd},
[k]={
[h]={{L,1934,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Var:\n    case Decl::Decomposition: {\n      // ...\n      if (VD->isThisDeclarationADefinition()) {\n        if (VD->isStaticLocal()) {\n          if (Kind == Sema::CheckConstexprKind::Diagnose) {\n            SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_constexpr_var : diag::ext_constexpr_static_var) << isa<CXXConstructorDecl>(Dcl) << (VD->getTLSKind() == VarDecl::TLS_Dynamic);"},{L,1944,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Var:\n    case Decl::Decomposition: {\n      // ...\n      if (VD->isThisDeclarationADefinition()) {\n        // ...\n        if (SemaRef.LangOpts.CPlusPlus23) {\n          CheckLiteralType(SemaRef, Kind, VD->getLocation(), VD->getType(), diag::warn_cxx20_compat_constexpr_var, isa<CXXConstructorDecl>(Dcl),"}},
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:6:20: warning: definition of a static variable in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:13:26: warning: definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:33:14: warning: definition of a variable of non-literal type in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:39:16: warning: definition of a variable of non-literal type in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:45:28: warning: definition of a static variable in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:53:23: warning: definition of a static variable in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:6:20: warning: definition of a static variable in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:13:26: warning: definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:33:14: warning: definition of a variable of non-literal type in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:39:16: warning: definition of a variable of non-literal type in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:45:28: warning: definition of a static variable in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:53:23: warning: definition of a static variable in a constexpr function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
}
}
},
},
["warn_cxx20_compat_constinit"]={
["warn_cxx20_compat_constinit"]={
[j]={U,P,rb,O},
[k]={cb,X,ub,W},
[i]=U,
[j]=cb,
[c]={{nil,z,"\'constinit\' specifier is incompatible with C++ standards before C++20"}},
[c]={{nil,q,"warn_cxx20_compat_constinit"}},
[d]=g,
[d]={{nil,q,"\'constinit\' specifier is incompatible with C++ standards before C++20"}},
[e]="\'constinit\' specifier is incompatible with C\\+\\+ standards before C\\+\\+20",
[e]=i,
[f]=Hc,
[g]="\'constinit\' specifier is incompatible with C\\+\\+ standards before C\\+\\+20",
[b]=l,
[a]=Lc,
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,m}},
[h]={{oc,1384,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  if (getConstexprSpecifier() == ConstexprSpecKind::Constexpr)\n  // ...\n  else if (getConstexprSpecifier() == ConstexprSpecKind::Consteval)\n  // ...\n  else if (getConstexprSpecifier() == ConstexprSpecKind::Constinit)\n    S.Diag(ConstexprLoc, diag::warn_cxx20_compat_constinit);"}}
[f]={xb,1567434909,yb,Cb},
[h]={{uc,1384,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  if (getConstexprSpecifier() == ConstexprSpecKind::Constexpr)\n  // ...\n  else if (getConstexprSpecifier() == ConstexprSpecKind::Consteval)\n  // ...\n  else if (getConstexprSpecifier() == ConstexprSpecKind::Constinit)\n    S.Diag(ConstexprLoc, diag::warn_cxx20_compat_constinit);"}}
},
},
["warn_cxx20_compat_decl_attrs_on_lambda"]={
["warn_cxx20_compat_decl_attrs_on_lambda"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,U,P,P,rb,O,O,n,m,m,cb,Zb},
[k]={y,u,p,p,G,s,s,Q,v,v,P,cb,X,X,ub,W,W,o,n,n,lb,cc},
[i]=cb,
[j]=lb,
[c]="%select{an attribute specifier sequence|%1}0 in this position is incompatible with C++ standards before C++23",
[c]={{nil,I,"warn_cxx20_compat_decl_attrs_on_lambda"}},
[d]=g,
[d]="%select{an attribute specifier sequence|%1}0 in this position is incompatible with C++ standards before C++23",
[e]="(?:an attribute specifier sequence|(.*?)) in this position is incompatible with C\\+\\+ standards before C\\+\\+23",
[e]=i,
[f]=Yb,
[g]="(?:an attribute specifier sequence|(.*?)) in this position is incompatible with C\\+\\+ standards before C\\+\\+23",
[b]=v,
[a]=ec,
[a]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions.\n\nThis implements the parsing and recognition of module partition CMIs\nand removes the FIXMEs in the parser.\n\nModule partitions are recognised in the base computation of visibility,\nhowever additional amendments to visibility follow in subsequent patches.\n\nDifferential Revision: https://reviews.llvm.org/D118586"},
[b]={{nil,I,A}},
[h]={{cc,1367,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  // ...\n  // Implement WG21 P2173, which allows attributes immediately before the\n  // lambda declarator and applies them to the corresponding function operator\n  // or operator template declaration. We accept this as a conforming extension\n  // in all language modes that support lambdas.\n  if (isCXX11AttributeSpecifier()) {\n    Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_decl_attrs_on_lambda : diag::ext_decl_attrs_on_lambda) << Tok.getIdentifierInfo() << Tok.isRegularKeywordAttribute();"}}
[f]={Md,1612659633,Jd,yd},
[h]={{fc,1367,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  // ...\n  // Implement WG21 P2173, which allows attributes immediately before the\n  // lambda declarator and applies them to the corresponding function operator\n  // or operator template declaration. We accept this as a conforming extension\n  // in all language modes that support lambdas.\n  if (isCXX11AttributeSpecifier()) {\n    Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_decl_attrs_on_lambda : diag::ext_decl_attrs_on_lambda) << Tok.getIdentifierInfo() << Tok.isRegularKeywordAttribute();"}}
},
},
["warn_cxx20_compat_explicit_bool"]={
["warn_cxx20_compat_explicit_bool"]={
[j]={U,P,rb,O},
[k]={cb,X,ub,W},
[i]=U,
[j]=cb,
[c]={{nil,mb,"this expression will be parsed as explicit(bool) in C++20"}},
[c]={{nil,z,"warn_cxx20_compat_explicit_bool"}},
[d]=g,
[d]={{nil,z,"this expression will be parsed as explicit(bool) in C++20"}},
[e]="this expression will be parsed as explicit\\(bool\\) in C\\+\\+20",
[e]=i,
[f]=Hc,
[g]="this expression will be parsed as explicit\\(bool\\) in C\\+\\+20",
[b]=v,
[a]=Lc,
[a]={"5fe2ddbdf47d",1556928540,"[clang] adding explicit(bool) from c++2a","[clang] adding explicit(bool) from c++2a\n\nthis patch adds support for the explicit bool specifier.\n\nChanges:\n- The parsing for the explicit(bool) specifier was added in ParseDecl.cpp.\n- The storage of the explicit specifier was changed. the explicit specifier was stored as a boolean value in the FunctionDeclBitfields and in the DeclSpec class. now it is stored as a PointerIntPair<Expr*, 2> with a flag and a potential expression in CXXConstructorDecl, CXXDeductionGuideDecl, CXXConversionDecl and in the DeclSpec class.\n- Following the AST change, Serialization, ASTMatchers, ASTComparator and ASTPrinter were adapted.\n- Template instantiation was adapted to instantiate the potential expressions of the explicit(bool) specifier When instantiating their associated declaration.\n- The Add*Candidate functions were adapted, they now take a Boolean indicating if the context allowing explicit constructor or conversion function and this boolean is used to remove invalid overloads that required template instantiation to be detected.\n- Test for Semantic and Serialization were added.\n\nThis patch is not yet complete. I still need to check that interaction with CTAD and deduction guides is correct. and add more tests for AST operations. But I wanted first feedback.\nPerhaps this patch should be spited in smaller patches, but making each patch testable as a standalone may be tricky.\n\nPatch by Tyker\n\nDifferential Revision: https://reviews.llvm.org/D60934\n\nllvm-svn: 359949"},
[b]={{nil,z,A}},
[h]={{Tb,4063,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  while (true) {\n    // ...\n    case tok::kw_explicit: {\n      // ...\n      if (Tok.is(tok::l_paren)) {\n        if (getLangOpts().CPlusPlus20 || isExplicitBool() == TPResult::True) {\n        // ...\n        } else {\n          Diag(Tok.getLocation(), diag::warn_cxx20_compat_explicit_bool);"}},
[f]={"5fe2ddbdf47d",1556928540,"[clang] adding explicit(bool) from c++2a","[clang] adding explicit(bool) from c++2a\n\nthis patch adds support for the explicit bool specifier.\n\nChanges:\n- The parsing for the explicit(bool) specifier was added in ParseDecl.cpp.\n- The storage of the explicit specifier was changed. the explicit specifier was stored as a boolean value in the FunctionDeclBitfields and in the DeclSpec class. now it is stored as a PointerIntPair<Expr*, 2> with a flag and a potential expression in CXXConstructorDecl, CXXDeductionGuideDecl, CXXConversionDecl and in the DeclSpec class.\n- Following the AST change, Serialization, ASTMatchers, ASTComparator and ASTPrinter were adapted.\n- Template instantiation was adapted to instantiate the potential expressions of the explicit(bool) specifier When instantiating their associated declaration.\n- The Add*Candidate functions were adapted, they now take a Boolean indicating if the context allowing explicit constructor or conversion function and this boolean is used to remove invalid overloads that required template instantiation to be detected.\n- Test for Semantic and Serialization were added.\n\nThis patch is not yet complete. I still need to check that interaction with CTAD and deduction guides is correct. and add more tests for AST operations. But I wanted first feedback.\nPerhaps this patch should be spited in smaller patches, but making each patch testable as a standalone may be tricky.\n\nPatch by Tyker\n\nDifferential Revision: https://reviews.llvm.org/D60934\n\nllvm-svn: 359949"},
[k]={
[h]={{Wb,4063,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  while (true) {\n    // ...\n    case tok::kw_explicit: {\n      // ...\n      if (Tok.is(tok::l_paren)) {\n        if (getLangOpts().CPlusPlus20 || isExplicitBool() == TPResult::True) {\n        // ...\n        } else {\n          Diag(Tok.getLocation(), diag::warn_cxx20_compat_explicit_bool);"}},
[l]={
["clang/test/Parser/explicit-bool.cpp"]={"clang/test/Parser/explicit-bool.cpp:12:22: warning: this expression will be parsed as explicit(bool) in C++20 [-Wc++20-compat]","clang/test/Parser/explicit-bool.cpp:22:22: warning: this expression will be parsed as explicit(bool) in C++20 [-Wc++20-compat]","clang/test/Parser/explicit-bool.cpp:27:12: warning: this expression will be parsed as explicit(bool) in C++20 [-Wc++20-compat]","clang/test/Parser/explicit-bool.cpp:32:12: warning: this expression will be parsed as explicit(bool) in C++20 [-Wc++20-compat]","clang/test/Parser/explicit-bool.cpp:56:12: warning: this expression will be parsed as explicit(bool) in C++20 [-Wc++20-compat]"}
["clang/test/Parser/explicit-bool.cpp"]={"clang/test/Parser/explicit-bool.cpp:12:22: warning: this expression will be parsed as explicit(bool) in C++20 [-Wc++20-compat]","clang/test/Parser/explicit-bool.cpp:22:22: warning: this expression will be parsed as explicit(bool) in C++20 [-Wc++20-compat]","clang/test/Parser/explicit-bool.cpp:27:12: warning: this expression will be parsed as explicit(bool) in C++20 [-Wc++20-compat]","clang/test/Parser/explicit-bool.cpp:32:12: warning: this expression will be parsed as explicit(bool) in C++20 [-Wc++20-compat]","clang/test/Parser/explicit-bool.cpp:56:12: warning: this expression will be parsed as explicit(bool) in C++20 [-Wc++20-compat]"}
}
}
},
},
["warn_cxx20_compat_label_end_of_compound_statement"]={
["warn_cxx20_compat_label_end_of_compound_statement"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,U,P,P,rb,O,O,n,m,m,cb,Zb},
[k]={y,u,p,p,G,s,s,Q,v,v,P,cb,X,X,ub,W,W,o,n,n,lb,cc},
[i]=cb,
[j]=lb,
[c]="label at end of compound statement is incompatible with C++ standards before C++23",
[c]={{nil,bb,"warn_cxx20_compat_label_end_of_compound_statement"}},
[d]=g,
[d]="label at end of compound statement is incompatible with C++ standards before C++23",
[e]="label at end of compound statement is incompatible with C\\+\\+ standards before C\\+\\+23",
[e]=i,
[f]=Yb,
[g]="label at end of compound statement is incompatible with C\\+\\+ standards before C\\+\\+23",
[b]=v,
[a]=ec,
[a]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl.","[HLSL] Support cbuffer/tbuffer for hlsl.\n\nThis is first part for support cbuffer/tbuffer.\n\nThe format for cbuffer/tbuffer is\nBufferType [Name] [: register(b#)] { VariableDeclaration [: packoffset(c#.xyzw)]; ... };\n\nMore details at https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-constants\n\nNew keyword \'cbuffer\' and \'tbuffer\' are added.\nNew AST node HLSLBufferDecl is added.\nBuild AST for simple cbuffer/tbuffer without attribute support.\n\nThe special thing is variables declared inside cbuffer is exposed into global scope.\nSo isTransparentContext should return true for HLSLBuffer.\n\nReviewed By: aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D129883"},
[b]={{nil,bb,A}},
[f]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl.","[HLSL] Support cbuffer/tbuffer for hlsl.\n\nThis is first part for support cbuffer/tbuffer.\n\nThe format for cbuffer/tbuffer is\nBufferType [Name] [: register(b#)] { VariableDeclaration [: packoffset(c#.xyzw)]; ... };\n\nMore details at https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-constants\n\nNew keyword \'cbuffer\' and \'tbuffer\' are added.\nNew AST node HLSLBufferDecl is added.\nBuild AST for simple cbuffer/tbuffer without attribute support.\n\nThe special thing is variables declared inside cbuffer is exposed into global scope.\nSo isTransparentContext should return true for HLSLBuffer.\n\nReviewed By: aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D129883"},
[h]={{nc,1076,"void Parser::DiagnoseLabelAtEndOfCompoundStatement() {\n  if (getLangOpts().CPlusPlus) {\n    Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_label_end_of_compound_statement : diag::ext_cxx_label_end_of_compound_statement);"}},
[h]={{nc,1076,"void Parser::DiagnoseLabelAtEndOfCompoundStatement() {\n  if (getLangOpts().CPlusPlus) {\n    Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_label_end_of_compound_statement : diag::ext_cxx_label_end_of_compound_statement);"}},
[k]={
[l]={
["clang/test/Parser/cxx2b-label.cpp"]={"clang/test/Parser/cxx2b-label.cpp:10:1: warning: label at end of compound statement is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-label.cpp:20:5: warning: label at end of compound statement is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-label.cpp:27:5: warning: label at end of compound statement is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
["clang/test/Parser/cxx2b-label.cpp"]={"clang/test/Parser/cxx2b-label.cpp:10:1: warning: label at end of compound statement is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-label.cpp:20:5: warning: label at end of compound statement is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-label.cpp:27:5: warning: label at end of compound statement is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
}
}
},
},
["warn_cxx20_compat_operator_overload_static"]={
["warn_cxx20_compat_operator_overload_static"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,U,P,P,rb,O,O,n,m,m,cb,Zb},
[k]={y,u,p,p,G,s,s,Q,v,v,P,cb,X,X,ub,W,W,o,n,n,lb,cc},
[i]=cb,
[j]=lb,
[c]="declaring overloaded %0 as \'static\' is incompatible with C++ standards before C++23",
[c]={{nil,bb,"warn_cxx20_compat_operator_overload_static"}},
[d]=g,
[d]="declaring overloaded %0 as \'static\' is incompatible with C++ standards before C++23",
[e]="declaring overloaded (.*?) as \'static\' is incompatible with C\\+\\+ standards before C\\+\\+23",
[e]=i,
[f]=Yb,
[g]="declaring overloaded (.*?) as \'static\' is incompatible with C\\+\\+ standards before C\\+\\+23",
[b]=l,
[a]=ec,
[a]={Eb,1625925174,Fb,Hb},
[b]={{nil,bb,m}},
[h]={{C,16151,"/// CheckOverloadedOperatorDeclaration - Check whether the declaration\n/// of this overloaded operator is well-formed. If so, returns false;\n/// otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // C++ [over.oper]p7:\n  //  An operator function shall either be a member function or\n  //  be a non-member function and have at least one parameter\n  //  whose type is a class, a reference to a class, an enumeration,\n  //  or a reference to an enumeration.\n  // Note: Before C++23, a member function could not be static. The only member\n  //      function allowed to be static is the call operator function.\n  if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {\n    if (MethodDecl->isStatic()) {\n      if (Op == OO_Call || Op == OO_Subscript)\n        Diag(FnDecl->getLocation(), (LangOpts.CPlusPlus23 ? diag::warn_cxx20_compat_operator_overload_static : diag::ext_operator_overload_static)) << FnDecl;"}},
[f]={Lb,1625925174,Kb,Jb},
[k]={
[h]={{L,16151,"/// CheckOverloadedOperatorDeclaration - Check whether the declaration\n/// of this overloaded operator is well-formed. If so, returns false;\n/// otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // C++ [over.oper]p7:\n  //  An operator function shall either be a member function or\n  //  be a non-member function and have at least one parameter\n  //  whose type is a class, a reference to a class, an enumeration,\n  //  or a reference to an enumeration.\n  // Note: Before C++23, a member function could not be static. The only member\n  //      function allowed to be static is the call operator function.\n  if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {\n    if (MethodDecl->isStatic()) {\n      if (Op == OO_Call || Op == OO_Subscript)\n        Diag(FnDecl->getLocation(), (LangOpts.CPlusPlus23 ? diag::warn_cxx20_compat_operator_overload_static : diag::ext_operator_overload_static)) << FnDecl;"}},
[l]={
["clang/test/CXX/over/over.oper/p7.cpp"]={"clang/test/CXX/over/over.oper/p7.cpp:7:14: warning: declaring overloaded \'operator()\' as \'static\' is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/CXX/over/over.oper/p7.cpp:8:14: warning: declaring overloaded \'operator[]\' as \'static\' is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
["clang/test/CXX/over/over.oper/p7.cpp"]={"clang/test/CXX/over/over.oper/p7.cpp:7:14: warning: declaring overloaded \'operator()\' as \'static\' is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/CXX/over/over.oper/p7.cpp:8:14: warning: declaring overloaded \'operator[]\' as \'static\' is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
}
}
},
},
["warn_cxx20_compat_size_t_suffix"]={
["warn_cxx20_compat_size_t_suffix"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,U,P,P,rb,O,O,n,m,m,cb,Zb},
[k]={y,u,p,p,G,s,s,Q,v,v,P,cb,X,X,ub,W,W,o,n,n,lb,cc},
[i]=cb,
[j]=lb,
[c]="\'size_t\' suffix for literals is incompatible with C++ standards before C++23",
[c]={{nil,I,"warn_cxx20_compat_size_t_suffix"}},
[d]=g,
[d]="\'size_t\' suffix for literals is incompatible with C++ standards before C++23",
[e]="\'size_t\' suffix for literals is incompatible with C\\+\\+ standards before C\\+\\+23",
[e]=i,
[f]=Yb,
[g]="\'size_t\' suffix for literals is incompatible with C\\+\\+ standards before C\\+\\+23",
[b]=p,
[a]=ec,
[a]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals","[C++2b] Support size_t literals\n\nThis adds support for C++2b\'s z/uz suffixes for size_t literals (P0330)."},
[b]={{nil,I,r}},
[h]={{"clang/lib/Lex/PPExpressions.cpp",331,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::numeric_constant: {\n    // ...\n    // \'z/uz\' literals are a C++23 feature.\n    if (Literal.isSizeT)\n      PP.Diag(PeekTok, PP.getLangOpts().CPlusPlus ? PP.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_size_t_suffix : diag::ext_cxx23_size_t_suffix : diag::err_cxx23_size_t_suffix);"},{K,4058,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.isFixedPointLiteral()) {\n  // ...\n  } else if (Literal.isFloatingLiteral()) {\n  // ...\n  } else if (!Literal.isIntegerLiteral()) {\n  // ...\n  } else {\n    // ...\n    // \'z/uz\' literals are a C++23 feature.\n    if (Literal.isSizeT)\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus ? getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_size_t_suffix : diag::ext_cxx23_size_t_suffix : diag::err_cxx23_size_t_suffix);"}},
[f]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals","[C++2b] Support size_t literals\n\nThis adds support for C++2b\'s z/uz suffixes for size_t literals (P0330)."},
[k]={
[h]={{"clang/lib/Lex/PPExpressions.cpp",331,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::numeric_constant: {\n    // ...\n    // \'z/uz\' literals are a C++23 feature.\n    if (Literal.isSizeT)\n      PP.Diag(PeekTok, PP.getLangOpts().CPlusPlus ? PP.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_size_t_suffix : diag::ext_cxx23_size_t_suffix : diag::err_cxx23_size_t_suffix);"},{S,4058,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.isFixedPointLiteral()) {\n  // ...\n  } else if (Literal.isFloatingLiteral()) {\n  // ...\n  } else if (!Literal.isIntegerLiteral()) {\n  // ...\n  } else {\n    // ...\n    // \'z/uz\' literals are a C++23 feature.\n    if (Literal.isSizeT)\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus ? getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_size_t_suffix : diag::ext_cxx23_size_t_suffix : diag::err_cxx23_size_t_suffix);"}},
[l]={
["clang/test/SemaCXX/size_t-literal.cpp"]={"clang/test/SemaCXX/size_t-literal.cpp:19:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:24:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:31:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:36:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:41:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:46:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:51:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:56:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:61:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:66:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
["clang/test/SemaCXX/size_t-literal.cpp"]={"clang/test/SemaCXX/size_t-literal.cpp:19:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:24:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:31:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:36:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:41:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:46:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:51:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:56:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:61:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/SemaCXX/size_t-literal.cpp:66:13: warning: \'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
}
}
},
},
["warn_cxx20_compat_spaceship"]={
["warn_cxx20_compat_spaceship"]={
[j]={U,P,rb,O},
[k]={cb,X,ub,W},
[i]=U,
[j]=cb,
[c]={{nil,mb,"\'<=>\' is a single token in C++20; add a space to avoid a change in behavior"}},
[c]={{nil,z,"warn_cxx20_compat_spaceship"}},
[d]=g,
[d]={{nil,z,"\'<=>\' is a single token in C++20; add a space to avoid a change in behavior"}},
[e]="\'\\<\\=\\>\' is a single token in C\\+\\+20; add a space to avoid a change in behavior",
[e]=i,
[f]=Hc,
[g]="\'\\<\\=\\>\' is a single token in C\\+\\+20; add a space to avoid a change in behavior",
[b]=L,
[a]=Lc,
[a]={"edbf5972a4c9",1512090430,"[c++2a] P0515R3: lexer support for new <=> token.","[c++2a] P0515R3: lexer support for new <=> token.\n\nllvm-svn: 319509"},
[b]={{nil,z,T}},
[h]={{Ab,4129,"LexStart:\n  // ...\n  case \'<\':\n    // ...\n    if (ParsingFilename) {\n    // ...\n    } else if (Char == \'<\') {\n    // ...\n    } else if (Char == \'=\') {\n      // ...\n      if (After == \'>\') {\n        // ...\n        // Suggest adding a space between the \'<=\' and the \'>\' to avoid a\n        // change in semantics if this turns up in C++ <=17 mode.\n        if (LangOpts.CPlusPlus && !isLexingRawMode()) {\n          Diag(BufferPtr, diag::warn_cxx20_compat_spaceship) << FixItHint::CreateInsertion(getSourceLocation(CurPtr + SizeTmp, SizeTmp2), \" \");"}},
[f]={"edbf5972a4c9",1512090430,"[c++2a] P0515R3: lexer support for new <=> token.","[c++2a] P0515R3: lexer support for new <=> token.\n\nllvm-svn: 319509"},
[k]={
[h]={{Fb,4129,"LexStart:\n  // ...\n  case \'<\':\n    // ...\n    if (ParsingFilename) {\n    // ...\n    } else if (Char == \'<\') {\n    // ...\n    } else if (Char == \'=\') {\n      // ...\n      if (After == \'>\') {\n        // ...\n        // Suggest adding a space between the \'<=\' and the \'>\' to avoid a\n        // change in semantics if this turns up in C++ <=17 mode.\n        if (LangOpts.CPlusPlus && !isLexingRawMode()) {\n          Diag(BufferPtr, diag::warn_cxx20_compat_spaceship) << FixItHint::CreateInsertion(getSourceLocation(CurPtr + SizeTmp, SizeTmp2), \" \");"}},
[kc]={"clang/test/SemaCXX/cxx17-compat.cpp:102:16: warning: \'<=>\' is a single token in C++20; add a space to avoid a change in behavior [-Wc++20-compat]"}
[l]={
[tc]={"clang/test/SemaCXX/cxx17-compat.cpp:102:16: warning: \'<=>\' is a single token in C++20; add a space to avoid a change in behavior [-Wc++20-compat]"}
}
}
},
},
["warn_cxx20_compat_static_lambda"]={
["warn_cxx20_compat_static_lambda"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,U,P,P,rb,O,O,n,m,m,cb,Zb},
[k]={y,u,p,p,G,s,s,Q,v,v,P,cb,X,X,ub,W,W,o,n,n,lb,cc},
[i]=cb,
[j]=lb,
[c]="static lambdas are incompatible with C++ standards before C++23",
[c]={{nil,bb,"warn_cxx20_compat_static_lambda"}},
[d]=g,
[d]="static lambdas are incompatible with C++ standards before C++23",
[e]="static lambdas are incompatible with C\\+\\+ standards before C\\+\\+23",
[e]=i,
[f]=Yb,
[g]="static lambdas are incompatible with C\\+\\+ standards before C\\+\\+23",
[b]=v,
[a]=ec,
[a]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()","[Clang] P1169R4: static operator()\n\nImplements \'P1169R4: static operator()\' from C++2b.\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D133659"},
[b]={{nil,bb,A}},
[h]={{cc,1211,"static void addStaticToLambdaDeclSpecifier(Parser &P, SourceLocation StaticLoc, DeclSpec &DS) {\n  if (StaticLoc.isValid()) {\n    P.Diag(StaticLoc, !P.getLangOpts().CPlusPlus23 ? diag::err_static_lambda : diag::warn_cxx20_compat_static_lambda);"}},
[f]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()","[Clang] P1169R4: static operator()\n\nImplements \'P1169R4: static operator()\' from C++2b.\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D133659"},
[k]={
[h]={{fc,1211,"static void addStaticToLambdaDeclSpecifier(Parser &P, SourceLocation StaticLoc, DeclSpec &DS) {\n  if (StaticLoc.isValid()) {\n    P.Diag(StaticLoc, !P.getLangOpts().CPlusPlus23 ? diag::err_static_lambda : diag::warn_cxx20_compat_static_lambda);"}},
[l]={
["clang/test/Parser/cxx2b-lambdas-ext-warns.cpp"]={"clang/test/Parser/cxx2b-lambdas-ext-warns.cpp:10:16: warning: static lambdas are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-lambdas-ext-warns.cpp:13:14: warning: static lambdas are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
["clang/test/Parser/cxx2b-lambdas-ext-warns.cpp"]={"clang/test/Parser/cxx2b-lambdas-ext-warns.cpp:10:16: warning: static lambdas are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Parser/cxx2b-lambdas-ext-warns.cpp:13:14: warning: static lambdas are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
}
}
},
},
["warn_cxx20_compat_use_of_unaddressable_function"]={
["warn_cxx20_compat_use_of_unaddressable_function"]={
[j]={U,P,rb,O},
[k]={cb,X,ub,W},
[i]=U,
[j]=cb,
[c]={{nil,kb,"taking address of non-addressable standard library function is incompatible with C++20"}},
[c]={{nil,C,"warn_cxx20_compat_use_of_unaddressable_function"}},
[d]=g,
[d]={{nil,C,"taking address of non-addressable standard library function is incompatible with C++20"}},
[e]="taking address of non\\-addressable standard library function is incompatible with C\\+\\+20",
[e]=i,
[f]=Hc,
[g]="taking address of non\\-addressable standard library function is incompatible with C\\+\\+20",
[b]=l,
[a]=Lc,
[a]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[b]={{nil,C,m}},
[h]={{K,21621,"/// Check for operands with placeholder types and complain if found.\n/// Returns ExprError() if there was an error and no recovery was possible.\nExprResult Sema::CheckPlaceholderExpr(Expr *E) {\n  // ...\n  case BuiltinType::BuiltinFn: {\n    // ...\n    if (DRE) {\n      // ...\n      if (Context.BuiltinInfo.isInStdNamespace(BuiltinID)) {\n        // ...\n        Diag(E->getBeginLoc(), getLangOpts().CPlusPlus20 ? diag::err_use_of_unaddressable_function : diag::warn_cxx20_compat_use_of_unaddressable_function);"}},
[f]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[k]={
[h]={{S,21621,"/// Check for operands with placeholder types and complain if found.\n/// Returns ExprError() if there was an error and no recovery was possible.\nExprResult Sema::CheckPlaceholderExpr(Expr *E) {\n  // ...\n  case BuiltinType::BuiltinFn: {\n    // ...\n    if (DRE) {\n      // ...\n      if (Context.BuiltinInfo.isInStdNamespace(BuiltinID)) {\n        // ...\n        Diag(E->getBeginLoc(), getLangOpts().CPlusPlus20 ? diag::err_use_of_unaddressable_function : diag::warn_cxx20_compat_use_of_unaddressable_function);"}},
[l]={
["clang/test/CodeGenCXX/builtin-std-move.cpp"]={"clang/test/CodeGenCXX/builtin-std-move.cpp:60:18: warning: taking address of non-addressable standard library function is incompatible with C++20 [-Wc++20-compat]"}
["clang/test/CodeGenCXX/builtin-std-move.cpp"]={"clang/test/CodeGenCXX/builtin-std-move.cpp:60:18: warning: taking address of non-addressable standard library function is incompatible with C++20 [-Wc++20-compat]"}
}
}
},
},
["warn_cxx20_compat_utf8_string"]={
["warn_cxx20_compat_utf8_string"]={
[j]={U,P,rb,O},
[k]={cb,X,ub,W},
[i]=U,
[j]=cb,
[c]={{nil,mb,"type of UTF-8 string literal will change from array of const char to array of const char8_t in C++20"}},
[c]={{nil,z,"warn_cxx20_compat_utf8_string"}},
[d]=g,
[d]={{nil,z,"type of UTF-8 string literal will change from array of const char to array of const char8_t in C++20"}},
[e]="type of UTF\\-8 string literal will change from array of const char to array of const char8_t in C\\+\\+20",
[e]=i,
[f]=Hc,
[g]="type of UTF\\-8 string literal will change from array of const char to array of const char8_t in C\\+\\+20",
[b]=l,
[a]=Lc,
[a]={"28ddb91decff",1542229474,"[c++20] Implement P0482R6: enable -fchar8_t by default in C++20 mode.","[c++20] Implement P0482R6: enable -fchar8_t by default in C++20 mode.\n\nThis unfortunately results in a substantial breaking change when\nswitching to C++20, but it\'s not yet clear what / how much we should\ndo about that. We may want to add a compatibility conversion from\nu8 string literals to const char*, similar to how C++98 provided a\ncompatibility conversion from string literals to non-const char*,\nbut that\'s not handled by this patch.\n\nThe feature can be disabled in C++20 mode with -fno-char8_t.\n\nllvm-svn: 346892"},
[b]={{nil,z,m}},
[h]={{K,1991,"/// ActOnStringLiteral - The specified tokens were lexed as pasted string\n/// fragments (e.g. \"foo\" \"bar\" L\"baz\").  The result string has to handle string\n/// concatenation ([C99 5.1.1.2, translation phase #6]), so it may come from\n/// multiple tokens.  However, the common case is that StringToks points to one\n/// string.\n///\nExprResult Sema::ActOnStringLiteral(ArrayRef<Token> StringToks, Scope *UDLScope) {\n  // ...\n  // Warn on initializing an array of char from a u8 string literal; this\n  // becomes ill-formed in C++2a.\n  if (getLangOpts().CPlusPlus && !getLangOpts().CPlusPlus20 && !getLangOpts().Char8 && Kind == StringLiteral::UTF8) {\n    Diag(StringTokLocs.front(), diag::warn_cxx20_compat_utf8_string);"}},
[f]={"28ddb91decff",1542229474,"[c++20] Implement P0482R6: enable -fchar8_t by default in C++20 mode.","[c++20] Implement P0482R6: enable -fchar8_t by default in C++20 mode.\n\nThis unfortunately results in a substantial breaking change when\nswitching to C++20, but it\'s not yet clear what / how much we should\ndo about that. We may want to add a compatibility conversion from\nu8 string literals to const char*, similar to how C++98 provided a\ncompatibility conversion from string literals to non-const char*,\nbut that\'s not handled by this patch.\n\nThe feature can be disabled in C++20 mode with -fno-char8_t.\n\nllvm-svn: 346892"},
[k]={
[h]={{S,1991,"/// ActOnStringLiteral - The specified tokens were lexed as pasted string\n/// fragments (e.g. \"foo\" \"bar\" L\"baz\").  The result string has to handle string\n/// concatenation ([C99 5.1.1.2, translation phase #6]), so it may come from\n/// multiple tokens.  However, the common case is that StringToks points to one\n/// string.\n///\nExprResult Sema::ActOnStringLiteral(ArrayRef<Token> StringToks, Scope *UDLScope) {\n  // ...\n  // Warn on initializing an array of char from a u8 string literal; this\n  // becomes ill-formed in C++2a.\n  if (getLangOpts().CPlusPlus && !getLangOpts().CPlusPlus20 && !getLangOpts().Char8 && Kind == StringLiteral::UTF8) {\n    Diag(StringTokLocs.front(), diag::warn_cxx20_compat_utf8_string);"}},
[l]={
["clang/test/SemaCXX/cxx2a-compat.cpp"]={"clang/test/SemaCXX/cxx2a-compat.cpp:28:16: warning: type of UTF-8 string literal will change from array of const char to array of const char8_t in C++20 [-Wc++20-compat]","clang/test/SemaCXX/cxx2a-compat.cpp:29:21: warning: type of UTF-8 string literal will change from array of const char to array of const char8_t in C++20 [-Wc++20-compat]","clang/test/SemaCXX/cxx2a-compat.cpp:30:16: warning: type of UTF-8 string literal will change from array of const char to array of const char8_t in C++20 [-Wc++20-compat]"}
["clang/test/SemaCXX/cxx2a-compat.cpp"]={"clang/test/SemaCXX/cxx2a-compat.cpp:28:16: warning: type of UTF-8 string literal will change from array of const char to array of const char8_t in C++20 [-Wc++20-compat]","clang/test/SemaCXX/cxx2a-compat.cpp:29:21: warning: type of UTF-8 string literal will change from array of const char to array of const char8_t in C++20 [-Wc++20-compat]","clang/test/SemaCXX/cxx2a-compat.cpp:30:16: warning: type of UTF-8 string literal will change from array of const char to array of const char8_t in C++20 [-Wc++20-compat]"}
}
}
},
},
["warn_cxx20_keyword"]={
["warn_cxx20_keyword"]={
[j]={U,P,rb,O},
[k]={cb,X,ub,W},
[i]=U,
[j]=cb,
[c]={{nil,mb,"\'%0\' is a keyword in C++20"}},
[c]={{nil,z,"warn_cxx20_keyword"}},
[d]=g,
[d]={{nil,z,"\'%0\' is a keyword in C++20"}},
[e]="\'(.*?)\' is a keyword in C\\+\\+20",
[e]=i,
[f]=Hc,
[g]="\'(.*?)\' is a keyword in C\\+\\+20",
[b]=L,
[a]=Lc,
[a]={"6c74e32139ff",1502659953,"[c++2a] Treat \'concept\' and \'requires\' as keywords, add compat warning for C++17 and before.","[c++2a] Treat \'concept\' and \'requires\' as keywords, add compat warning for C++17 and before.\n\nllvm-svn: 310803"},
[b]={{nil,z,T}},
[f]={"6c74e32139ff",1502659953,"[c++2a] Treat \'concept\' and \'requires\' as keywords, add compat warning for C++17 and before.","[c++2a] Treat \'concept\' and \'requires\' as keywords, add compat warning for C++17 and before.\n\nllvm-svn: 310803"},
[h]={{"clang/lib/Basic/IdentifierTable.cpp",914,"#include \"clang/Basic/TokenKinds.def\"\n  // ...\n  if (LangOpts.CPlusPlus) {\n    // ...\n    // char8_t is not modeled as a CXX20_KEYWORD because it\'s not\n    // unconditionally enabled in C++20 mode. (It can be disabled\n    // by -fno-char8_t.)\n    if (((Flags & KEYCXX20) == KEYCXX20) || ((Flags & CHAR8SUPPORT) == CHAR8SUPPORT))\n      return diag::warn_cxx20_keyword;"}},
[h]={{"clang/lib/Basic/IdentifierTable.cpp",914,"#include \"clang/Basic/TokenKinds.def\"\n  // ...\n  if (LangOpts.CPlusPlus) {\n    // ...\n    // char8_t is not modeled as a CXX20_KEYWORD because it\'s not\n    // unconditionally enabled in C++20 mode. (It can be disabled\n    // by -fno-char8_t.)\n    if (((Flags & KEYCXX20) == KEYCXX20) || ((Flags & CHAR8SUPPORT) == CHAR8SUPPORT))\n      return diag::warn_cxx20_keyword;"}},
[k]={
[l]={
["clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp"]={"clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:8:5: warning: \'co_await\' is a keyword in C++20 [-Wc++20-compat]","clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:9:5: warning: \'co_return\' is a keyword in C++20 [-Wc++20-compat]","clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:10:5: warning: \'co_yield\' is a keyword in C++20 [-Wc++20-compat]","clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:11:5: warning: \'char8_t\' is a keyword in C++20 [-Wc++20-compat]","clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:12:5: warning: \'concept\' is a keyword in C++20 [-Wc++20-compat]","clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:13:5: warning: \'requires\' is a keyword in C++20 [-Wc++20-compat]","clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:14:5: warning: \'consteval\' is a keyword in C++20 [-Wc++20-compat]","clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:15:5: warning: \'constinit\' is a keyword in C++20 [-Wc++20-compat]"}
["clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp"]={"clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:8:5: warning: \'co_await\' is a keyword in C++20 [-Wc++20-compat]","clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:9:5: warning: \'co_return\' is a keyword in C++20 [-Wc++20-compat]","clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:10:5: warning: \'co_yield\' is a keyword in C++20 [-Wc++20-compat]","clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:11:5: warning: \'char8_t\' is a keyword in C++20 [-Wc++20-compat]","clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:12:5: warning: \'concept\' is a keyword in C++20 [-Wc++20-compat]","clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:13:5: warning: \'requires\' is a keyword in C++20 [-Wc++20-compat]","clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:14:5: warning: \'consteval\' is a keyword in C++20 [-Wc++20-compat]","clang/test/Lexer/cxx2a_keyword_as_cxx17.cpp:15:5: warning: \'constinit\' is a keyword in C++20 [-Wc++20-compat]"}
}
}
},
},
["warn_cxx23_compat_defaulted_comparison_constexpr_mismatch"]={
["warn_cxx23_compat_defaulted_comparison_constexpr_mismatch"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,U,P,P,rb,O,O,n,m,m,cb,Zb},
[k]={y,u,p,p,G,s,s,Q,v,v,P,cb,X,X,ub,W,W,o,n,n,lb,cc},
[i]=cb,
[j]=lb,
[c]="defaulted definition of %select{%select{<ERROR>|equality|three-way|equality|relational}1 comparison operator|three-way comparison operator}0 that is declared %select{constexpr|consteval}2 but%select{|for which the corresponding implicit \'operator==\' }0 invokes a non-constexpr comparison function is incompatible with C++ standards before C++23",
[c]="warn_cxx23_compat_defaulted_comparison_constexpr_mismatch",
[d]=g,
[d]="defaulted definition of %select{%select{<ERROR>|equality|three-way|equality|relational}1 comparison operator|three-way comparison operator}0 that is declared %select{constexpr|consteval}2 but%select{|for which the corresponding implicit \'operator==\' }0 invokes a non-constexpr comparison function is incompatible with C++ standards before C++23",
[e]="defaulted definition of (?:(?:equality|three\\-way|equality|relational) comparison operator|three\\-way comparison operator) that is declared (?:constexpr|consteval) but(?:|for which the corresponding implicit \'operator\\=\\=\' ) invokes a non\\-constexpr comparison function is incompatible with C\\+\\+ standards before C\\+\\+23",
[e]=i,
[f]=Yb,
[g]="defaulted definition of (?:(?:equality|three\\-way|equality|relational) comparison operator|three\\-way comparison operator) that is declared (?:constexpr|consteval) but(?:|for which the corresponding implicit \'operator\\=\\=\' ) invokes a non\\-constexpr comparison function is incompatible with C\\+\\+ standards before C\\+\\+23",
[b]=l,
[a]=ec,
[a]={Eb,1625925174,Fb,Hb},
[b]=m,
[h]={{C,8967,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  // C++2a [dcl.fct.def.default]p3 [P2002R0]:\n  //  An explicitly-defaulted function that is not defined as deleted may be\n  //  declared constexpr or consteval only if it is constexpr-compatible.\n  // C++2a [class.compare.default]p3 [P2002R0]:\n  //  A defaulted comparison function is constexpr-compatible if it satisfies\n  //  the requirements for a constexpr function [...]\n  // The only relevant requirements are that the parameter and return types are\n  // literal types. The remaining conditions are checked by the analyzer.\n  //\n  // We support P2448R2 in language modes earlier than C++23 as an extension.\n  // The concept of constexpr-compatible was removed.\n  // C++23 [dcl.fct.def.default]p3 [P2448R2]\n  //  A function explicitly defaulted on its first declaration is implicitly\n  //  inline, and is implicitly constexpr if it is constexpr-suitable.\n  // C++23 [dcl.constexpr]p3\n  //  A function is constexpr-suitable if\n  //    - it is not a coroutine, and\n  //    - if the function is a constructor or destructor, its class does not\n  //      have any virtual base classes.\n  if (FD->isConstexpr()) {\n    if (CheckConstexprReturnType(*this, FD, CheckConstexprKind::Diagnose) && CheckConstexprParameterTypes(*this, FD, CheckConstexprKind::Diagnose) && !Info.Constexpr) {\n      Diag(FD->getBeginLoc(), getLangOpts().CPlusPlus23 ? diag::warn_cxx23_compat_defaulted_comparison_constexpr_mismatch : diag::ext_defaulted_comparison_constexpr_mismatch) << FD->isImplicit() << (int)DCK << FD->isConsteval();"}}
[f]={Lb,1625925174,Kb,Jb},
[h]={{L,8967,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  // C++2a [dcl.fct.def.default]p3 [P2002R0]:\n  //  An explicitly-defaulted function that is not defined as deleted may be\n  //  declared constexpr or consteval only if it is constexpr-compatible.\n  // C++2a [class.compare.default]p3 [P2002R0]:\n  //  A defaulted comparison function is constexpr-compatible if it satisfies\n  //  the requirements for a constexpr function [...]\n  // The only relevant requirements are that the parameter and return types are\n  // literal types. The remaining conditions are checked by the analyzer.\n  //\n  // We support P2448R2 in language modes earlier than C++23 as an extension.\n  // The concept of constexpr-compatible was removed.\n  // C++23 [dcl.fct.def.default]p3 [P2448R2]\n  //  A function explicitly defaulted on its first declaration is implicitly\n  //  inline, and is implicitly constexpr if it is constexpr-suitable.\n  // C++23 [dcl.constexpr]p3\n  //  A function is constexpr-suitable if\n  //    - it is not a coroutine, and\n  //    - if the function is a constructor or destructor, its class does not\n  //      have any virtual base classes.\n  if (FD->isConstexpr()) {\n    if (CheckConstexprReturnType(*this, FD, CheckConstexprKind::Diagnose) && CheckConstexprParameterTypes(*this, FD, CheckConstexprKind::Diagnose) && !Info.Constexpr) {\n      Diag(FD->getBeginLoc(), getLangOpts().CPlusPlus23 ? diag::warn_cxx23_compat_defaulted_comparison_constexpr_mismatch : diag::ext_defaulted_comparison_constexpr_mismatch) << FD->isImplicit() << (int)DCK << FD->isConsteval();"}}
},
},
["warn_cxx23_compat_pp_directive"]={
["warn_cxx23_compat_pp_directive"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,U,P,P,rb,O,O,n,m,m,cb,Zb},
[k]={y,u,p,p,G,s,s,Q,v,v,P,cb,X,X,ub,W,W,o,n,n,lb,cc},
[i]=cb,
[j]=lb,
[c]="use of a \'#%select{<BUG IF SEEN>|elifdef|elifndef}0\' directive is incompatible with C++ standards before C++23",
[c]="warn_cxx23_compat_pp_directive",
[d]=g,
[d]="use of a \'#%select{<BUG IF SEEN>|elifdef|elifndef}0\' directive is incompatible with C++ standards before C++23",
[e]="use of a \'\\#(?:elifdef|elifndef)\' directive is incompatible with C\\+\\+ standards before C\\+\\+23",
[e]=i,
[f]=Yb,
[g]="use of a \'\\#(?:elifdef|elifndef)\' directive is incompatible with C\\+\\+ standards before C\\+\\+23",
[b]=L,
[a]=ec,
[a]={Eb,1625925174,Fb,Hb},
[b]=T,
[h]={{vd,768,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  // ...\n  while (true) {\n    // ...\n    if (Directive.startswith(\"if\")) {\n    // ...\n    } else if (Directive[0] == \'e\') {\n      // ...\n      if (Sub == \"ndif\") { // \"endif\"\n      // ...\n      } else if (Sub == \"lse\") { // \"else\".\n      // ...\n      } else if (Sub == \"lif\") { // \"elif\".\n      // ...\n      } else if (Sub == \"lifdef\" ||  // \"elifdef\"\n        // ...\n        if (LangOpts.CPlusPlus)\n          DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive : diag::ext_cxx23_pp_directive;"},{vd,3454,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n  // ...\n  case PED_Elifdef:\n  case PED_Elifndef:\n    // ...\n    if (LangOpts.CPlusPlus)\n      DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive : diag::ext_cxx23_pp_directive;"}},
[f]={Lb,1625925174,Kb,Jb},
[k]={
[h]={{Bd,768,"/// SkipExcludedConditionalBlock - We just read a \\#if or related directive and\n/// decided that the subsequent tokens are in the \\#if\'d out portion of the\n/// file.  Lex the rest of the file, until we see an \\#endif.  If\n/// FoundNonSkipPortion is true, then we have already emitted code for part of\n/// this \\#if directive, so \\#else/\\#elif blocks should never be entered.\n/// If ElseOk is true, then \\#else directives are ok, if not, then we have\n/// already seen one so a \\#else directive is a duplicate.  When this returns,\n/// the caller can lex the first valid token.\nvoid Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, SourceLocation IfTokenLoc, bool FoundNonSkipPortion, bool FoundElse, SourceLocation ElseLoc) {\n  // ...\n  while (true) {\n    // ...\n    if (Directive.startswith(\"if\")) {\n    // ...\n    } else if (Directive[0] == \'e\') {\n      // ...\n      if (Sub == \"ndif\") { // \"endif\"\n      // ...\n      } else if (Sub == \"lse\") { // \"else\".\n      // ...\n      } else if (Sub == \"lif\") { // \"elif\".\n      // ...\n      } else if (Sub == \"lifdef\" ||  // \"elifdef\"\n        // ...\n        if (LangOpts.CPlusPlus)\n          DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive : diag::ext_cxx23_pp_directive;"},{Bd,3454,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n  // ...\n  case PED_Elifdef:\n  case PED_Elifndef:\n    // ...\n    if (LangOpts.CPlusPlus)\n      DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive : diag::ext_cxx23_pp_directive;"}},
[l]={
["clang/test/Preprocessor/ext-pp-directive.c"]={"clang/test/Preprocessor/ext-pp-directive.c:18:2: warning: use of a \'#elifdef\' directive is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ext-pp-directive.c:29:2: warning: use of a \'#elifndef\' directive is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ext-pp-directive.c:40:2: warning: use of a \'#elifdef\' directive is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ext-pp-directive.c:51:2: warning: use of a \'#elifndef\' directive is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
["clang/test/Preprocessor/ext-pp-directive.c"]={"clang/test/Preprocessor/ext-pp-directive.c:18:2: warning: use of a \'#elifdef\' directive is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ext-pp-directive.c:29:2: warning: use of a \'#elifndef\' directive is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ext-pp-directive.c:40:2: warning: use of a \'#elifdef\' directive is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ext-pp-directive.c:51:2: warning: use of a \'#elifndef\' directive is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
}
}
},
},
["warn_cxx23_compat_warning_directive"]={
["warn_cxx23_compat_warning_directive"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,U,P,P,rb,O,O,n,m,m,cb,Zb},
[k]={y,u,p,p,G,s,s,Q,v,v,P,cb,X,X,ub,W,W,o,n,n,lb,cc},
[i]=cb,
[j]=lb,
[c]="#warning is incompatible with C++ standards before C++23",
[c]="warn_cxx23_compat_warning_directive",
[d]=g,
[d]="#warning is incompatible with C++ standards before C++23",
[e]="\\#warning is incompatible with C\\+\\+ standards before C\\+\\+23",
[e]=i,
[f]=Yb,
[g]="\\#warning is incompatible with C\\+\\+ standards before C\\+\\+23",
[b]=L,
[a]=ec,
[a]={Eb,1625925174,Fb,Hb},
[b]=T,
[h]={{vd,1277,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line.  This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n  // ...\n  default:\n    // ...\n    case tok::pp_warning:\n      if (LangOpts.CPlusPlus)\n        Diag(Result, LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_warning_directive : diag::ext_pp_warning_directive) << /*C++23*/ 1;"}},
[f]={Lb,1625925174,Kb,Jb},
[k]={
[h]={{Bd,1277,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line.  This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n  // ...\n  default:\n    // ...\n    case tok::pp_warning:\n      if (LangOpts.CPlusPlus)\n        Diag(Result, LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_warning_directive : diag::ext_pp_warning_directive) << /*C++23*/ 1;"}},
[l]={
["clang/test/Preprocessor/ext-pp-directive.c"]={"clang/test/Preprocessor/ext-pp-directive.c:61:2: warning: #warning is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
["clang/test/Preprocessor/ext-pp-directive.c"]={"clang/test/Preprocessor/ext-pp-directive.c:61:2: warning: #warning is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
}
}
},
},
["warn_cxx23_delimited_escape_sequence"]={
["warn_cxx23_delimited_escape_sequence"]={
[j]={u,s,o,o,x,q,q,G,t,t,F,U,P,P,rb,O,O,n,m,m,cb,Zb},
[k]={y,u,p,p,G,s,s,Q,v,v,P,cb,X,X,ub,W,W,o,n,n,lb,cc},
[i]=cb,
[j]=lb,
[c]="%select{delimited|named}0 escape sequences are incompatible with C++ standards before C++23",
[c]="warn_cxx23_delimited_escape_sequence",
[d]=g,
[d]="%select{delimited|named}0 escape sequences are incompatible with C++ standards before C++23",
[e]="(?:delimited|named) escape sequences are incompatible with C\\+\\+ standards before C\\+\\+23",
[e]=i,
[f]=Yb,
[g]="(?:delimited|named) escape sequences are incompatible with C\\+\\+ standards before C\\+\\+23",
[b]=L,
[a]=ec,
[a]={Eb,1625925174,Fb,Hb},
[b]=T,
[h]={{Ab,3353,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (Delimited && PP) {\n    Diag(SlashLoc, PP->getLangOpts().CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*delimited*/ 0 << (PP->getLangOpts().CPlusPlus ? 1 : 0);"},{Ab,3441,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (Diagnose && Match)\n    Diag(SlashLoc, PP->getLangOpts().CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*named*/ 1 << (PP->getLangOpts().CPlusPlus ? 1 : 0);"},{jd,356,"/// ProcessCharEscape - Parse a standard C escape sequence, which can occur in\n/// either a character or a string literal.\nstatic unsigned ProcessCharEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, bool &HadError, FullSourceLoc Loc, unsigned CharWidth, DiagnosticsEngine *Diags, const LangOptions &Features, StringLiteralEvalMethod EvalMethod) {\n  // ...\n  if (Delimited && Diags) {\n    if (!EndDelimiterFound)\n    // ...\n    else if (!HadError) {\n      Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, Features.CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*delimited*/ 0 << (Features.CPlusPlus ? 1 : 0);"},{jd,699,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // ...\n  if ((IsDelimitedEscapeSequence || IsNamedEscapeSequence) && Diags)\n    Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, Features.CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << (IsNamedEscapeSequence ? 1 : 0) << (Features.CPlusPlus ? 1 : 0);"}},
[f]={Lb,1625925174,Kb,Jb},
[k]={
[h]={{Fb,3353,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (Delimited && PP) {\n    Diag(SlashLoc, PP->getLangOpts().CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*delimited*/ 0 << (PP->getLangOpts().CPlusPlus ? 1 : 0);"},{Fb,3441,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (Diagnose && Match)\n    Diag(SlashLoc, PP->getLangOpts().CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*named*/ 1 << (PP->getLangOpts().CPlusPlus ? 1 : 0);"},{id,356,"/// ProcessCharEscape - Parse a standard C escape sequence, which can occur in\n/// either a character or a string literal.\nstatic unsigned ProcessCharEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, bool &HadError, FullSourceLoc Loc, unsigned CharWidth, DiagnosticsEngine *Diags, const LangOptions &Features, StringLiteralEvalMethod EvalMethod) {\n  // ...\n  if (Delimited && Diags) {\n    if (!EndDelimiterFound)\n    // ...\n    else if (!HadError) {\n      Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, Features.CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*delimited*/ 0 << (Features.CPlusPlus ? 1 : 0);"},{id,699,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // ...\n  if ((IsDelimitedEscapeSequence || IsNamedEscapeSequence) && Diags)\n    Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, Features.CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << (IsNamedEscapeSequence ? 1 : 0) << (Features.CPlusPlus ? 1 : 0);"}},
[l]={
["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:22:6: warning: delimited escape sequences are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ucn-pp-identifier.c:37:9: warning: delimited escape sequences are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ucn-pp-identifier.c:39:9: warning: named escape sequences are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ucn-pp-identifier.c:42:9: warning: named escape sequences are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ucn-pp-identifier.c:144:5: warning: named escape sequences are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ucn-pp-identifier.c:149:5: warning: named escape sequences are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:22:6: warning: delimited escape sequences are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ucn-pp-identifier.c:37:9: warning: delimited escape sequences are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ucn-pp-identifier.c:39:9: warning: named escape sequences are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ucn-pp-identifier.c:42:9: warning: named escape sequences are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ucn-pp-identifier.c:144:5: warning: named escape sequences are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]","clang/test/Preprocessor/ucn-pp-identifier.c:149:5: warning: named escape sequences are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]"}
}
}
},
},
["warn_cxx98_compat_alias_declaration"]={
["warn_cxx98_compat_alias_declaration"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="alias declarations are incompatible with C++98",
[c]="warn_cxx98_compat_alias_declaration",
[d]=g,
[d]="alias declarations are incompatible with C++98",
[e]="alias declarations are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="alias declarations are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[h]={{bb,878,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // ...\n  Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_alias_declaration : diag::ext_alias_declaration);"}},
[f]={Tb,1318655374,Sb,Rb},
[k]={
[h]={{kb,878,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // ...\n  Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_alias_declaration : diag::ext_alias_declaration);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:7:18: warning: alias declarations are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:137:19: warning: alias declarations are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:138:44: warning: alias declarations are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:7:18: warning: alias declarations are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:137:19: warning: alias declarations are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:138:44: warning: alias declarations are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_alignas"]={
["warn_cxx98_compat_alignas"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="\'alignas\' is incompatible with C++98",
[c]="warn_cxx98_compat_alignas",
[d]=g,
[d]="\'alignas\' is incompatible with C++98",
[e]="\'alignas\' is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="\'alignas\' is incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={"f679b5b6a6cb",1318625307,"-Wc++98-compat: warn on C++11 attributes and alignas.","-Wc++98-compat: warn on C++11 attributes and alignas.\n\nllvm-svn: 141999"},
[b]=A,
[h]={{bb,4506,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  if (Tok.is(tok::kw_alignas)) {\n    if (getLangOpts().C2x)\n    // ...\n    else\n      Diag(Tok.getLocation(), diag::warn_cxx98_compat_alignas);"}},
[f]={"f679b5b6a6cb",1318625307,"-Wc++98-compat: warn on C++11 attributes and alignas.","-Wc++98-compat: warn on C++11 attributes and alignas.\n\nllvm-svn: 141999"},
[k]={
[h]={{kb,4506,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  if (Tok.is(tok::kw_alignas)) {\n    if (getLangOpts().C2x)\n    // ...\n    else\n      Diag(Tok.getLocation(), diag::warn_cxx98_compat_alignas);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:26:1: warning: \'alignas\' is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:26:1: warning: \'alignas\' is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_alignof"]={
["warn_cxx98_compat_alignof"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="alignof expressions are incompatible with C++98",
[c]="warn_cxx98_compat_alignof",
[d]=g,
[d]="alignof expressions are incompatible with C++98",
[e]="alignof expressions are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="alignof expressions are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Nc,1318892780,Oc,Pc},
[b]=A,
[h]={{Jc,2495,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///      unary-expression:  [C99 6.5.3]\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  // ...\n  if (getLangOpts().CPlusPlus && OpTok.isOneOf(tok::kw_alignof, tok::kw__Alignof))\n    Diag(OpTok, diag::warn_cxx98_compat_alignof);"}},
[f]={ed,1318892780,fd,Pc},
[k]={
[h]={{Mc,2495,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///      unary-expression:  [C99 6.5.3]\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  // ...\n  if (getLangOpts().CPlusPlus && OpTok.isOneOf(tok::kw_alignof, tok::kw__Alignof))\n    Diag(OpTok, diag::warn_cxx98_compat_alignof);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:146:22: warning: alignof expressions are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:146:22: warning: alignof expressions are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_array_size_conversion"]={
["warn_cxx98_compat_array_size_conversion"]={
[j]={m},
[k]={n},
[i]=m,
[j]=n,
[c]="implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is incompatible with C++98",
[c]="warn_cxx98_compat_array_size_conversion",
[d]=g,
[d]="implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is incompatible with C++98",
[e]="implicit conversion from array size expression of type (.*?) to (?:integral|enumeration) type (.*?) is incompatible with C\\+\\+98",
[e]=i,
[f]=Kc,
[g]="implicit conversion from array size expression of type (.*?) to (?:integral|enumeration) type (.*?) is incompatible with C\\+\\+98",
[b]=l,
[a]=Kc,
[a]={hc,1318970984,fc,ec},
[b]=m,
[f]={jc,1318970984,kc,lc},
[h]={{bc,2135,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  // ...\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    // ...\n    if (getLangOpts().CPlusPlus14) {\n      // ...\n      if (!ConvertedSize.isInvalid() && (*ArraySize)->getType()->getAs<RecordType>())\n        // ...\n        Diag(StartLoc, diag::warn_cxx98_compat_array_size_conversion) << (*ArraySize)->getType() << 0 << \"\'size_t\'\";"},{bc,2186,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  // ...\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    // ...\n    if (getLangOpts().CPlusPlus14) {\n    // ...\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        // ...\n        SemaDiagnosticBuilder diagnoseConversion(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_array_size_conversion : diag::ext_array_size_conversion) << T << ConvTy->isEnumeralType() << ConvTy; }"}},
[h]={{bc,2135,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  // ...\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    // ...\n    if (getLangOpts().CPlusPlus14) {\n      // ...\n      if (!ConvertedSize.isInvalid() && (*ArraySize)->getType()->getAs<RecordType>())\n        // ...\n        Diag(StartLoc, diag::warn_cxx98_compat_array_size_conversion) << (*ArraySize)->getType() << 0 << \"\'size_t\'\";"},{bc,2186,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  // ...\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    // ...\n    if (getLangOpts().CPlusPlus14) {\n    // ...\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        // ...\n        SemaDiagnosticBuilder diagnoseConversion(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_array_size_conversion : diag::ext_array_size_conversion) << T << ConvTy->isEnumeralType() << ConvTy; }"}},
[k]={
[l]={
[rd]={"clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32785:28: warning: implicit conversion from array size expression of type \'ConvertToInt\' to integral type \'size_t\' is incompatible with C++98 [-Wc++98-compat-pedantic]"}
[pd]={"clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32785:28: warning: implicit conversion from array size expression of type \'ConvertToInt\' to integral type \'size_t\' is incompatible with C++98 [-Wc++98-compat-pedantic]"}
}
}
},
},
["warn_cxx98_compat_attribute"]={
["warn_cxx98_compat_attribute"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="[[]] attributes are incompatible with C++ standards before C++11",
[c]="warn_cxx98_compat_attribute",
[d]=g,
[d]="[[]] attributes are incompatible with C++ standards before C++11",
[e]="\\[\\[\\]\\] attributes are incompatible with C\\+\\+ standards before C\\+\\+11",
[e]=i,
[f]=w,
[g]="\\[\\[\\]\\] attributes are incompatible with C\\+\\+ standards before C\\+\\+11",
[b]=v,
[a]=E,
[a]={"f679b5b6a6cb",1318625307,"-Wc++98-compat: warn on C++11 attributes and alignas.","-Wc++98-compat: warn on C++11 attributes and alignas.\n\nllvm-svn: 141999"},
[b]=A,
[h]={{bb,4524,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    Diag(OpenLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_attribute : diag::warn_ext_cxx11_attributes);"}},
[f]={"f679b5b6a6cb",1318625307,"-Wc++98-compat: warn on C++11 attributes and alignas.","-Wc++98-compat: warn on C++11 attributes and alignas.\n\nllvm-svn: 141999"},
[k]={
[h]={{kb,4524,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    Diag(OpenLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_attribute : diag::warn_ext_cxx11_attributes);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:27:20: warning: [[]] attributes are incompatible with C++ standards before C++11 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:27:20: warning: [[]] attributes are incompatible with C++ standards before C++11 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_auto_type_specifier"]={
["warn_cxx98_compat_auto_type_specifier"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="\'auto\' type specifier is incompatible with C++98",
[c]="warn_cxx98_compat_auto_type_specifier",
[d]=g,
[d]="\'auto\' type specifier is incompatible with C++98",
[e]="\'auto\' type specifier is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="\'auto\' type specifier is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"e41fac231c9d",1318657321,"Add -Wc++98-compat warning for deduced \'auto\' type specifier.","Add -Wc++98-compat warning for deduced \'auto\' type specifier.\n\nllvm-svn: 142057"},
[b]=m,
[h]={{Jb,3751,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // ...\n  // C++11 [dcl.spec.auto]p5: reject \'auto\' if it is not in an allowed context.\n  if (Deduced) {\n    // ...\n    if (Error != -1) {\n    // ...\n    } else if (Auto && D.getContext() != DeclaratorContext::LambdaExpr) {\n      // ...\n      SemaRef.Diag(AutoRange.getBegin(), D.getContext() == DeclaratorContext::LambdaExprParameter ? diag::warn_cxx11_compat_generic_lambda : IsDeducedReturnType ? diag::warn_cxx11_compat_deduced_return_type : diag::warn_cxx98_compat_auto_type_specifier) << AutoRange;"}},
[f]={"e41fac231c9d",1318657321,"Add -Wc++98-compat warning for deduced \'auto\' type specifier.","Add -Wc++98-compat warning for deduced \'auto\' type specifier.\n\nllvm-svn: 142057"},
[k]={
[h]={{Nb,3751,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // ...\n  // C++11 [dcl.spec.auto]p5: reject \'auto\' if it is not in an allowed context.\n  if (Deduced) {\n    // ...\n    if (Error != -1) {\n    // ...\n    } else if (Auto && D.getContext() != DeclaratorContext::LambdaExpr) {\n      // ...\n      SemaRef.Diag(AutoRange.getBegin(), D.getContext() == DeclaratorContext::LambdaExprParameter ? diag::warn_cxx11_compat_generic_lambda : IsDeducedReturnType ? diag::warn_cxx11_compat_deduced_return_type : diag::warn_cxx98_compat_auto_type_specifier) << AutoRange;"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:73:3: warning: \'auto\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:107:1: warning: \'auto\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:115:8: warning: \'auto\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:143:1: warning: \'auto\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:144:14: warning: \'auto\' type specifier is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:73:3: warning: \'auto\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:107:1: warning: \'auto\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:115:8: warning: \'auto\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:143:1: warning: \'auto\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:144:14: warning: \'auto\' type specifier is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_cast_fn_obj"]={
["warn_cxx98_compat_cast_fn_obj"]={
[j]={m},
[k]={n},
[i]=m,
[j]=n,
[c]="cast between pointer-to-function and pointer-to-object is incompatible with C++98",
[c]="warn_cxx98_compat_cast_fn_obj",
[d]=g,
[d]="cast between pointer-to-function and pointer-to-object is incompatible with C++98",
[e]="cast between pointer\\-to\\-function and pointer\\-to\\-object is incompatible with C\\+\\+98",
[e]=i,
[f]=Kc,
[g]="cast between pointer\\-to\\-function and pointer\\-to\\-object is incompatible with C\\+\\+98",
[b]=l,
[a]=Kc,
[a]={hc,1318970984,fc,ec},
[b]=m,
[f]={jc,1318970984,kc,lc},
[h]={{"clang/lib/Sema/SemaCast.cpp",2559,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (SrcType->isFunctionPointerType()) {\n    // ...\n    Self.Diag(OpRange.getBegin(), Self.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_cast_fn_obj : diag::ext_cast_fn_obj) << OpRange;"},{"clang/lib/Sema/SemaCast.cpp",2568,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (DestType->isFunctionPointerType()) {\n    // ...\n    Self.Diag(OpRange.getBegin(), Self.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_cast_fn_obj : diag::ext_cast_fn_obj) << OpRange;"}},
[h]={{"clang/lib/Sema/SemaCast.cpp",2559,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (SrcType->isFunctionPointerType()) {\n    // ...\n    Self.Diag(OpRange.getBegin(), Self.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_cast_fn_obj : diag::ext_cast_fn_obj) << OpRange;"},{"clang/lib/Sema/SemaCast.cpp",2568,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (DestType->isFunctionPointerType()) {\n    // ...\n    Self.Diag(OpRange.getBegin(), Self.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_cast_fn_obj : diag::ext_cast_fn_obj) << OpRange;"}},
[k]={
[l]={
[rd]={"clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32779:19: warning: cast between pointer-to-function and pointer-to-object is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32780:19: warning: cast between pointer-to-function and pointer-to-object is incompatible with C++98 [-Wc++98-compat-pedantic]"}
[pd]={"clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32779:19: warning: cast between pointer-to-function and pointer-to-object is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32780:19: warning: cast between pointer-to-function and pointer-to-object is incompatible with C++98 [-Wc++98-compat-pedantic]"}
}
}
},
},
["warn_cxx98_compat_constexpr"]={
["warn_cxx98_compat_constexpr"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="\'constexpr\' specifier is incompatible with C++98",
[c]="warn_cxx98_compat_constexpr",
[d]=g,
[d]="\'constexpr\' specifier is incompatible with C++98",
[e]="\'constexpr\' specifier is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="\'constexpr\' specifier is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={Nc,1318892780,Oc,Pc},
[b]=m,
[h]={{oc,1380,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  if (getConstexprSpecifier() == ConstexprSpecKind::Constexpr)\n    S.Diag(ConstexprLoc, diag::warn_cxx98_compat_constexpr);"}},
[f]={ed,1318892780,fd,Pc},
[k]={
[h]={{uc,1380,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  if (getConstexprSpecifier() == ConstexprSpecKind::Constexpr)\n    S.Diag(ConstexprLoc, diag::warn_cxx98_compat_constexpr);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:149:1: warning: \'constexpr\' specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:262:12: warning: \'constexpr\' specifier is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:149:1: warning: \'constexpr\' specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:262:12: warning: \'constexpr\' specifier is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_ctor_list_init"]={
["warn_cxx98_compat_ctor_list_init"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="constructor call from initializer list is incompatible with C++98",
[c]="warn_cxx98_compat_ctor_list_init",
[d]=g,
[d]="constructor call from initializer list is incompatible with C++98",
[e]="constructor call from initializer list is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="constructor call from initializer list is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"2b349aee5b6f",1334818680,"Add missing -Wc++98-compat warnings for initializer list initializations which","Add missing -Wc++98-compat warnings for initializer list initializations which\ninitialize references, create std::initializer_list objects, or call constructors.\n\nllvm-svn: 155105"},
[b]=m,
[h]={{fb,9060,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    // ...\n    case SK_ConstructorInitializationFromList: {\n      // ...\n      S.Diag(InitList->getExprLoc(), diag::warn_cxx98_compat_ctor_list_init) << InitList->getSourceRange();"}},
[f]={"2b349aee5b6f",1334818680,"Add missing -Wc++98-compat warnings for initializer list initializations which","Add missing -Wc++98-compat warnings for initializer list initializations which\ninitialize references, create std::initializer_list objects, or call constructors.\n\nllvm-svn: 155105"},
[k]={
[h]={{mb,9060,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    // ...\n    case SK_ConstructorInitializationFromList: {\n      // ...\n      S.Diag(InitList->getExprLoc(), diag::warn_cxx98_compat_ctor_list_init) << InitList->getSourceRange();"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:75:13: warning: constructor call from initializer list is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:76:13: warning: constructor call from initializer list is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:75:13: warning: constructor call from initializer list is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:76:13: warning: constructor call from initializer list is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_decltype"]={
["warn_cxx98_compat_decltype"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="\'decltype\' type specifier is incompatible with C++98",
[c]="warn_cxx98_compat_decltype",
[d]=g,
[d]="\'decltype\' type specifier is incompatible with C++98",
[e]="\'decltype\' type specifier is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="\'decltype\' type specifier is incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Nc,1318892780,Oc,Pc},
[b]=A,
[h]={{bb,1086,"/// ParseDecltypeSpecifier - Parse a C++11 decltype specifier.\n///\n/// \'decltype\' ( expression )\n/// \'decltype\' ( \'auto\' )      [C++1y]\n///\nSourceLocation Parser::ParseDecltypeSpecifier(DeclSpec &DS) {\n  // ...\n  if (Tok.is(tok::annot_decltype)) {\n  // ...\n  } else {\n    if (Tok.getIdentifierInfo()->isStr(\"decltype\"))\n      Diag(Tok, diag::warn_cxx98_compat_decltype);"}},
[f]={ed,1318892780,fd,Pc},
[k]={
[h]={{kb,1086,"/// ParseDecltypeSpecifier - Parse a C++11 decltype specifier.\n///\n/// \'decltype\' ( expression )\n/// \'decltype\' ( \'auto\' )      [C++1y]\n///\nSourceLocation Parser::ParseDecltypeSpecifier(DeclSpec &DS) {\n  // ...\n  if (Tok.is(tok::annot_decltype)) {\n  // ...\n  } else {\n    if (Tok.getIdentifierInfo()->isStr(\"decltype\"))\n      Diag(Tok, diag::warn_cxx98_compat_decltype);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:7:18: warning: \'decltype\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:150:1: warning: \'decltype\' type specifier is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:7:18: warning: \'decltype\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:150:1: warning: \'decltype\' type specifier is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_defaulted_deleted_function"]={
["warn_cxx98_compat_defaulted_deleted_function"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="%select{defaulted|deleted}0 function definitions are incompatible with C++98",
[c]="warn_cxx98_compat_defaulted_deleted_function",
[d]=g,
[d]="%select{defaulted|deleted}0 function definitions are incompatible with C++98",
[e]="(?:defaulted|deleted) function definitions are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="(?:defaulted|deleted) function definitions are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select.","Merge some similar diagnostics using %select.\n\nllvm-svn: 253136"},
[b]=A,
[h]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",71,"/// ParseCXXInlineMethodDef - We parsed and verified that the specified\n/// Declarator is a well formed C++ inline method definition. Now lex its body\n/// and store its tokens for parsing after the C++ class is complete.\nNamedDecl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS, const ParsedAttributesView &AccessAttrs, ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, const VirtSpecifiers &VS, SourceLocation PureSpecLoc) {\n  // ...\n  if (TryConsumeToken(tok::equal)) {\n    // ...\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 1 /* deleted */;"},{"clang/lib/Parse/ParseCXXInlineMethods.cpp",81,"/// ParseCXXInlineMethodDef - We parsed and verified that the specified\n/// Declarator is a well formed C++ inline method definition. Now lex its body\n/// and store its tokens for parsing after the C++ class is complete.\nNamedDecl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS, const ParsedAttributesView &AccessAttrs, ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, const VirtSpecifiers &VS, SourceLocation PureSpecLoc) {\n  // ...\n  if (TryConsumeToken(tok::equal)) {\n    // ...\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n    // ...\n    } else if (TryConsumeToken(tok::kw_default, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 0 /* defaulted */;"},{Lc,1367,"/// ParseFunctionDefinition - We parsed and verified that the specified\n/// Declarator is well formed.  If this is a K&R-style function, read the\n/// parameters declaration-list, then start the compound-statement.\n///\n///      function-definition: [C99 6.9.1]\n///        decl-specs      declarator declaration-list[opt] compound-statement\n/// [C90] function-definition: [C99 6.7.1] - implicit int result\n/// [C90]  decl-specs[opt] declarator declaration-list[opt] compound-statement\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator ctor-initializer[opt]\n///        function-body\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator function-try-block\n///\nDecl *Parser::ParseFunctionDefinition(ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, LateParsedAttrList *LateParsedAttrs) {\n  // ...\n  if (TryConsumeToken(tok::equal)) {\n    // ...\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 1 /* deleted */;"},{Lc,1373,"/// ParseFunctionDefinition - We parsed and verified that the specified\n/// Declarator is well formed.  If this is a K&R-style function, read the\n/// parameters declaration-list, then start the compound-statement.\n///\n///      function-definition: [C99 6.9.1]\n///        decl-specs      declarator declaration-list[opt] compound-statement\n/// [C90] function-definition: [C99 6.7.1] - implicit int result\n/// [C90]  decl-specs[opt] declarator declaration-list[opt] compound-statement\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator ctor-initializer[opt]\n///        function-body\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator function-try-block\n///\nDecl *Parser::ParseFunctionDefinition(ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, LateParsedAttrList *LateParsedAttrs) {\n  // ...\n  if (TryConsumeToken(tok::equal)) {\n    // ...\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n    // ...\n    } else if (TryConsumeToken(tok::kw_default, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 0 /* defaulted */;"}},
[f]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select.","Merge some similar diagnostics using %select.\n\nllvm-svn: 253136"},
[k]={
[h]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",71,"/// ParseCXXInlineMethodDef - We parsed and verified that the specified\n/// Declarator is a well formed C++ inline method definition. Now lex its body\n/// and store its tokens for parsing after the C++ class is complete.\nNamedDecl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS, const ParsedAttributesView &AccessAttrs, ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, const VirtSpecifiers &VS, SourceLocation PureSpecLoc) {\n  // ...\n  if (TryConsumeToken(tok::equal)) {\n    // ...\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 1 /* deleted */;"},{"clang/lib/Parse/ParseCXXInlineMethods.cpp",81,"/// ParseCXXInlineMethodDef - We parsed and verified that the specified\n/// Declarator is a well formed C++ inline method definition. Now lex its body\n/// and store its tokens for parsing after the C++ class is complete.\nNamedDecl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS, const ParsedAttributesView &AccessAttrs, ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, const VirtSpecifiers &VS, SourceLocation PureSpecLoc) {\n  // ...\n  if (TryConsumeToken(tok::equal)) {\n    // ...\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n    // ...\n    } else if (TryConsumeToken(tok::kw_default, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 0 /* defaulted */;"},{Hc,1367,"/// ParseFunctionDefinition - We parsed and verified that the specified\n/// Declarator is well formed.  If this is a K&R-style function, read the\n/// parameters declaration-list, then start the compound-statement.\n///\n///      function-definition: [C99 6.9.1]\n///        decl-specs      declarator declaration-list[opt] compound-statement\n/// [C90] function-definition: [C99 6.7.1] - implicit int result\n/// [C90]  decl-specs[opt] declarator declaration-list[opt] compound-statement\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator ctor-initializer[opt]\n///        function-body\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator function-try-block\n///\nDecl *Parser::ParseFunctionDefinition(ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, LateParsedAttrList *LateParsedAttrs) {\n  // ...\n  if (TryConsumeToken(tok::equal)) {\n    // ...\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 1 /* deleted */;"},{Hc,1373,"/// ParseFunctionDefinition - We parsed and verified that the specified\n/// Declarator is well formed.  If this is a K&R-style function, read the\n/// parameters declaration-list, then start the compound-statement.\n///\n///      function-definition: [C99 6.9.1]\n///        decl-specs      declarator declaration-list[opt] compound-statement\n/// [C90] function-definition: [C99 6.7.1] - implicit int result\n/// [C90]  decl-specs[opt] declarator declaration-list[opt] compound-statement\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator ctor-initializer[opt]\n///        function-body\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator function-try-block\n///\nDecl *Parser::ParseFunctionDefinition(ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, LateParsedAttrList *LateParsedAttrs) {\n  // ...\n  if (TryConsumeToken(tok::equal)) {\n    // ...\n    if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n    // ...\n    } else if (TryConsumeToken(tok::kw_default, KWLoc)) {\n      Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 0 /* defaulted */;"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:95:18: warning: deleted function definitions are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:97:17: warning: defaulted function definitions are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:356:19: warning: deleted function definitions are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:95:18: warning: deleted function definitions are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:97:17: warning: defaulted function definitions are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:356:19: warning: deleted function definitions are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_delegating_ctor"]={
["warn_cxx98_compat_delegating_ctor"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="delegating constructors are incompatible with C++98",
[c]="warn_cxx98_compat_delegating_ctor",
[d]=g,
[d]="delegating constructors are incompatible with C++98",
[e]="delegating constructors are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="delegating constructors are incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={hc,1318970984,fc,ec},
[b]=m,
[h]={{C,4622,"MemInitResult Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init, CXXRecordDecl *ClassDecl) {\n  // ...\n  Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);"}},
[f]={jc,1318970984,kc,lc},
[k]={
[h]={{L,4622,"MemInitResult Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init, CXXRecordDecl *ClassDecl) {\n  // ...\n  Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:170:20: warning: delegating constructors are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:170:20: warning: delegating constructors are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_empty_fnmacro_arg"]={
["warn_cxx98_compat_empty_fnmacro_arg"]={
[j]={m},
[k]={n},
[i]=m,
[j]=n,
[c]="empty macro arguments are incompatible with C++98",
[c]="warn_cxx98_compat_empty_fnmacro_arg",
[d]=g,
[d]="empty macro arguments are incompatible with C++98",
[e]="empty macro arguments are incompatible with C\\+\\+98",
[e]=i,
[f]=Kc,
[g]="empty macro arguments are incompatible with C\\+\\+98",
[b]=L,
[a]=Kc,
[a]={hd,1318641536,md,pd},
[b]=T,
[f]={kd,1318641536,nd,od},
[h]={{"clang/lib/Lex/PPMacroExpansion.cpp",904,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // ...\n  while (Tok.isNot(tok::r_paren)) {\n    // ...\n    // Empty arguments are standard in C99 and C++0x, and are supported as an\n    // extension in other modes.\n    if (ArgTokens.size() == ArgTokenStart && !getLangOpts().C99)\n      Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_empty_fnmacro_arg : diag::ext_empty_fnmacro_arg);"}},
[h]={{"clang/lib/Lex/PPMacroExpansion.cpp",904,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // ...\n  while (Tok.isNot(tok::r_paren)) {\n    // ...\n    // Empty arguments are standard in C99 and C++0x, and are supported as an\n    // extension in other modes.\n    if (ArgTokens.size() == ArgTokenStart && !getLangOpts().C99)\n      Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_empty_fnmacro_arg : diag::ext_empty_fnmacro_arg);"}},
[k]={
[l]={
[rd]={"clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32770:10: warning: empty macro arguments are incompatible with C++98 [-Wc++98-compat-pedantic]"}
[pd]={"clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32770:10: warning: empty macro arguments are incompatible with C++98 [-Wc++98-compat-pedantic]"}
}
}
},
},
["warn_cxx98_compat_empty_scalar_initializer"]={
["warn_cxx98_compat_empty_scalar_initializer"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="scalar initialized from empty initializer list is incompatible with C++98",
[c]="warn_cxx98_compat_empty_scalar_initializer",
[d]=g,
[d]="scalar initialized from empty initializer list is incompatible with C++98",
[e]="scalar initialized from empty initializer list is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="scalar initialized from empty initializer list is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.","-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.\n\nllvm-svn: 142426"},
[b]=m,
[h]={{fb,1638,"void InitListChecker::CheckScalarType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (Index >= IList->getNumInits()) {\n    if (!VerifyOnly) {\n      if (SemaRef.getLangOpts().CPlusPlus) {\n        if (DeclType->isSizelessBuiltinType())\n        // ...\n        else\n          SemaRef.Diag(IList->getBeginLoc(), SemaRef.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_empty_scalar_initializer : diag::err_empty_scalar_initializer) << IList->getSourceRange();"}},
[f]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.","-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.\n\nllvm-svn: 142426"},
[k]={
[h]={{mb,1638,"void InitListChecker::CheckScalarType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (Index >= IList->getNumInits()) {\n    if (!VerifyOnly) {\n      if (SemaRef.getLangOpts().CPlusPlus) {\n        if (DeclType->isSizelessBuiltinType())\n        // ...\n        else\n          SemaRef.Diag(IList->getBeginLoc(), SemaRef.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_empty_scalar_initializer : diag::err_empty_scalar_initializer) << IList->getSourceRange();"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:63:22: warning: scalar initialized from empty initializer list is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:65:17: warning: scalar initialized from empty initializer list is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:67:12: warning: scalar initialized from empty initializer list is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:228:9: warning: scalar initialized from empty initializer list is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:63:22: warning: scalar initialized from empty initializer list is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:65:17: warning: scalar initialized from empty initializer list is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:67:12: warning: scalar initialized from empty initializer list is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:228:9: warning: scalar initialized from empty initializer list is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_empty_sizeless_initializer"]={
["warn_cxx98_compat_empty_sizeless_initializer"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]={{nil,mb,"initializing %0 from an empty initializer list is incompatible with C++98"}},
[c]={{nil,z,"warn_cxx98_compat_empty_sizeless_initializer"}},
[d]=g,
[d]={{nil,z,"initializing %0 from an empty initializer list is incompatible with C++98"}},
[e]="initializing (.*?) from an empty initializer list is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="initializing (.*?) from an empty initializer list is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={Bd,1576908663,ud,Ed},
[b]={{nil,z,m}},
[h]={{fb,1632,"void InitListChecker::CheckScalarType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (Index >= IList->getNumInits()) {\n    if (!VerifyOnly) {\n      if (SemaRef.getLangOpts().CPlusPlus) {\n        if (DeclType->isSizelessBuiltinType())\n          SemaRef.Diag(IList->getBeginLoc(), SemaRef.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_empty_sizeless_initializer : diag::err_empty_sizeless_initializer) << DeclType << IList->getSourceRange();"}},
[f]={Ld,1576908663,xd,"[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n  turned out to be ineffective anyway since functions can be defined later\n  in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520"},
[k]={
[h]={{mb,1632,"void InitListChecker::CheckScalarType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (Index >= IList->getNumInits()) {\n    if (!VerifyOnly) {\n      if (SemaRef.getLangOpts().CPlusPlus) {\n        if (DeclType->isSizelessBuiltinType())\n          SemaRef.Diag(IList->getBeginLoc(), SemaRef.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_empty_sizeless_initializer : diag::err_empty_sizeless_initializer) << DeclType << IList->getSourceRange();"}},
[l]={
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:577:63: warning: initializing \'svint8_t\' (aka \'__SVInt8_t\') from an empty initializer list is incompatible with C++98 [-Wc++98-compat]"}
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:577:63: warning: initializing \'svint8_t\' (aka \'__SVInt8_t\') from an empty initializer list is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_enum_fixed_underlying_type"]={
["warn_cxx98_compat_enum_fixed_underlying_type"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="enumeration types with a fixed underlying type are incompatible with C++98",
[c]="warn_cxx98_compat_enum_fixed_underlying_type",
[d]=g,
[d]="enumeration types with a fixed underlying type are incompatible with C++98",
[e]="enumeration types with a fixed underlying type are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="enumeration types with a fixed underlying type are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[h]={{Tb,4940,"/// ParseEnumSpecifier\n///      enum-specifier: [C99 6.7.2.2]\n///        \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU]  \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\' attributes[opt]\n/// [MS]    \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\'\n///        \'enum\' identifier\n/// [GNU]  \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\'  \'}\'\n///\n///      enum-head: [C++11]\n///        enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n///        enum-key attribute-specifier-seq[opt] nested-name-specifier\n///            identifier enum-base[opt]\n///\n///      enum-key: [C++11]\n///        \'enum\'\n///        \'enum\' \'class\'\n///        \'enum\' \'struct\'\n///\n///      enum-base: [C++11]\n///        \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++]  \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n  // ...\n  // Parse the fixed underlying type.\n  if (Tok.is(tok::colon)) {\n    // ...\n    if (CanBeBitfield && !isEnumBase(CanBeOpaqueEnumDeclaration)) {\n    // ...\n    } else if (CanHaveEnumBase || !ColonIsSacred) {\n      // ...\n      if (!getLangOpts().ObjC) {\n        if (getLangOpts().CPlusPlus11)\n          Diag(ColonLoc, diag::warn_cxx98_compat_enum_fixed_underlying_type) << BaseRange;"}},
[f]={Tb,1318655374,Sb,Rb},
[k]={
[h]={{Wb,4940,"/// ParseEnumSpecifier\n///      enum-specifier: [C99 6.7.2.2]\n///        \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU]  \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\' attributes[opt]\n/// [MS]    \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\'\n///        \'enum\' identifier\n/// [GNU]  \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\'  \'}\'\n///\n///      enum-head: [C++11]\n///        enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n///        enum-key attribute-specifier-seq[opt] nested-name-specifier\n///            identifier enum-base[opt]\n///\n///      enum-key: [C++11]\n///        \'enum\'\n///        \'enum\' \'class\'\n///        \'enum\' \'struct\'\n///\n///      enum-base: [C++11]\n///        \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++]  \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n  // ...\n  // Parse the fixed underlying type.\n  if (Tok.is(tok::colon)) {\n    // ...\n    if (CanBeBitfield && !isEnumBase(CanBeOpaqueEnumDeclaration)) {\n    // ...\n    } else if (CanHaveEnumBase || !ColonIsSacred) {\n      // ...\n      if (!getLangOpts().ObjC) {\n        if (getLangOpts().CPlusPlus11)\n          Diag(ColonLoc, diag::warn_cxx98_compat_enum_fixed_underlying_type) << BaseRange;"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:89:16: warning: enumeration types with a fixed underlying type are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:89:16: warning: enumeration types with a fixed underlying type are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_enum_friend"]={
["warn_cxx98_compat_enum_friend"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="befriending enumeration type %0 is incompatible with C++98",
[c]="warn_cxx98_compat_enum_friend",
[d]=g,
[d]="befriending enumeration type %0 is incompatible with C++98",
[e]="befriending enumeration type (.*?) is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="befriending enumeration type (.*?) is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.","-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.\n\nllvm-svn: 142426"},
[b]=m,
[h]={{C,17228,"/// Perform semantic analysis of the given friend type declaration.\n///\n/// \\returns A friend declaration that.\nFriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, SourceLocation FriendLoc, TypeSourceInfo *TSInfo) {\n  // ...\n  // C++03 [class.friend]p2:\n  //  An elaborated-type-specifier shall be used in a friend declaration\n  //  for a class.*\n  //\n  //  * The class-key of the elaborated-type-specifier is required.\n  if (!CodeSynthesisContexts.empty()) {\n  // ...\n  } else {\n    if (!T->isElaboratedTypeSpecifier()) {\n    // ...\n    } else if (T->getAs<EnumType>()) {\n      Diag(FriendLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_enum_friend : diag::ext_enum_friend) << T << TypeRange;"}},
[f]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.","-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.\n\nllvm-svn: 142426"},
[k]={
[h]={{L,17228,"/// Perform semantic analysis of the given friend type declaration.\n///\n/// \\returns A friend declaration that.\nFriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, SourceLocation FriendLoc, TypeSourceInfo *TSInfo) {\n  // ...\n  // C++03 [class.friend]p2:\n  //  An elaborated-type-specifier shall be used in a friend declaration\n  //  for a class.*\n  //\n  //  * The class-key of the elaborated-type-specifier is required.\n  if (!CodeSynthesisContexts.empty()) {\n  // ...\n  } else {\n    if (!T->isElaboratedTypeSpecifier()) {\n    // ...\n    } else if (T->getAs<EnumType>()) {\n      Diag(FriendLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_enum_friend : diag::ext_enum_friend) << T << TypeRange;"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:223:3: warning: befriending enumeration type \'enum ::Enum\' is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:223:3: warning: befriending enumeration type \'enum ::Enum\' is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_enum_nested_name_spec"]={
["warn_cxx98_compat_enum_nested_name_spec"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="enumeration type in nested name specifier is incompatible with C++98",
[c]="warn_cxx98_compat_enum_nested_name_spec",
[d]=g,
[d]="enumeration type in nested name specifier is incompatible with C++98",
[e]="enumeration type in nested name specifier is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="enumeration type in nested name specifier is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"91c7bbde4b6d",1319081327,"Add -Wc++98-compat warning for enumerations in nested name specifiers.","Add -Wc++98-compat warning for enumerations in nested name specifiers.\n\nllvm-svn: 142568"},
[b]=m,
[f]={"91c7bbde4b6d",1319081327,"Add -Wc++98-compat warning for enumerations in nested name specifiers.","Add -Wc++98-compat warning for enumerations in nested name specifiers.\n\nllvm-svn: 142568"},
[h]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",718,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///      \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  // ...\n  if (AcceptSpec) {\n    // ...\n    if (T->isEnumeralType())\n      Diag(IdInfo.IdentifierLoc, diag::warn_cxx98_compat_enum_nested_name_spec);"}},
[h]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",718,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///      \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  // ...\n  if (AcceptSpec) {\n    // ...\n    if (T->isEnumeralType())\n      Diag(IdInfo.IdentifierLoc, diag::warn_cxx98_compat_enum_nested_name_spec);"}},
[k]={
[l]={
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:268:15: warning: enumeration type in nested name specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:270:11: warning: enumeration type in nested name specifier is incompatible with C++98 [-Wc++98-compat]"}
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:268:15: warning: enumeration type in nested name specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:270:11: warning: enumeration type in nested name specifier is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_enumerator_list_comma"]={
["warn_cxx98_compat_enumerator_list_comma"]={
[j]={m},
[k]={n},
[i]=m,
[j]=n,
[c]="commas at the end of enumerator lists are incompatible with C++98",
[c]="warn_cxx98_compat_enumerator_list_comma",
[d]=g,
[d]="commas at the end of enumerator lists are incompatible with C++98",
[e]="commas at the end of enumerator lists are incompatible with C\\+\\+98",
[e]=i,
[f]=Kc,
[g]="commas at the end of enumerator lists are incompatible with C\\+\\+98",
[b]=v,
[a]=Kc,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[h]={{Tb,5262,"/// ParseEnumBody - Parse a {} enclosed enumerator-list.\n///      enumerator-list:\n///        enumerator\n///        enumerator-list \',\' enumerator\n///      enumerator:\n///        enumeration-constant attributes[opt]\n///        enumeration-constant attributes[opt] \'=\' constant-expression\n///      enumeration-constant:\n///        identifier\n///\nvoid Parser::ParseEnumBody(SourceLocation StartLoc, Decl *EnumDecl) {\n  // ...\n  // Parse the enumerator-list.\n  while (Tok.isNot(tok::r_brace)) {\n    // ...\n    // If comma is followed by r_brace, emit appropriate warning.\n    if (Tok.is(tok::r_brace) && CommaLoc.isValid()) {\n      if (!getLangOpts().C99 && !getLangOpts().CPlusPlus11)\n      // ...\n      else if (getLangOpts().CPlusPlus11)\n        Diag(CommaLoc, diag::warn_cxx98_compat_enumerator_list_comma) << FixItHint::CreateRemoval(CommaLoc);"}},
[f]={Tb,1318655374,Sb,Rb},
[k]={
[h]={{Wb,5262,"/// ParseEnumBody - Parse a {} enclosed enumerator-list.\n///      enumerator-list:\n///        enumerator\n///        enumerator-list \',\' enumerator\n///      enumerator:\n///        enumeration-constant attributes[opt]\n///        enumeration-constant attributes[opt] \'=\' constant-expression\n///      enumeration-constant:\n///        identifier\n///\nvoid Parser::ParseEnumBody(SourceLocation StartLoc, Decl *EnumDecl) {\n  // ...\n  // Parse the enumerator-list.\n  while (Tok.isNot(tok::r_brace)) {\n    // ...\n    // If comma is followed by r_brace, emit appropriate warning.\n    if (Tok.is(tok::r_brace) && CommaLoc.isValid()) {\n      if (!getLangOpts().C99 && !getLangOpts().CPlusPlus11)\n      // ...\n      else if (getLangOpts().CPlusPlus11)\n        Diag(CommaLoc, diag::warn_cxx98_compat_enumerator_list_comma) << FixItHint::CreateRemoval(CommaLoc);"}},
[rd]={"clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32775:13: warning: commas at the end of enumerator lists are incompatible with C++98 [-Wc++98-compat-pedantic]"}
[l]={
[pd]={"clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32775:13: warning: commas at the end of enumerator lists are incompatible with C++98 [-Wc++98-compat-pedantic]"}
}
}
},
},
["warn_cxx98_compat_explicit_conversion_functions"]={
["warn_cxx98_compat_explicit_conversion_functions"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="explicit conversion functions are incompatible with C++98",
[c]="warn_cxx98_compat_explicit_conversion_functions",
[d]=g,
[d]="explicit conversion functions are incompatible with C++98",
[e]="explicit conversion functions are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="explicit conversion functions are incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={hc,1318970984,fc,ec},
[b]=m,
[h]={{C,11140,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // C++0x explicit conversion operators.\n  if (DS.hasExplicitSpecifier() && !getLangOpts().CPlusPlus20)\n    Diag(DS.getExplicitSpecLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_explicit_conversion_functions : diag::ext_explicit_conversion_functions) << SourceRange(DS.getExplicitSpecRange());"}},
[f]={jc,1318970984,kc,lc},
[k]={
[h]={{L,11140,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // C++0x explicit conversion operators.\n  if (DS.hasExplicitSpecifier() && !getLangOpts().CPlusPlus20)\n    Diag(DS.getExplicitSpecLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_explicit_conversion_functions : diag::ext_explicit_conversion_functions) << SourceRange(DS.getExplicitSpecRange());"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:217:3: warning: explicit conversion functions are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:217:3: warning: explicit conversion functions are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_extern_template"]={
["warn_cxx98_compat_extern_template"]={
[j]={m},
[k]={n},
[i]=m,
[j]=n,
[c]="extern templates are incompatible with C++98",
[c]="warn_cxx98_compat_extern_template",
[d]=g,
[d]="extern templates are incompatible with C++98",
[e]="extern templates are incompatible with C\\+\\+98",
[e]=i,
[f]=Kc,
[g]="extern templates are incompatible with C\\+\\+98",
[b]=v,
[a]=Kc,
[a]={"f411196d15a9",1319135758,"\'extern template\' is a C++11 feature. Add an Extension for C++98 (this matches","\'extern template\' is a C++11 feature. Add an Extension for C++98 (this matches\ngcc\'s behaviour), and a -Wc++98-compat-pedantic warning for C++11.\n\nllvm-svn: 142597"},
[b]=A,
[h]={{Lc,1011,"/// ParseExternalDeclaration:\n///\n/// The `Attrs` that are passed in are C++11 attributes and appertain to the\n/// declaration.\n///\n///      external-declaration: [C99 6.9], declaration: [C++ dcl.dcl]\n///        function-definition\n///        declaration\n/// [GNU]  asm-definition\n/// [GNU]  __extension__ external-declaration\n/// [OBJC]  objc-class-definition\n/// [OBJC]  objc-class-declaration\n/// [OBJC]  objc-alias-declaration\n/// [OBJC]  objc-protocol-definition\n/// [OBJC]  objc-method-definition\n/// [OBJC]  @end\n/// [C++]  linkage-specification\n/// [GNU] asm-definition:\n///        simple-asm-expr \';\'\n/// [C++11] empty-declaration\n/// [C++11] attribute-declaration\n///\n/// [C++11] empty-declaration:\n///          \';\'\n///\n/// [C++0x/GNU] \'extern\' \'template\' declaration\n///\n/// [C++20] module-import-declaration\n///\nParser::DeclGroupPtrTy Parser::ParseExternalDeclaration(ParsedAttributes &Attrs, ParsedAttributes &DeclSpecAttrs, ParsingDeclSpec *DS) {\n  // ...\n  case tok::kw_extern:\n    if (getLangOpts().CPlusPlus && NextToken().is(tok::kw_template)) {\n      // ...\n      Diag(ExternLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_extern_template : diag::ext_extern_template) << SourceRange(ExternLoc, TemplateLoc);"}},
[f]={"f411196d15a9",1319135758,"\'extern template\' is a C++11 feature. Add an Extension for C++98 (this matches","\'extern template\' is a C++11 feature. Add an Extension for C++98 (this matches\ngcc\'s behaviour), and a -Wc++98-compat-pedantic warning for C++11.\n\nllvm-svn: 142597"},
[k]={
[h]={{Hc,1011,"/// ParseExternalDeclaration:\n///\n/// The `Attrs` that are passed in are C++11 attributes and appertain to the\n/// declaration.\n///\n///      external-declaration: [C99 6.9], declaration: [C++ dcl.dcl]\n///        function-definition\n///        declaration\n/// [GNU]  asm-definition\n/// [GNU]  __extension__ external-declaration\n/// [OBJC]  objc-class-definition\n/// [OBJC]  objc-class-declaration\n/// [OBJC]  objc-alias-declaration\n/// [OBJC]  objc-protocol-definition\n/// [OBJC]  objc-method-definition\n/// [OBJC]  @end\n/// [C++]  linkage-specification\n/// [GNU] asm-definition:\n///        simple-asm-expr \';\'\n/// [C++11] empty-declaration\n/// [C++11] attribute-declaration\n///\n/// [C++11] empty-declaration:\n///          \';\'\n///\n/// [C++0x/GNU] \'extern\' \'template\' declaration\n///\n/// [C++20] module-import-declaration\n///\nParser::DeclGroupPtrTy Parser::ParseExternalDeclaration(ParsedAttributes &Attrs, ParsedAttributes &DeclSpecAttrs, ParsingDeclSpec *DS) {\n  // ...\n  case tok::kw_extern:\n    if (getLangOpts().CPlusPlus && NextToken().is(tok::kw_template)) {\n      // ...\n      Diag(ExternLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_extern_template : diag::ext_extern_template) << SourceRange(ExternLoc, TemplateLoc);"}},
[rd]={"clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32793:1: warning: extern templates are incompatible with C++98 [-Wc++98-compat-pedantic]"}
[l]={
[pd]={"clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32793:1: warning: extern templates are incompatible with C++98 [-Wc++98-compat-pedantic]"}
}
}
},
},
["warn_cxx98_compat_for_range"]={
["warn_cxx98_compat_for_range"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="range-based for loop is incompatible with C++98",
[c]="warn_cxx98_compat_for_range",
[d]=g,
[d]="range-based for loop is incompatible with C++98",
[e]="range\\-based for loop is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="range\\-based for loop is incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[f]={Tb,1318655374,Sb,Rb},
[h]={{nc,2074,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  // Parse the first part of the for specifier.\n  if (Tok.is(tok::semi)) { // for (;\n  // ...\n  } else if (getLangOpts().CPlusPlus && Tok.is(tok::identifier) && isForRangeIdentifier()) {\n  // ...\n  } else if (isForInitDeclaration()) { // for (int X = 4;\n    // ...\n    if (Tok.is(tok::kw_using)) {\n    // ...\n    } else {\n      // ...\n      if (ForRangeInfo.ParsedForRangeDecl()) {\n        Diag(ForRangeInfo.ColonLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_for_range : diag::ext_for_range);"}},
[h]={{nc,2074,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  // Parse the first part of the for specifier.\n  if (Tok.is(tok::semi)) { // for (;\n  // ...\n  } else if (getLangOpts().CPlusPlus && Tok.is(tok::identifier) && isForRangeIdentifier()) {\n  // ...\n  } else if (isForInitDeclaration()) { // for (int X = 4;\n    // ...\n    if (Tok.is(tok::kw_using)) {\n    // ...\n    } else {\n      // ...\n      if (ForRangeInfo.ParsedForRangeDecl()) {\n        Diag(ForRangeInfo.ColonLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_for_range : diag::ext_for_range);"}},
[k]={
[l]={
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:113:15: warning: range-based for loop is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:115:16: warning: range-based for loop is incompatible with C++98 [-Wc++98-compat]"}
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:113:15: warning: range-based for loop is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:115:16: warning: range-based for loop is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_friend_is_member"]={
["warn_cxx98_compat_friend_is_member"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="friend declaration naming a member of the declaring class is incompatible with C++98",
[c]="warn_cxx98_compat_friend_is_member",
[d]=g,
[d]="friend declaration naming a member of the declaring class is incompatible with C++98",
[e]="friend declaration naming a member of the declaring class is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="friend declaration naming a member of the declaring class is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={hc,1318970984,fc,ec},
[b]=m,
[h]={{C,17644,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  // ...\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  // ...\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  // ...\n  } else if (!SS.getScopeRep()->isDependent()) {\n    // ...\n    // C++ [class.friend]p1: A friend of a class is a function or\n    //  class that is not a member of the class . . .\n    if (DC->Equals(CurContext))\n      Diag(DS.getFriendSpecLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_friend_is_member : diag::err_friend_is_member);"}},
[f]={jc,1318970984,kc,lc},
[k]={
[h]={{L,17644,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  // ...\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  // ...\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  // ...\n  } else if (!SS.getScopeRep()->isDependent()) {\n    // ...\n    // C++ [class.friend]p1: A friend of a class is a function or\n    //  class that is not a member of the class . . .\n    if (DC->Equals(CurContext))\n      Diag(DS.getFriendSpecLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_friend_is_member : diag::err_friend_is_member);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:166:3: warning: friend declaration naming a member of the declaring class is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:166:3: warning: friend declaration naming a member of the declaring class is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_generalized_initializer_lists"]={
["warn_cxx98_compat_generalized_initializer_lists"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="generalized initializer lists are incompatible with C++98",
[c]="warn_cxx98_compat_generalized_initializer_lists",
[d]=g,
[d]="generalized initializer lists are incompatible with C++98",
[e]="generalized initializer lists are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="generalized initializer lists are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[h]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",395,"void Parser::ParseLexedMethodDeclaration(LateParsedMethodDeclaration &LM) {\n  // ...\n  for (unsigned I = 0, N = LM.DefaultArgs.size(); I != N; ++I) {\n    // ...\n    if (Toks) {\n      // ...\n      if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n        Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Tb,2612,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  // ...\n  case InitKind::CXXBraced: {\n    // ...\n    Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Tb,7466,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n    // ...\n    } else {\n      // ...\n      // Parse the default argument, if any. We parse the default\n      // arguments in all dialects; the semantic analysis in\n      // ActOnParamDefaultArgument will reject the default argument in\n      // C.\n      if (Tok.is(tok::equal)) {\n        // ...\n        // Parse the default argument\n        if (DeclaratorCtx == DeclaratorContext::Member) {\n        // ...\n        } else {\n          // ...\n          if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n            Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{bb,3833,"/// ParseMemInitializer - Parse a C++ member initializer, which is\n/// part of a constructor initializer that explicitly initializes one\n/// member or base class (C++ [class.base.init]). See\n/// ParseConstructorInitializer for an example.\n///\n/// [C++] mem-initializer:\n///        mem-initializer-id \'(\' expression-list[opt] \')\'\n/// [C++0x] mem-initializer-id braced-init-list\n///\n/// [C++] mem-initializer-id:\n///        \'::\'[opt] nested-name-specifier[opt] class-name\n///        identifier\nMemInitResult Parser::ParseMemInitializer(Decl *ConstructorDecl) {\n  // ...\n  // Parse the \'(\'.\n  if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n    Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Jc,603,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  // ...\n  while (true) {\n    // ...\n    if (!RHS.isInvalid() && RHSIsInitList) {\n      if (ThisPrec == prec::Assignment) {\n        Diag(OpToken, diag::warn_cxx98_compat_generalized_initializer_lists) << Actions.getExprRange(RHS.get());"},{Jc,1593,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  {\n    // ...\n    if (Tok.is(tok::l_brace))\n      Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Jc,1958,"/// Once the leading part of a postfix-expression is parsed, this\n/// method parses any suffixes that apply.\n///\n/// \\verbatim\n///      postfix-expression: [C99 6.5.2]\n///        primary-expression\n///        postfix-expression \'[\' expression \']\'\n///        postfix-expression \'[\' braced-init-list \']\'\n///        postfix-expression \'[\' expression-list [opt] \']\'  [C++23 12.4.5]\n///        postfix-expression \'(\' argument-expression-list[opt] \')\'\n///        postfix-expression \'.\' identifier\n///        postfix-expression \'->\' identifier\n///        postfix-expression \'++\'\n///        postfix-expression \'--\'\n///        \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///        \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///\n///      argument-expression-list: [C99 6.5.2]\n///        argument-expression ...[opt]\n///        argument-expression-list \',\' assignment-expression ...[opt]\n/// \\endverbatim\nExprResult Parser::ParsePostfixExpressionSuffix(ExprResult LHS) {\n  // ...\n  while (true) {\n    // ...\n    case tok::l_square: { // postfix-expression: p-e \'[\' expression \']\'\n      // ...\n      // We try to parse a list of indexes in all language mode first\n      // and, in we find 0 or one index, we try to parse an OpenMP array\n      // section. This allow us to support C++23 multi dimensional subscript and\n      // OpenMp sections in the same language mode.\n      if (!getLangOpts().OpenMP || Tok.isNot(tok::colon)) {\n        if (!getLangOpts().CPlusPlus23) {\n          // ...\n          if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n            Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Jc,3496,"/// ParseExpressionList - Used for C/C++ (argument-)expression-list.\n///\n/// \\verbatim\n///      argument-expression-list:\n///        assignment-expression\n///        argument-expression-list , assignment-expression\n///\n/// [C++] expression-list:\n/// [C++]  assignment-expression\n/// [C++]  expression-list , assignment-expression\n///\n/// [C++0x] expression-list:\n/// [C++0x]  initializer-list\n///\n/// [C++0x] initializer-list\n/// [C++0x]  initializer-clause ...[opt]\n/// [C++0x]  initializer-list , initializer-clause ...[opt]\n///\n/// [C++0x] initializer-clause:\n/// [C++0x]  assignment-expression\n/// [C++0x]  braced-init-list\n/// \\endverbatim\nbool Parser::ParseExpressionList(SmallVectorImpl<Expr *> &Exprs, llvm::function_ref<void()> ExpressionStarts, bool FailImmediatelyOnInvalidExpr, bool EarlyTypoCorrection) {\n  // ...\n  while (true) {\n    // ...\n    if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n      Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{cc,2194,"/// ParseCXXCondition - if/switch/while condition expression.\n///\n///      condition:\n///        expression\n///        type-specifier-seq declarator \'=\' assignment-expression\n/// [C++11] type-specifier-seq declarator \'=\' initializer-clause\n/// [C++11] type-specifier-seq declarator braced-init-list\n/// [Clang] type-specifier-seq ref-qualifier[opt] \'[\' identifier-list \']\'\n///            brace-or-equal-initializer\n/// [GNU]  type-specifier-seq declarator simple-asm-expr[opt] attributes[opt]\n///            \'=\' assignment-expression\n///\n/// In C++1z, a condition may in some contexts be preceded by an\n/// optional init-statement. This function will parse that too.\n///\n/// \\param InitStmt If non-null, an init-statement is permitted, and if present\n/// will be parsed and stored here.\n///\n/// \\param Loc The location of the start of the statement that requires this\n/// condition, e.g., the \"for\" in a for loop.\n///\n/// \\param MissingOK Whether an empty condition is acceptable here. Otherwise\n/// it is considered an error to be recovered from.\n///\n/// \\param FRI If non-null, a for range declaration is permitted, and if\n/// present will be parsed and stored here, and a null result will be returned.\n///\n/// \\param EnterForConditionScope If true, enter a continue/break scope at the\n/// appropriate moment for a \'for\' loop.\n///\n/// \\returns The parsed condition.\nSema::ConditionResult Parser::ParseCXXCondition(StmtResult *InitStmt, SourceLocation Loc, Sema::ConditionKind CK, bool MissingOK, ForRangeInfo *FRI, bool EnterForConditionScope) {\n  // ...\n  if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n    Diag(Tok.getLocation(), diag::warn_cxx98_compat_generalized_initializer_lists);"},{cc,3293,"/// ParseCXXNewExpression - Parse a C++ new-expression. New is used to allocate\n/// memory in a typesafe manner and call constructors.\n///\n/// This method is called to parse the new expression after the optional :: has\n/// been already parsed.  If the :: was present, \"UseGlobal\" is true and \"Start\"\n/// is its location.  Otherwise, \"Start\" is the location of the \'new\' token.\n///\n///        new-expression:\n///                  \'::\'[opt] \'new\' new-placement[opt] new-type-id\n///                                    new-initializer[opt]\n///                  \'::\'[opt] \'new\' new-placement[opt] \'(\' type-id \')\'\n///                                    new-initializer[opt]\n///\n///        new-placement:\n///                  \'(\' expression-list \')\'\n///\n///        new-type-id:\n///                  type-specifier-seq new-declarator[opt]\n/// [GNU]            attributes type-specifier-seq new-declarator[opt]\n///\n///        new-declarator:\n///                  ptr-operator new-declarator[opt]\n///                  direct-new-declarator\n///\n///        new-initializer:\n///                  \'(\' expression-list[opt] \')\'\n/// [C++0x]          braced-init-list\n///\nExprResult Parser::ParseCXXNewExpression(bool UseGlobal, SourceLocation Start) {\n  // ...\n  if (Tok.is(tok::l_paren)) {\n  // ...\n  } else if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus11) {\n    Diag(Tok.getLocation(), diag::warn_cxx98_compat_generalized_initializer_lists);"},{"clang/lib/Parse/ParseObjc.cpp",3278,"/// Parse the remainder of an Objective-C message following the\n/// \'[\' objc-receiver.\n///\n/// This routine handles sends to super, class messages (sent to a\n/// class name), and instance messages (sent to an object), and the\n/// target is represented by \\p SuperLoc, \\p ReceiverType, or \\p\n/// ReceiverExpr, respectively. Only one of these parameters may have\n/// a valid value.\n///\n/// \\param LBracLoc The location of the opening \'[\'.\n///\n/// \\param SuperLoc If this is a send to \'super\', the location of the\n/// \'super\' keyword that indicates a send to the superclass.\n///\n/// \\param ReceiverType If this is a class message, the type of the\n/// class we are sending a message to.\n///\n/// \\param ReceiverExpr If this is an instance message, the expression\n/// used to compute the receiver object.\n///\n///  objc-message-args:\n///    objc-selector\n///    objc-keywordarg-list\n///\n///  objc-keywordarg-list:\n///    objc-keywordarg\n///    objc-keywordarg-list objc-keywordarg\n///\n///  objc-keywordarg:\n///    selector-name[opt] \':\' objc-keywordexpr\n///\n///  objc-keywordexpr:\n///    nonempty-expr-list\n///\n///  nonempty-expr-list:\n///    assignment-expression\n///    nonempty-expr-list , assignment-expression\n///\nExprResult Parser::ParseObjCMessageExpressionBody(SourceLocation LBracLoc, SourceLocation SuperLoc, ParsedType ReceiverType, Expr *ReceiverExpr) {\n  // ...\n  if (Tok.is(tok::colon)) {\n    while (true) {\n      // ...\n      if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n        Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{"clang/lib/Parse/ParseOpenMP.cpp",511,"void Parser::ParseOpenMPReductionInitializerForDecl(VarDecl *OmpPrivParm) {\n  // Parse declarator \'=\' initializer.\n  // If a \'==\' or \'+=\' is found, suggest a fixit to \'=\'.\n  if (isTokenEqualOrEqualTypo()) {\n  // ...\n  } else if (Tok.is(tok::l_paren)) {\n  // ...\n  } else if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n    // ...\n    Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{nc,2398,"/// ParseReturnStatement\n///      jump-statement:\n///        \'return\' expression[opt] \';\'\n///        \'return\' braced-init-list \';\'\n///        \'co_return\' expression[opt] \';\'\n///        \'co_return\' braced-init-list \';\'\nStmtResult Parser::ParseReturnStatement() {\n  // ...\n  if (Tok.isNot(tok::semi)) {\n    // ...\n    if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus) {\n      // ...\n      if (R.isUsable())\n        Diag(R.get()->getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_generalized_initializer_lists : diag::ext_generalized_initializer_lists) << R.get()->getSourceRange();"}},
[f]={Tb,1318655374,Sb,Rb},
[k]={
[h]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",395,"void Parser::ParseLexedMethodDeclaration(LateParsedMethodDeclaration &LM) {\n  // ...\n  for (unsigned I = 0, N = LM.DefaultArgs.size(); I != N; ++I) {\n    // ...\n    if (Toks) {\n      // ...\n      if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n        Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Wb,2612,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  // ...\n  case InitKind::CXXBraced: {\n    // ...\n    Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Wb,7466,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n    // ...\n    } else {\n      // ...\n      // Parse the default argument, if any. We parse the default\n      // arguments in all dialects; the semantic analysis in\n      // ActOnParamDefaultArgument will reject the default argument in\n      // C.\n      if (Tok.is(tok::equal)) {\n        // ...\n        // Parse the default argument\n        if (DeclaratorCtx == DeclaratorContext::Member) {\n        // ...\n        } else {\n          // ...\n          if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n            Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{kb,3833,"/// ParseMemInitializer - Parse a C++ member initializer, which is\n/// part of a constructor initializer that explicitly initializes one\n/// member or base class (C++ [class.base.init]). See\n/// ParseConstructorInitializer for an example.\n///\n/// [C++] mem-initializer:\n///        mem-initializer-id \'(\' expression-list[opt] \')\'\n/// [C++0x] mem-initializer-id braced-init-list\n///\n/// [C++] mem-initializer-id:\n///        \'::\'[opt] nested-name-specifier[opt] class-name\n///        identifier\nMemInitResult Parser::ParseMemInitializer(Decl *ConstructorDecl) {\n  // ...\n  // Parse the \'(\'.\n  if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n    Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Mc,603,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  // ...\n  while (true) {\n    // ...\n    if (!RHS.isInvalid() && RHSIsInitList) {\n      if (ThisPrec == prec::Assignment) {\n        Diag(OpToken, diag::warn_cxx98_compat_generalized_initializer_lists) << Actions.getExprRange(RHS.get());"},{Mc,1593,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  {\n    // ...\n    if (Tok.is(tok::l_brace))\n      Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Mc,1958,"/// Once the leading part of a postfix-expression is parsed, this\n/// method parses any suffixes that apply.\n///\n/// \\verbatim\n///      postfix-expression: [C99 6.5.2]\n///        primary-expression\n///        postfix-expression \'[\' expression \']\'\n///        postfix-expression \'[\' braced-init-list \']\'\n///        postfix-expression \'[\' expression-list [opt] \']\'  [C++23 12.4.5]\n///        postfix-expression \'(\' argument-expression-list[opt] \')\'\n///        postfix-expression \'.\' identifier\n///        postfix-expression \'->\' identifier\n///        postfix-expression \'++\'\n///        postfix-expression \'--\'\n///        \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///        \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///\n///      argument-expression-list: [C99 6.5.2]\n///        argument-expression ...[opt]\n///        argument-expression-list \',\' assignment-expression ...[opt]\n/// \\endverbatim\nExprResult Parser::ParsePostfixExpressionSuffix(ExprResult LHS) {\n  // ...\n  while (true) {\n    // ...\n    case tok::l_square: { // postfix-expression: p-e \'[\' expression \']\'\n      // ...\n      // We try to parse a list of indexes in all language mode first\n      // and, in we find 0 or one index, we try to parse an OpenMP array\n      // section. This allow us to support C++23 multi dimensional subscript and\n      // OpenMp sections in the same language mode.\n      if (!getLangOpts().OpenMP || Tok.isNot(tok::colon)) {\n        if (!getLangOpts().CPlusPlus23) {\n          // ...\n          if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n            Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{Mc,3496,"/// ParseExpressionList - Used for C/C++ (argument-)expression-list.\n///\n/// \\verbatim\n///      argument-expression-list:\n///        assignment-expression\n///        argument-expression-list , assignment-expression\n///\n/// [C++] expression-list:\n/// [C++]  assignment-expression\n/// [C++]  expression-list , assignment-expression\n///\n/// [C++0x] expression-list:\n/// [C++0x]  initializer-list\n///\n/// [C++0x] initializer-list\n/// [C++0x]  initializer-clause ...[opt]\n/// [C++0x]  initializer-list , initializer-clause ...[opt]\n///\n/// [C++0x] initializer-clause:\n/// [C++0x]  assignment-expression\n/// [C++0x]  braced-init-list\n/// \\endverbatim\nbool Parser::ParseExpressionList(SmallVectorImpl<Expr *> &Exprs, llvm::function_ref<void()> ExpressionStarts, bool FailImmediatelyOnInvalidExpr, bool EarlyTypoCorrection) {\n  // ...\n  while (true) {\n    // ...\n    if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n      Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{fc,2194,"/// ParseCXXCondition - if/switch/while condition expression.\n///\n///      condition:\n///        expression\n///        type-specifier-seq declarator \'=\' assignment-expression\n/// [C++11] type-specifier-seq declarator \'=\' initializer-clause\n/// [C++11] type-specifier-seq declarator braced-init-list\n/// [Clang] type-specifier-seq ref-qualifier[opt] \'[\' identifier-list \']\'\n///            brace-or-equal-initializer\n/// [GNU]  type-specifier-seq declarator simple-asm-expr[opt] attributes[opt]\n///            \'=\' assignment-expression\n///\n/// In C++1z, a condition may in some contexts be preceded by an\n/// optional init-statement. This function will parse that too.\n///\n/// \\param InitStmt If non-null, an init-statement is permitted, and if present\n/// will be parsed and stored here.\n///\n/// \\param Loc The location of the start of the statement that requires this\n/// condition, e.g., the \"for\" in a for loop.\n///\n/// \\param MissingOK Whether an empty condition is acceptable here. Otherwise\n/// it is considered an error to be recovered from.\n///\n/// \\param FRI If non-null, a for range declaration is permitted, and if\n/// present will be parsed and stored here, and a null result will be returned.\n///\n/// \\param EnterForConditionScope If true, enter a continue/break scope at the\n/// appropriate moment for a \'for\' loop.\n///\n/// \\returns The parsed condition.\nSema::ConditionResult Parser::ParseCXXCondition(StmtResult *InitStmt, SourceLocation Loc, Sema::ConditionKind CK, bool MissingOK, ForRangeInfo *FRI, bool EnterForConditionScope) {\n  // ...\n  if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n    Diag(Tok.getLocation(), diag::warn_cxx98_compat_generalized_initializer_lists);"},{fc,3293,"/// ParseCXXNewExpression - Parse a C++ new-expression. New is used to allocate\n/// memory in a typesafe manner and call constructors.\n///\n/// This method is called to parse the new expression after the optional :: has\n/// been already parsed.  If the :: was present, \"UseGlobal\" is true and \"Start\"\n/// is its location.  Otherwise, \"Start\" is the location of the \'new\' token.\n///\n///        new-expression:\n///                  \'::\'[opt] \'new\' new-placement[opt] new-type-id\n///                                    new-initializer[opt]\n///                  \'::\'[opt] \'new\' new-placement[opt] \'(\' type-id \')\'\n///                                    new-initializer[opt]\n///\n///        new-placement:\n///                  \'(\' expression-list \')\'\n///\n///        new-type-id:\n///                  type-specifier-seq new-declarator[opt]\n/// [GNU]            attributes type-specifier-seq new-declarator[opt]\n///\n///        new-declarator:\n///                  ptr-operator new-declarator[opt]\n///                  direct-new-declarator\n///\n///        new-initializer:\n///                  \'(\' expression-list[opt] \')\'\n/// [C++0x]          braced-init-list\n///\nExprResult Parser::ParseCXXNewExpression(bool UseGlobal, SourceLocation Start) {\n  // ...\n  if (Tok.is(tok::l_paren)) {\n  // ...\n  } else if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus11) {\n    Diag(Tok.getLocation(), diag::warn_cxx98_compat_generalized_initializer_lists);"},{"clang/lib/Parse/ParseObjc.cpp",3278,"/// Parse the remainder of an Objective-C message following the\n/// \'[\' objc-receiver.\n///\n/// This routine handles sends to super, class messages (sent to a\n/// class name), and instance messages (sent to an object), and the\n/// target is represented by \\p SuperLoc, \\p ReceiverType, or \\p\n/// ReceiverExpr, respectively. Only one of these parameters may have\n/// a valid value.\n///\n/// \\param LBracLoc The location of the opening \'[\'.\n///\n/// \\param SuperLoc If this is a send to \'super\', the location of the\n/// \'super\' keyword that indicates a send to the superclass.\n///\n/// \\param ReceiverType If this is a class message, the type of the\n/// class we are sending a message to.\n///\n/// \\param ReceiverExpr If this is an instance message, the expression\n/// used to compute the receiver object.\n///\n///  objc-message-args:\n///    objc-selector\n///    objc-keywordarg-list\n///\n///  objc-keywordarg-list:\n///    objc-keywordarg\n///    objc-keywordarg-list objc-keywordarg\n///\n///  objc-keywordarg:\n///    selector-name[opt] \':\' objc-keywordexpr\n///\n///  objc-keywordexpr:\n///    nonempty-expr-list\n///\n///  nonempty-expr-list:\n///    assignment-expression\n///    nonempty-expr-list , assignment-expression\n///\nExprResult Parser::ParseObjCMessageExpressionBody(SourceLocation LBracLoc, SourceLocation SuperLoc, ParsedType ReceiverType, Expr *ReceiverExpr) {\n  // ...\n  if (Tok.is(tok::colon)) {\n    while (true) {\n      // ...\n      if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n        Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{"clang/lib/Parse/ParseOpenMP.cpp",511,"void Parser::ParseOpenMPReductionInitializerForDecl(VarDecl *OmpPrivParm) {\n  // Parse declarator \'=\' initializer.\n  // If a \'==\' or \'+=\' is found, suggest a fixit to \'=\'.\n  if (isTokenEqualOrEqualTypo()) {\n  // ...\n  } else if (Tok.is(tok::l_paren)) {\n  // ...\n  } else if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n    // ...\n    Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);"},{nc,2398,"/// ParseReturnStatement\n///      jump-statement:\n///        \'return\' expression[opt] \';\'\n///        \'return\' braced-init-list \';\'\n///        \'co_return\' expression[opt] \';\'\n///        \'co_return\' braced-init-list \';\'\nStmtResult Parser::ParseReturnStatement() {\n  // ...\n  if (Tok.isNot(tok::semi)) {\n    // ...\n    if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus) {\n      // ...\n      if (R.isUsable())\n        Diag(R.get()->getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_generalized_initializer_lists : diag::ext_generalized_initializer_lists) << R.get()->getSourceRange();"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:63:22: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:65:17: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:67:12: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:69:9: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:71:5: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:80:10: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:83:18: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:63:22: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:65:17: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:67:12: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:69:9: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:71:5: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:80:10: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:83:18: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_goto_into_protected_scope"]={
["warn_cxx98_compat_goto_into_protected_scope"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="jump from this goto statement to its label is incompatible with C++98",
[c]="warn_cxx98_compat_goto_into_protected_scope",
[d]=g,
[d]="jump from this goto statement to its label is incompatible with C++98",
[e]="jump from this goto statement to its label is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="jump from this goto statement to its label is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD","Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD\nbut trivially constructible and destructible variables in C++11 mode. Also\nincidentally improve the precision of the wording for jump diagnostics in C++98\nmode.\n\nllvm-svn: 142619"},
[b]=m,
[f]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD","Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD\nbut trivially constructible and destructible variables in C++11 mode. Also\nincidentally improve the precision of the wording for jump diagnostics in C++98\nmode.\n\nllvm-svn: 142619"},
[h]={{"clang/lib/Sema/JumpDiagnostics.cpp",668,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    // ...\n    // With a goto,\n    if (GotoStmt *GS = dyn_cast<GotoStmt>(Jump)) {\n      // The label may not have a statement if it\'s coming from inline MS ASM.\n      if (GS->getLabel()->getStmt()) {\n        CheckJump(GS, GS->getLabel()->getStmt(), GS->getGotoLoc(), diag::err_goto_into_protected_scope, diag::ext_goto_into_protected_scope, diag::warn_cxx98_compat_goto_into_protected_scope);"},{"clang/lib/Sema/JumpDiagnostics.cpp",696,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    // ...\n    // We only get indirect gotos here when they have a constant target.\n    if (IndirectGotoStmt *IGS = dyn_cast<IndirectGotoStmt>(Jump)) {\n      // ...\n      CheckJump(IGS, Target->getStmt(), IGS->getGotoLoc(), diag::err_goto_into_protected_scope, diag::ext_goto_into_protected_scope, diag::warn_cxx98_compat_goto_into_protected_scope);"}},
[h]={{"clang/lib/Sema/JumpDiagnostics.cpp",668,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    // ...\n    // With a goto,\n    if (GotoStmt *GS = dyn_cast<GotoStmt>(Jump)) {\n      // The label may not have a statement if it\'s coming from inline MS ASM.\n      if (GS->getLabel()->getStmt()) {\n        CheckJump(GS, GS->getLabel()->getStmt(), GS->getGotoLoc(), diag::err_goto_into_protected_scope, diag::ext_goto_into_protected_scope, diag::warn_cxx98_compat_goto_into_protected_scope);"},{"clang/lib/Sema/JumpDiagnostics.cpp",696,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    // ...\n    // We only get indirect gotos here when they have a constant target.\n    if (IndirectGotoStmt *IGS = dyn_cast<IndirectGotoStmt>(Jump)) {\n      // ...\n      CheckJump(IGS, Target->getStmt(), IGS->getGotoLoc(), diag::err_goto_into_protected_scope, diag::ext_goto_into_protected_scope, diag::warn_cxx98_compat_goto_into_protected_scope);"}},
[k]={
[l]={
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:275:3: warning: jump from this goto statement to its label is incompatible with C++98 [-Wc++98-compat]"}
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:275:3: warning: jump from this goto statement to its label is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_indirect_goto_in_protected_scope"]={
["warn_cxx98_compat_indirect_goto_in_protected_scope"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]={{nil,I,"jump from this %select{indirect|asm}0 goto statement to one of its possible targets is incompatible with C++98"},{ob,nil,"jump from this indirect goto statement to one of its possible targets is incompatible with C++98"}},
[c]="warn_cxx98_compat_indirect_goto_in_protected_scope",
[d]=g,
[d]={{nil,x,"jump from this %select{indirect|asm}0 goto statement to one of its possible targets is incompatible with C++98"},{B,nil,"jump from this indirect goto statement to one of its possible targets is incompatible with C++98"}},
[e]="jump from this (?:indirect|asm) goto statement to one of its possible targets is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="jump from this (?:indirect|asm) goto statement to one of its possible targets is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD","Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD\nbut trivially constructible and destructible variables in C++11 mode. Also\nincidentally improve the precision of the wording for jump diagnostics in C++98\nmode.\n\nllvm-svn: 142619"},
[b]=m,
[f]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD","Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD\nbut trivially constructible and destructible variables in C++11 mode. Also\nincidentally improve the precision of the wording for jump diagnostics in C++98\nmode.\n\nllvm-svn: 142619"},
[h]={{"clang/lib/Sema/JumpDiagnostics.cpp",911,"/// Diagnose an indirect jump which is known to cross scopes.\nvoid JumpScopeChecker::DiagnoseIndirectOrAsmJump(Stmt *Jump, unsigned JumpScope, LabelDecl *Target, unsigned TargetScope) {\n  // ...\n  // Diagnose this jump if it would be ill-formed in C++98.\n  if (!Diagnosed && !ToScopesCXX98Compat.empty()) {\n    // ...\n    S.Diag(Jump->getBeginLoc(), diag::warn_cxx98_compat_indirect_goto_in_protected_scope) << IsAsmGoto;"}},
[h]={{"clang/lib/Sema/JumpDiagnostics.cpp",911,"/// Diagnose an indirect jump which is known to cross scopes.\nvoid JumpScopeChecker::DiagnoseIndirectOrAsmJump(Stmt *Jump, unsigned JumpScope, LabelDecl *Target, unsigned TargetScope) {\n  // ...\n  // Diagnose this jump if it would be ill-formed in C++98.\n  if (!Diagnosed && !ToScopesCXX98Compat.empty()) {\n    // ...\n    S.Diag(Jump->getBeginLoc(), diag::warn_cxx98_compat_indirect_goto_in_protected_scope) << IsAsmGoto;"}},
[k]={
[l]={
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:280:3: warning: jump from this indirect goto statement to one of its possible targets is incompatible with C++98 [-Wc++98-compat]"}
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:280:3: warning: jump from this indirect goto statement to one of its possible targets is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_initializer_list_init"]={
["warn_cxx98_compat_initializer_list_init"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="initialization of initializer_list object is incompatible with C++98",
[c]="warn_cxx98_compat_initializer_list_init",
[d]=g,
[d]="initialization of initializer_list object is incompatible with C++98",
[e]="initialization of initializer_list object is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="initialization of initializer_list object is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"2b349aee5b6f",1334818680,"Add missing -Wc++98-compat warnings for initializer list initializations which","Add missing -Wc++98-compat warnings for initializer list initializations which\ninitialize references, create std::initializer_list objects, or call constructors.\n\nllvm-svn: 155105"},
[b]=m,
[h]={{fb,9269,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    // ...\n    case SK_StdInitializerList: {\n      S.Diag(CurInit.get()->getExprLoc(), diag::warn_cxx98_compat_initializer_list_init) << CurInit.get()->getSourceRange();"}},
[f]={"2b349aee5b6f",1334818680,"Add missing -Wc++98-compat warnings for initializer list initializations which","Add missing -Wc++98-compat warnings for initializer list initializations which\ninitialize references, create std::initializer_list objects, or call constructors.\n\nllvm-svn: 155105"},
[k]={
[h]={{mb,9269,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    // ...\n    case SK_StdInitializerList: {\n      S.Diag(CurInit.get()->getExprLoc(), diag::warn_cxx98_compat_initializer_list_init) << CurInit.get()->getSourceRange();"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:72:35: warning: initialization of initializer_list object is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:73:13: warning: initialization of initializer_list object is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:77:22: warning: initialization of initializer_list object is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:115:18: warning: initialization of initializer_list object is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:72:35: warning: initialization of initializer_list object is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:73:13: warning: initialization of initializer_list object is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:77:22: warning: initialization of initializer_list object is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:115:18: warning: initialization of initializer_list object is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_inline_namespace"]={
["warn_cxx98_compat_inline_namespace"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="inline namespaces are incompatible with C++98",
[c]="warn_cxx98_compat_inline_namespace",
[d]=g,
[d]="inline namespaces are incompatible with C++98",
[e]="inline namespaces are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="inline namespaces are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[h]={{bb,224,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  // If we\'re still good, complain about inline namespaces in non-C++0x now.\n  if (InlineLoc.isValid())\n    Diag(InlineLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_inline_namespace : diag::ext_inline_namespace);"}},
[f]={Tb,1318655374,Sb,Rb},
[k]={
[h]={{kb,224,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  // If we\'re still good, complain about inline namespaces in non-C++0x now.\n  if (InlineLoc.isValid())\n    Diag(InlineLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_inline_namespace : diag::ext_inline_namespace);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:140:1: warning: inline namespaces are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:140:1: warning: inline namespaces are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_lambda"]={
["warn_cxx98_compat_lambda"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="lambda expressions are incompatible with C++98",
[c]="warn_cxx98_compat_lambda",
[d]=g,
[d]="lambda expressions are incompatible with C++98",
[e]="lambda expressions are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="lambda expressions are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[h]={{cc,1275,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  // ...\n  Diag(LambdaBeginLoc, diag::warn_cxx98_compat_lambda);"}},
[f]={Tb,1318655374,Sb,Rb},
[k]={
[h]={{fc,1275,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  // ...\n  Diag(LambdaBeginLoc, diag::warn_cxx98_compat_lambda);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:50:3: warning: lambda expressions are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:52:3: warning: lambda expressions are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:50:3: warning: lambda expressions are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:52:3: warning: lambda expressions are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_less_colon_colon"]={
["warn_cxx98_compat_less_colon_colon"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="\'<::\' is treated as digraph \'<:\' (aka \'[\') followed by \':\' in C++98",
[c]="warn_cxx98_compat_less_colon_colon",
[d]=g,
[d]="\'<::\' is treated as digraph \'<:\' (aka \'[\') followed by \':\' in C++98",
[e]="\'\\<\\:\\:\' is treated as digraph \'\\<\\:\' \\(aka \'\\[\'\\) followed by \'\\:\' in C\\+\\+98",
[e]=i,
[f]=w,
[g]="\'\\<\\:\\:\' is treated as digraph \'\\<\\:\' \\(aka \'\\[\'\\) followed by \'\\:\' in C\\+\\+98",
[b]=L,
[a]=E,
[a]={hd,1318641536,md,pd},
[b]=T,
[h]={{Ab,4149,"LexStart:\n  // ...\n  case \'<\':\n    // ...\n    if (ParsingFilename) {\n    // ...\n    } else if (Char == \'<\') {\n    // ...\n    } else if (Char == \'=\') {\n    // ...\n    } else if (LangOpts.Digraphs && Char == \':\') { // \'<:\' -> \'[\'\n      if (LangOpts.CPlusPlus11 && getCharAndSize(CurPtr + SizeTmp, SizeTmp2) == \':\') {\n        // ...\n        if (After != \':\' && After != \'>\') {\n          // ...\n          if (!isLexingRawMode())\n            Diag(BufferPtr, diag::warn_cxx98_compat_less_colon_colon);"}},
[f]={kd,1318641536,nd,od},
[k]={
[h]={{Fb,4149,"LexStart:\n  // ...\n  case \'<\':\n    // ...\n    if (ParsingFilename) {\n    // ...\n    } else if (Char == \'<\') {\n    // ...\n    } else if (Char == \'=\') {\n    // ...\n    } else if (LangOpts.Digraphs && Char == \':\') { // \'<:\' -> \'[\'\n      if (LangOpts.CPlusPlus11 && getCharAndSize(CurPtr + SizeTmp, SizeTmp2) == \':\') {\n        // ...\n        if (After != \':\' && After != \'>\') {\n          // ...\n          if (!isLexingRawMode())\n            Diag(BufferPtr, diag::warn_cxx98_compat_less_colon_colon);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:45:4: warning: \'<::\' is treated as digraph \'<:\' (aka \'[\') followed by \':\' in C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:45:4: warning: \'<::\' is treated as digraph \'<:\' (aka \'[\') followed by \':\' in C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_literal_operator"]={
["warn_cxx98_compat_literal_operator"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="literal operators are incompatible with C++98",
[c]="warn_cxx98_compat_literal_operator",
[d]=g,
[d]="literal operators are incompatible with C++98",
[e]="literal operators are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="literal operators are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[h]={{cc,2726,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  if (getLangOpts().CPlusPlus11 && isTokenStringLiteral()) {\n    Diag(Tok.getLocation(), diag::warn_cxx98_compat_literal_operator);"}},
[f]={Tb,1318655374,Sb,Rb},
[k]={
[h]={{fc,2726,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  if (getLangOpts().CPlusPlus11 && isTokenStringLiteral()) {\n    Diag(Tok.getLocation(), diag::warn_cxx98_compat_literal_operator);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:87:13: warning: literal operators are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:87:13: warning: literal operators are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_literal_ucn_control_character"]={
["warn_cxx98_compat_literal_ucn_control_character"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="universal character name referring to a control character is incompatible with C++98",
[c]="warn_cxx98_compat_literal_ucn_control_character",
[d]=g,
[d]="universal character name referring to a control character is incompatible with C++98",
[e]="universal character name referring to a control character is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="universal character name referring to a control character is incompatible with C\\+\\+98",
[b]=L,
[a]=E,
[a]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the","Improve diagnostics for UCNs referring to control characters and members of the\nbasic source character set in C++98. Add -Wc++98-compat diagnostics for same in\nliterals in C++11. Extend such support to cover string literals as well as\ncharacter literals, and mark N2170 as done.\n\nThis seems too minor to warrant a release note to me. Let me know if you disagree.\n\nllvm-svn: 152444"},
[b]=T,
[h]={{jd,686,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // ...\n  // C2x and C++11 allow UCNs that refer to control characters\n  // and basic source characters inside character and string literals\n  if (UcnVal < 0xa0 &&\n    // ...\n    if (Diags) {\n      // ...\n      if (UcnVal >= 0x20 && UcnVal < 0x7f)\n      // ...\n      else\n        Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, IsError ? diag::err_ucn_control_character : Features.CPlusPlus ? diag::warn_cxx98_compat_literal_ucn_control_character : diag::warn_c2x_compat_literal_ucn_control_character);"}},
[f]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the","Improve diagnostics for UCNs referring to control characters and members of the\nbasic source character set in C++98. Add -Wc++98-compat diagnostics for same in\nliterals in C++11. Extend such support to cover string literals as well as\ncharacter literals, and mark N2170 as done.\n\nThis seems too minor to warrant a release note to me. Let me know if you disagree.\n\nllvm-svn: 152444"},
[k]={
[h]={{id,686,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // ...\n  // C2x and C++11 allow UCNs that refer to control characters\n  // and basic source characters inside character and string literals\n  if (UcnVal < 0xa0 &&\n    // ...\n    if (Diags) {\n      // ...\n      if (UcnVal >= 0x20 && UcnVal < 0x7f)\n      // ...\n      else\n        Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, IsError ? diag::err_ucn_control_character : Features.CPlusPlus ? diag::warn_cxx98_compat_literal_ucn_control_character : diag::warn_c2x_compat_literal_ucn_control_character);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:301:14: warning: universal character name referring to a control character is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:304:28: warning: universal character name referring to a control character is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:301:14: warning: universal character name referring to a control character is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:304:28: warning: universal character name referring to a control character is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_literal_ucn_escape_basic_scs"]={
["warn_cxx98_compat_literal_ucn_escape_basic_scs"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="specifying character \'%0\' with a universal character name is incompatible with C++98",
[c]="warn_cxx98_compat_literal_ucn_escape_basic_scs",
[d]=g,
[d]="specifying character \'%0\' with a universal character name is incompatible with C++98",
[e]="specifying character \'(.*?)\' with a universal character name is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="specifying character \'(.*?)\' with a universal character name is incompatible with C\\+\\+98",
[b]=L,
[a]=E,
[a]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the","Improve diagnostics for UCNs referring to control characters and members of the\nbasic source character set in C++98. Add -Wc++98-compat diagnostics for same in\nliterals in C++11. Extend such support to cover string literals as well as\ncharacter literals, and mark N2170 as done.\n\nThis seems too minor to warrant a release note to me. Let me know if you disagree.\n\nllvm-svn: 152444"},
[b]=T,
[h]={{jd,679,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // ...\n  // C2x and C++11 allow UCNs that refer to control characters\n  // and basic source characters inside character and string literals\n  if (UcnVal < 0xa0 &&\n    // ...\n    if (Diags) {\n      // ...\n      if (UcnVal >= 0x20 && UcnVal < 0x7f)\n        Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, IsError ? diag::err_ucn_escape_basic_scs : Features.CPlusPlus ? diag::warn_cxx98_compat_literal_ucn_escape_basic_scs : diag::warn_c2x_compat_literal_ucn_escape_basic_scs) << StringRef(&BasicSCSChar, 1);"}},
[f]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the","Improve diagnostics for UCNs referring to control characters and members of the\nbasic source character set in C++98. Add -Wc++98-compat diagnostics for same in\nliterals in C++11. Extend such support to cover string literals as well as\ncharacter literals, and mark N2170 as done.\n\nThis seems too minor to warrant a release note to me. Let me know if you disagree.\n\nllvm-svn: 152444"},
[k]={
[h]={{id,679,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // ...\n  // C2x and C++11 allow UCNs that refer to control characters\n  // and basic source characters inside character and string literals\n  if (UcnVal < 0xa0 &&\n    // ...\n    if (Diags) {\n      // ...\n      if (UcnVal >= 0x20 && UcnVal < 0x7f)\n        Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, IsError ? diag::err_ucn_escape_basic_scs : Features.CPlusPlus ? diag::warn_cxx98_compat_literal_ucn_escape_basic_scs : diag::warn_c2x_compat_literal_ucn_escape_basic_scs) << StringRef(&BasicSCSChar, 1);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:302:18: warning: specifying character \'A\' with a universal character name is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:303:24: warning: specifying character \'1\' with a universal character name is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:302:18: warning: specifying character \'A\' with a universal character name is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:303:24: warning: specifying character \'1\' with a universal character name is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_longlong"]={
["warn_cxx98_compat_longlong"]={
[j]={m},
[k]={n},
[i]=m,
[j]=n,
[c]="\'long long\' is incompatible with C++98",
[c]="warn_cxx98_compat_longlong",
[d]=g,
[d]="\'long long\' is incompatible with C++98",
[e]="\'long long\' is incompatible with C\\+\\+98",
[e]=i,
[f]=Kc,
[g]="\'long long\' is incompatible with C\\+\\+98",
[b]=p,
[a]=Kc,
[a]={hd,1318641536,md,pd},
[b]=r,
[h]={{"clang/lib/Lex/PPExpressions.cpp",322,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::numeric_constant: {\n    // ...\n    // \'long long\' is a C99 or C++11 feature.\n    if (!PP.getLangOpts().C99 && Literal.isLongLong) {\n      if (PP.getLangOpts().CPlusPlus)\n        PP.Diag(PeekTok, PP.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{K,4226,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.isFixedPointLiteral()) {\n  // ...\n  } else if (Literal.isFloatingLiteral()) {\n  // ...\n  } else if (!Literal.isIntegerLiteral()) {\n  // ...\n  } else {\n    // ...\n    if (Literal.GetIntegerValue(ResultVal)) {\n    // ...\n    } else {\n      // ...\n      // Check long long if needed.\n      if (Ty.isNull() && !Literal.isSizeT) {\n        // ...\n        // Does it fit in a unsigned long long?\n        if (ResultVal.isIntN(LongLongSize)) {\n          // ...\n          // \'long long\' is a C99 or C++11 feature, whether the literal\n          // explicitly specified \'long long\' or we needed the extra width.\n          if (getLangOpts().CPlusPlus)\n            Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{Jb,1411,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  // ...\n  case DeclSpec::TST_int: {\n    if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n      // ...\n      case TypeSpecifierWidth::LongLong:\n        // ...\n        // \'long long\' is a C99 or C++11 feature.\n        if (!S.getLangOpts().C99) {\n          if (S.getLangOpts().CPlusPlus)\n            S.Diag(DS.getTypeSpecWidthLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{Jb,1436,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  // ...\n  case DeclSpec::TST_int: {\n    if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n    // ...\n    } else {\n      // ...\n      case TypeSpecifierWidth::LongLong:\n        // ...\n        // \'long long\' is a C99 or C++11 feature.\n        if (!S.getLangOpts().C99) {\n          if (S.getLangOpts().CPlusPlus)\n            S.Diag(DS.getTypeSpecWidthLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"}},
[f]={kd,1318641536,nd,od},
[k]={
[h]={{"clang/lib/Lex/PPExpressions.cpp",322,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::numeric_constant: {\n    // ...\n    // \'long long\' is a C99 or C++11 feature.\n    if (!PP.getLangOpts().C99 && Literal.isLongLong) {\n      if (PP.getLangOpts().CPlusPlus)\n        PP.Diag(PeekTok, PP.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{S,4226,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.isFixedPointLiteral()) {\n  // ...\n  } else if (Literal.isFloatingLiteral()) {\n  // ...\n  } else if (!Literal.isIntegerLiteral()) {\n  // ...\n  } else {\n    // ...\n    if (Literal.GetIntegerValue(ResultVal)) {\n    // ...\n    } else {\n      // ...\n      // Check long long if needed.\n      if (Ty.isNull() && !Literal.isSizeT) {\n        // ...\n        // Does it fit in a unsigned long long?\n        if (ResultVal.isIntN(LongLongSize)) {\n          // ...\n          // \'long long\' is a C99 or C++11 feature, whether the literal\n          // explicitly specified \'long long\' or we needed the extra width.\n          if (getLangOpts().CPlusPlus)\n            Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{Nb,1411,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  // ...\n  case DeclSpec::TST_int: {\n    if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n      // ...\n      case TypeSpecifierWidth::LongLong:\n        // ...\n        // \'long long\' is a C99 or C++11 feature.\n        if (!S.getLangOpts().C99) {\n          if (S.getLangOpts().CPlusPlus)\n            S.Diag(DS.getTypeSpecWidthLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{Nb,1436,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  // ...\n  case DeclSpec::TST_int: {\n    if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n    // ...\n    } else {\n      // ...\n      case TypeSpecifierWidth::LongLong:\n        // ...\n        // \'long long\' is a C99 or C++11 feature.\n        if (!S.getLangOpts().C99) {\n          if (S.getLangOpts().CPlusPlus)\n            S.Diag(DS.getTypeSpecWidthLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"}},
[l]={
["clang/test/Sema/vector-gcc-compat.cpp"]={"clang/test/Sema/vector-gcc-compat.cpp:7:9: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:12:18: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:25:50: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:27:37: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:29:42: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:31:35: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:32:43: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:34:36: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:123:25: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:154:37: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:169:50: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:184:42: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:212:35: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:240:43: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:268:36: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:309:35: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]"}
["clang/test/Sema/vector-gcc-compat.cpp"]={"clang/test/Sema/vector-gcc-compat.cpp:7:9: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:12:18: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:25:50: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:27:37: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:29:42: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:31:35: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:32:43: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:34:36: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:123:25: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:154:37: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:169:50: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:184:42: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:212:35: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:240:43: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:268:36: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]","clang/test/Sema/vector-gcc-compat.cpp:309:35: warning: \'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]"}
}
}
},
},
["warn_cxx98_compat_no_newline_eof"]={
["warn_cxx98_compat_no_newline_eof"]={
[j]={m},
[k]={n},
[i]=m,
[j]=n,
[c]="C++98 requires newline at end of file",
[c]="warn_cxx98_compat_no_newline_eof",
[d]=g,
[d]="C++98 requires newline at end of file",
[e]="C\\+\\+98 requires newline at end of file",
[e]=i,
[f]=Kc,
[g]="C\\+\\+98 requires newline at end of file",
[b]=L,
[a]=Kc,
[a]={"e83c731cad30",1334288603,"Support -Wc++98-compat-pedantic as requested:","Support -Wc++98-compat-pedantic as requested:\n\nhttp://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20120409/056126.html\n\nllvm-svn: 154655"},
[b]=T,
[h]={{Ab,3052,"/// LexEndOfFile - CurPtr points to the end of this file.  Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n  // ...\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    // ...\n    if (LangOpts.CPlusPlus11) {\n      // ...\n      if (!Diags.isIgnored(diag::warn_cxx98_compat_no_newline_eof, EndLoc)) {"},{Ab,3053,"/// LexEndOfFile - CurPtr points to the end of this file.  Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n  // ...\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    // ...\n    if (LangOpts.CPlusPlus11) {\n      // C++11 [lex.phases] 2.2 p2\n      // Prefer the C++98 pedantic compatibility warning over the generic,\n      // non-extension, user-requested \"missing newline at EOF\" warning.\n      if (!Diags.isIgnored(diag::warn_cxx98_compat_no_newline_eof, EndLoc)) {\n        DiagID = diag::warn_cxx98_compat_no_newline_eof;"}},
[f]={"e83c731cad30",1334288603,"Support -Wc++98-compat-pedantic as requested:","Support -Wc++98-compat-pedantic as requested:\n\nhttp://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20120409/056126.html\n\nllvm-svn: 154655"},
[k]={
[h]={{Fb,3052,"/// LexEndOfFile - CurPtr points to the end of this file.  Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n  // ...\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    // ...\n    if (LangOpts.CPlusPlus11) {\n      // ...\n      if (!Diags.isIgnored(diag::warn_cxx98_compat_no_newline_eof, EndLoc)) {"},{Fb,3053,"/// LexEndOfFile - CurPtr points to the end of this file.  Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n  // ...\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    // ...\n    if (LangOpts.CPlusPlus11) {\n      // C++11 [lex.phases] 2.2 p2\n      // Prefer the C++98 pedantic compatibility warning over the generic,\n      // non-extension, user-requested \"missing newline at EOF\" warning.\n      if (!Diags.isIgnored(diag::warn_cxx98_compat_no_newline_eof, EndLoc)) {\n        DiagID = diag::warn_cxx98_compat_no_newline_eof;"}},
[l]={
["clang/test/Lexer/newline-eof-c++98-compat.cpp"]={"clang/test/Lexer/newline-eof-c++98-compat.cpp:5:75: warning: C++98 requires newline at end of file [-Wc++98-compat-pedantic]"}
["clang/test/Lexer/newline-eof-c++98-compat.cpp"]={"clang/test/Lexer/newline-eof-c++98-compat.cpp:5:75: warning: C++98 requires newline at end of file [-Wc++98-compat-pedantic]"}
}
}
},
},
["warn_cxx98_compat_noexcept_decl"]={
["warn_cxx98_compat_noexcept_decl"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="noexcept specifications are incompatible with C++98",
[c]="warn_cxx98_compat_noexcept_decl",
[d]=g,
[d]="noexcept specifications are incompatible with C++98",
[e]="noexcept specifications are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="noexcept specifications are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Nc,1318892780,Oc,Pc},
[b]=A,
[h]={{bb,3925,"/// Parse a C++ exception-specification if present (C++0x [except.spec]).\n///\n///      exception-specification:\n///        dynamic-exception-specification\n///        noexcept-specification\n///\n///      noexcept-specification:\n///        \'noexcept\'\n///        \'noexcept\' \'(\' constant-expression \')\'\nExceptionSpecificationType Parser::tryParseExceptionSpecification(bool Delayed, SourceRange &SpecificationRange, SmallVectorImpl<ParsedType> &DynamicExceptions, SmallVectorImpl<SourceRange> &DynamicExceptionRanges, ExprResult &NoexceptExpr, CachedTokens *&ExceptionSpecTokens) {\n  // ...\n  // Handle delayed parsing of exception-specifications.\n  if (Delayed) {\n    // ...\n    // Check for a \'(\'.\n    if (!Tok.is(tok::l_paren)) {\n      // If this is a bare \'noexcept\', we\'re done.\n      if (IsNoexcept) {\n        Diag(Tok, diag::warn_cxx98_compat_noexcept_decl);"},{bb,3960,"/// Parse a C++ exception-specification if present (C++0x [except.spec]).\n///\n///      exception-specification:\n///        dynamic-exception-specification\n///        noexcept-specification\n///\n///      noexcept-specification:\n///        \'noexcept\'\n///        \'noexcept\' \'(\' constant-expression \')\'\nExceptionSpecificationType Parser::tryParseExceptionSpecification(bool Delayed, SourceRange &SpecificationRange, SmallVectorImpl<ParsedType> &DynamicExceptions, SmallVectorImpl<SourceRange> &DynamicExceptionRanges, ExprResult &NoexceptExpr, CachedTokens *&ExceptionSpecTokens) {\n  // ...\n  Diag(Tok, diag::warn_cxx98_compat_noexcept_decl);"}},
[f]={ed,1318892780,fd,Pc},
[k]={
[h]={{kb,3925,"/// Parse a C++ exception-specification if present (C++0x [except.spec]).\n///\n///      exception-specification:\n///        dynamic-exception-specification\n///        noexcept-specification\n///\n///      noexcept-specification:\n///        \'noexcept\'\n///        \'noexcept\' \'(\' constant-expression \')\'\nExceptionSpecificationType Parser::tryParseExceptionSpecification(bool Delayed, SourceRange &SpecificationRange, SmallVectorImpl<ParsedType> &DynamicExceptions, SmallVectorImpl<SourceRange> &DynamicExceptionRanges, ExprResult &NoexceptExpr, CachedTokens *&ExceptionSpecTokens) {\n  // ...\n  // Handle delayed parsing of exception-specifications.\n  if (Delayed) {\n    // ...\n    // Check for a \'(\'.\n    if (!Tok.is(tok::l_paren)) {\n      // If this is a bare \'noexcept\', we\'re done.\n      if (IsNoexcept) {\n        Diag(Tok, diag::warn_cxx98_compat_noexcept_decl);"},{kb,3960,"/// Parse a C++ exception-specification if present (C++0x [except.spec]).\n///\n///      exception-specification:\n///        dynamic-exception-specification\n///        noexcept-specification\n///\n///      noexcept-specification:\n///        \'noexcept\'\n///        \'noexcept\' \'(\' constant-expression \')\'\nExceptionSpecificationType Parser::tryParseExceptionSpecification(bool Delayed, SourceRange &SpecificationRange, SmallVectorImpl<ParsedType> &DynamicExceptions, SmallVectorImpl<SourceRange> &DynamicExceptionRanges, ExprResult &NoexceptExpr, CachedTokens *&ExceptionSpecTokens) {\n  // ...\n  Diag(Tok, diag::warn_cxx98_compat_noexcept_decl);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:152:18: warning: noexcept specifications are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:152:18: warning: noexcept specifications are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_noexcept_expr"]={
["warn_cxx98_compat_noexcept_expr"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="noexcept expressions are incompatible with C++98",
[c]="warn_cxx98_compat_noexcept_expr",
[d]=g,
[d]="noexcept expressions are incompatible with C++98",
[e]="noexcept expressions are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="noexcept expressions are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Nc,1318892780,Oc,Pc},
[b]=A,
[h]={{Jc,1707,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  // ...\n  case tok::kw_noexcept: { // [C++0x] \'noexcept\' \'(\' expression \')\'\n    // ...\n    Diag(Tok, diag::warn_cxx98_compat_noexcept_expr);"}},
[f]={ed,1318892780,fd,Pc},
[k]={
[h]={{Mc,1707,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  // ...\n  case tok::kw_noexcept: { // [C++0x] \'noexcept\' \'(\' expression \')\'\n    // ...\n    Diag(Tok, diag::warn_cxx98_compat_noexcept_expr);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:153:23: warning: noexcept expressions are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:153:23: warning: noexcept expressions are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_non_static_member_use"]={
["warn_cxx98_compat_non_static_member_use"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="use of non-static data member %0 in an unevaluated context is incompatible with C++98",
[c]="warn_cxx98_compat_non_static_member_use",
[d]=g,
[d]="use of non-static data member %0 in an unevaluated context is incompatible with C++98",
[e]="use of non\\-static data member (.*?) in an unevaluated context is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="use of non\\-static data member (.*?) in an unevaluated context is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"2a986117e9ba",1330165259,"Fix r151443 to only apply C++11\'s exception for non-static data member access","Fix r151443 to only apply C++11\'s exception for non-static data member access\nin cases where we would otherwise disallow the access, and add a -Wc++98-compat\ndiagnostic for this C++11 feature.\n\nllvm-svn: 151444"},
[b]=m,
[f]={"2a986117e9ba",1330165259,"Fix r151443 to only apply C++11\'s exception for non-static data member access","Fix r151443 to only apply C++11\'s exception for non-static data member access\nin cases where we would otherwise disallow the access, and add a -Wc++98-compat\ndiagnostic for this C++11 feature.\n\nllvm-svn: 151444"},
[h]={{"clang/lib/Sema/SemaExprMember.cpp",254,"/// Builds an expression which might be an implicit member expression.\nExprResult Sema::BuildPossibleImplicitMemberExpr(const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, UnresolvedLookupExpr *AsULE) {\n  // ...\n  case IMA_Field_Uneval_Context:\n    Diag(R.getNameLoc(), diag::warn_cxx98_compat_non_static_member_use) << R.getLookupNameInfo().getName();"}},
[h]={{"clang/lib/Sema/SemaExprMember.cpp",254,"/// Builds an expression which might be an implicit member expression.\nExprResult Sema::BuildPossibleImplicitMemberExpr(const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, UnresolvedLookupExpr *AsULE) {\n  // ...\n  case IMA_Field_Uneval_Context:\n    Diag(R.getNameLoc(), diag::warn_cxx98_compat_non_static_member_use) << R.getLookupNameInfo().getName();"}},
[k]={
[l]={
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:296:21: warning: use of non-static data member \'n\' in an unevaluated context is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:297:40: warning: use of non-static data member \'n\' in an unevaluated context is incompatible with C++98 [-Wc++98-compat]"}
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:296:21: warning: use of non-static data member \'n\' in an unevaluated context is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:297:40: warning: use of non-static data member \'n\' in an unevaluated context is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_nonclass_type_friend"]={
["warn_cxx98_compat_nonclass_type_friend"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="non-class friend type %0 is incompatible with C++98",
[c]="warn_cxx98_compat_nonclass_type_friend",
[d]=g,
[d]="non-class friend type %0 is incompatible with C++98",
[e]="non\\-class friend type (.*?) is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="non\\-class friend type (.*?) is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.","-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.\n\nllvm-svn: 142426"},
[b]=m,
[h]={{C,17220,"/// Perform semantic analysis of the given friend type declaration.\n///\n/// \\returns A friend declaration that.\nFriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, SourceLocation FriendLoc, TypeSourceInfo *TSInfo) {\n  // ...\n  // C++03 [class.friend]p2:\n  //  An elaborated-type-specifier shall be used in a friend declaration\n  //  for a class.*\n  //\n  //  * The class-key of the elaborated-type-specifier is required.\n  if (!CodeSynthesisContexts.empty()) {\n  // ...\n  } else {\n    if (!T->isElaboratedTypeSpecifier()) {\n      // If we evaluated the type to a record type, suggest putting\n      // a tag in front.\n      if (const RecordType *RT = T->getAs<RecordType>()) {\n      // ...\n      } else {\n        Diag(FriendLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nonclass_type_friend : diag::ext_nonclass_type_friend) << T << TypeRange;"}},
[f]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.","-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.\n\nllvm-svn: 142426"},
[k]={
[h]={{L,17220,"/// Perform semantic analysis of the given friend type declaration.\n///\n/// \\returns A friend declaration that.\nFriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, SourceLocation FriendLoc, TypeSourceInfo *TSInfo) {\n  // ...\n  // C++03 [class.friend]p2:\n  //  An elaborated-type-specifier shall be used in a friend declaration\n  //  for a class.*\n  //\n  //  * The class-key of the elaborated-type-specifier is required.\n  if (!CodeSynthesisContexts.empty()) {\n  // ...\n  } else {\n    if (!T->isElaboratedTypeSpecifier()) {\n      // If we evaluated the type to a record type, suggest putting\n      // a tag in front.\n      if (const RecordType *RT = T->getAs<RecordType>()) {\n      // ...\n      } else {\n        Diag(FriendLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nonclass_type_friend : diag::ext_nonclass_type_friend) << T << TypeRange;"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:224:3: warning: non-class friend type \'int\' is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:224:3: warning: non-class friend type \'int\' is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_nonstatic_member_init"]={
["warn_cxx98_compat_nonstatic_member_init"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]={{nil,Sb,"default member initializer for non-static data members is incompatible with C++98"},{"11.1",nil,"in-class initialization of non-static data members is incompatible with C++98"}},
[c]="warn_cxx98_compat_nonstatic_member_init",
[d]=g,
[d]={{nil,db,"default member initializer for non-static data members is incompatible with C++98"},{"11.1",nil,"in-class initialization of non-static data members is incompatible with C++98"}},
[e]="default member initializer for non\\-static data members is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="default member initializer for non\\-static data members is incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[h]={{bb,3102,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  // ...\n  while (true) {\n    // ...\n    // Handle the initializer.\n    if (HasInClassInit != ICIS_NoInit) {\n      // ...\n      Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nonstatic_member_init : diag::ext_nonstatic_member_init);"}},
[f]={Tb,1318655374,Sb,Rb},
[k]={
[h]={{kb,3102,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  // ...\n  while (true) {\n    // ...\n    // Handle the initializer.\n    if (HasInClassInit != ICIS_NoInit) {\n      // ...\n      Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nonstatic_member_init : diag::ext_nonstatic_member_init);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:125:9: warning: default member initializer for non-static data members is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:125:9: warning: default member initializer for non-static data members is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_nontrivial_union_or_anon_struct_member"]={
["warn_cxx98_compat_nontrivial_union_or_anon_struct_member"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]={{nil,eb,"%select{anonymous struct|union}0 member %1 with a non-trivial %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2 is incompatible with C++98"},{lb,nil,"%select{anonymous struct|union}0 member %1 with a non-trivial %select{constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2 is incompatible with C++98"}},
[c]="warn_cxx98_compat_nontrivial_union_or_anon_struct_member",
[d]=g,
[d]={{nil,D,"%select{anonymous struct|union}0 member %1 with a non-trivial %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2 is incompatible with C++98"},{F,nil,"%select{anonymous struct|union}0 member %1 with a non-trivial %select{constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2 is incompatible with C++98"}},
[e]="(?:anonymous struct|union) member (.*?) with a non\\-trivial (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="(?:anonymous struct|union) member (.*?) with a non\\-trivial (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"f720df0ed64a",1319056911,"-Wc++98-compat: warn on nontrivial types used in unions and anonymous structs.","-Wc++98-compat: warn on nontrivial types used in unions and anonymous structs.\n\nllvm-svn: 142541"},
[b]=m,
[h]={{D,18324,"bool Sema::CheckNontrivialField(FieldDecl *FD) {\n  // ...\n  if (const RecordType *RT = EltTy->getAs<RecordType>()) {\n    // ...\n    if (RDecl->getDefinition()) {\n      // ...\n      if (member != CXXInvalid) {\n        // ...\n        Diag(FD->getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member : diag::err_illegal_union_or_anon_struct_member) << FD->getParent()->isUnion() << FD->getDeclName() << member;"}},
[f]={"f720df0ed64a",1319056911,"-Wc++98-compat: warn on nontrivial types used in unions and anonymous structs.","-Wc++98-compat: warn on nontrivial types used in unions and anonymous structs.\n\nllvm-svn: 142541"},
[k]={
[h]={{M,18324,"bool Sema::CheckNontrivialField(FieldDecl *FD) {\n  // ...\n  if (const RecordType *RT = EltTy->getAs<RecordType>()) {\n    // ...\n    if (RDecl->getDefinition()) {\n      // ...\n      if (member != CXXInvalid) {\n        // ...\n        Diag(FD->getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member : diag::err_illegal_union_or_anon_struct_member) << FD->getParent()->isUnion() << FD->getDeclName() << member;"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:250:17: warning: union member \'ntc\' with a non-trivial default constructor is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:251:17: warning: union member \'ntcp\' with a non-trivial copy constructor is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:252:17: warning: union member \'ntd\' with a non-trivial destructor is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:256:19: warning: anonymous struct member \'ntc\' with a non-trivial default constructor is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:257:19: warning: anonymous struct member \'ntcp\' with a non-trivial copy constructor is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:258:19: warning: anonymous struct member \'ntd\' with a non-trivial destructor is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:334:20: warning: union member \'it\' with a non-trivial copy constructor is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:349:7: warning: union member \'x\' with a non-trivial copy assignment operator is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:350:7: warning: union member \'y\' with a non-trivial copy assignment operator is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:361:7: warning: union member \'x\' with a non-trivial default constructor is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:250:17: warning: union member \'ntc\' with a non-trivial default constructor is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:251:17: warning: union member \'ntcp\' with a non-trivial copy constructor is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:252:17: warning: union member \'ntd\' with a non-trivial destructor is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:256:19: warning: anonymous struct member \'ntc\' with a non-trivial default constructor is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:257:19: warning: anonymous struct member \'ntcp\' with a non-trivial copy constructor is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:258:19: warning: anonymous struct member \'ntd\' with a non-trivial destructor is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:334:20: warning: union member \'it\' with a non-trivial copy constructor is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:349:7: warning: union member \'x\' with a non-trivial copy assignment operator is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:350:7: warning: union member \'y\' with a non-trivial copy assignment operator is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:361:7: warning: union member \'x\' with a non-trivial default constructor is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_nullptr"]={
["warn_cxx98_compat_nullptr"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="\'nullptr\' is incompatible with C++98",
[c]="warn_cxx98_compat_nullptr",
[d]=g,
[d]="\'nullptr\' is incompatible with C++98",
[e]="\'nullptr\' is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="\'nullptr\' is incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Nc,1318892780,Oc,Pc},
[b]=A,
[h]={{Jc,1012,"/// Parse a cast-expression, or, if \\pisUnaryExpression is true, parse\n/// a unary-expression.\n///\n/// \\p isAddressOfOperand exists because an id-expression that is the operand\n/// of address-of gets special treatment due to member pointers. NotCastExpr\n/// is set to true if the token is not the start of a cast-expression, and no\n/// diagnostic is emitted in this case and no tokens are consumed.\n///\n/// \\verbatim\n///      cast-expression: [C99 6.5.4]\n///        unary-expression\n///        \'(\' type-name \')\' cast-expression\n///\n///      unary-expression:  [C99 6.5.3]\n///        postfix-expression\n///        \'++\' unary-expression\n///        \'--\' unary-expression\n/// [Coro]  \'co_await\' cast-expression\n///        unary-operator cast-expression\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// [GNU]  \'&&\' identifier\n/// [C++11] \'noexcept\' \'(\' expression \')\' [C++11 5.3.7]\n/// [C++]  new-expression\n/// [C++]  delete-expression\n///\n///      unary-operator: one of\n///        \'&\'  \'*\'  \'+\'  \'-\'  \'~\'  \'!\'\n/// [GNU]  \'__extension__\'  \'__real\'  \'__imag\'\n///\n///      primary-expression: [C99 6.5.1]\n/// [C99]  identifier\n/// [C++]  id-expression\n///        constant\n///        string-literal\n/// [C++]  boolean-literal  [C++ 2.13.5]\n/// [C++11] \'nullptr\'        [C++11 2.14.7]\n/// [C++11] user-defined-literal\n///        \'(\' expression \')\'\n/// [C11]  generic-selection\n/// [C++2a] requires-expression\n///        \'__func__\'        [C99 6.4.2.2]\n/// [GNU]  \'__FUNCTION__\'\n/// [MS]    \'__FUNCDNAME__\'\n/// [MS]    \'L__FUNCTION__\'\n/// [MS]    \'__FUNCSIG__\'\n/// [MS]    \'L__FUNCSIG__\'\n/// [GNU]  \'__PRETTY_FUNCTION__\'\n/// [GNU]  \'(\' compound-statement \')\'\n/// [GNU]  \'__builtin_va_arg\' \'(\' assignment-expression \',\' type-name \')\'\n/// [GNU]  \'__builtin_offsetof\' \'(\' type-name \',\' offsetof-member-designator\')\'\n/// [GNU]  \'__builtin_choose_expr\' \'(\' assign-expr \',\' assign-expr \',\'\n///                                    assign-expr \')\'\n/// [GNU]  \'__builtin_FILE\' \'(\' \')\'\n/// [CLANG] \'__builtin_FILE_NAME\' \'(\' \')\'\n/// [GNU]  \'__builtin_FUNCTION\' \'(\' \')\'\n/// [MS]    \'__builtin_FUNCSIG\' \'(\' \')\'\n/// [GNU]  \'__builtin_LINE\' \'(\' \')\'\n/// [CLANG] \'__builtin_COLUMN\' \'(\' \')\'\n/// [GNU]  \'__builtin_source_location\' \'(\' \')\'\n/// [GNU]  \'__builtin_types_compatible_p\' \'(\' type-name \',\' type-name \')\'\n/// [GNU]  \'__null\'\n/// [OBJC]  \'[\' objc-message-expr \']\'\n/// [OBJC]  \'\\@selector\' \'(\' objc-selector-arg \')\'\n/// [OBJC]  \'\\@protocol\' \'(\' identifier \')\'\n/// [OBJC]  \'\\@encode\' \'(\' type-name \')\'\n/// [OBJC]  objc-string-literal\n/// [C++]  simple-type-specifier \'(\' expression-list[opt] \')\'      [C++ 5.2.3]\n/// [C++11] simple-type-specifier braced-init-list                  [C++11 5.2.3]\n/// [C++]  typename-specifier \'(\' expression-list[opt] \')\'        [C++ 5.2.3]\n/// [C++11] typename-specifier braced-init-list                    [C++11 5.2.3]\n/// [C++]  \'const_cast\' \'<\' type-name \'>\' \'(\' expression \')\'      [C++ 5.2p1]\n/// [C++]  \'dynamic_cast\' \'<\' type-name \'>\' \'(\' expression \')\'    [C++ 5.2p1]\n/// [C++]  \'reinterpret_cast\' \'<\' type-name \'>\' \'(\' expression \')\' [C++ 5.2p1]\n/// [C++]  \'static_cast\' \'<\' type-name \'>\' \'(\' expression \')\'      [C++ 5.2p1]\n/// [C++]  \'typeid\' \'(\' expression \')\'                            [C++ 5.2p1]\n/// [C++]  \'typeid\' \'(\' type-id \')\'                                [C++ 5.2p1]\n/// [C++]  \'this\'          [C++ 9.3.2]\n/// [G++]  unary-type-trait \'(\' type-id \')\'\n/// [G++]  binary-type-trait \'(\' type-id \',\' type-id \')\'          [TODO]\n/// [EMBT]  array-type-trait \'(\' type-id \',\' integer \')\'\n/// [clang] \'^\' block-literal\n///\n///      constant: [C99 6.4.4]\n///        integer-constant\n///        floating-constant\n///        enumeration-constant -> identifier\n///        character-constant\n///\n///      id-expression: [C++ 5.1]\n///                  unqualified-id\n///                  qualified-id\n///\n///      unqualified-id: [C++ 5.1]\n///                  identifier\n///                  operator-function-id\n///                  conversion-function-id\n///                  \'~\' class-name\n///                  template-id\n///\n///      new-expression: [C++ 5.3.4]\n///                  \'::\'[opt] \'new\' new-placement[opt] new-type-id\n///                                    new-initializer[opt]\n///                  \'::\'[opt] \'new\' new-placement[opt] \'(\' type-id \')\'\n///                                    new-initializer[opt]\n///\n///      delete-expression: [C++ 5.3.5]\n///                  \'::\'[opt] \'delete\' cast-expression\n///                  \'::\'[opt] \'delete\' \'[\' \']\' cast-expression\n///\n/// [GNU/Embarcadero] unary-type-trait:\n///                  \'__is_arithmetic\'\n///                  \'__is_floating_point\'\n///                  \'__is_integral\'\n///                  \'__is_lvalue_expr\'\n///                  \'__is_rvalue_expr\'\n///                  \'__is_complete_type\'\n///                  \'__is_void\'\n///                  \'__is_array\'\n///                  \'__is_function\'\n///                  \'__is_reference\'\n///                  \'__is_lvalue_reference\'\n///                  \'__is_rvalue_reference\'\n///                  \'__is_fundamental\'\n///                  \'__is_object\'\n///                  \'__is_scalar\'\n///                  \'__is_compound\'\n///                  \'__is_pointer\'\n///                  \'__is_member_object_pointer\'\n///                  \'__is_member_function_pointer\'\n///                  \'__is_member_pointer\'\n///                  \'__is_const\'\n///                  \'__is_volatile\'\n///                  \'__is_trivial\'\n///                  \'__is_standard_layout\'\n///                  \'__is_signed\'\n///                  \'__is_unsigned\'\n///\n/// [GNU] unary-type-trait:\n///                  \'__has_nothrow_assign\'\n///                  \'__has_nothrow_copy\'\n///                  \'__has_nothrow_constructor\'\n///                  \'__has_trivial_assign\'                  [TODO]\n///                  \'__has_trivial_copy\'                    [TODO]\n///                  \'__has_trivial_constructor\'\n///                  \'__has_trivial_destructor\'\n///                  \'__has_virtual_destructor\'\n///                  \'__is_abstract\'                        [TODO]\n///                  \'__is_class\'\n///                  \'__is_empty\'                            [TODO]\n///                  \'__is_enum\'\n///                  \'__is_final\'\n///                  \'__is_pod\'\n///                  \'__is_polymorphic\'\n///                  \'__is_sealed\'                          [MS]\n///                  \'__is_trivial\'\n///                  \'__is_union\'\n///                  \'__has_unique_object_representations\'\n///\n/// [Clang] unary-type-trait:\n///                  \'__is_aggregate\'\n///                  \'__trivially_copyable\'\n///\n///      binary-type-trait:\n/// [GNU]            \'__is_base_of\'\n/// [MS]              \'__is_convertible_to\'\n///                  \'__is_convertible\'\n///                  \'__is_same\'\n///\n/// [Embarcadero] array-type-trait:\n///                  \'__array_rank\'\n///                  \'__array_extent\'\n///\n/// [Embarcadero] expression-trait:\n///                  \'__is_lvalue_expr\'\n///                  \'__is_rvalue_expr\'\n/// \\endverbatim\n///\nExprResult Parser::ParseCastExpression(CastParseKind ParseKind, bool isAddressOfOperand, bool &NotCastExpr, TypeCastState isTypeCast, bool isVectorLiteral, bool *NotPrimaryExpression) {\n  // ...\n  case tok::kw_nullptr:\n    if (getLangOpts().CPlusPlus)\n      Diag(Tok, diag::warn_cxx98_compat_nullptr);"}},
[f]={ed,1318892780,fd,Pc},
[k]={
[h]={{Mc,1012,"/// Parse a cast-expression, or, if \\pisUnaryExpression is true, parse\n/// a unary-expression.\n///\n/// \\p isAddressOfOperand exists because an id-expression that is the operand\n/// of address-of gets special treatment due to member pointers. NotCastExpr\n/// is set to true if the token is not the start of a cast-expression, and no\n/// diagnostic is emitted in this case and no tokens are consumed.\n///\n/// \\verbatim\n///      cast-expression: [C99 6.5.4]\n///        unary-expression\n///        \'(\' type-name \')\' cast-expression\n///\n///      unary-expression:  [C99 6.5.3]\n///        postfix-expression\n///        \'++\' unary-expression\n///        \'--\' unary-expression\n/// [Coro]  \'co_await\' cast-expression\n///        unary-operator cast-expression\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// [GNU]  \'&&\' identifier\n/// [C++11] \'noexcept\' \'(\' expression \')\' [C++11 5.3.7]\n/// [C++]  new-expression\n/// [C++]  delete-expression\n///\n///      unary-operator: one of\n///        \'&\'  \'*\'  \'+\'  \'-\'  \'~\'  \'!\'\n/// [GNU]  \'__extension__\'  \'__real\'  \'__imag\'\n///\n///      primary-expression: [C99 6.5.1]\n/// [C99]  identifier\n/// [C++]  id-expression\n///        constant\n///        string-literal\n/// [C++]  boolean-literal  [C++ 2.13.5]\n/// [C++11] \'nullptr\'        [C++11 2.14.7]\n/// [C++11] user-defined-literal\n///        \'(\' expression \')\'\n/// [C11]  generic-selection\n/// [C++2a] requires-expression\n///        \'__func__\'        [C99 6.4.2.2]\n/// [GNU]  \'__FUNCTION__\'\n/// [MS]    \'__FUNCDNAME__\'\n/// [MS]    \'L__FUNCTION__\'\n/// [MS]    \'__FUNCSIG__\'\n/// [MS]    \'L__FUNCSIG__\'\n/// [GNU]  \'__PRETTY_FUNCTION__\'\n/// [GNU]  \'(\' compound-statement \')\'\n/// [GNU]  \'__builtin_va_arg\' \'(\' assignment-expression \',\' type-name \')\'\n/// [GNU]  \'__builtin_offsetof\' \'(\' type-name \',\' offsetof-member-designator\')\'\n/// [GNU]  \'__builtin_choose_expr\' \'(\' assign-expr \',\' assign-expr \',\'\n///                                    assign-expr \')\'\n/// [GNU]  \'__builtin_FILE\' \'(\' \')\'\n/// [CLANG] \'__builtin_FILE_NAME\' \'(\' \')\'\n/// [GNU]  \'__builtin_FUNCTION\' \'(\' \')\'\n/// [MS]    \'__builtin_FUNCSIG\' \'(\' \')\'\n/// [GNU]  \'__builtin_LINE\' \'(\' \')\'\n/// [CLANG] \'__builtin_COLUMN\' \'(\' \')\'\n/// [GNU]  \'__builtin_source_location\' \'(\' \')\'\n/// [GNU]  \'__builtin_types_compatible_p\' \'(\' type-name \',\' type-name \')\'\n/// [GNU]  \'__null\'\n/// [OBJC]  \'[\' objc-message-expr \']\'\n/// [OBJC]  \'\\@selector\' \'(\' objc-selector-arg \')\'\n/// [OBJC]  \'\\@protocol\' \'(\' identifier \')\'\n/// [OBJC]  \'\\@encode\' \'(\' type-name \')\'\n/// [OBJC]  objc-string-literal\n/// [C++]  simple-type-specifier \'(\' expression-list[opt] \')\'      [C++ 5.2.3]\n/// [C++11] simple-type-specifier braced-init-list                  [C++11 5.2.3]\n/// [C++]  typename-specifier \'(\' expression-list[opt] \')\'        [C++ 5.2.3]\n/// [C++11] typename-specifier braced-init-list                    [C++11 5.2.3]\n/// [C++]  \'const_cast\' \'<\' type-name \'>\' \'(\' expression \')\'      [C++ 5.2p1]\n/// [C++]  \'dynamic_cast\' \'<\' type-name \'>\' \'(\' expression \')\'    [C++ 5.2p1]\n/// [C++]  \'reinterpret_cast\' \'<\' type-name \'>\' \'(\' expression \')\' [C++ 5.2p1]\n/// [C++]  \'static_cast\' \'<\' type-name \'>\' \'(\' expression \')\'      [C++ 5.2p1]\n/// [C++]  \'typeid\' \'(\' expression \')\'                            [C++ 5.2p1]\n/// [C++]  \'typeid\' \'(\' type-id \')\'                                [C++ 5.2p1]\n/// [C++]  \'this\'          [C++ 9.3.2]\n/// [G++]  unary-type-trait \'(\' type-id \')\'\n/// [G++]  binary-type-trait \'(\' type-id \',\' type-id \')\'          [TODO]\n/// [EMBT]  array-type-trait \'(\' type-id \',\' integer \')\'\n/// [clang] \'^\' block-literal\n///\n///      constant: [C99 6.4.4]\n///        integer-constant\n///        floating-constant\n///        enumeration-constant -> identifier\n///        character-constant\n///\n///      id-expression: [C++ 5.1]\n///                  unqualified-id\n///                  qualified-id\n///\n///      unqualified-id: [C++ 5.1]\n///                  identifier\n///                  operator-function-id\n///                  conversion-function-id\n///                  \'~\' class-name\n///                  template-id\n///\n///      new-expression: [C++ 5.3.4]\n///                  \'::\'[opt] \'new\' new-placement[opt] new-type-id\n///                                    new-initializer[opt]\n///                  \'::\'[opt] \'new\' new-placement[opt] \'(\' type-id \')\'\n///                                    new-initializer[opt]\n///\n///      delete-expression: [C++ 5.3.5]\n///                  \'::\'[opt] \'delete\' cast-expression\n///                  \'::\'[opt] \'delete\' \'[\' \']\' cast-expression\n///\n/// [GNU/Embarcadero] unary-type-trait:\n///                  \'__is_arithmetic\'\n///                  \'__is_floating_point\'\n///                  \'__is_integral\'\n///                  \'__is_lvalue_expr\'\n///                  \'__is_rvalue_expr\'\n///                  \'__is_complete_type\'\n///                  \'__is_void\'\n///                  \'__is_array\'\n///                  \'__is_function\'\n///                  \'__is_reference\'\n///                  \'__is_lvalue_reference\'\n///                  \'__is_rvalue_reference\'\n///                  \'__is_fundamental\'\n///                  \'__is_object\'\n///                  \'__is_scalar\'\n///                  \'__is_compound\'\n///                  \'__is_pointer\'\n///                  \'__is_member_object_pointer\'\n///                  \'__is_member_function_pointer\'\n///                  \'__is_member_pointer\'\n///                  \'__is_const\'\n///                  \'__is_volatile\'\n///                  \'__is_trivial\'\n///                  \'__is_standard_layout\'\n///                  \'__is_signed\'\n///                  \'__is_unsigned\'\n///\n/// [GNU] unary-type-trait:\n///                  \'__has_nothrow_assign\'\n///                  \'__has_nothrow_copy\'\n///                  \'__has_nothrow_constructor\'\n///                  \'__has_trivial_assign\'                  [TODO]\n///                  \'__has_trivial_copy\'                    [TODO]\n///                  \'__has_trivial_constructor\'\n///                  \'__has_trivial_destructor\'\n///                  \'__has_virtual_destructor\'\n///                  \'__is_abstract\'                        [TODO]\n///                  \'__is_class\'\n///                  \'__is_empty\'                            [TODO]\n///                  \'__is_enum\'\n///                  \'__is_final\'\n///                  \'__is_pod\'\n///                  \'__is_polymorphic\'\n///                  \'__is_sealed\'                          [MS]\n///                  \'__is_trivial\'\n///                  \'__is_union\'\n///                  \'__has_unique_object_representations\'\n///\n/// [Clang] unary-type-trait:\n///                  \'__is_aggregate\'\n///                  \'__trivially_copyable\'\n///\n///      binary-type-trait:\n/// [GNU]            \'__is_base_of\'\n/// [MS]              \'__is_convertible_to\'\n///                  \'__is_convertible\'\n///                  \'__is_same\'\n///\n/// [Embarcadero] array-type-trait:\n///                  \'__array_rank\'\n///                  \'__array_extent\'\n///\n/// [Embarcadero] expression-trait:\n///                  \'__is_lvalue_expr\'\n///                  \'__is_rvalue_expr\'\n/// \\endverbatim\n///\nExprResult Parser::ParseCastExpression(CastParseKind ParseKind, bool isAddressOfOperand, bool &NotCastExpr, TypeCastState isTypeCast, bool isVectorLiteral, bool *NotPrimaryExpression) {\n  // ...\n  case tok::kw_nullptr:\n    if (getLangOpts().CPlusPlus)\n      Diag(Tok, diag::warn_cxx98_compat_nullptr);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:154:14: warning: \'nullptr\' is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:154:14: warning: \'nullptr\' is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_override_control_keyword"]={
["warn_cxx98_compat_override_control_keyword"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="\'%0\' keyword is incompatible with C++98",
[c]="warn_cxx98_compat_override_control_keyword",
[d]=g,
[d]="\'%0\' keyword is incompatible with C++98",
[e]="\'(.*?)\' keyword is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="\'(.*?)\' keyword is incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[h]={{bb,2473,"/// ParseOptionalCXX11VirtSpecifierSeq - Parse a virt-specifier-seq.\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\nvoid Parser::ParseOptionalCXX11VirtSpecifierSeq(VirtSpecifiers &VS, bool IsInterface, SourceLocation FriendLoc) {\n  while (true) {\n    // ...\n    if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n    // ...\n    } else if (Specifier == VirtSpecifiers::VS_Sealed) {\n    // ...\n    } else if (Specifier == VirtSpecifiers::VS_Abstract) {\n    // ...\n    } else if (Specifier == VirtSpecifiers::VS_GNU_Final) {\n    // ...\n    } else {\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_override_control_keyword : diag::ext_override_control_keyword) << VirtSpecifiers::getSpecifierName(Specifier);"},{bb,3528,"/// ParseCXXMemberSpecification - Parse the class definition.\n///\n///      member-specification:\n///        member-declaration member-specification[opt]\n///        access-specifier \':\' member-specification[opt]\n///\nvoid Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc, SourceLocation AttrFixitLoc, ParsedAttributes &Attrs, unsigned TagType, Decl *TagDecl) {\n  // ...\n  // Parse the optional \'final\' keyword.\n  if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n    while (true) {\n      // ...\n      if (TagType == DeclSpec::TST_interface)\n      // ...\n      else if (Specifier == VirtSpecifiers::VS_Final)\n        Diag(FinalLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_override_control_keyword : diag::ext_override_control_keyword) << VirtSpecifiers::getSpecifierName(Specifier);"}},
[f]={Tb,1318655374,Sb,Rb},
[k]={
[h]={{kb,2473,"/// ParseOptionalCXX11VirtSpecifierSeq - Parse a virt-specifier-seq.\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\nvoid Parser::ParseOptionalCXX11VirtSpecifierSeq(VirtSpecifiers &VS, bool IsInterface, SourceLocation FriendLoc) {\n  while (true) {\n    // ...\n    if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n    // ...\n    } else if (Specifier == VirtSpecifiers::VS_Sealed) {\n    // ...\n    } else if (Specifier == VirtSpecifiers::VS_Abstract) {\n    // ...\n    } else if (Specifier == VirtSpecifiers::VS_GNU_Final) {\n    // ...\n    } else {\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_override_control_keyword : diag::ext_override_control_keyword) << VirtSpecifiers::getSpecifierName(Specifier);"},{kb,3528,"/// ParseCXXMemberSpecification - Parse the class definition.\n///\n///      member-specification:\n///        member-declaration member-specification[opt]\n///        access-specifier \':\' member-specification[opt]\n///\nvoid Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc, SourceLocation AttrFixitLoc, ParsedAttributes &Attrs, unsigned TagType, Decl *TagDecl) {\n  // ...\n  // Parse the optional \'final\' keyword.\n  if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n    while (true) {\n      // ...\n      if (TagType == DeclSpec::TST_interface)\n      // ...\n      else if (Specifier == VirtSpecifiers::VS_Final)\n        Diag(FinalLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_override_control_keyword : diag::ext_override_control_keyword) << VirtSpecifiers::getSpecifierName(Specifier);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:132:24: warning: \'final\' keyword is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:133:20: warning: \'override\' keyword is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:134:20: warning: \'final\' keyword is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:132:24: warning: \'final\' keyword is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:133:20: warning: \'override\' keyword is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:134:20: warning: \'final\' keyword is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_pass_non_pod_arg_to_vararg"]={
["warn_cxx98_compat_pass_non_pod_arg_to_vararg"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="passing object of trivial but non-POD type %0 through variadic %select{function|block|method|constructor}1 is incompatible with C++98",
[c]="warn_cxx98_compat_pass_non_pod_arg_to_vararg",
[d]=g,
[d]="passing object of trivial but non-POD type %0 through variadic %select{function|block|method|constructor}1 is incompatible with C++98",
[e]="passing object of trivial but non\\-POD type (.*?) through variadic (?:function|block|method|constructor) is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="passing object of trivial but non\\-POD type (.*?) through variadic (?:function|block|method|constructor) is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={hc,1318970984,fc,ec},
[b]=m,
[h]={{K,998,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  // ...\n  case VAK_ValidInCXX11:\n    DiagRuntimeBehavior(E->getBeginLoc(), nullptr, PDiag(diag::warn_cxx98_compat_pass_non_pod_arg_to_vararg) << Ty << CT);"}},
[f]={jc,1318970984,kc,lc},
[k]={
[h]={{S,998,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  // ...\n  case VAK_ValidInCXX11:\n    DiagRuntimeBehavior(E->getBeginLoc(), nullptr, PDiag(diag::warn_cxx98_compat_pass_non_pod_arg_to_vararg) << Ty << CT);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:213:15: warning: passing object of trivial but non-POD type \'TrivialButNonPOD\' through variadic function is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:213:15: warning: passing object of trivial but non-POD type \'TrivialButNonPOD\' through variadic function is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_pp_line_too_big"]={
["warn_cxx98_compat_pp_line_too_big"]={
[j]={m},
[k]={n},
[i]=m,
[j]=n,
[c]="#line number greater than 32767 is incompatible with C++98",
[c]="warn_cxx98_compat_pp_line_too_big",
[d]=g,
[d]="#line number greater than 32767 is incompatible with C++98",
[e]="\\#line number greater than 32767 is incompatible with C\\+\\+98",
[e]=i,
[f]=Kc,
[g]="\\#line number greater than 32767 is incompatible with C\\+\\+98",
[b]=L,
[a]=Kc,
[a]={hd,1318641536,md,pd},
[b]=T,
[h]={{vd,1425,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // ...\n  if (LineNo >= LineLimit)\n  // ...\n  else if (LangOpts.CPlusPlus11 && LineNo >= 32768U)\n    Diag(DigitTok, diag::warn_cxx98_compat_pp_line_too_big);"}},
[f]={kd,1318641536,nd,od},
[k]={
[h]={{Bd,1425,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // ...\n  if (LineNo >= LineLimit)\n  // ...\n  else if (LangOpts.CPlusPlus11 && LineNo >= 32768U)\n    Diag(DigitTok, diag::warn_cxx98_compat_pp_line_too_big);"}},
[rd]={"clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32767:7: warning: #line number greater than 32767 is incompatible with C++98 [-Wc++98-compat-pedantic]"}
[l]={
[pd]={"clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32767:7: warning: #line number greater than 32767 is incompatible with C++98 [-Wc++98-compat-pedantic]"}
}
}
},
},
["warn_cxx98_compat_raw_string_literal"]={
["warn_cxx98_compat_raw_string_literal"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="raw string literals are incompatible with C++98",
[c]="warn_cxx98_compat_raw_string_literal",
[d]=g,
[d]="raw string literals are incompatible with C++98",
[e]="raw string literals are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="raw string literals are incompatible with C\\+\\+98",
[b]=L,
[a]=E,
[a]={hd,1318641536,md,pd},
[b]=T,
[h]={{Ab,2146,"/// LexRawStringLiteral - Lex the remainder of a raw string literal, after\n/// having lexed R\", LR\", u8R\", uR\", or UR\".\nbool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // ...\n  if (!isLexingRawMode())\n    Diag(BufferPtr, diag::warn_cxx98_compat_raw_string_literal);"}},
[f]={kd,1318641536,nd,od},
[k]={
[h]={{Fb,2146,"/// LexRawStringLiteral - Lex the remainder of a raw string literal, after\n/// having lexed R\", LR\", u8R\", uR\", or UR\".\nbool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // ...\n  if (!isLexingRawMode())\n    Diag(BufferPtr, diag::warn_cxx98_compat_raw_string_literal);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:36:9: warning: raw string literals are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:37:9: warning: raw string literals are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:38:9: warning: raw string literals are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:39:9: warning: raw string literals are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:40:9: warning: raw string literals are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:36:9: warning: raw string literals are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:37:9: warning: raw string literals are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:38:9: warning: raw string literals are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:39:9: warning: raw string literals are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:40:9: warning: raw string literals are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_ref_qualifier"]={
["warn_cxx98_compat_ref_qualifier"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="reference qualifiers on functions are incompatible with C++98",
[c]="warn_cxx98_compat_ref_qualifier",
[d]=g,
[d]="reference qualifiers on functions are incompatible with C++98",
[e]="reference qualifiers on functions are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="reference qualifiers on functions are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[h]={{Tb,7159,"/// ParseRefQualifier - Parses a member function ref-qualifier. Returns\n/// true if a ref-qualifier is found.\nbool Parser::ParseRefQualifier(bool &RefQualifierIsLValueRef, SourceLocation &RefQualifierLoc) {\n  if (Tok.isOneOf(tok::amp, tok::ampamp)) {\n    Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_ref_qualifier : diag::ext_ref_qualifier);"}},
[f]={Tb,1318655374,Sb,Rb},
[k]={
[h]={{Wb,7159,"/// ParseRefQualifier - Parses a member function ref-qualifier. Returns\n/// true if a ref-qualifier is found.\nbool Parser::ParseRefQualifier(bool &RefQualifierIsLValueRef, SourceLocation &RefQualifierLoc) {\n  if (Tok.isOneOf(tok::amp, tok::ampamp)) {\n    Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_ref_qualifier : diag::ext_ref_qualifier);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:102:12: warning: reference qualifiers on functions are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:102:12: warning: reference qualifiers on functions are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_reference_list_init"]={
["warn_cxx98_compat_reference_list_init"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="reference initialized from initializer list is incompatible with C++98",
[c]="warn_cxx98_compat_reference_list_init",
[d]=g,
[d]="reference initialized from initializer list is incompatible with C++98",
[e]="reference initialized from initializer list is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="reference initialized from initializer list is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"2b349aee5b6f",1334818680,"Add missing -Wc++98-compat warnings for initializer list initializations which","Add missing -Wc++98-compat warnings for initializer list initializations which\ninitialize references, create std::initializer_list objects, or call constructors.\n\nllvm-svn: 155105"},
[b]=m,
[h]={{fb,8609,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  if (S.getLangOpts().CPlusPlus11 && Entity.getType()->isReferenceType() && Args.size() == 1 && isa<InitListExpr>(Args[0]) && !Entity.isParamOrTemplateParamKind()) {\n    // ...\n    S.Diag(Init->getBeginLoc(), diag::warn_cxx98_compat_reference_list_init) << Init->getSourceRange();"}},
[f]={"2b349aee5b6f",1334818680,"Add missing -Wc++98-compat warnings for initializer list initializations which","Add missing -Wc++98-compat warnings for initializer list initializations which\ninitialize references, create std::initializer_list objects, or call constructors.\n\nllvm-svn: 155105"},
[k]={
[h]={{mb,8609,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  if (S.getLangOpts().CPlusPlus11 && Entity.getType()->isReferenceType() && Args.size() == 1 && isa<InitListExpr>(Args[0]) && !Entity.isParamOrTemplateParamKind()) {\n    // ...\n    S.Diag(Init->getBeginLoc(), diag::warn_cxx98_compat_reference_list_init) << Init->getSourceRange();"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:78:18: warning: reference initialized from initializer list is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:79:45: warning: reference initialized from initializer list is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:115:18: warning: reference initialized from initializer list is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:121:41: warning: reference initialized from initializer list is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:78:18: warning: reference initialized from initializer list is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:79:45: warning: reference initialized from initializer list is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:115:18: warning: reference initialized from initializer list is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:121:41: warning: reference initialized from initializer list is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_rvalue_reference"]={
["warn_cxx98_compat_rvalue_reference"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="rvalue references are incompatible with C++98",
[c]="warn_cxx98_compat_rvalue_reference",
[d]=g,
[d]="rvalue references are incompatible with C++98",
[e]="rvalue references are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="rvalue references are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[h]={{Tb,6273,"/// ParseDeclaratorInternal - Parse a C or C++ declarator. The direct-declarator\n/// is parsed by the function passed to it. Pass null, and the direct-declarator\n/// isn\'t parsed at all, making this function effectively parse the C++\n/// ptr-operator production.\n///\n/// If the grammar of this construct is extended, matching changes must also be\n/// made to TryParseDeclarator and MightBeDeclarator, and possibly to\n/// isConstructorDeclarator.\n///\n///      declarator: [C99 6.7.5] [C++ 8p4, dcl.decl]\n/// [C]    pointer[opt] direct-declarator\n/// [C++]  direct-declarator\n/// [C++]  ptr-operator declarator\n///\n///      pointer: [C99 6.7.5]\n///        \'*\' type-qualifier-list[opt]\n///        \'*\' type-qualifier-list[opt] pointer\n///\n///      ptr-operator:\n///        \'*\' cv-qualifier-seq[opt]\n///        \'&\'\n/// [C++0x] \'&&\'\n/// [GNU]  \'&\' restrict[opt] attributes[opt]\n/// [GNU?]  \'&&\' restrict[opt] attributes[opt]\n///        \'::\'[opt] nested-name-specifier \'*\' cv-qualifier-seq[opt]\nvoid Parser::ParseDeclaratorInternal(Declarator &D, DirectDeclParseFunction DirectDeclParser) {\n  // ...\n  if (Kind == tok::star || Kind == tok::caret) {\n  // ...\n  } else {\n    // ...\n    // Complain about rvalue references in C++03, but then go on and build\n    // the declarator.\n    if (Kind == tok::ampamp)\n      Diag(Loc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_rvalue_reference : diag::ext_rvalue_reference);"}},
[f]={Tb,1318655374,Sb,Rb},
[k]={
[h]={{Wb,6273,"/// ParseDeclaratorInternal - Parse a C or C++ declarator. The direct-declarator\n/// is parsed by the function passed to it. Pass null, and the direct-declarator\n/// isn\'t parsed at all, making this function effectively parse the C++\n/// ptr-operator production.\n///\n/// If the grammar of this construct is extended, matching changes must also be\n/// made to TryParseDeclarator and MightBeDeclarator, and possibly to\n/// isConstructorDeclarator.\n///\n///      declarator: [C99 6.7.5] [C++ 8p4, dcl.decl]\n/// [C]    pointer[opt] direct-declarator\n/// [C++]  direct-declarator\n/// [C++]  ptr-operator declarator\n///\n///      pointer: [C99 6.7.5]\n///        \'*\' type-qualifier-list[opt]\n///        \'*\' type-qualifier-list[opt] pointer\n///\n///      ptr-operator:\n///        \'*\' cv-qualifier-seq[opt]\n///        \'&\'\n/// [C++0x] \'&&\'\n/// [GNU]  \'&\' restrict[opt] attributes[opt]\n/// [GNU?]  \'&&\' restrict[opt] attributes[opt]\n///        \'::\'[opt] nested-name-specifier \'*\' cv-qualifier-seq[opt]\nvoid Parser::ParseDeclaratorInternal(Declarator &D, DirectDeclParseFunction DirectDeclParser) {\n  // ...\n  if (Kind == tok::star || Kind == tok::caret) {\n  // ...\n  } else {\n    // ...\n    // Complain about rvalue references in C++03, but then go on and build\n    // the declarator.\n    if (Kind == tok::ampamp)\n      Diag(Loc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_rvalue_reference : diag::ext_rvalue_reference);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:100:5: warning: rvalue references are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:100:5: warning: rvalue references are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_scoped_enum"]={
["warn_cxx98_compat_scoped_enum"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="scoped enumerations are incompatible with C++98",
[c]="warn_cxx98_compat_scoped_enum",
[d]=g,
[d]="scoped enumerations are incompatible with C++98",
[e]="scoped enumerations are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="scoped enumerations are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[h]={{Tb,4792,"/// ParseEnumSpecifier\n///      enum-specifier: [C99 6.7.2.2]\n///        \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU]  \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\' attributes[opt]\n/// [MS]    \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\'\n///        \'enum\' identifier\n/// [GNU]  \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\'  \'}\'\n///\n///      enum-head: [C++11]\n///        enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n///        enum-key attribute-specifier-seq[opt] nested-name-specifier\n///            identifier enum-base[opt]\n///\n///      enum-key: [C++11]\n///        \'enum\'\n///        \'enum\' \'class\'\n///        \'enum\' \'struct\'\n///\n///      enum-base: [C++11]\n///        \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++]  \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n  // ...\n  // In C++11, recognize \'enum class\' and \'enum struct\'.\n  if (Tok.isOneOf(tok::kw_class, tok::kw_struct) && getLangOpts().CPlusPlus) {\n    Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_scoped_enum : diag::ext_scoped_enum);"}},
[f]={Tb,1318655374,Sb,Rb},
[k]={
[h]={{Wb,4792,"/// ParseEnumSpecifier\n///      enum-specifier: [C99 6.7.2.2]\n///        \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU]  \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\' attributes[opt]\n/// [MS]    \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                \'}\'\n///        \'enum\' identifier\n/// [GNU]  \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\'  \'}\'\n///\n///      enum-head: [C++11]\n///        enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n///        enum-key attribute-specifier-seq[opt] nested-name-specifier\n///            identifier enum-base[opt]\n///\n///      enum-key: [C++11]\n///        \'enum\'\n///        \'enum\' \'class\'\n///        \'enum\' \'struct\'\n///\n///      enum-base: [C++11]\n///        \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++]  \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n  // ...\n  // In C++11, recognize \'enum class\' and \'enum struct\'.\n  if (Tok.isOneOf(tok::kw_class, tok::kw_struct) && getLangOpts().CPlusPlus) {\n    Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_scoped_enum : diag::ext_scoped_enum);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:92:6: warning: scoped enumerations are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:92:6: warning: scoped enumerations are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_sfinae_access_control"]={
["warn_cxx98_compat_sfinae_access_control"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="substitution failure due to access control is incompatible with C++98",
[c]="warn_cxx98_compat_sfinae_access_control",
[d]=g,
[d]="substitution failure due to access control is incompatible with C++98",
[e]="substitution failure due to access control is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="substitution failure due to access control is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"38c0e0417ccb",1318982821,"-Wc++98-compat: warn if a SFINAE substitution in C++11 suppresses an access","-Wc++98-compat: warn if a SFINAE substitution in C++11 suppresses an access\ncontrol diagnostic.\n\nllvm-svn: 142463"},
[b]=m,
[f]={"38c0e0417ccb",1318982821,"-Wc++98-compat: warn if a SFINAE substitution in C++11 suppresses an access","-Wc++98-compat: warn if a SFINAE substitution in C++11 suppresses an access\ncontrol diagnostic.\n\nllvm-svn: 142463"},
[h]={{"clang/lib/Sema/Sema.cpp",1559,"void Sema::EmitCurrentDiagnostic(unsigned DiagID) {\n  // FIXME: It doesn\'t make sense to me that DiagID is an incoming argument here\n  // and yet we also use the current diag ID on the DiagnosticsEngine. This has\n  // been made more painfully obvious by the refactor that introduced this\n  // function, but it is possible that the incoming argument can be\n  // eliminated. If it truly cannot be (for example, there is some reentrancy\n  // issue I am not seeing yet), then there should at least be a clarifying\n  // comment somewhere.\n  if (std::optional<TemplateDeductionInfo *> Info = isSFINAEContext()) {\n    // ...\n    case DiagnosticIDs::SFINAE_AccessControl: {\n      // ...\n      Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control);"}},
[h]={{"clang/lib/Sema/Sema.cpp",1559,"void Sema::EmitCurrentDiagnostic(unsigned DiagID) {\n  // FIXME: It doesn\'t make sense to me that DiagID is an incoming argument here\n  // and yet we also use the current diag ID on the DiagnosticsEngine. This has\n  // been made more painfully obvious by the refactor that introduced this\n  // function, but it is possible that the incoming argument can be\n  // eliminated. If it truly cannot be (for example, there is some reentrancy\n  // issue I am not seeing yet), then there should at least be a clarifying\n  // comment somewhere.\n  if (std::optional<TemplateDeductionInfo *> Info = isSFINAEContext()) {\n    // ...\n    case DiagnosticIDs::SFINAE_AccessControl: {\n      // ...\n      Diag(Loc, diag::warn_cxx98_compat_sfinae_access_control);"}},
[k]={
[l]={
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:233:34: warning: substitution failure due to access control is incompatible with C++98 [-Wc++98-compat]"}
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:233:34: warning: substitution failure due to access control is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_static_assert"]={
["warn_cxx98_compat_static_assert"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]={{nil,kb,"\'static_assert\' declarations are incompatible with C++98"},{Q,nil,"static_assert declarations are incompatible with C++98"}},
[c]="warn_cxx98_compat_static_assert",
[d]=g,
[d]={{nil,C,"\'static_assert\' declarations are incompatible with C++98"},{w,nil,"static_assert declarations are incompatible with C++98"}},
[e]="\'static_assert\' declarations are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="\'static_assert\' declarations are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Nc,1318892780,Oc,Pc},
[b]=A,
[h]={{bb,981,"/// ParseStaticAssertDeclaration - Parse C++0x or C11 static_assert-declaration.\n///\n/// [C++0x] static_assert-declaration:\n///          static_assert ( constant-expression  ,  string-literal  ) ;\n///\n/// [C11]  static_assert-declaration:\n///          _Static_assert ( constant-expression  ,  string-literal  ) ;\n///\nDecl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd) {\n  // ...\n  if (Tok.is(tok::kw_static_assert)) {\n    if (!getLangOpts().CPlusPlus) {\n    // ...\n    } else\n      Diag(Tok, diag::warn_cxx98_compat_static_assert);"}},
[f]={ed,1318892780,fd,Pc},
[k]={
[h]={{kb,981,"/// ParseStaticAssertDeclaration - Parse C++0x or C11 static_assert-declaration.\n///\n/// [C++0x] static_assert-declaration:\n///          static_assert ( constant-expression  ,  string-literal  ) ;\n///\n/// [C11]  static_assert-declaration:\n///          _Static_assert ( constant-expression  ,  string-literal  ) ;\n///\nDecl *Parser::ParseStaticAssertDeclaration(SourceLocation &DeclEnd) {\n  // ...\n  if (Tok.is(tok::kw_static_assert)) {\n    if (!getLangOpts().CPlusPlus) {\n    // ...\n    } else\n      Diag(Tok, diag::warn_cxx98_compat_static_assert);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:155:1: warning: \'static_assert\' declarations are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:155:1: warning: \'static_assert\' declarations are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_static_data_member_in_union"]={
["warn_cxx98_compat_static_data_member_in_union"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="static data member %0 in union is incompatible with C++98",
[c]="warn_cxx98_compat_static_data_member_in_union",
[d]=g,
[d]="static data member %0 in union is incompatible with C++98",
[e]="static data member (.*?) in union is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="static data member (.*?) in union is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding","C++11 allows unions to have static data members. Remove the corresponding\nrestriction and add some tests.\n\nllvm-svn: 150721"},
[b]=m,
[h]={{D,7606,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    if (SC == SC_Static && CurContext->isRecord()) {\n      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n        // ...\n        if (FunctionOrMethod) {\n        // ...\n        } else if (AnonStruct) {\n        // ...\n        } else if (RD->isUnion()) {\n          // ...\n          Diag(D.getIdentifierLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_static_data_member_in_union : diag::ext_static_data_member_in_union) << Name;"}},
[f]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding","C++11 allows unions to have static data members. Remove the corresponding\nrestriction and add some tests.\n\nllvm-svn: 150721"},
[k]={
[h]={{M,7606,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    if (SC == SC_Static && CurContext->isRecord()) {\n      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n        // ...\n        if (FunctionOrMethod) {\n        // ...\n        } else if (AnonStruct) {\n        // ...\n        } else if (RD->isUnion()) {\n          // ...\n          Diag(D.getIdentifierLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_static_data_member_in_union : diag::ext_static_data_member_in_union) << Name;"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:262:29: warning: static data member \'d\' in union is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:263:22: warning: static data member \'n\' in union is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:264:16: warning: static data member \'k\' in union is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:262:29: warning: static data member \'d\' in union is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:263:22: warning: static data member \'n\' in union is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:264:16: warning: static data member \'k\' in union is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_switch_into_protected_scope"]={
["warn_cxx98_compat_switch_into_protected_scope"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="jump from switch statement to this case label is incompatible with C++98",
[c]="warn_cxx98_compat_switch_into_protected_scope",
[d]=g,
[d]="jump from switch statement to this case label is incompatible with C++98",
[e]="jump from switch statement to this case label is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="jump from switch statement to this case label is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD","Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD\nbut trivially constructible and destructible variables in C++11 mode. Also\nincidentally improve the precision of the wording for jump diagnostics in C++98\nmode.\n\nllvm-svn: 142619"},
[b]=m,
[f]={"fe2750db42c0",1319146932,"Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD","Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD\nbut trivially constructible and destructible variables in C++11 mode. Also\nincidentally improve the precision of the wording for jump diagnostics in C++98\nmode.\n\nllvm-svn: 142619"},
[h]={{"clang/lib/Sema/JumpDiagnostics.cpp",713,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    // ...\n    for (SwitchCase *SC = SS->getSwitchCaseList(); SC; SC = SC->getNextSwitchCase()) {\n      // ...\n      CheckJump(SS, SC, Loc, diag::err_switch_into_protected_scope, 0, diag::warn_cxx98_compat_switch_into_protected_scope);"}},
[h]={{"clang/lib/Sema/JumpDiagnostics.cpp",713,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    // ...\n    for (SwitchCase *SC = SS->getSwitchCaseList(); SC; SC = SC->getNextSwitchCase()) {\n      // ...\n      CheckJump(SS, SC, Loc, diag::err_switch_into_protected_scope, 0, diag::warn_cxx98_compat_switch_into_protected_scope);"}},
[k]={
[l]={
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:286:3: warning: jump from switch statement to this case label is incompatible with C++98 [-Wc++98-compat]"}
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:286:3: warning: jump from switch statement to this case label is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_temp_copy"]={
["warn_cxx98_compat_temp_copy"]={
[j]={"bind-to-temporary-copy","c++98-compat-bind-to-temporary-copy",m},
[k]={"bind-to-temporary-copy","c++98-compat-bind-to-temporary-copy",n},
[i]="c++98-compat-bind-to-temporary-copy",
[j]="c++98-compat-bind-to-temporary-copy",
[c]={{nil,Sb,"%select{copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}1 of type %2 when binding a reference to a temporary would %select{invoke an inaccessible constructor|find no viable constructor|find ambiguous constructors|invoke a deleted constructor}0 in C++98"},{"11.1",eb,"%select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}1 of type %2 when binding a reference to a temporary would %select{invoke an inaccessible constructor|find no viable constructor|find ambiguous constructors|invoke a deleted constructor}0 in C++98"},{lb,nil,"%select{copying variable|copying parameter|returning object|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element}1 of type %2 when binding a reference to a temporary would %select{invoke an inaccessible constructor|find no viable constructor|find ambiguous constructors|invoke a deleted constructor}0 in C++98"}},
[c]="warn_cxx98_compat_temp_copy",
[d]=g,
[d]={{nil,db,"%select{copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}1 of type %2 when binding a reference to a temporary would %select{invoke an inaccessible constructor|find no viable constructor|find ambiguous constructors|invoke a deleted constructor}0 in C++98"},{"11.1",D,"%select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}1 of type %2 when binding a reference to a temporary would %select{invoke an inaccessible constructor|find no viable constructor|find ambiguous constructors|invoke a deleted constructor}0 in C++98"},{F,nil,"%select{copying variable|copying parameter|returning object|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element}1 of type %2 when binding a reference to a temporary would %select{invoke an inaccessible constructor|find no viable constructor|find ambiguous constructors|invoke a deleted constructor}0 in C++98"}},
[e]="(?:copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value) of type (.*?) when binding a reference to a temporary would (?:invoke an inaccessible constructor|find no viable constructor|find ambiguous constructors|invoke a deleted constructor) in C\\+\\+98",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-bind\\-to\\-temporary\\-copy[^\\]]*\\]",
[g]="(?:copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value) of type (.*?) when binding a reference to a temporary would (?:invoke an inaccessible constructor|find no viable constructor|find ambiguous constructors|invoke a deleted constructor) in C\\+\\+98",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-bind\\-to\\-temporary\\-copy[^\\]]*\\]",
[a]={"c620f554b9c4",1319043356,"-Wc++98-compat: diagnose if a reference is bound to a prvalue which does not","-Wc++98-compat: diagnose if a reference is bound to a prvalue which does not\nhave an unambiguous accessible copying constructor; this is ill-formed in C++98.\n\nllvm-svn: 142533"},
[b]=m,
[h]={{fb,6911,"/// Check whether elidable copy construction for binding a reference to\n/// a temporary would have succeeded if we were building in C++98 mode, for\n/// -Wc++98-compat.\nstatic void CheckCXX98CompatAccessibleCopy(Sema &S, const InitializedEntity &Entity, Expr *CurInitExpr) {\n  // ...\n  if (S.Diags.isIgnored(diag::warn_cxx98_compat_temp_copy, Loc))"},{fb,6927,"/// Check whether elidable copy construction for binding a reference to\n/// a temporary would have succeeded if we were building in C++98 mode, for\n/// -Wc++98-compat.\nstatic void CheckCXX98CompatAccessibleCopy(Sema &S, const InitializedEntity &Entity, Expr *CurInitExpr) {\n  // ...\n  PartialDiagnostic Diag = S.PDiag(diag::warn_cxx98_compat_temp_copy) << OR << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange();"}},
[f]={"c620f554b9c4",1319043356,"-Wc++98-compat: diagnose if a reference is bound to a prvalue which does not","-Wc++98-compat: diagnose if a reference is bound to a prvalue which does not\nhave an unambiguous accessible copying constructor; this is ill-formed in C++98.\n\nllvm-svn: 142533"},
[k]={
[h]={{mb,6911,"/// Check whether elidable copy construction for binding a reference to\n/// a temporary would have succeeded if we were building in C++98 mode, for\n/// -Wc++98-compat.\nstatic void CheckCXX98CompatAccessibleCopy(Sema &S, const InitializedEntity &Entity, Expr *CurInitExpr) {\n  // ...\n  if (S.Diags.isIgnored(diag::warn_cxx98_compat_temp_copy, Loc))"},{mb,6927,"/// Check whether elidable copy construction for binding a reference to\n/// a temporary would have succeeded if we were building in C++98 mode, for\n/// -Wc++98-compat.\nstatic void CheckCXX98CompatAccessibleCopy(Sema &S, const InitializedEntity &Entity, Expr *CurInitExpr) {\n  // ...\n  PartialDiagnostic Diag = S.PDiag(diag::warn_cxx98_compat_temp_copy) << OR << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange();"}},
[l]={
["clang/test/SemaCXX/cxx98-compat-flags.cpp"]={"clang/test/SemaCXX/cxx98-compat-flags.cpp:31:18: warning: copying variable of type \'Private\' when binding a reference to a temporary would invoke an inaccessible constructor in C++98 [-Wc++98-compat-bind-to-temporary-copy]","clang/test/SemaCXX/cxx98-compat-flags.cpp:32:19: warning: copying variable of type \'NoViable\' when binding a reference to a temporary would find no viable constructor in C++98 [-Wc++98-compat-bind-to-temporary-copy]","clang/test/SemaCXX/cxx98-compat-flags.cpp:33:20: warning: copying variable of type \'Ambiguous\' when binding a reference to a temporary would find ambiguous constructors in C++98 [-Wc++98-compat-bind-to-temporary-copy]","clang/test/SemaCXX/cxx98-compat-flags.cpp:34:18: warning: copying variable of type \'Deleted\' when binding a reference to a temporary would invoke a deleted constructor in C++98 [-Wc++98-compat-bind-to-temporary-copy]"}
["clang/test/SemaCXX/cxx98-compat-flags.cpp"]={"clang/test/SemaCXX/cxx98-compat-flags.cpp:31:18: warning: copying variable of type \'Private\' when binding a reference to a temporary would invoke an inaccessible constructor in C++98 [-Wc++98-compat-bind-to-temporary-copy]","clang/test/SemaCXX/cxx98-compat-flags.cpp:32:19: warning: copying variable of type \'NoViable\' when binding a reference to a temporary would find no viable constructor in C++98 [-Wc++98-compat-bind-to-temporary-copy]","clang/test/SemaCXX/cxx98-compat-flags.cpp:33:20: warning: copying variable of type \'Ambiguous\' when binding a reference to a temporary would find ambiguous constructors in C++98 [-Wc++98-compat-bind-to-temporary-copy]","clang/test/SemaCXX/cxx98-compat-flags.cpp:34:18: warning: copying variable of type \'Deleted\' when binding a reference to a temporary would invoke a deleted constructor in C++98 [-Wc++98-compat-bind-to-temporary-copy]"}
}
}
},
},
["warn_cxx98_compat_template_arg_extra_parens"]={
["warn_cxx98_compat_template_arg_extra_parens"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="redundant parentheses surrounding address non-type template argument are incompatible with C++98",
[c]="warn_cxx98_compat_template_arg_extra_parens",
[d]=g,
[d]="redundant parentheses surrounding address non-type template argument are incompatible with C++98",
[e]="redundant parentheses surrounding address non\\-type template argument are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="redundant parentheses surrounding address non\\-type template argument are incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={hc,1318970984,fc,ec},
[b]=m,
[h]={{Db,6768,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  if (S.getLangOpts().MicrosoftExt) {\n  // ...\n  } else {\n    // ...\n    while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {\n      if (!Invalid && !ExtraParens) {\n        S.Diag(Arg->getBeginLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_extra_parens : diag::ext_template_arg_extra_parens) << Arg->getSourceRange();"},{Db,6991,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {\n    if (!Invalid && !ExtraParens) {\n      S.Diag(Arg->getBeginLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_extra_parens : diag::ext_template_arg_extra_parens) << Arg->getSourceRange();"}},
[f]={jc,1318970984,kc,lc},
[k]={
[h]={{Eb,6768,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  if (S.getLangOpts().MicrosoftExt) {\n  // ...\n  } else {\n    // ...\n    while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {\n      if (!Invalid && !ExtraParens) {\n        S.Diag(Arg->getBeginLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_extra_parens : diag::ext_template_arg_extra_parens) << Arg->getSourceRange();"},{Eb,6991,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {\n    if (!Invalid && !ExtraParens) {\n      S.Diag(Arg->getBeginLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_extra_parens : diag::ext_template_arg_extra_parens) << Arg->getSourceRange();"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:190:5: warning: redundant parentheses surrounding address non-type template argument are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:191:5: warning: redundant parentheses surrounding address non-type template argument are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:190:5: warning: redundant parentheses surrounding address non-type template argument are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:191:5: warning: redundant parentheses surrounding address non-type template argument are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_template_arg_local_type"]={
["warn_cxx98_compat_template_arg_local_type"]={
[j]={n,"c++98-compat-local-type-template-args",m,"local-type-template-args"},
[k]={o,"c++98-compat-local-type-template-args",n,"local-type-template-args"},
[i]="c++98-compat-local-type-template-args",
[j]="c++98-compat-local-type-template-args",
[c]="local type %0 as template argument is incompatible with C++98",
[c]="warn_cxx98_compat_template_arg_local_type",
[d]=g,
[d]="local type %0 as template argument is incompatible with C++98",
[e]="local type (.*?) as template argument is incompatible with C\\+\\+98",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-local\\-type\\-template\\-args[^\\]]*\\]",
[g]="local type (.*?) as template argument is incompatible with C\\+\\+98",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-local\\-type\\-template\\-args[^\\]]*\\]",
[a]={hc,1318970984,fc,ec},
[b]=m,
[h]={{Db,6458,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n  if (Tag->getDeclContext()->isFunctionOrMethod()) {\n    S.Diag(SR.getBegin(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_local_type : diag::ext_template_arg_local_type) << S.Context.getTypeDeclType(Tag) << SR;"}},
[f]={jc,1318970984,kc,lc},
[k]={
[h]={{Eb,6458,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n  if (Tag->getDeclContext()->isFunctionOrMethod()) {\n    S.Diag(SR.getBegin(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_local_type : diag::ext_template_arg_local_type) << S.Context.getTypeDeclType(Tag) << SR;"}},
[l]={
["clang/test/SemaCXX/cxx98-compat-flags.cpp"]={"clang/test/SemaCXX/cxx98-compat-flags.cpp:7:3: warning: local type \'S\' as template argument is incompatible with C++98 [-Wc++98-compat-local-type-template-args]"}
["clang/test/SemaCXX/cxx98-compat-flags.cpp"]={"clang/test/SemaCXX/cxx98-compat-flags.cpp:7:3: warning: local type \'S\' as template argument is incompatible with C++98 [-Wc++98-compat-local-type-template-args]"}
}
}
},
},
["warn_cxx98_compat_template_arg_null"]={
["warn_cxx98_compat_template_arg_null"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="use of null pointer as non-type template argument is incompatible with C++98",
[c]="warn_cxx98_compat_template_arg_null",
[d]=g,
[d]="use of null pointer as non-type template argument is incompatible with C++98",
[e]="use of null pointer as non\\-type template argument is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="use of null pointer as non\\-type template argument is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"bc8c5b5d6744",1335405063,"Two missing -Wc++98-compat warnings, for null pointers as non-type template","Two missing -Wc++98-compat warnings, for null pointers as non-type template\narguments, and \'this\' in exception-specifications.\n\nllvm-svn: 155606"},
[b]=m,
[h]={{Db,6805,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  // If our parameter has pointer type, check for a null template value.\n  if (ParamType->isPointerType() || ParamType->isNullPtrType()) {\n    // ...\n    case NPV_NullPointer:\n      S.Diag(Arg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);"},{Db,7042,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  case NPV_NullPointer:\n    S.Diag(ResultArg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);"},{Db,7713,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  // Deal with parameters of type std::nullptr_t.\n  if (ParamType->isNullPtrType()) {\n    // ...\n    case NPV_NullPointer:\n      Diag(Arg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);"}},
[f]={"bc8c5b5d6744",1335405063,"Two missing -Wc++98-compat warnings, for null pointers as non-type template","Two missing -Wc++98-compat warnings, for null pointers as non-type template\narguments, and \'this\' in exception-specifications.\n\nllvm-svn: 155606"},
[k]={
[h]={{Eb,6805,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  // If our parameter has pointer type, check for a null template value.\n  if (ParamType->isPointerType() || ParamType->isNullPtrType()) {\n    // ...\n    case NPV_NullPointer:\n      S.Diag(Arg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);"},{Eb,7042,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  case NPV_NullPointer:\n    S.Diag(ResultArg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);"},{Eb,7713,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  // Deal with parameters of type std::nullptr_t.\n  if (ParamType->isNullPtrType()) {\n    // ...\n    case NPV_NullPointer:\n      Diag(Arg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:322:5: warning: use of null pointer as non-type template argument is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:323:5: warning: use of null pointer as non-type template argument is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:322:5: warning: use of null pointer as non-type template argument is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:323:5: warning: use of null pointer as non-type template argument is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_template_arg_object_internal"]={
["warn_cxx98_compat_template_arg_object_internal"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="non-type template argument referring to %select{function|object}0 %1 with internal linkage is incompatible with C++98",
[c]="warn_cxx98_compat_template_arg_object_internal",
[d]=g,
[d]="non-type template argument referring to %select{function|object}0 %1 with internal linkage is incompatible with C++98",
[e]="non\\-type template argument referring to (?:function|object) (.*?) with internal linkage is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="non\\-type template argument referring to (?:function|object) (.*?) with internal linkage is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object","Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object\nor function with internal linkage as a non-type template argument.\n\nllvm-svn: 154053"},
[b]=m,
[h]={{Db,6872,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  // Address / reference template args must have external linkage in C++98.\n  if (Entity->getFormalLinkage() == InternalLinkage) {\n    S.Diag(Arg->getBeginLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_object_internal : diag::ext_template_arg_object_internal) << !Func << Entity << Arg->getSourceRange();"}},
[f]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object","Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object\nor function with internal linkage as a non-type template argument.\n\nllvm-svn: 154053"},
[k]={
[h]={{Eb,6872,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  // Address / reference template args must have external linkage in C++98.\n  if (Entity->getFormalLinkage() == InternalLinkage) {\n    S.Diag(Arg->getBeginLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_object_internal : diag::ext_template_arg_object_internal) << !Func << Entity << Arg->getSourceRange();"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:314:17: warning: non-type template argument referring to object \'k\' with internal linkage is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:315:16: warning: non-type template argument referring to function \'f\' with internal linkage is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:314:17: warning: non-type template argument referring to object \'k\' with internal linkage is incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:315:16: warning: non-type template argument referring to function \'f\' with internal linkage is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_template_arg_unnamed_type"]={
["warn_cxx98_compat_template_arg_unnamed_type"]={
[j]={n,m,"c++98-compat-unnamed-type-template-args","unnamed-type-template-args"},
[k]={o,n,"c++98-compat-unnamed-type-template-args","unnamed-type-template-args"},
[i]="c++98-compat-unnamed-type-template-args",
[j]="c++98-compat-unnamed-type-template-args",
[c]="unnamed type as template argument is incompatible with C++98",
[c]="warn_cxx98_compat_template_arg_unnamed_type",
[d]=g,
[d]="unnamed type as template argument is incompatible with C++98",
[e]="unnamed type as template argument is incompatible with C\\+\\+98",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-unnamed\\-type\\-template\\-args[^\\]]*\\]",
[g]="unnamed type as template argument is incompatible with C\\+\\+98",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-unnamed\\-type\\-template\\-args[^\\]]*\\]",
[a]={hc,1318970984,fc,ec},
[b]=m,
[h]={{Db,6467,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n  // ...\n  if (!Tag->hasNameForLinkage()) {\n    S.Diag(SR.getBegin(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_unnamed_type : diag::ext_template_arg_unnamed_type) << SR;"}},
[f]={jc,1318970984,kc,lc},
[k]={
[h]={{Eb,6467,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n  // ...\n  if (!Tag->hasNameForLinkage()) {\n    S.Diag(SR.getBegin(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_unnamed_type : diag::ext_template_arg_unnamed_type) << SR;"}},
[l]={
["clang/test/SemaCXX/cxx98-compat-flags.cpp"]={"clang/test/SemaCXX/cxx98-compat-flags.cpp:10:26: warning: unnamed type as template argument is incompatible with C++98 [-Wc++98-compat-unnamed-type-template-args]"}
["clang/test/SemaCXX/cxx98-compat-flags.cpp"]={"clang/test/SemaCXX/cxx98-compat-flags.cpp:10:26: warning: unnamed type as template argument is incompatible with C++98 [-Wc++98-compat-unnamed-type-template-args]"}
}
}
},
},
["warn_cxx98_compat_template_outside_of_template"]={
["warn_cxx98_compat_template_outside_of_template"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="use of \'template\' keyword outside of a template is incompatible with C++98",
[c]="warn_cxx98_compat_template_outside_of_template",
[d]=g,
[d]="use of \'template\' keyword outside of a template is incompatible with C++98",
[e]="use of \'template\' keyword outside of a template is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="use of \'template\' keyword outside of a template is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={hc,1318970984,fc,ec},
[b]=m,
[h]={{Db,5083,"/// Form a template name from a name that is syntactically required to name a\n/// template, either due to use of the \'template\' keyword or because a name in\n/// this syntactic context is assumed to name a template (C++ [temp.names]p2-4).\n///\n/// This action forms a template name given the name of the template and its\n/// optional scope specifier. This is used when the \'template\' keyword is used\n/// or when the parsing context unambiguously treats a following \'<\' as\n/// introducing a template argument list. Note that this may produce a\n/// non-dependent template name if we can perform the lookup now and identify\n/// the named template.\n///\n/// For example, given \"x.MetaFun::template apply\", the scope specifier\n/// \\p SS will be \"MetaFun::\", \\p TemplateKWLoc contains the location\n/// of the \"template\" keyword, and \"apply\" is the \\p Name.\nTemplateNameKind Sema::ActOnTemplateName(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext, TemplateTy &Result, bool AllowInjectedClassName) {\n  if (TemplateKWLoc.isValid() && S && !S->getTemplateParamParent())\n    Diag(TemplateKWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_outside_of_template : diag::ext_template_outside_of_template) << FixItHint::CreateRemoval(TemplateKWLoc);"}},
[f]={jc,1318970984,kc,lc},
[k]={
[h]={{Eb,5083,"/// Form a template name from a name that is syntactically required to name a\n/// template, either due to use of the \'template\' keyword or because a name in\n/// this syntactic context is assumed to name a template (C++ [temp.names]p2-4).\n///\n/// This action forms a template name given the name of the template and its\n/// optional scope specifier. This is used when the \'template\' keyword is used\n/// or when the parsing context unambiguously treats a following \'<\' as\n/// introducing a template argument list. Note that this may produce a\n/// non-dependent template name if we can perform the lookup now and identify\n/// the named template.\n///\n/// For example, given \"x.MetaFun::template apply\", the scope specifier\n/// \\p SS will be \"MetaFun::\", \\p TemplateKWLoc contains the location\n/// of the \"template\" keyword, and \"apply\" is the \\p Name.\nTemplateNameKind Sema::ActOnTemplateName(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext, TemplateTy &Result, bool AllowInjectedClassName) {\n  if (TemplateKWLoc.isValid() && S && !S->getTemplateParamParent())\n    Diag(TemplateKWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_outside_of_template : diag::ext_template_outside_of_template) << FixItHint::CreateRemoval(TemplateKWLoc);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:204:11: warning: use of \'template\' keyword outside of a template is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:204:11: warning: use of \'template\' keyword outside of a template is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_template_parameter_default_in_function_template"]={
["warn_cxx98_compat_template_parameter_default_in_function_template"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="default template arguments for a function template are incompatible with C++98",
[c]="warn_cxx98_compat_template_parameter_default_in_function_template",
[d]=g,
[d]="default template arguments for a function template are incompatible with C++98",
[e]="default template arguments for a function template are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="default template arguments for a function template are incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={hc,1318970984,fc,ec},
[b]=m,
[h]={{Db,2723,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n  // ...\n  case Sema::TPC_FunctionTemplate:\n  case Sema::TPC_FriendFunctionTemplateDefinition:\n    // ...\n    S.Diag(ParamLoc, S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_parameter_default_in_function_template : diag::ext_template_parameter_default_in_function_template) << DefArgRange;"}},
[f]={jc,1318970984,kc,lc},
[k]={
[h]={{Eb,2723,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n  // ...\n  case Sema::TPC_FunctionTemplate:\n  case Sema::TPC_FriendFunctionTemplateDefinition:\n    // ...\n    S.Diag(ParamLoc, S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_parameter_default_in_function_template : diag::ext_template_parameter_default_in_function_template) << DefArgRange;"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:174:14: warning: default template arguments for a function template are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:174:14: warning: default template arguments for a function template are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_top_level_semi"]={
["warn_cxx98_compat_top_level_semi"]={
[j]={"c++98-compat-extra-semi",m,"extra-semi"},
[k]={"c++98-compat-extra-semi",n,"extra-semi"},
[i]="c++98-compat-extra-semi",
[j]="c++98-compat-extra-semi",
[c]="extra \';\' outside of a function is incompatible with C++98",
[c]="warn_cxx98_compat_top_level_semi",
[d]=g,
[d]="extra \';\' outside of a function is incompatible with C++98",
[e]="extra \';\' outside of a function is incompatible with C\\+\\+98",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-extra\\-semi[^\\]]*\\]",
[g]="extra \';\' outside of a function is incompatible with C\\+\\+98",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-extra\\-semi[^\\]]*\\]",
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[h]={{Lc,198,"void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) {\n  // ...\n  // C++11 allows extra semicolons at namespace scope, but not in any of the\n  // other contexts.\n  if (Kind == OutsideFunction && getLangOpts().CPlusPlus) {\n    if (getLangOpts().CPlusPlus11)\n      Diag(StartLoc, diag::warn_cxx98_compat_top_level_semi) << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));"}},
[f]={Tb,1318655374,Sb,Rb},
[k]={
[h]={{Hc,198,"void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) {\n  // ...\n  // C++11 allows extra semicolons at namespace scope, but not in any of the\n  // other contexts.\n  if (Kind == OutsideFunction && getLangOpts().CPlusPlus) {\n    if (getLangOpts().CPlusPlus11)\n      Diag(StartLoc, diag::warn_cxx98_compat_top_level_semi) << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));"}},
[l]={
["clang/test/Parser/cxx-extra-semi.cpp"]={"clang/test/Parser/cxx-extra-semi.cpp:36:1: warning: extra \';\' outside of a function is incompatible with C++98 [-Wc++98-compat-extra-semi]","clang/test/Parser/cxx-extra-semi.cpp:37:1: warning: extra \';\' outside of a function is incompatible with C++98 [-Wc++98-compat-extra-semi]"}
["clang/test/Parser/cxx-extra-semi.cpp"]={"clang/test/Parser/cxx-extra-semi.cpp:36:1: warning: extra \';\' outside of a function is incompatible with C++98 [-Wc++98-compat-extra-semi]","clang/test/Parser/cxx-extra-semi.cpp:37:1: warning: extra \';\' outside of a function is incompatible with C++98 [-Wc++98-compat-extra-semi]"}
}
}
},
},
["warn_cxx98_compat_trailing_return_type"]={
["warn_cxx98_compat_trailing_return_type"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="trailing return types are incompatible with C++98",
[c]="warn_cxx98_compat_trailing_return_type",
[d]=g,
[d]="trailing return types are incompatible with C++98",
[e]="trailing return types are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="trailing return types are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[h]={{Tb,7100,"/// ParseFunctionDeclarator - We are after the identifier and have parsed the\n/// declarator D up to a paren, which indicates that we are parsing function\n/// arguments.\n///\n/// If FirstArgAttrs is non-null, then the caller parsed those attributes\n/// immediately after the open paren - they will be applied to the DeclSpec\n/// of the first parameter.\n///\n/// If RequiresArg is true, then the first argument of the function is required\n/// to be present and required to not be an identifier list.\n///\n/// For C++, after the parameter-list, it also parses the cv-qualifier-seq[opt],\n/// (C++11) ref-qualifier[opt], exception-specification[opt],\n/// (C++11) attribute-specifier-seq[opt], (C++11) trailing-return-type[opt] and\n/// (C++2a) the trailing requires-clause.\n///\n/// [C++11] exception-specification:\n///          dynamic-exception-specification\n///          noexcept-specification\n///\nvoid Parser::ParseFunctionDeclarator(Declarator &D, ParsedAttributes &FirstArgAttrs, BalancedDelimiterTracker &Tracker, bool IsAmbiguous, bool RequiresArg) {\n  // ...\n  if (isFunctionDeclaratorIdentifierList()) {\n  // ...\n  } else {\n    // ...\n    if (getLangOpts().CPlusPlus) {\n      // ...\n      if (getLangOpts().CPlusPlus11 && Tok.is(tok::arrow)) {\n        Diag(Tok, diag::warn_cxx98_compat_trailing_return_type);"}},
[f]={Tb,1318655374,Sb,Rb},
[k]={
[h]={{Wb,7100,"/// ParseFunctionDeclarator - We are after the identifier and have parsed the\n/// declarator D up to a paren, which indicates that we are parsing function\n/// arguments.\n///\n/// If FirstArgAttrs is non-null, then the caller parsed those attributes\n/// immediately after the open paren - they will be applied to the DeclSpec\n/// of the first parameter.\n///\n/// If RequiresArg is true, then the first argument of the function is required\n/// to be present and required to not be an identifier list.\n///\n/// For C++, after the parameter-list, it also parses the cv-qualifier-seq[opt],\n/// (C++11) ref-qualifier[opt], exception-specification[opt],\n/// (C++11) attribute-specifier-seq[opt], (C++11) trailing-return-type[opt] and\n/// (C++2a) the trailing requires-clause.\n///\n/// [C++11] exception-specification:\n///          dynamic-exception-specification\n///          noexcept-specification\n///\nvoid Parser::ParseFunctionDeclarator(Declarator &D, ParsedAttributes &FirstArgAttrs, BalancedDelimiterTracker &Tracker, bool IsAmbiguous, bool RequiresArg) {\n  // ...\n  if (isFunctionDeclaratorIdentifierList()) {\n  // ...\n  } else {\n    // ...\n    if (getLangOpts().CPlusPlus) {\n      // ...\n      if (getLangOpts().CPlusPlus11 && Tok.is(tok::arrow)) {\n        Diag(Tok, diag::warn_cxx98_compat_trailing_return_type);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:105:10: warning: trailing return types are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:105:10: warning: trailing return types are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_two_right_angle_brackets"]={
["warn_cxx98_compat_two_right_angle_brackets"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="consecutive right angle brackets are incompatible with C++98 (use \'> >\')",
[c]="warn_cxx98_compat_two_right_angle_brackets",
[d]=g,
[d]="consecutive right angle brackets are incompatible with C++98 (use \'> >\')",
[e]="consecutive right angle brackets are incompatible with C\\+\\+98 \\(use \'\\> \\>\'\\)",
[e]=i,
[f]=w,
[g]="consecutive right angle brackets are incompatible with C\\+\\+98 \\(use \'\\> \\>\'\\)",
[b]=v,
[a]=E,
[a]={Ob,1318655374,Pb,Rb},
[b]=A,
[f]={Tb,1318655374,Sb,Rb},
[h]={{"clang/lib/Parse/ParseTemplate.cpp",1207,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  // ...\n  // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n    // ...\n    if (getLangOpts().CPlusPlus11 && (Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))\n      DiagId = diag::warn_cxx98_compat_two_right_angle_brackets;"}},
[h]={{"clang/lib/Parse/ParseTemplate.cpp",1207,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  // ...\n  // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n    // ...\n    if (getLangOpts().CPlusPlus11 && (Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))\n      DiagId = diag::warn_cxx98_compat_two_right_angle_brackets;"}},
[k]={
[l]={
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:46:14: warning: consecutive right angle brackets are incompatible with C++98 (use \'> >\') [-Wc++98-compat]"}
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:46:14: warning: consecutive right angle brackets are incompatible with C++98 (use \'> >\') [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_typename_outside_of_template"]={
["warn_cxx98_compat_typename_outside_of_template"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="use of \'typename\' outside of a template is incompatible with C++98",
[c]="warn_cxx98_compat_typename_outside_of_template",
[d]=g,
[d]="use of \'typename\' outside of a template is incompatible with C++98",
[e]="use of \'typename\' outside of a template is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="use of \'typename\' outside of a template is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={hc,1318970984,fc,ec},
[b]=m,
[h]={{Db,10810,"TypeResult Sema::ActOnTypenameType(Scope *S, SourceLocation TypenameLoc, const CXXScopeSpec &SS, const IdentifierInfo &II, SourceLocation IdLoc, ImplicitTypenameContext IsImplicitTypename) {\n  // ...\n  if (TypenameLoc.isValid() && S && !S->getTemplateParamParent())\n    Diag(TypenameLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_typename_outside_of_template : diag::ext_typename_outside_of_template) << FixItHint::CreateRemoval(TypenameLoc);"},{Db,10842,"TypeResult Sema::ActOnTypenameType(Scope *S, SourceLocation TypenameLoc, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateIn, IdentifierInfo *TemplateII, SourceLocation TemplateIILoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  if (TypenameLoc.isValid() && S && !S->getTemplateParamParent())\n    Diag(TypenameLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_typename_outside_of_template : diag::ext_typename_outside_of_template) << FixItHint::CreateRemoval(TypenameLoc);"}},
[f]={jc,1318970984,kc,lc},
[k]={
[h]={{Eb,10810,"TypeResult Sema::ActOnTypenameType(Scope *S, SourceLocation TypenameLoc, const CXXScopeSpec &SS, const IdentifierInfo &II, SourceLocation IdLoc, ImplicitTypenameContext IsImplicitTypename) {\n  // ...\n  if (TypenameLoc.isValid() && S && !S->getTemplateParamParent())\n    Diag(TypenameLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_typename_outside_of_template : diag::ext_typename_outside_of_template) << FixItHint::CreateRemoval(TypenameLoc);"},{Eb,10842,"TypeResult Sema::ActOnTypenameType(Scope *S, SourceLocation TypenameLoc, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateIn, IdentifierInfo *TemplateII, SourceLocation TemplateIILoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  if (TypenameLoc.isValid() && S && !S->getTemplateParamParent())\n    Diag(TypenameLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_typename_outside_of_template : diag::ext_typename_outside_of_template) << FixItHint::CreateRemoval(TypenameLoc);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:203:1: warning: use of \'typename\' outside of a template is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:203:1: warning: use of \'typename\' outside of a template is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_unelaborated_friend_type"]={
["warn_cxx98_compat_unelaborated_friend_type"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="befriending %1 without \'%select{struct|interface|union|class|enum}0\' keyword is incompatible with C++98",
[c]="warn_cxx98_compat_unelaborated_friend_type",
[d]=g,
[d]="befriending %1 without \'%select{struct|interface|union|class|enum}0\' keyword is incompatible with C++98",
[e]="befriending (.*?) without \'(?:struct|interface|union|class|enum)\' keyword is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="befriending (.*?) without \'(?:struct|interface|union|class|enum)\' keyword is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.","-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.\n\nllvm-svn: 142426"},
[b]=m,
[h]={{C,17211,"/// Perform semantic analysis of the given friend type declaration.\n///\n/// \\returns A friend declaration that.\nFriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, SourceLocation FriendLoc, TypeSourceInfo *TSInfo) {\n  // ...\n  // C++03 [class.friend]p2:\n  //  An elaborated-type-specifier shall be used in a friend declaration\n  //  for a class.*\n  //\n  //  * The class-key of the elaborated-type-specifier is required.\n  if (!CodeSynthesisContexts.empty()) {\n  // ...\n  } else {\n    if (!T->isElaboratedTypeSpecifier()) {\n      // If we evaluated the type to a record type, suggest putting\n      // a tag in front.\n      if (const RecordType *RT = T->getAs<RecordType>()) {\n        // ...\n        Diag(TypeRange.getBegin(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_unelaborated_friend_type : diag::ext_unelaborated_friend_type) << (unsigned)RD->getTagKind() << T << FixItHint::CreateInsertion(getLocForEndOfToken(FriendLoc), InsertionText);"}},
[f]={"c82397332d13",1318973940,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.","-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2.\n\nllvm-svn: 142426"},
[k]={
[h]={{L,17211,"/// Perform semantic analysis of the given friend type declaration.\n///\n/// \\returns A friend declaration that.\nFriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, SourceLocation FriendLoc, TypeSourceInfo *TSInfo) {\n  // ...\n  // C++03 [class.friend]p2:\n  //  An elaborated-type-specifier shall be used in a friend declaration\n  //  for a class.*\n  //\n  //  * The class-key of the elaborated-type-specifier is required.\n  if (!CodeSynthesisContexts.empty()) {\n  // ...\n  } else {\n    if (!T->isElaboratedTypeSpecifier()) {\n      // If we evaluated the type to a record type, suggest putting\n      // a tag in front.\n      if (const RecordType *RT = T->getAs<RecordType>()) {\n        // ...\n        Diag(TypeRange.getBegin(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_unelaborated_friend_type : diag::ext_unelaborated_friend_type) << (unsigned)RD->getTagKind() << T << FixItHint::CreateInsertion(getLocForEndOfToken(FriendLoc), InsertionText);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:225:10: warning: befriending \'Struct\' without \'struct\' keyword is incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:225:10: warning: befriending \'Struct\' without \'struct\' keyword is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_unicode_literal"]={
["warn_cxx98_compat_unicode_literal"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="unicode literals are incompatible with C++98",
[c]="warn_cxx98_compat_unicode_literal",
[d]=g,
[d]="unicode literals are incompatible with C++98",
[e]="unicode literals are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="unicode literals are incompatible with C\\+\\+98",
[b]=L,
[a]=E,
[a]={hd,1318641536,md,pd},
[b]=T,
[h]={{Ab,2087,"/// LexStringLiteral - Lex the remainder of a string literal, after having lexed\n/// either \" or L\" or u8\" or u\" or U\".\nbool Lexer::LexStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // ...\n  if (!isLexingRawMode() && (Kind == tok::utf8_string_literal || Kind == tok::utf16_string_literal || Kind == tok::utf32_string_literal))\n    Diag(BufferPtr, LangOpts.CPlusPlus ? diag::warn_cxx98_compat_unicode_literal : diag::warn_c99_compat_unicode_literal);"},{Ab,2303,"/// LexCharConstant - Lex the remainder of a character constant, after having\n/// lexed either \' or L\' or u8\' or u\' or U\'.\nbool Lexer::LexCharConstant(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // ...\n  if (!isLexingRawMode()) {\n    if (Kind == tok::utf16_char_constant || Kind == tok::utf32_char_constant)\n      Diag(BufferPtr, LangOpts.CPlusPlus ? diag::warn_cxx98_compat_unicode_literal : diag::warn_c99_compat_unicode_literal);"}},
[f]={kd,1318641536,nd,od},
[k]={
[h]={{Fb,2087,"/// LexStringLiteral - Lex the remainder of a string literal, after having lexed\n/// either \" or L\" or u8\" or u\" or U\".\nbool Lexer::LexStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // ...\n  if (!isLexingRawMode() && (Kind == tok::utf8_string_literal || Kind == tok::utf16_string_literal || Kind == tok::utf32_string_literal))\n    Diag(BufferPtr, LangOpts.CPlusPlus ? diag::warn_cxx98_compat_unicode_literal : diag::warn_c99_compat_unicode_literal);"},{Fb,2303,"/// LexCharConstant - Lex the remainder of a character constant, after having\n/// lexed either \' or L\' or u8\' or u\' or U\'.\nbool Lexer::LexCharConstant(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // ...\n  if (!isLexingRawMode()) {\n    if (Kind == tok::utf16_char_constant || Kind == tok::utf32_char_constant)\n      Diag(BufferPtr, LangOpts.CPlusPlus ? diag::warn_cxx98_compat_unicode_literal : diag::warn_c99_compat_unicode_literal);"}},
[l]={
["clang/test/Lexer/unicode-strings.c"]={"clang/test/Lexer/unicode-strings.c:16:17: warning: unicode literals are incompatible with C++98 [-Wc++98-compat]","clang/test/Lexer/unicode-strings.c:17:21: warning: unicode literals are incompatible with C++98 [-Wc++98-compat]","clang/test/Lexer/unicode-strings.c:18:21: warning: unicode literals are incompatible with C++98 [-Wc++98-compat]","clang/test/Lexer/unicode-strings.c:20:14: warning: unicode literals are incompatible with C++98 [-Wc++98-compat]","clang/test/Lexer/unicode-strings.c:21:14: warning: unicode literals are incompatible with C++98 [-Wc++98-compat]"}
["clang/test/Lexer/unicode-strings.c"]={"clang/test/Lexer/unicode-strings.c:16:17: warning: unicode literals are incompatible with C++98 [-Wc++98-compat]","clang/test/Lexer/unicode-strings.c:17:21: warning: unicode literals are incompatible with C++98 [-Wc++98-compat]","clang/test/Lexer/unicode-strings.c:18:21: warning: unicode literals are incompatible with C++98 [-Wc++98-compat]","clang/test/Lexer/unicode-strings.c:20:14: warning: unicode literals are incompatible with C++98 [-Wc++98-compat]","clang/test/Lexer/unicode-strings.c:21:14: warning: unicode literals are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_unicode_type"]={
["warn_cxx98_compat_unicode_type"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="\'%0\' type specifier is incompatible with C++98",
[c]="warn_cxx98_compat_unicode_type",
[d]=g,
[d]="\'%0\' type specifier is incompatible with C++98",
[e]="\'(.*?)\' type specifier is incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="\'(.*?)\' type specifier is incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={Nc,1318892780,Oc,Pc},
[b]=m,
[h]={{oc,1377,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType == TST_char8)\n  // ...\n  else if (TypeSpecType == TST_char16 || TypeSpecType == TST_char32)\n    S.Diag(TSTLoc, diag::warn_cxx98_compat_unicode_type) << (TypeSpecType == TST_char16 ? \"char16_t\" : \"char32_t\");"}},
[f]={ed,1318892780,fd,Pc},
[k]={
[h]={{uc,1377,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType == TST_char8)\n  // ...\n  else if (TypeSpecType == TST_char16 || TypeSpecType == TST_char32)\n    S.Diag(TSTLoc, diag::warn_cxx98_compat_unicode_type) << (TypeSpecType == TST_char16 ? \"char16_t\" : \"char32_t\");"}},
[l]={
["clang/test/Lexer/unicode-strings.c"]={"clang/test/Lexer/unicode-strings.c:17:7: warning: \'char16_t\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/Lexer/unicode-strings.c:18:7: warning: \'char32_t\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/Lexer/unicode-strings.c:20:1: warning: \'char16_t\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/Lexer/unicode-strings.c:21:1: warning: \'char32_t\' type specifier is incompatible with C++98 [-Wc++98-compat]"}
["clang/test/Lexer/unicode-strings.c"]={"clang/test/Lexer/unicode-strings.c:17:7: warning: \'char16_t\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/Lexer/unicode-strings.c:18:7: warning: \'char32_t\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/Lexer/unicode-strings.c:20:1: warning: \'char16_t\' type specifier is incompatible with C++98 [-Wc++98-compat]","clang/test/Lexer/unicode-strings.c:21:1: warning: \'char32_t\' type specifier is incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_using_decl_constructor"]={
["warn_cxx98_compat_using_decl_constructor"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="inheriting constructors are incompatible with C++98",
[c]="warn_cxx98_compat_using_decl_constructor",
[d]=g,
[d]="inheriting constructors are incompatible with C++98",
[e]="inheriting constructors are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="inheriting constructors are incompatible with C\\+\\+98",
[b]=l,
[a]=E,
[a]={hc,1318970984,fc,ec},
[b]=m,
[h]={{C,12039,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n  // ...\n  case UnqualifiedIdKind::IK_ConstructorName:\n  case UnqualifiedIdKind::IK_ConstructorTemplateId:\n    // ...\n    Diag(Name.getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_using_decl_constructor : diag::err_using_decl_constructor) << SS.getRange();"}},
[f]={jc,1318970984,kc,lc},
[k]={
[h]={{L,12039,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n  // ...\n  case UnqualifiedIdKind::IK_ConstructorName:\n  case UnqualifiedIdKind::IK_ConstructorTemplateId:\n    // ...\n    Diag(Name.getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_using_decl_constructor : diag::err_using_decl_constructor) << SS.getRange();"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:161:22: warning: inheriting constructors are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:161:22: warning: inheriting constructors are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx98_compat_variadic_macro"]={
["warn_cxx98_compat_variadic_macro"]={
[j]={m},
[k]={n},
[i]=m,
[j]=n,
[c]="variadic macros are incompatible with C++98",
[c]="warn_cxx98_compat_variadic_macro",
[d]=g,
[d]="variadic macros are incompatible with C++98",
[e]="variadic macros are incompatible with C\\+\\+98",
[e]=i,
[f]=Kc,
[g]="variadic macros are incompatible with C\\+\\+98",
[b]=L,
[a]=Kc,
[a]={hd,1318641536,md,pd},
[b]=T,
[h]={{vd,2679,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    case tok::ellipsis: // #define X(... -> C99 varargs\n      if (!LangOpts.C99)\n        Diag(Tok, LangOpts.CPlusPlus11 ? diag::warn_cxx98_compat_variadic_macro : diag::ext_variadic_macro);"}},
[f]={kd,1318641536,nd,od},
[k]={
[h]={{Bd,2679,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    case tok::ellipsis: // #define X(... -> C99 varargs\n      if (!LangOpts.C99)\n        Diag(Tok, LangOpts.CPlusPlus11 ? diag::warn_cxx98_compat_variadic_macro : diag::ext_variadic_macro);"}},
[rd]={"clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32769:21: warning: variadic macros are incompatible with C++98 [-Wc++98-compat-pedantic]"}
[l]={
[pd]={"clang/test/SemaCXX/cxx98-compat-pedantic.cpp:32769:21: warning: variadic macros are incompatible with C++98 [-Wc++98-compat-pedantic]"}
}
}
},
},
["warn_cxx98_compat_variadic_templates"]={
["warn_cxx98_compat_variadic_templates"]={
[j]={n,m},
[k]={o,n},
[i]=n,
[j]=o,
[c]="variadic templates are incompatible with C++98",
[c]="warn_cxx98_compat_variadic_templates",
[d]=g,
[d]="variadic templates are incompatible with C++98",
[e]="variadic templates are incompatible with C\\+\\+98",
[e]=i,
[f]=w,
[g]="variadic templates are incompatible with C\\+\\+98",
[b]=v,
[a]=E,
[a]={"a722170eb95d",1318544285,"Implement the first piece of a -Wc++98-compat flag so that people can build in","Implement the first piece of a -Wc++98-compat flag so that people can build in\nC++11 mode but keep their sources compatible with C++98.  This patch implements\nthe -Wc++98-compat-variadic-templates sub-flag and -Wc++98-compat to include\nit.\n\nllvm-svn: 141898"},
[b]=A,
[h]={{"clang/lib/Parse/ParseTemplate.cpp",827,"/// ParseTypeParameter - Parse a template type parameter (C++ [temp.param]).\n/// Other kinds of template parameters are parsed in\n/// ParseTemplateTemplateParameter and ParseNonTypeTemplateParameter.\n///\n///      type-parameter:    [C++ temp.param]\n///        \'class\' ...[opt][C++0x] identifier[opt]\n///        \'class\' identifier[opt] \'=\' type-id\n///        \'typename\' ...[opt][C++0x] identifier[opt]\n///        \'typename\' identifier[opt] \'=\' type-id\nNamedDecl *Parser::ParseTypeParameter(unsigned Depth, unsigned Position) {\n  // ...\n  if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n    Diag(EllipsisLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"},{"clang/lib/Parse/ParseTemplate.cpp",959,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // ...\n  if (TryConsumeToken(tok::ellipsis, EllipsisLoc))\n    Diag(EllipsisLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"},{Jb,5945,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  // If there was an ellipsis in the declarator, the declaration declares a\n  // parameter pack whose type may be a pack expansion type.\n  if (D.hasEllipsis()) {\n    // ...\n    case DeclaratorContext::TemplateParam:\n      // C++0x [temp.param]p15:\n      //  If a template-parameter is a [...] is a parameter-declaration that\n      //  declares a parameter pack (8.3.5), then the template-parameter is a\n      //  template parameter pack (14.5.3).\n      //\n      // Note: core issue 778 clarifies that, if there are any unexpanded\n      // parameter packs in the type of the non-type template parameter, then\n      // it expands those parameter packs.\n      if (T->containsUnexpandedParameterPack())\n      // ...\n      else\n        S.Diag(D.getEllipsisLoc(), LangOpts.CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"}},
[f]={"a722170eb95d",1318544285,"Implement the first piece of a -Wc++98-compat flag so that people can build in","Implement the first piece of a -Wc++98-compat flag so that people can build in\nC++11 mode but keep their sources compatible with C++98.  This patch implements\nthe -Wc++98-compat-variadic-templates sub-flag and -Wc++98-compat to include\nit.\n\nllvm-svn: 141898"},
[k]={
[h]={{"clang/lib/Parse/ParseTemplate.cpp",827,"/// ParseTypeParameter - Parse a template type parameter (C++ [temp.param]).\n/// Other kinds of template parameters are parsed in\n/// ParseTemplateTemplateParameter and ParseNonTypeTemplateParameter.\n///\n///      type-parameter:    [C++ temp.param]\n///        \'class\' ...[opt][C++0x] identifier[opt]\n///        \'class\' identifier[opt] \'=\' type-id\n///        \'typename\' ...[opt][C++0x] identifier[opt]\n///        \'typename\' identifier[opt] \'=\' type-id\nNamedDecl *Parser::ParseTypeParameter(unsigned Depth, unsigned Position) {\n  // ...\n  if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n    Diag(EllipsisLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"},{"clang/lib/Parse/ParseTemplate.cpp",959,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // ...\n  if (TryConsumeToken(tok::ellipsis, EllipsisLoc))\n    Diag(EllipsisLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"},{Nb,5945,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  // If there was an ellipsis in the declarator, the declaration declares a\n  // parameter pack whose type may be a pack expansion type.\n  if (D.hasEllipsis()) {\n    // ...\n    case DeclaratorContext::TemplateParam:\n      // C++0x [temp.param]p15:\n      //  If a template-parameter is a [...] is a parameter-declaration that\n      //  declares a parameter pack (8.3.5), then the template-parameter is a\n      //  template parameter pack (14.5.3).\n      //\n      // Note: core issue 778 clarifies that, if there are any unexpanded\n      // parameter packs in the type of the non-type template parameter, then\n      // it expands those parameter packs.\n      if (T->containsUnexpandedParameterPack())\n      // ...\n      else\n        S.Diag(D.getEllipsisLoc(), LangOpts.CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"}},
[y]={"clang/test/SemaCXX/cxx98-compat.cpp:17:19: warning: variadic templates are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:20:35: warning: variadic templates are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:23:14: warning: variadic templates are incompatible with C++98 [-Wc++98-compat]"}
[l]={
[H]={"clang/test/SemaCXX/cxx98-compat.cpp:17:19: warning: variadic templates are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:20:35: warning: variadic templates are incompatible with C++98 [-Wc++98-compat]","clang/test/SemaCXX/cxx98-compat.cpp:23:14: warning: variadic templates are incompatible with C++98 [-Wc++98-compat]"}
}
}
},
},
["warn_cxx_ms_struct"]={
["warn_cxx_ms_struct"]={
[j]={"incompatible-ms-struct"},
[k]={"incompatible-ms-struct"},
[i]="incompatible-ms-struct",
[j]="incompatible-ms-struct",
[c]="ms_struct may not produce Microsoft-compatible layouts for classes with base classes or virtual functions",
[c]="warn_cxx_ms_struct",
[d]="(?:error|warning|fatal error)\\: ",
[d]="ms_struct may not produce Microsoft-compatible layouts for classes with base classes or virtual functions",
[e]="ms_struct may not produce Microsoft\\-compatible layouts for classes with base classes or virtual functions",
[e]="(?:error|warning|fatal error)\\: ",
[f]=" \\[[^\\]]*\\-Wincompatible\\-ms\\-struct[^\\]]*\\]",
[g]="ms_struct may not produce Microsoft\\-compatible layouts for classes with base classes or virtual functions",
[b]=l,
[a]=" \\[[^\\]]*\\-Wincompatible\\-ms\\-struct[^\\]]*\\]",
[a]={"95833f33bda6",1393533049,"Diagnose attempts to apply ms_struct to records with base classes","Diagnose attempts to apply ms_struct to records with base classes\nor virtual functions, but permit that error to be downgraded to\na warning (with -Wno-error=incompatible-ms-struct), and officially\nsupport this kind of dual, ABI-mixing layout.\n\nThe basic problem here is that projects which use ms_struct are often\nnot very circumspect about what types they annotate; for example,\nsome projects enable the pragma in a prefix header and then only\nselectively disable it around system header inclusions.  They may\nonly care about binary compatibility with MSVC for a subset of\nthose structs, but that doesn\'t mean they have no binary\ncompatibility concerns at all for the rest; thus we are essentially\nforced into supporting this hybrid ABI.  But it\'s reasonable for\nus to at least point out the places where we\'re not making\nany guarantees.\n\nThe original diagnostic was for dynamic classes, i.e. those with\nvirtual functions or virtual bases; I\'ve extended it to include\nall classes with bases, because we are not actually making any\nattempt to duplicate MSVC\'s base subobject layout in ms_struct\n(and it is indeed quite different from Itanium, even for\nnon-virtual bases).\n\nrdar://16178895\n\nllvm-svn: 202427"},
[b]=m,
[h]={{C,7186,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  // ms_struct is a request to use the same ABI rules as MSVC.  Check\n  // whether this class uses any C++ features that are implemented\n  // completely differently in MSVC, and if so, emit a diagnostic.\n  // That diagnostic defaults to an error, but we allow projects to\n  // map it down to a warning (or ignore it).  It\'s a fairly common\n  // practice among users of the ms_struct pragma to mass-annotate\n  // headers, sweeping up a bunch of types that the project doesn\'t\n  // really rely on MSVC-compatible layout for.  We must therefore\n  // support \"ms_struct except for C++ stuff\" as a secondary ABI.\n  // Don\'t emit this diagnostic if the feature was enabled as a\n  // language option (as opposed to via a pragma or attribute), as\n  // the option -mms-bitfields otherwise essentially makes it impossible\n  // to build C++ code, unless this diagnostic is turned off.\n  if (Record->isMsStruct(Context) && !Context.getLangOpts().MSBitfields && (Record->isPolymorphic() || Record->getNumBases())) {\n    Diag(Record->getLocation(), diag::warn_cxx_ms_struct);"}},
[f]={"95833f33bda6",1393533049,"Diagnose attempts to apply ms_struct to records with base classes","Diagnose attempts to apply ms_struct to records with base classes\nor virtual functions, but permit that error to be downgraded to\na warning (with -Wno-error=incompatible-ms-struct), and officially\nsupport this kind of dual, ABI-mixing layout.\n\nThe basic problem here is that projects which use ms_struct are often\nnot very circumspect about what types they annotate; for example,\nsome projects enable the pragma in a prefix header and then only\nselectively disable it around system header inclusions.  They may\nonly care about binary compatibility with MSVC for a subset of\nthose structs, but that doesn\'t mean they have no binary\ncompatibility concerns at all for the rest; thus we are essentially\nforced into supporting this hybrid ABI.  But it\'s reasonable for\nus to at least point out the places where we\'re not making\nany guarantees.\n\nThe original diagnostic was for dynamic classes, i.e. those with\nvirtual functions or virtual bases; I\'ve extended it to include\nall classes with bases, because we are not actually making any\nattempt to duplicate MSVC\'s base subobject layout in ms_struct\n(and it is indeed quite different from Itanium, even for\nnon-virtual bases).\n\nrdar://16178895\n\nllvm-svn: 202427"},
[k]={
[h]={{L,7186,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  // ms_struct is a request to use the same ABI rules as MSVC.  Check\n  // whether this class uses any C++ features that are implemented\n  // completely differently in MSVC, and if so, emit a diagnostic.\n  // That diagnostic defaults to an error, but we allow projects to\n  // map it down to a warning (or ignore it).  It\'s a fairly common\n  // practice among users of the ms_struct pragma to mass-annotate\n  // headers, sweeping up a bunch of types that the project doesn\'t\n  // really rely on MSVC-compatible layout for.  We must therefore\n  // support \"ms_struct except for C++ stuff\" as a secondary ABI.\n  // Don\'t emit this diagnostic if the feature was enabled as a\n  // language option (as opposed to via a pragma or attribute), as\n  // the option -mms-bitfields otherwise essentially makes it impossible\n  // to build C++ code, unless this diagnostic is turned off.\n  if (Record->isMsStruct(Context) && !Context.getLangOpts().MSBitfields && (Record->isPolymorphic() || Record->getNumBases())) {\n    Diag(Record->getLocation(), diag::warn_cxx_ms_struct);"}},
[l]={
["clang/test/SemaCXX/ms_struct.cpp"]={"clang/test/SemaCXX/ms_struct.cpp:15:8: error: ms_struct may not produce Microsoft-compatible layouts for classes with base classes or virtual functions [-Wincompatible-ms-struct]","clang/test/SemaCXX/ms_struct.cpp:30:8: error: ms_struct may not produce Microsoft-compatible layouts for classes with base classes or virtual functions [-Wincompatible-ms-struct]"}
["clang/test/SemaCXX/ms_struct.cpp"]={"clang/test/SemaCXX/ms_struct.cpp:15:8: error: ms_struct may not produce Microsoft-compatible layouts for classes with base classes or virtual functions [-Wincompatible-ms-struct]","clang/test/SemaCXX/ms_struct.cpp:30:8: error: ms_struct may not produce Microsoft-compatible layouts for classes with base classes or virtual functions [-Wincompatible-ms-struct]"}
}
}
},
},
["warn_dangling_else"]={
["warn_dangling_else"]={
[j]={B,H,"dangling-else","parentheses"},
[k]={K,O,"dangling-else","parentheses"},
[i]="dangling-else",
[j]="dangling-else",
[c]="add explicit braces to avoid dangling else",
[c]="warn_dangling_else",
[d]=g,
[d]="add explicit braces to avoid dangling else",
[e]="add explicit braces to avoid dangling else",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdangling\\-else[^\\]]*\\]",
[g]="add explicit braces to avoid dangling else",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wdangling\\-else[^\\]]*\\]",
[a]={"3cef10814aed",1324596377,"Add -Wdangling-else.","Add -Wdangling-else.\n\nThis works like described in  http://drdobbs.com/blogs/cpp/231602010\nFixes http://llvm.org/PR11609\n\nllvm-svn: 147202"},
[b]=A,
[f]={"3cef10814aed",1324596377,"Add -Wdangling-else.","Add -Wdangling-else.\n\nThis works like described in  http://drdobbs.com/blogs/cpp/231602010\nFixes http://llvm.org/PR11609\n\nllvm-svn: 147202"},
[h]={{nc,1623,"/// ParseIfStatement\n///      if-statement: [C99 6.8.4.1]\n///        \'if\' \'(\' expression \')\' statement\n///        \'if\' \'(\' expression \')\' statement \'else\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement \'else\' statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement \'else\' statement\n///\nStmtResult Parser::ParseIfStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  if (Tok.is(tok::kw_else)) {\n  // ...\n  } else if (Tok.is(tok::code_completion)) {\n  // ...\n  } else if (InnerStatementTrailingElseLoc.isValid()) {\n    Diag(InnerStatementTrailingElseLoc, diag::warn_dangling_else);"}},
[h]={{nc,1623,"/// ParseIfStatement\n///      if-statement: [C99 6.8.4.1]\n///        \'if\' \'(\' expression \')\' statement\n///        \'if\' \'(\' expression \')\' statement \'else\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement\n/// [C++]  \'if\' \'(\' condition \')\' statement \'else\' statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement\n/// [C++23] \'if\' \'!\' [opt] consteval compound-statement \'else\' statement\n///\nStmtResult Parser::ParseIfStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  if (Tok.is(tok::kw_else)) {\n  // ...\n  } else if (Tok.is(tok::code_completion)) {\n  // ...\n  } else if (InnerStatementTrailingElseLoc.isValid()) {\n    Diag(InnerStatementTrailingElseLoc, diag::warn_dangling_else);"}},
[k]={
[l]={
["clang/test/Parser/warn-dangling-else.cpp"]={"clang/test/Parser/warn-dangling-else.cpp:6:24: warning: add explicit braces to avoid dangling else [-Wdangling-else]","clang/test/Parser/warn-dangling-else.cpp:7:34: warning: add explicit braces to avoid dangling else [-Wdangling-else]","clang/test/Parser/warn-dangling-else.cpp:8:35: warning: add explicit braces to avoid dangling else [-Wdangling-else]","clang/test/Parser/warn-dangling-else.cpp:9:33: warning: add explicit braces to avoid dangling else [-Wdangling-else]","clang/test/Parser/warn-dangling-else.cpp:10:41: warning: add explicit braces to avoid dangling else [-Wdangling-else]","clang/test/Parser/warn-dangling-else.cpp:15:7: warning: add explicit braces to avoid dangling else [-Wdangling-else]"}
["clang/test/Parser/warn-dangling-else.cpp"]={"clang/test/Parser/warn-dangling-else.cpp:6:24: warning: add explicit braces to avoid dangling else [-Wdangling-else]","clang/test/Parser/warn-dangling-else.cpp:7:34: warning: add explicit braces to avoid dangling else [-Wdangling-else]","clang/test/Parser/warn-dangling-else.cpp:8:35: warning: add explicit braces to avoid dangling else [-Wdangling-else]","clang/test/Parser/warn-dangling-else.cpp:9:33: warning: add explicit braces to avoid dangling else [-Wdangling-else]","clang/test/Parser/warn-dangling-else.cpp:10:41: warning: add explicit braces to avoid dangling else [-Wdangling-else]","clang/test/Parser/warn-dangling-else.cpp:15:7: warning: add explicit braces to avoid dangling else [-Wdangling-else]"}
}
}
},
},
["warn_dangling_lifetime_pointer"]={
["warn_dangling_lifetime_pointer"]={
[j]={"dangling","dangling-gsl"},
[k]={Kd,"dangling-gsl"},
[i]="dangling-gsl",
[j]="dangling-gsl",
[c]={{nil,z,"object backing the pointer will be destroyed at the end of the full-expression"}},
[c]={{nil,q,"warn_dangling_lifetime_pointer"}},
[d]=g,
[d]={{nil,q,"object backing the pointer will be destroyed at the end of the full-expression"}},
[e]="object backing the pointer will be destroyed at the end of the full\\-expression",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdangling\\-gsl[^\\]]*\\]",
[g]="object backing the pointer will be destroyed at the end of the full\\-expression",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdangling\\-gsl[^\\]]*\\]",
[a]={"e5e10b526f2f",1565118809,"Teach some warnings to respect gsl::Pointer and gsl::Owner attributes","Teach some warnings to respect gsl::Pointer and gsl::Owner attributes\n\nThis patch extends some existing warnings to utilize the knowledge about the gsl::Pointer and gsl::Owner attributes.\n\nDifferential Revision: https://reviews.llvm.org/D64256\n\nllvm-svn: 368072"},
[b]={{nil,q,m}},
[h]={{fb,8123,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_Extended: {\n      // ...\n      if (IsGslPtrInitWithGslTempOwner && DiagLoc.isValid()) {\n        Diag(DiagLoc, diag::warn_dangling_lifetime_pointer) << DiagRange;"},{fb,8239,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_New:\n      if (isa<MaterializeTemporaryExpr>(L)) {\n        if (IsGslPtrInitWithGslTempOwner)\n          Diag(DiagLoc, diag::warn_dangling_lifetime_pointer) << DiagRange;"},{fb,8329,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  bool EnableLifetimeWarnings = !getDiagnostics().isIgnored(diag::warn_dangling_lifetime_pointer, SourceLocation());"}},
[f]={"e5e10b526f2f",1565118809,"Teach some warnings to respect gsl::Pointer and gsl::Owner attributes","Teach some warnings to respect gsl::Pointer and gsl::Owner attributes\n\nThis patch extends some existing warnings to utilize the knowledge about the gsl::Pointer and gsl::Owner attributes.\n\nDifferential Revision: https://reviews.llvm.org/D64256\n\nllvm-svn: 368072"},
[k]={
[h]={{mb,8123,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_Extended: {\n      // ...\n      if (IsGslPtrInitWithGslTempOwner && DiagLoc.isValid()) {\n        Diag(DiagLoc, diag::warn_dangling_lifetime_pointer) << DiagRange;"},{mb,8239,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_New:\n      if (isa<MaterializeTemporaryExpr>(L)) {\n        if (IsGslPtrInitWithGslTempOwner)\n          Diag(DiagLoc, diag::warn_dangling_lifetime_pointer) << DiagRange;"},{mb,8329,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  bool EnableLifetimeWarnings = !getDiagnostics().isIgnored(diag::warn_dangling_lifetime_pointer, SourceLocation());"}},
[l]={
["clang/test/Sema/warn-lifetime-analysis-nocfg.cpp"]={"clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:39:35: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:40:20: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:122:20: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:125:36: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:236:35: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:290:14: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:291:15: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:292:14: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:293:13: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:302:18: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:346:38: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]"}
["clang/test/Sema/warn-lifetime-analysis-nocfg.cpp"]={"clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:39:35: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:40:20: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:122:20: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:125:36: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:236:35: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:290:14: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:291:15: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:292:14: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:293:13: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:302:18: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:346:38: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]"}
}
}
},
},
["warn_dangling_lifetime_pointer_member"]={
["warn_dangling_lifetime_pointer_member"]={
[j]={"dangling","dangling-gsl"},
[k]={Kd,"dangling-gsl"},
[i]="dangling-gsl",
[j]="dangling-gsl",
[c]={{nil,z,"initializing pointer member %0 to point to a temporary object whose lifetime is shorter than the lifetime of the constructed object"}},
[c]={{nil,q,"warn_dangling_lifetime_pointer_member"}},
[d]=g,
[d]={{nil,q,"initializing pointer member %0 to point to a temporary object whose lifetime is shorter than the lifetime of the constructed object"}},
[e]="initializing pointer member (.*?) to point to a temporary object whose lifetime is shorter than the lifetime of the constructed object",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdangling\\-gsl[^\\]]*\\]",
[g]="initializing pointer member (.*?) to point to a temporary object whose lifetime is shorter than the lifetime of the constructed object",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdangling\\-gsl[^\\]]*\\]",
[a]={"e5e10b526f2f",1565118809,"Teach some warnings to respect gsl::Pointer and gsl::Owner attributes","Teach some warnings to respect gsl::Pointer and gsl::Owner attributes\n\nThis patch extends some existing warnings to utilize the knowledge about the gsl::Pointer and gsl::Owner attributes.\n\nDifferential Revision: https://reviews.llvm.org/D64256\n\nllvm-svn: 368072"},
[b]={{nil,q,m}},
[h]={{fb,8171,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n        // Under C++ DR1696, if a mem-initializer (or a default member\n        // initializer used by the absence of one) would lifetime-extend a\n        // temporary, the program is ill-formed.\n        if (auto *ExtendingDecl = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          if (IsGslPtrInitWithGslTempOwner) {\n            Diag(DiagLoc, diag::warn_dangling_lifetime_pointer_member) << ExtendingDecl << DiagRange;"}},
[f]={"e5e10b526f2f",1565118809,"Teach some warnings to respect gsl::Pointer and gsl::Owner attributes","Teach some warnings to respect gsl::Pointer and gsl::Owner attributes\n\nThis patch extends some existing warnings to utilize the knowledge about the gsl::Pointer and gsl::Owner attributes.\n\nDifferential Revision: https://reviews.llvm.org/D64256\n\nllvm-svn: 368072"},
[k]={
[h]={{mb,8171,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n        // Under C++ DR1696, if a mem-initializer (or a default member\n        // initializer used by the absence of one) would lifetime-extend a\n        // temporary, the program is ill-formed.\n        if (auto *ExtendingDecl = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          if (IsGslPtrInitWithGslTempOwner) {\n            Diag(DiagLoc, diag::warn_dangling_lifetime_pointer_member) << ExtendingDecl << DiagRange;"}},
[l]={
["clang/test/Sema/warn-lifetime-analysis-nocfg.cpp"]={"clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:75:30: warning: initializing pointer member \'p2\' to point to a temporary object whose lifetime is shorter than the lifetime of the constructed object [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:76:35: warning: initializing pointer member \'p\' to point to a temporary object whose lifetime is shorter than the lifetime of the constructed object [-Wdangling-gsl]"}
["clang/test/Sema/warn-lifetime-analysis-nocfg.cpp"]={"clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:75:30: warning: initializing pointer member \'p2\' to point to a temporary object whose lifetime is shorter than the lifetime of the constructed object [-Wdangling-gsl]","clang/test/Sema/warn-lifetime-analysis-nocfg.cpp:76:35: warning: initializing pointer member \'p\' to point to a temporary object whose lifetime is shorter than the lifetime of the constructed object [-Wdangling-gsl]"}
}
}
},
},
["warn_dangling_member"]={
["warn_dangling_member"]={
[j]={"dangling","dangling-field"},
[k]={Kd,"dangling-field"},
[i]="dangling-field",
[j]="dangling-field",
[c]={{nil,eb,"%select{reference|backing array for \'std::initializer_list\'}2 %select{|subobject of }1member %0 %select{binds to|is}2 a temporary object whose lifetime is shorter than the lifetime of the constructed object"}},
[c]={{nil,D,"warn_dangling_member"}},
[d]=g,
[d]={{nil,D,"%select{reference|backing array for \'std::initializer_list\'}2 %select{|subobject of }1member %0 %select{binds to|is}2 a temporary object whose lifetime is shorter than the lifetime of the constructed object"}},
[e]="(?:reference|backing array for \'std\\:\\:initializer_list\') (?:|subobject of )member (.*?) (?:binds to|is) a temporary object whose lifetime is shorter than the lifetime of the constructed object",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdangling\\-field[^\\]]*\\]",
[g]="(?:reference|backing array for \'std\\:\\:initializer_list\') (?:|subobject of )member (.*?) (?:binds to|is) a temporary object whose lifetime is shorter than the lifetime of the constructed object",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdangling\\-field[^\\]]*\\]",
[a]={"0e3102d1dc04",1532393708,"Warn if a local variable\'s initializer retains a pointer/reference to a","Warn if a local variable\'s initializer retains a pointer/reference to a\nnon-lifetime-extended temporary object.\n\nllvm-svn: 337790"},
[b]={{nil,D,m}},
[h]={{fb,8182,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n        // Under C++ DR1696, if a mem-initializer (or a default member\n        // initializer used by the absence of one) would lifetime-extend a\n        // temporary, the program is ill-formed.\n        if (auto *ExtendingDecl = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          // ...\n          Diag(DiagLoc, shouldLifetimeExtendThroughPath(Path) != PathLifetimeKind::NoExtend ? diag::err_dangling_member : diag::warn_dangling_member) << ExtendingDecl << IsSubobjectMember << RK << DiagRange;"}}
[f]={"0e3102d1dc04",1532393708,"Warn if a local variable\'s initializer retains a pointer/reference to a","Warn if a local variable\'s initializer retains a pointer/reference to a\nnon-lifetime-extended temporary object.\n\nllvm-svn: 337790"},
[h]={{mb,8182,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n        // Under C++ DR1696, if a mem-initializer (or a default member\n        // initializer used by the absence of one) would lifetime-extend a\n        // temporary, the program is ill-formed.\n        if (auto *ExtendingDecl = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          // ...\n          Diag(DiagLoc, shouldLifetimeExtendThroughPath(Path) != PathLifetimeKind::NoExtend ? diag::err_dangling_member : diag::warn_dangling_member) << ExtendingDecl << IsSubobjectMember << RK << DiagRange;"}}
},
},
["warn_dangling_variable"]={
["warn_dangling_variable"]={
[j]={"dangling"},
[k]={Kd},
[i]="dangling",
[j]=Kd,
[c]={{nil,eb,"%select{temporary %select{whose address is used as value of|%select{|implicitly }2bound to}4 %select{%select{|reference }4member of local variable|local %select{variable|reference}4}1|array backing %select{initializer list subobject of local variable|local initializer list}1}0 %select{%3 |}2will be destroyed at the end of the full-expression"}},
[c]={{nil,D,"warn_dangling_variable"}},
[d]=g,
[d]={{nil,D,"%select{temporary %select{whose address is used as value of|%select{|implicitly }2bound to}4 %select{%select{|reference }4member of local variable|local %select{variable|reference}4}1|array backing %select{initializer list subobject of local variable|local initializer list}1}0 %select{%3 |}2will be destroyed at the end of the full-expression"}},
[e]="(?:temporary (?:whose address is used as value of|(?:|implicitly )bound to) (?:(?:|reference )member of local variable|local (?:variable|reference))|array backing (?:initializer list subobject of local variable|local initializer list)) (?:(.*?) |)will be destroyed at the end of the full\\-expression",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdangling[^\\]]*\\]",
[g]="(?:temporary (?:whose address is used as value of|(?:|implicitly )bound to) (?:(?:|reference )member of local variable|local (?:variable|reference))|array backing (?:initializer list subobject of local variable|local initializer list)) (?:(.*?) |)will be destroyed at the end of the full\\-expression",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdangling[^\\]]*\\]",
[a]={"0e3102d1dc04",1532393708,"Warn if a local variable\'s initializer retains a pointer/reference to a","Warn if a local variable\'s initializer retains a pointer/reference to a\nnon-lifetime-extended temporary object.\n\nllvm-svn: 337790"},
[b]={{nil,D,m}},
[h]={{fb,8154,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_Extended: {\n      // ...\n      case PathLifetimeKind::NoExtend:\n        // ...\n        Diag(DiagLoc, diag::warn_dangling_variable) << RK << !Entity.getParent() << ExtendingEntity->getDecl()->isImplicit() << ExtendingEntity->getDecl() << Init->isGLValue() << DiagRange;"}},
[f]={"0e3102d1dc04",1532393708,"Warn if a local variable\'s initializer retains a pointer/reference to a","Warn if a local variable\'s initializer retains a pointer/reference to a\nnon-lifetime-extended temporary object.\n\nllvm-svn: 337790"},
[k]={
[h]={{mb,8154,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_Extended: {\n      // ...\n      case PathLifetimeKind::NoExtend:\n        // ...\n        Diag(DiagLoc, diag::warn_dangling_variable) << RK << !Entity.getParent() << ExtendingEntity->getDecl()->isImplicit() << ExtendingEntity->getDecl() << Init->isGLValue() << DiagRange;"}},
[l]={
["clang/test/SemaCXX/address-of-temporary.cpp"]={"clang/test/SemaCXX/address-of-temporary.cpp:29:24: warning: temporary whose address is used as value of local variable \'p\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:30:24: warning: temporary whose address is used as value of local variable \'p\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:31:24: warning: temporary whose address is used as value of local variable \'p\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:32:24: warning: temporary whose address is used as value of local variable \'p\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:33:22: warning: temporary whose address is used as value of local variable \'p\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:34:28: warning: temporary whose address is used as value of local variable \'p\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:42:23: warning: temporary whose address is used as value of member of local variable \'s\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:43:23: warning: temporary whose address is used as value of member of local variable \'s\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:44:23: warning: temporary whose address is used as value of member of local variable \'s\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:45:23: warning: temporary whose address is used as value of member of local variable \'s\' will be destroyed at the end of the full-expression [-Wdangling]"}
["clang/test/SemaCXX/address-of-temporary.cpp"]={"clang/test/SemaCXX/address-of-temporary.cpp:29:24: warning: temporary whose address is used as value of local variable \'p\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:30:24: warning: temporary whose address is used as value of local variable \'p\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:31:24: warning: temporary whose address is used as value of local variable \'p\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:32:24: warning: temporary whose address is used as value of local variable \'p\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:33:22: warning: temporary whose address is used as value of local variable \'p\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:34:28: warning: temporary whose address is used as value of local variable \'p\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:42:23: warning: temporary whose address is used as value of member of local variable \'s\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:43:23: warning: temporary whose address is used as value of member of local variable \'s\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:44:23: warning: temporary whose address is used as value of member of local variable \'s\' will be destroyed at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/address-of-temporary.cpp:45:23: warning: temporary whose address is used as value of member of local variable \'s\' will be destroyed at the end of the full-expression [-Wdangling]"}
}
}
},
},
["warn_dealloc_in_category"]={
["warn_dealloc_in_category"]={
[j]={"dealloc-in-category"},
[k]={"dealloc-in-category"},
[i]="dealloc-in-category",
[j]="dealloc-in-category",
[c]="-dealloc is being overridden in a category",
[c]="warn_dealloc_in_category",
[d]=g,
[d]="-dealloc is being overridden in a category",
[e]="\\-dealloc is being overridden in a category",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdealloc\\-in\\-category[^\\]]*\\]",
[g]="\\-dealloc is being overridden in a category",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdealloc\\-in\\-category[^\\]]*\\]",
[a]={"7e350d23b215",1387320268,"Objctive-C. warn if dealloc is being overridden in","Objctive-C. warn if dealloc is being overridden in\na category implementation. // rdar://15397430\n\nllvm-svn: 197534"},
[b]=m,
[h]={{wc,4950,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  if (ObjCImplDecl *ImpDecl = dyn_cast<ObjCImplDecl>(ClassDecl)) {\n    // ...\n    // Merge information from the @interface declaration into the\n    // @implementation.\n    if (ObjCInterfaceDecl *IDecl = ImpDecl->getClassInterface()) {\n      if (auto *IMD = IDecl->lookupMethod(ObjCMethod->getSelector(), ObjCMethod->isInstanceMethod())) {\n        // ...\n        // Warn about defining -dealloc in a category.\n        if (isa<ObjCCategoryImplDecl>(ImpDecl) && IMD->isOverriding() && ObjCMethod->getSelector().getMethodFamily() == OMF_dealloc) {\n          Diag(ObjCMethod->getLocation(), diag::warn_dealloc_in_category) << ObjCMethod->getDeclName();"}},
[f]={"7e350d23b215",1387320268,"Objctive-C. warn if dealloc is being overridden in","Objctive-C. warn if dealloc is being overridden in\na category implementation. // rdar://15397430\n\nllvm-svn: 197534"},
[k]={
[h]={{Gc,4950,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  if (ObjCImplDecl *ImpDecl = dyn_cast<ObjCImplDecl>(ClassDecl)) {\n    // ...\n    // Merge information from the @interface declaration into the\n    // @implementation.\n    if (ObjCInterfaceDecl *IDecl = ImpDecl->getClassInterface()) {\n      if (auto *IMD = IDecl->lookupMethod(ObjCMethod->getSelector(), ObjCMethod->isInstanceMethod())) {\n        // ...\n        // Warn about defining -dealloc in a category.\n        if (isa<ObjCCategoryImplDecl>(ImpDecl) && IMD->isOverriding() && ObjCMethod->getSelector().getMethodFamily() == OMF_dealloc) {\n          Diag(ObjCMethod->getLocation(), diag::warn_dealloc_in_category) << ObjCMethod->getDeclName();"}},
[l]={
["clang/test/SemaObjC/dealloc.m"]={"clang/test/SemaObjC/dealloc.m:39:1: warning: -dealloc is being overridden in a category [-Wdealloc-in-category]"}
["clang/test/SemaObjC/dealloc.m"]={"clang/test/SemaObjC/dealloc.m:39:1: warning: -dealloc is being overridden in a category [-Wdealloc-in-category]"}
}
}
},
},
["warn_debug_compression_unavailable"]={
["warn_debug_compression_unavailable"]={
[j]={"debug-compression-unavailable"},
[k]={"debug-compression-unavailable"},
[i]="debug-compression-unavailable",
[j]="debug-compression-unavailable",
[c]={{nil,yc,"cannot compress debug sections (%0 not enabled)"},{kb,kb,"cannot compress debug sections (zlib not enabled)"},{Q,nil,"cannot compress debug sections (zlib not installed)"}},
[c]="warn_debug_compression_unavailable",
[d]=g,
[d]={{nil,bb,"cannot compress debug sections (%0 not enabled)"},{C,C,"cannot compress debug sections (zlib not enabled)"},{w,nil,"cannot compress debug sections (zlib not installed)"}},
[e]="cannot compress debug sections \\((.*?) not enabled\\)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdebug\\-compression\\-unavailable[^\\]]*\\]",
[g]="cannot compress debug sections \\((.*?) not enabled\\)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wdebug\\-compression\\-unavailable[^\\]]*\\]",
[a]={"24bbfed22185",1396308578,"Warn when requesting compress-debug-sections and zlib is not available","Warn when requesting compress-debug-sections and zlib is not available\n\nAnother shot in the dark, since I do have zlib installed. Will be\nwatching the bots for fallout.\n\nllvm-svn: 205265"},
[b]=r,
[h]={{T,1033,"static void RenderDebugInfoCompressionArgs(const ArgList &Args, ArgStringList &CmdArgs, const Driver &D, const ToolChain &TC) {\n  // ...\n  if (checkDebugInfoOption(A, Args, D, TC)) {\n    // ...\n    if (Value == \"none\") {\n    // ...\n    } else if (Value == \"zlib\") {\n      if (llvm::compression::zlib::isAvailable()) {\n      // ...\n      } else {\n        D.Diag(diag::warn_debug_compression_unavailable) << \"zlib\";"},{T,1040,"static void RenderDebugInfoCompressionArgs(const ArgList &Args, ArgStringList &CmdArgs, const Driver &D, const ToolChain &TC) {\n  // ...\n  if (checkDebugInfoOption(A, Args, D, TC)) {\n    // ...\n    if (Value == \"none\") {\n    // ...\n    } else if (Value == \"zlib\") {\n    // ...\n    } else if (Value == \"zstd\") {\n      if (llvm::compression::zstd::isAvailable()) {\n      // ...\n      } else {\n        D.Diag(diag::warn_debug_compression_unavailable) << \"zstd\";"}}
[f]={"24bbfed22185",1396308578,"Warn when requesting compress-debug-sections and zlib is not available","Warn when requesting compress-debug-sections and zlib is not available\n\nAnother shot in the dark, since I do have zlib installed. Will be\nwatching the bots for fallout.\n\nllvm-svn: 205265"},
[h]={{ab,1033,"static void RenderDebugInfoCompressionArgs(const ArgList &Args, ArgStringList &CmdArgs, const Driver &D, const ToolChain &TC) {\n  // ...\n  if (checkDebugInfoOption(A, Args, D, TC)) {\n    // ...\n    if (Value == \"none\") {\n    // ...\n    } else if (Value == \"zlib\") {\n      if (llvm::compression::zlib::isAvailable()) {\n      // ...\n      } else {\n        D.Diag(diag::warn_debug_compression_unavailable) << \"zlib\";"},{ab,1040,"static void RenderDebugInfoCompressionArgs(const ArgList &Args, ArgStringList &CmdArgs, const Driver &D, const ToolChain &TC) {\n  // ...\n  if (checkDebugInfoOption(A, Args, D, TC)) {\n    // ...\n    if (Value == \"none\") {\n    // ...\n    } else if (Value == \"zlib\") {\n    // ...\n    } else if (Value == \"zstd\") {\n      if (llvm::compression::zstd::isAvailable()) {\n      // ...\n      } else {\n        D.Diag(diag::warn_debug_compression_unavailable) << \"zstd\";"}}
},
},
["warn_decl_in_param_list"]={
["warn_decl_in_param_list"]={
[j]={"visibility"},
[k]={"visibility"},
[i]="visibility",
[j]="visibility",
[c]="declaration of %0 will not be visible outside of this function",
[c]="warn_decl_in_param_list",
[d]=g,
[d]="declaration of %0 will not be visible outside of this function",
[e]="declaration of (.*?) will not be visible outside of this function",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wvisibility[^\\]]*\\]",
[g]="declaration of (.*?) will not be visible outside of this function",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wvisibility[^\\]]*\\]",
[a]={Kd,1236199783,Jd,Ld},
[b]=m,
[h]={{D,17634,"CreateNewDecl:\n  // ...\n  // If we\'re declaring or defining a tag in function prototype scope in C,\n  // note that this type can only be used within the function and add it to\n  // the list of decls to inject into the function definition scope.\n  if ((Name || Kind == TTK_Enum) && getNonFieldDeclScope(S)->isFunctionPrototypeScope()) {\n    if (getLangOpts().CPlusPlus) {\n    // ...\n    } else if (!PrevDecl) {\n      Diag(Loc, diag::warn_decl_in_param_list) << Context.getTagDeclType(New);"}},
[f]={Ad,1236199783,Cd,Ed},
[k]={
[h]={{M,17634,"CreateNewDecl:\n  // ...\n  // If we\'re declaring or defining a tag in function prototype scope in C,\n  // note that this type can only be used within the function and add it to\n  // the list of decls to inject into the function definition scope.\n  if ((Name || Kind == TTK_Enum) && getNonFieldDeclScope(S)->isFunctionPrototypeScope()) {\n    if (getLangOpts().CPlusPlus) {\n    // ...\n    } else if (!PrevDecl) {\n      Diag(Loc, diag::warn_decl_in_param_list) << Context.getTagDeclType(New);"}},
[l]={
["clang/test/Sema/type-spec-struct-union.c"]={"clang/test/Sema/type-spec-struct-union.c:31:32: warning: declaration of \'struct S4\' will not be visible outside of this function [-Wvisibility]","clang/test/Sema/type-spec-struct-union.c:37:15: warning: declaration of \'struct S5\' will not be visible outside of this function [-Wvisibility]"}
["clang/test/Sema/type-spec-struct-union.c"]={"clang/test/Sema/type-spec-struct-union.c:31:32: warning: declaration of \'struct S4\' will not be visible outside of this function [-Wvisibility]","clang/test/Sema/type-spec-struct-union.c:37:15: warning: declaration of \'struct S5\' will not be visible outside of this function [-Wvisibility]"}
}
}
},
},
["warn_decl_shadow"]={
["warn_decl_shadow"]={
[j]={"shadow",Gd},
[k]={"shadow","shadow-all"},
[i]="shadow",
[j]="shadow",
[c]="declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2}1",
[c]="warn_decl_shadow",
[d]=g,
[d]="declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2}1",
[e]="declaration shadows a (?:local variable|variable in (.*?)|static data member of (.*?)|field of (.*?)|typedef in (.*?)|type alias in (.*?)|structured binding)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wshadow[^\\]]*\\]",
[g]="declaration shadows a (?:local variable|variable in (.*?)|static data member of (.*?)|field of (.*?)|typedef in (.*?)|type alias in (.*?)|structured binding)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wshadow[^\\]]*\\]",
[a]={"a2a3f7dc115d",1268776098,"Implement -Wshadow.  Based on a patch by Mike M.!","Implement -Wshadow.  Based on a patch by Mike M.!\n\nllvm-svn: 98684"},
[b]=m,
[h]={{D,8138,"/// Enum describing the %select options in diag::warn_decl_shadow."},{D,8182,"static bool shouldWarnIfShadowedDecl(const DiagnosticsEngine &Diags, const LookupResult &R) {\n  // ...\n  return !Diags.isIgnored(diag::warn_decl_shadow, R.getNameLoc());"},{D,8271,"/// Diagnose variable or built-in function shadowing.  Implements\n/// -Wshadow.\n///\n/// This method is called whenever a VarDecl is added to a \"useful\"\n/// scope.\n///\n/// \\param ShadowedDecl the declaration that is shadowed by the given variable\n/// \\param R the lookup of the name\n///\nvoid Sema::CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl, const LookupResult &R) {\n  // ...\n  unsigned WarningDiag = diag::warn_decl_shadow;"},{D,8347,"/// Diagnose shadowing for variables shadowed in the lambda record \\p LambdaRD\n/// when these variables are captured by the lambda.\nvoid Sema::DiagnoseShadowingLambdaDecls(const LambdaScopeInfo *LSI) {\n  for (const auto &Shadow : LSI->ShadowingDecls) {\n    // ...\n    Diag(Shadow.VD->getLocation(), CaptureLoc.isInvalid() ? diag::warn_decl_shadow_uncaptured_local : diag::warn_decl_shadow) << Shadow.VD->getDeclName() << computeShadowedDeclKind(ShadowedDecl, OldDC) << OldDC;"},{D,8359,"/// Check -Wshadow without the advantage of a previous lookup.\nvoid Sema::CheckShadow(Scope *S, VarDecl *D) {\n  if (Diags.isIgnored(diag::warn_decl_shadow, D->getLocation()))"}},
[f]={"a2a3f7dc115d",1268776098,"Implement -Wshadow.  Based on a patch by Mike M.!","Implement -Wshadow.  Based on a patch by Mike M.!\n\nllvm-svn: 98684"},
[k]={
[h]={{M,8138,"/// Enum describing the %select options in diag::warn_decl_shadow."},{M,8182,"static bool shouldWarnIfShadowedDecl(const DiagnosticsEngine &Diags, const LookupResult &R) {\n  // ...\n  return !Diags.isIgnored(diag::warn_decl_shadow, R.getNameLoc());"},{M,8271,"/// Diagnose variable or built-in function shadowing.  Implements\n/// -Wshadow.\n///\n/// This method is called whenever a VarDecl is added to a \"useful\"\n/// scope.\n///\n/// \\param ShadowedDecl the declaration that is shadowed by the given variable\n/// \\param R the lookup of the name\n///\nvoid Sema::CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl, const LookupResult &R) {\n  // ...\n  unsigned WarningDiag = diag::warn_decl_shadow;"},{M,8347,"/// Diagnose shadowing for variables shadowed in the lambda record \\p LambdaRD\n/// when these variables are captured by the lambda.\nvoid Sema::DiagnoseShadowingLambdaDecls(const LambdaScopeInfo *LSI) {\n  for (const auto &Shadow : LSI->ShadowingDecls) {\n    // ...\n    Diag(Shadow.VD->getLocation(), CaptureLoc.isInvalid() ? diag::warn_decl_shadow_uncaptured_local : diag::warn_decl_shadow) << Shadow.VD->getDeclName() << computeShadowedDeclKind(ShadowedDecl, OldDC) << OldDC;"},{M,8359,"/// Check -Wshadow without the advantage of a previous lookup.\nvoid Sema::CheckShadow(Scope *S, VarDecl *D) {\n  if (Diags.isIgnored(diag::warn_decl_shadow, D->getLocation()))"}},
[l]={
["clang/test/Sema/warn-shadow.c"]={"clang/test/Sema/warn-shadow.c:8:7: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:10:7: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:14:9: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:16:9: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:20:11: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:21:11: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:29:28: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:32:9: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:35:12: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:50:16: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:66:7: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:71:18: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:82:14: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:88:7: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:90:16: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:92:16: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:94:9: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:96:18: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:97:11: warning: declaration shadows a local variable [-Wshadow]"}
["clang/test/Sema/warn-shadow.c"]={"clang/test/Sema/warn-shadow.c:8:7: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:10:7: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:14:9: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:16:9: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:20:11: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:21:11: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:29:28: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:32:9: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:35:12: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:50:16: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:66:7: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:71:18: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:82:14: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:88:7: warning: declaration shadows a variable in the global scope [-Wshadow]","clang/test/Sema/warn-shadow.c:90:16: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:92:16: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:94:9: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:96:18: warning: declaration shadows a local variable [-Wshadow]","clang/test/Sema/warn-shadow.c:97:11: warning: declaration shadows a local variable [-Wshadow]"}
}
}
},
},
["warn_decl_shadow_uncaptured_local"]={
["warn_decl_shadow_uncaptured_local"]={
[j]={Gd,"shadow-uncaptured-local"},
[k]={"shadow-all","shadow-uncaptured-local"},
[i]="shadow-uncaptured-local",
[j]="shadow-uncaptured-local",
[c]="declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2}1",
[c]="warn_decl_shadow_uncaptured_local",
[d]=g,
[d]="declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2}1",
[e]="declaration shadows a (?:local variable|variable in (.*?)|static data member of (.*?)|field of (.*?)|typedef in (.*?)|type alias in (.*?)|structured binding)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wshadow\\-uncaptured\\-local[^\\]]*\\]",
[g]="declaration shadows a (?:local variable|variable in (.*?)|static data member of (.*?)|field of (.*?)|typedef in (.*?)|type alias in (.*?)|structured binding)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wshadow\\-uncaptured\\-local[^\\]]*\\]",
[a]={"175388c00d0a",1478687937,"[Sema] Avoid -Wshadow warnings for shadowed variables that aren\'t captured","[Sema] Avoid -Wshadow warnings for shadowed variables that aren\'t captured\nby lambdas with an explicit capture list\n\nThis commit avoids the -Wshadow warning for variables which shadow variables\nthat aren\'t captured by lambdas with an explicit capture list. It provides an\nadditional note that points to location of the explicit capture.\n\nThe old behaviour is preserved with -Wshadow-all or -Wshadow-uncaptured-local.\n\nrdar://17135966\n\nDifferential Revision: https://reviews.llvm.org/D26278\n\nllvm-svn: 286354"},
[b]=m,
[h]={{D,8283,"/// Diagnose variable or built-in function shadowing.  Implements\n/// -Wshadow.\n///\n/// This method is called whenever a VarDecl is added to a \"useful\"\n/// scope.\n///\n/// \\param ShadowedDecl the declaration that is shadowed by the given variable\n/// \\param R the lookup of the name\n///\nvoid Sema::CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl, const LookupResult &R) {\n  // ...\n  if (isa<VarDecl>(D) && isa<VarDecl>(ShadowedDecl) && NewDC && isa<CXXMethodDecl>(NewDC)) {\n    if (const auto *RD = dyn_cast<CXXRecordDecl>(NewDC->getParent())) {\n      if (RD->isLambda() && OldDC->Encloses(NewDC->getLexicalParent())) {\n        if (RD->getLambdaCaptureDefault() == LCD_None) {\n          // ...\n          if (CaptureLoc.isInvalid())\n            WarningDiag = diag::warn_decl_shadow_uncaptured_local;"},{D,8346,"/// Diagnose shadowing for variables shadowed in the lambda record \\p LambdaRD\n/// when these variables are captured by the lambda.\nvoid Sema::DiagnoseShadowingLambdaDecls(const LambdaScopeInfo *LSI) {\n  for (const auto &Shadow : LSI->ShadowingDecls) {\n    // ...\n    Diag(Shadow.VD->getLocation(), CaptureLoc.isInvalid() ? diag::warn_decl_shadow_uncaptured_local : diag::warn_decl_shadow) << Shadow.VD->getDeclName() << computeShadowedDeclKind(ShadowedDecl, OldDC) << OldDC;"}}
[f]={"175388c00d0a",1478687937,"[Sema] Avoid -Wshadow warnings for shadowed variables that aren\'t captured","[Sema] Avoid -Wshadow warnings for shadowed variables that aren\'t captured\nby lambdas with an explicit capture list\n\nThis commit avoids the -Wshadow warning for variables which shadow variables\nthat aren\'t captured by lambdas with an explicit capture list. It provides an\nadditional note that points to location of the explicit capture.\n\nThe old behaviour is preserved with -Wshadow-all or -Wshadow-uncaptured-local.\n\nrdar://17135966\n\nDifferential Revision: https://reviews.llvm.org/D26278\n\nllvm-svn: 286354"},
[h]={{M,8283,"/// Diagnose variable or built-in function shadowing.  Implements\n/// -Wshadow.\n///\n/// This method is called whenever a VarDecl is added to a \"useful\"\n/// scope.\n///\n/// \\param ShadowedDecl the declaration that is shadowed by the given variable\n/// \\param R the lookup of the name\n///\nvoid Sema::CheckShadow(NamedDecl *D, NamedDecl *ShadowedDecl, const LookupResult &R) {\n  // ...\n  if (isa<VarDecl>(D) && isa<VarDecl>(ShadowedDecl) && NewDC && isa<CXXMethodDecl>(NewDC)) {\n    if (const auto *RD = dyn_cast<CXXRecordDecl>(NewDC->getParent())) {\n      if (RD->isLambda() && OldDC->Encloses(NewDC->getLexicalParent())) {\n        if (RD->getLambdaCaptureDefault() == LCD_None) {\n          // ...\n          if (CaptureLoc.isInvalid())\n            WarningDiag = diag::warn_decl_shadow_uncaptured_local;"},{M,8346,"/// Diagnose shadowing for variables shadowed in the lambda record \\p LambdaRD\n/// when these variables are captured by the lambda.\nvoid Sema::DiagnoseShadowingLambdaDecls(const LambdaScopeInfo *LSI) {\n  for (const auto &Shadow : LSI->ShadowingDecls) {\n    // ...\n    Diag(Shadow.VD->getLocation(), CaptureLoc.isInvalid() ? diag::warn_decl_shadow_uncaptured_local : diag::warn_decl_shadow) << Shadow.VD->getDeclName() << computeShadowedDeclKind(ShadowedDecl, OldDC) << OldDC;"}}
},
},
["warn_declspec_allocator_nonpointer"]={
["warn_declspec_allocator_nonpointer"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]={{nil,I,"ignoring __declspec(allocator) because the function return type %0 is not a pointer or reference type"}},
[c]={{nil,x,"warn_declspec_allocator_nonpointer"}},
[d]=g,
[d]={{nil,x,"ignoring __declspec(allocator) because the function return type %0 is not a pointer or reference type"}},
[e]="ignoring __declspec\\(allocator\\) because the function return type (.*?) is not a pointer or reference type",
[e]=i,
[f]=vb,
[g]="ignoring __declspec\\(allocator\\) because the function return type (.*?) is not a pointer or reference type",
[b]=l,
[a]=Db,
[a]={"1181c9f45db1",1553556018,"[MS] Add frontend support for __declspec(allocator)","[MS] Add frontend support for __declspec(allocator)\n\nThe intention is to add metadata to direct call sites of functions\nmarked with __declspec(allocator), which will ultimately result in some\nS_HEAPALLOCSITE debug info records when emitting codeview.\n\nThis is a piece of PR38491\n\nllvm-svn: 356964"},
[b]={{nil,x,m}},
[h]={{E,8549,"static void handleMSAllocatorAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Warn if the return type is not a pointer or reference type.\n  if (auto *FD = dyn_cast<FunctionDecl>(D)) {\n    // ...\n    if (!RetTy->isPointerType() && !RetTy->isReferenceType()) {\n      S.Diag(AL.getLoc(), diag::warn_declspec_allocator_nonpointer) << AL.getRange() << RetTy;"}},
[f]={"1181c9f45db1",1553556018,"[MS] Add frontend support for __declspec(allocator)","[MS] Add frontend support for __declspec(allocator)\n\nThe intention is to add metadata to direct call sites of functions\nmarked with __declspec(allocator), which will ultimately result in some\nS_HEAPALLOCSITE debug info records when emitting codeview.\n\nThis is a piece of PR38491\n\nllvm-svn: 356964"},
[k]={
[h]={{N,8549,"static void handleMSAllocatorAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Warn if the return type is not a pointer or reference type.\n  if (auto *FD = dyn_cast<FunctionDecl>(D)) {\n    // ...\n    if (!RetTy->isPointerType() && !RetTy->isReferenceType()) {\n      S.Diag(AL.getLoc(), diag::warn_declspec_allocator_nonpointer) << AL.getRange() << RetTy;"}},
[l]={
["clang/test/SemaCXX/declspec-allocator.cpp"]={"clang/test/SemaCXX/declspec-allocator.cpp:6:12: warning: ignoring __declspec(allocator) because the function return type \'void\' is not a pointer or reference type [-Wignored-attributes]","clang/test/SemaCXX/declspec-allocator.cpp:7:12: warning: ignoring __declspec(allocator) because the function return type \'int\' is not a pointer or reference type [-Wignored-attributes]"}
["clang/test/SemaCXX/declspec-allocator.cpp"]={"clang/test/SemaCXX/declspec-allocator.cpp:6:12: warning: ignoring __declspec(allocator) because the function return type \'void\' is not a pointer or reference type [-Wignored-attributes]","clang/test/SemaCXX/declspec-allocator.cpp:7:12: warning: ignoring __declspec(allocator) because the function return type \'int\' is not a pointer or reference type [-Wignored-attributes]"}
}
}
},
},
["warn_declspec_attribute_ignored"]={
["warn_declspec_attribute_ignored"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]="attribute %0 is ignored, place it after \"%select{class|struct|interface|union|enum|enum class|enum struct}1\" to apply attribute to type declaration",
[c]="warn_declspec_attribute_ignored",
[d]=g,
[d]="attribute %0 is ignored, place it after \"%select{class|struct|interface|union|enum|enum class|enum struct}1\" to apply attribute to type declaration",
[e]="attribute (.*?) is ignored, place it after \"(?:class|struct|interface|union|enum|enum class|enum struct)\" to apply attribute to type declaration",
[e]=i,
[f]=vb,
[g]="attribute (.*?) is ignored, place it after \"(?:class|struct|interface|union|enum|enum class|enum struct)\" to apply attribute to type declaration",
[b]=l,
[a]=Db,
[a]={"e321795c60c5",1324082169,"Remove a non-gcc-compatible extension that would apply attributes on declarations without a declarat...","Remove a non-gcc-compatible extension that would apply attributes on declarations without a declarator to structs.  Add a warning for ignored attributes.  Patch by Michael Han.\n\nllvm-svn: 146796"},
[b]=m,
[h]={{D,5324,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // ...\n  // Warn about ignored type attributes, for example:\n  // __attribute__((aligned)) struct A;\n  // Attributes should be placed after tag to apply to type declaration.\n  if (!DS.getAttributes().empty() || !DeclAttrs.empty()) {\n    // ...\n    if (TypeSpecType == DeclSpec::TST_class || TypeSpecType == DeclSpec::TST_struct || TypeSpecType == DeclSpec::TST_interface || TypeSpecType == DeclSpec::TST_union || TypeSpecType == DeclSpec::TST_enum) {\n      for (const ParsedAttr &AL : DS.getAttributes())\n        Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? diag::err_declspec_keyword_has_no_effect : diag::warn_declspec_attribute_ignored) << AL << GetDiagnosticTypeSpecifierID(DS);"},{D,5329,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // ...\n  // Warn about ignored type attributes, for example:\n  // __attribute__((aligned)) struct A;\n  // Attributes should be placed after tag to apply to type declaration.\n  if (!DS.getAttributes().empty() || !DeclAttrs.empty()) {\n    // ...\n    if (TypeSpecType == DeclSpec::TST_class || TypeSpecType == DeclSpec::TST_struct || TypeSpecType == DeclSpec::TST_interface || TypeSpecType == DeclSpec::TST_union || TypeSpecType == DeclSpec::TST_enum) {\n      // ...\n      for (const ParsedAttr &AL : DeclAttrs)\n        Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? diag::err_declspec_keyword_has_no_effect : diag::warn_declspec_attribute_ignored) << AL << GetDiagnosticTypeSpecifierID(DS);"}},
[f]={"e321795c60c5",1324082169,"Remove a non-gcc-compatible extension that would apply attributes on declarations without a declarat...","Remove a non-gcc-compatible extension that would apply attributes on declarations without a declarator to structs.  Add a warning for ignored attributes.  Patch by Michael Han.\n\nllvm-svn: 146796"},
[k]={
[h]={{M,5324,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // ...\n  // Warn about ignored type attributes, for example:\n  // __attribute__((aligned)) struct A;\n  // Attributes should be placed after tag to apply to type declaration.\n  if (!DS.getAttributes().empty() || !DeclAttrs.empty()) {\n    // ...\n    if (TypeSpecType == DeclSpec::TST_class || TypeSpecType == DeclSpec::TST_struct || TypeSpecType == DeclSpec::TST_interface || TypeSpecType == DeclSpec::TST_union || TypeSpecType == DeclSpec::TST_enum) {\n      for (const ParsedAttr &AL : DS.getAttributes())\n        Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? diag::err_declspec_keyword_has_no_effect : diag::warn_declspec_attribute_ignored) << AL << GetDiagnosticTypeSpecifierID(DS);"},{M,5329,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // ...\n  // Warn about ignored type attributes, for example:\n  // __attribute__((aligned)) struct A;\n  // Attributes should be placed after tag to apply to type declaration.\n  if (!DS.getAttributes().empty() || !DeclAttrs.empty()) {\n    // ...\n    if (TypeSpecType == DeclSpec::TST_class || TypeSpecType == DeclSpec::TST_struct || TypeSpecType == DeclSpec::TST_interface || TypeSpecType == DeclSpec::TST_union || TypeSpecType == DeclSpec::TST_enum) {\n      // ...\n      for (const ParsedAttr &AL : DeclAttrs)\n        Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? diag::err_declspec_keyword_has_no_effect : diag::warn_declspec_attribute_ignored) << AL << GetDiagnosticTypeSpecifierID(DS);"}},
[l]={
["clang/test/SemaCXX/attr-declspec-ignored.cpp"]={"clang/test/SemaCXX/attr-declspec-ignored.cpp:4:18: warning: attribute \'visibility\' is ignored, place it after \"class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:4:57: warning: attribute \'aligned\' is ignored, place it after \"class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:6:18: warning: attribute \'visibility\' is ignored, place it after \"struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:6:57: warning: attribute \'aligned\' is ignored, place it after \"struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:8:18: warning: attribute \'visibility\' is ignored, place it after \"union\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:8:57: warning: attribute \'aligned\' is ignored, place it after \"union\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:10:18: warning: attribute \'visibility\' is ignored, place it after \"enum\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:10:57: warning: attribute \'aligned\' is ignored, place it after \"enum\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:12:18: warning: attribute \'visibility\' is ignored, place it after \"enum class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:12:57: warning: attribute \'aligned\' is ignored, place it after \"enum class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:14:18: warning: attribute \'visibility\' is ignored, place it after \"enum struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:14:57: warning: attribute \'aligned\' is ignored, place it after \"enum struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:19:20: warning: attribute \'visibility\' is ignored, place it after \"class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:19:59: warning: attribute \'aligned\' is ignored, place it after \"class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:21:20: warning: attribute \'visibility\' is ignored, place it after \"struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:21:59: warning: attribute \'aligned\' is ignored, place it after \"struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:23:20: warning: attribute \'visibility\' is ignored, place it after \"union\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:23:59: warning: attribute \'aligned\' is ignored, place it after \"union\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:25:20: warning: attribute \'visibility\' is ignored, place it after \"enum\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:25:59: warning: attribute \'aligned\' is ignored, place it after \"enum\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:27:20: warning: attribute \'visibility\' is ignored, place it after \"enum class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:27:59: warning: attribute \'aligned\' is ignored, place it after \"enum class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:29:20: warning: attribute \'visibility\' is ignored, place it after \"enum struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:29:59: warning: attribute \'aligned\' is ignored, place it after \"enum struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:35:7: warning: attribute \'visibility\' is ignored, place it after \"class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:35:38: warning: attribute \'aligned\' is ignored, place it after \"class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:37:7: warning: attribute \'visibility\' is ignored, place it after \"struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:37:38: warning: attribute \'aligned\' is ignored, place it after \"struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:39:7: warning: attribute \'visibility\' is ignored, place it after \"union\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:39:38: warning: attribute \'aligned\' is ignored, place it after \"union\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:41:7: warning: attribute \'visibility\' is ignored, place it after \"enum\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:41:38: warning: attribute \'aligned\' is ignored, place it after \"enum\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:43:7: warning: attribute \'visibility\' is ignored, place it after \"enum class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:43:38: warning: attribute \'aligned\' is ignored, place it after \"enum class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:45:7: warning: attribute \'visibility\' is ignored, place it after \"enum struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:45:38: warning: attribute \'aligned\' is ignored, place it after \"enum struct\" to apply attribute to type declaration [-Wignored-attributes]"}
["clang/test/SemaCXX/attr-declspec-ignored.cpp"]={"clang/test/SemaCXX/attr-declspec-ignored.cpp:4:18: warning: attribute \'visibility\' is ignored, place it after \"class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:4:57: warning: attribute \'aligned\' is ignored, place it after \"class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:6:18: warning: attribute \'visibility\' is ignored, place it after \"struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:6:57: warning: attribute \'aligned\' is ignored, place it after \"struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:8:18: warning: attribute \'visibility\' is ignored, place it after \"union\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:8:57: warning: attribute \'aligned\' is ignored, place it after \"union\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:10:18: warning: attribute \'visibility\' is ignored, place it after \"enum\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:10:57: warning: attribute \'aligned\' is ignored, place it after \"enum\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:12:18: warning: attribute \'visibility\' is ignored, place it after \"enum class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:12:57: warning: attribute \'aligned\' is ignored, place it after \"enum class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:14:18: warning: attribute \'visibility\' is ignored, place it after \"enum struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:14:57: warning: attribute \'aligned\' is ignored, place it after \"enum struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:19:20: warning: attribute \'visibility\' is ignored, place it after \"class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:19:59: warning: attribute \'aligned\' is ignored, place it after \"class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:21:20: warning: attribute \'visibility\' is ignored, place it after \"struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:21:59: warning: attribute \'aligned\' is ignored, place it after \"struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:23:20: warning: attribute \'visibility\' is ignored, place it after \"union\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:23:59: warning: attribute \'aligned\' is ignored, place it after \"union\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:25:20: warning: attribute \'visibility\' is ignored, place it after \"enum\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:25:59: warning: attribute \'aligned\' is ignored, place it after \"enum\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:27:20: warning: attribute \'visibility\' is ignored, place it after \"enum class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:27:59: warning: attribute \'aligned\' is ignored, place it after \"enum class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:29:20: warning: attribute \'visibility\' is ignored, place it after \"enum struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:29:59: warning: attribute \'aligned\' is ignored, place it after \"enum struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:35:7: warning: attribute \'visibility\' is ignored, place it after \"class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:35:38: warning: attribute \'aligned\' is ignored, place it after \"class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:37:7: warning: attribute \'visibility\' is ignored, place it after \"struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:37:38: warning: attribute \'aligned\' is ignored, place it after \"struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:39:7: warning: attribute \'visibility\' is ignored, place it after \"union\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:39:38: warning: attribute \'aligned\' is ignored, place it after \"union\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:41:7: warning: attribute \'visibility\' is ignored, place it after \"enum\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:41:38: warning: attribute \'aligned\' is ignored, place it after \"enum\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:43:7: warning: attribute \'visibility\' is ignored, place it after \"enum class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:43:38: warning: attribute \'aligned\' is ignored, place it after \"enum class\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:45:7: warning: attribute \'visibility\' is ignored, place it after \"enum struct\" to apply attribute to type declaration [-Wignored-attributes]","clang/test/SemaCXX/attr-declspec-ignored.cpp:45:38: warning: attribute \'aligned\' is ignored, place it after \"enum struct\" to apply attribute to type declaration [-Wignored-attributes]"}
}
}
},
},
["warn_deep_exception_specs_differ"]={
["warn_deep_exception_specs_differ"]={
[j]={"incompatible-exception-spec"},
[k]={"incompatible-exception-spec"},
[i]="incompatible-exception-spec",
[j]="incompatible-exception-spec",
[c]="exception specifications of %select{return|argument}0 types differ",
[c]="warn_deep_exception_specs_differ",
[d]=g,
[d]="exception specifications of %select{return|argument}0 types differ",
[e]="exception specifications of (?:return|argument) types differ",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-exception\\-spec[^\\]]*\\]",
[g]="exception specifications of (?:return|argument) types differ",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-exception\\-spec[^\\]]*\\]",
[a]={"1be59c510612",1477099939,"[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for","[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for\nmismatched dynamic exception specifications in expressions from an error to a\nwarning, since this is no longer ill-formed in C++1z.\n\nAllow reference binding of a reference-to-non-noexcept function to a noexcept\nfunction lvalue. As defect resolutions, also allow a conditional between\nnoexcept and non-noexcept function lvalues to produce a non-noexcept function\nlvalue (rather than decaying to a function pointer), and allow function\ntemplate argument deduction to deduce a reference to non-noexcept function when\nbinding to a noexcept function type.\n\nllvm-svn: 284905"},
[b]=m,
[f]={"1be59c510612",1477099939,"[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for","[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for\nmismatched dynamic exception specifications in expressions from an error to a\nwarning, since this is no longer ill-formed in C++1z.\n\nAllow reference binding of a reference-to-non-noexcept function to a noexcept\nfunction lvalue. As defect resolutions, also allow a conditional between\nnoexcept and non-noexcept function lvalues to produce a non-noexcept function\nlvalue (rather than decaying to a function pointer), and allow function\ntemplate argument deduction to deduce a reference to non-noexcept function when\nbinding to a noexcept function type.\n\nllvm-svn: 284905"},
[h]={{"clang/lib/Sema/SemaExceptionSpec.cpp",947,"bool Sema::CheckExceptionSpecCompatibility(Expr *From, QualType ToType) {\n  // ...\n  // This is not an error in C++17 onwards, unless the noexceptness doesn\'t\n  // match, but in that case we have a full-on type mismatch, not just a\n  // type sugar mismatch.\n  if (getLangOpts().CPlusPlus17) {\n    // ...\n    NestedDiagID = diag::warn_deep_exception_specs_differ;"}}
[h]={{"clang/lib/Sema/SemaExceptionSpec.cpp",947,"bool Sema::CheckExceptionSpecCompatibility(Expr *From, QualType ToType) {\n  // ...\n  // This is not an error in C++17 onwards, unless the noexceptness doesn\'t\n  // match, but in that case we have a full-on type mismatch, not just a\n  // type sugar mismatch.\n  if (getLangOpts().CPlusPlus17) {\n    // ...\n    NestedDiagID = diag::warn_deep_exception_specs_differ;"}}
},
},
["warn_def_missing_case"]={
["warn_def_missing_case"]={
[j]={"switch-enum"},
[k]={"switch-enum"},
[i]="switch-enum",
[j]="switch-enum",
[c]="%plural{1:enumeration value %1 not explicitly handled in switch|2:enumeration values %1 and %2 not explicitly handled in switch|3:enumeration values %1, %2, and %3 not explicitly handled in switch|:%0 enumeration values not explicitly handled in switch: %1, %2, %3...}0",
[c]="warn_def_missing_case",
[d]=g,
[d]="%plural{1:enumeration value %1 not explicitly handled in switch|2:enumeration values %1 and %2 not explicitly handled in switch|3:enumeration values %1, %2, and %3 not explicitly handled in switch|:%0 enumeration values not explicitly handled in switch: %1, %2, %3...}0",
[e]="(?:enumeration value (.*?) not explicitly handled in switch|enumeration values (.*?) and (.*?) not explicitly handled in switch|enumeration values (.*?), (.*?), and (.*?) not explicitly handled in switch|(.*?) enumeration values not explicitly handled in switch\\: (.*?), (.*?), (.*?)\\.\\.\\.)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wswitch\\-enum[^\\]]*\\]",
[g]="(?:enumeration value (.*?) not explicitly handled in switch|enumeration values (.*?) and (.*?) not explicitly handled in switch|enumeration values (.*?), (.*?), and (.*?) not explicitly handled in switch|(.*?) enumeration values not explicitly handled in switch\\: (.*?), (.*?), (.*?)\\.\\.\\.)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wswitch\\-enum[^\\]]*\\]",
[a]={"3a8650af779c",1427476994,"[Sema] Factor diags with %plural. No functionality change intended.","[Sema] Factor diags with %plural. No functionality change intended.\n\nllvm-svn: 233387"},
[b]=m,
[h]={{Cb,1604,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  // ...\n  if (!HasDependentValue) {\n    // ...\n    // If switch has default case, then ignore it.\n    if (!CaseListIsErroneous && !CaseListIsIncomplete && !HasConstantCond && ET && ET->getDecl()->isCompleteDefinition() && !ET->getDecl()->enumerators().empty()) {\n      // ...\n      // Produce a nice diagnostic if multiple values aren\'t handled.\n      if (!UnhandledNames.empty()) {\n        auto DB = Diag(CondExpr->getExprLoc(), TheDefaultStmt ? diag::warn_def_missing_case : diag::warn_missing_case) << CondExpr->getSourceRange() << (int)UnhandledNames.size();"}},
[f]={"3a8650af779c",1427476994,"[Sema] Factor diags with %plural. No functionality change intended.","[Sema] Factor diags with %plural. No functionality change intended.\n\nllvm-svn: 233387"},
[k]={
[h]={{Hb,1604,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  // ...\n  if (!HasDependentValue) {\n    // ...\n    // If switch has default case, then ignore it.\n    if (!CaseListIsErroneous && !CaseListIsIncomplete && !HasConstantCond && ET && ET->getDecl()->isCompleteDefinition() && !ET->getDecl()->enumerators().empty()) {\n      // ...\n      // Produce a nice diagnostic if multiple values aren\'t handled.\n      if (!UnhandledNames.empty()) {\n        auto DB = Diag(CondExpr->getExprLoc(), TheDefaultStmt ? diag::warn_def_missing_case : diag::warn_missing_case) << CondExpr->getSourceRange() << (int)UnhandledNames.size();"}},
[l]={
["clang/test/Sema/switch.c"]={"clang/test/Sema/switch.c:211:10: warning: enumeration value \'A\' not explicitly handled in switch [-Wswitch-enum]"}
["clang/test/Sema/switch.c"]={"clang/test/Sema/switch.c:211:10: warning: enumeration value \'A\' not explicitly handled in switch [-Wswitch-enum]"}
}
}
},
},
["warn_default_atomic_custom_getter_setter"]={
["warn_default_atomic_custom_getter_setter"]={
[j]={"atomic-properties","custom-atomic-properties"},
[k]={"atomic-properties","custom-atomic-properties"},
[i]="custom-atomic-properties",
[j]="custom-atomic-properties",
[c]="atomic by default property %0 has a user defined %select{getter|setter}1 (property should be marked \'atomic\' if this is intended)",
[c]="warn_default_atomic_custom_getter_setter",
[d]=g,
[d]="atomic by default property %0 has a user defined %select{getter|setter}1 (property should be marked \'atomic\' if this is intended)",
[e]="atomic by default property (.*?) has a user defined (?:getter|setter) \\(property should be marked \'atomic\' if this is intended\\)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wcustom\\-atomic\\-properties[^\\]]*\\]",
[g]="atomic by default property (.*?) has a user defined (?:getter|setter) \\(property should be marked \'atomic\' if this is intended\\)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wcustom\\-atomic\\-properties[^\\]]*\\]",
[a]={"dd88dbf9d2b3",1296509651,"Add -Wcustom-atomic-properties which warns if an atomic-by-default property has custom getter or set...","Add -Wcustom-atomic-properties which warns if an atomic-by-default property has custom getter or setter.\n\nThe rationale is that it is highly likely that the user\'s getter/setter isn\'t atomically implemented. Off by default.\nAddresses rdar://8782645.\n\n-Wcustom-atomic-properties and -Wimplicit-atomic-properties are under the -Watomic-properties group.\n\nllvm-svn: 124609"},
[b]=m,
[h]={{Qc,2198,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  // ...\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    // ...\n    if (!(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic) && !(AttributesAsWritten & ObjCPropertyAttribute::kind_nonatomic)) {\n      // ...\n      if (GetterMethod) {\n        Diag(GetterMethod->getLocation(), diag::warn_default_atomic_custom_getter_setter) << Property->getIdentifier() << 0;"},{Qc,2204,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  // ...\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    // ...\n    if (!(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic) && !(AttributesAsWritten & ObjCPropertyAttribute::kind_nonatomic)) {\n      // ...\n      if (SetterMethod) {\n        Diag(SetterMethod->getLocation(), diag::warn_default_atomic_custom_getter_setter) << Property->getIdentifier() << 1;"}},
[f]={"dd88dbf9d2b3",1296509651,"Add -Wcustom-atomic-properties which warns if an atomic-by-default property has custom getter or set...","Add -Wcustom-atomic-properties which warns if an atomic-by-default property has custom getter or setter.\n\nThe rationale is that it is highly likely that the user\'s getter/setter isn\'t atomically implemented. Off by default.\nAddresses rdar://8782645.\n\n-Wcustom-atomic-properties and -Wimplicit-atomic-properties are under the -Watomic-properties group.\n\nllvm-svn: 124609"},
[k]={
[h]={{Xc,2198,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  // ...\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    // ...\n    if (!(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic) && !(AttributesAsWritten & ObjCPropertyAttribute::kind_nonatomic)) {\n      // ...\n      if (GetterMethod) {\n        Diag(GetterMethod->getLocation(), diag::warn_default_atomic_custom_getter_setter) << Property->getIdentifier() << 0;"},{Xc,2204,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  // ...\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    // ...\n    if (!(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic) && !(AttributesAsWritten & ObjCPropertyAttribute::kind_nonatomic)) {\n      // ...\n      if (SetterMethod) {\n        Diag(SetterMethod->getLocation(), diag::warn_default_atomic_custom_getter_setter) << Property->getIdentifier() << 1;"}},
[l]={
["clang/test/SemaObjC/custom-atomic-property.m"]={"clang/test/SemaObjC/custom-atomic-property.m:8:2: warning: atomic by default property \'myProp\' has a user defined getter (property should be marked \'atomic\' if this is intended) [-Wcustom-atomic-properties]","clang/test/SemaObjC/custom-atomic-property.m:9:2: warning: atomic by default property \'myProp\' has a user defined setter (property should be marked \'atomic\' if this is intended) [-Wcustom-atomic-properties]"}
["clang/test/SemaObjC/custom-atomic-property.m"]={"clang/test/SemaObjC/custom-atomic-property.m:8:2: warning: atomic by default property \'myProp\' has a user defined getter (property should be marked \'atomic\' if this is intended) [-Wcustom-atomic-properties]","clang/test/SemaObjC/custom-atomic-property.m:9:2: warning: atomic by default property \'myProp\' has a user defined setter (property should be marked \'atomic\' if this is intended) [-Wcustom-atomic-properties]"}
}
}
},
},
["warn_defaulted_comparison_deleted"]={
["warn_defaulted_comparison_deleted"]={
[j]={"defaulted-function-deleted"},
[k]={"defaulted-function-deleted"},
[i]="defaulted-function-deleted",
[j]="defaulted-function-deleted",
[c]={{nil,z,"explicitly defaulted %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator is implicitly deleted"}},
[c]={{nil,q,"warn_defaulted_comparison_deleted"}},
[d]=g,
[d]={{nil,q,"explicitly defaulted %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator is implicitly deleted"}},
[e]="explicitly defaulted (?:equality|three\\-way|equality|relational) comparison operator is implicitly deleted",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdefaulted\\-function\\-deleted[^\\]]*\\]",
[g]="explicitly defaulted (?:equality|three\\-way|equality|relational) comparison operator is implicitly deleted",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdefaulted\\-function\\-deleted[^\\]]*\\]",
[a]={"5253d9138eb3",1573070592,"[c++20] Determine whether a defaulted comparison should be deleted or","[c++20] Determine whether a defaulted comparison should be deleted or\nconstexpr."},
[b]={{nil,q,m}},
[h]={{C,8913,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  // If we want to delete the function, then do so; there\'s nothing else to\n  // check in that case.\n  if (Info.Deleted) {\n    // ...\n    if (!inTemplateInstantiation() && !FD->isImplicit()) {\n      Diag(FD->getLocation(), diag::warn_defaulted_comparison_deleted) << (int)DCK;"}},
[f]={"5253d9138eb3",1573070592,"[c++20] Determine whether a defaulted comparison should be deleted or","[c++20] Determine whether a defaulted comparison should be deleted or\nconstexpr."},
[k]={
[h]={{L,8913,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  // If we want to delete the function, then do so; there\'s nothing else to\n  // check in that case.\n  if (Info.Deleted) {\n    // ...\n    if (!inTemplateInstantiation() && !FD->isImplicit()) {\n      Diag(FD->getLocation(), diag::warn_defaulted_comparison_deleted) << (int)DCK;"}},
[l]={
["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:7:8: warning: explicitly defaulted equality comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:8:8: warning: explicitly defaulted three-way comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:45:8: warning: explicitly defaulted equality comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:46:8: warning: explicitly defaulted relational comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:56:8: warning: explicitly defaulted equality comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:57:8: warning: explicitly defaulted three-way comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:79:8: warning: explicitly defaulted equality comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:80:8: warning: explicitly defaulted three-way comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:101:8: warning: explicitly defaulted equality comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:102:8: warning: explicitly defaulted three-way comparison operator is implicitly deleted [-Wdefaulted-function-deleted]"}
["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:7:8: warning: explicitly defaulted equality comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:8:8: warning: explicitly defaulted three-way comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:45:8: warning: explicitly defaulted equality comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:46:8: warning: explicitly defaulted relational comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:56:8: warning: explicitly defaulted equality comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:57:8: warning: explicitly defaulted three-way comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:79:8: warning: explicitly defaulted equality comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:80:8: warning: explicitly defaulted three-way comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:101:8: warning: explicitly defaulted equality comparison operator is implicitly deleted [-Wdefaulted-function-deleted]","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:102:8: warning: explicitly defaulted three-way comparison operator is implicitly deleted [-Wdefaulted-function-deleted]"}
}
}
},
},
["warn_defaulted_method_deleted"]={
["warn_defaulted_method_deleted"]={
[j]={"defaulted-function-deleted"},
[k]={"defaulted-function-deleted"},
[i]="defaulted-function-deleted",
[j]="defaulted-function-deleted",
[c]={{nil,ob,"explicitly defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 is implicitly deleted"}},
[c]={{nil,B,"warn_defaulted_method_deleted"}},
[d]=g,
[d]={{nil,B,"explicitly defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 is implicitly deleted"}},
[e]="explicitly defaulted (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) is implicitly deleted",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdefaulted\\-function\\-deleted[^\\]]*\\]",
[g]="explicitly defaulted (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) is implicitly deleted",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdefaulted\\-function\\-deleted[^\\]]*\\]",
[a]={"9b2c5e7c44fd",1538097403,"[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only","[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only\nrender the function deleted instead of rendering the program ill-formed.\n\nThis change also adds an enabled-by-default warning for the case where\nan explicitly-defaulted special member function of a non-template class\nis implicitly deleted by the type checking rules. (This fires either due\nto this language change or due to pre-C++20 reasons for the member being\nimplicitly deleted). I\'ve tested this on a large codebase and found only\nbugs (where the program means something that\'s clearly different from\nwhat the programmer intended), so this is enabled by default, but we\nshould revisit this if there are problems with this being enabled by\ndefault.\n\nllvm-svn: 343285"},
[b]={{nil,B,m}},
[h]={{C,7772,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n      // ...\n      if (!inTemplateInstantiation() && !HadError) {\n        Diag(MD->getLocation(), diag::warn_defaulted_method_deleted) << CSM;"}},
[f]={"9b2c5e7c44fd",1538097403,"[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only","[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only\nrender the function deleted instead of rendering the program ill-formed.\n\nThis change also adds an enabled-by-default warning for the case where\nan explicitly-defaulted special member function of a non-template class\nis implicitly deleted by the type checking rules. (This fires either due\nto this language change or due to pre-C++20 reasons for the member being\nimplicitly deleted). I\'ve tested this on a large codebase and found only\nbugs (where the program means something that\'s clearly different from\nwhat the programmer intended), so this is enabled by default, but we\nshould revisit this if there are problems with this being enabled by\ndefault.\n\nllvm-svn: 343285"},
[k]={
[h]={{L,7772,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n      // ...\n      if (!inTemplateInstantiation() && !HadError) {\n        Diag(MD->getLocation(), diag::warn_defaulted_method_deleted) << CSM;"}},
[l]={
["clang/test/CXX/class.derived/class.abstract/p16.cpp"]={"clang/test/CXX/class.derived/class.abstract/p16.cpp:46:6: warning: explicitly defaulted move assignment operator is implicitly deleted [-Wdefaulted-function-deleted]"}
["clang/test/CXX/class.derived/class.abstract/p16.cpp"]={"clang/test/CXX/class.derived/class.abstract/p16.cpp:46:6: warning: explicitly defaulted move assignment operator is implicitly deleted [-Wdefaulted-function-deleted]"}
}
}
},
},
["warn_defined_in_function_type_macro"]={
["warn_defined_in_function_type_macro"]={
[j]={"expansion-to-defined",id},
[k]={"expansion-to-defined",hd},
[i]="expansion-to-defined",
[j]="expansion-to-defined",
[c]="macro expansion producing \'defined\' has undefined behavior",
[c]="warn_defined_in_function_type_macro",
[d]=g,
[d]="macro expansion producing \'defined\' has undefined behavior",
[e]="macro expansion producing \'defined\' has undefined behavior",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wexpansion\\-to\\-defined[^\\]]*\\]",
[g]="macro expansion producing \'defined\' has undefined behavior",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wexpansion\\-to\\-defined[^\\]]*\\]",
[a]={"b2348f4ced63",1453216531,"Add -Wexpansion-to-undefined: warn when using `defined` in a macro definition.","Add -Wexpansion-to-undefined: warn when using `defined` in a macro definition.\n\n[cpp.cond]p4:\n  Prior to evaluation, macro invocations in the list of preprocessing\n  tokens that will become the controlling constant expression are replaced\n  (except for those macro names modified by the \'defined\' unary operator),\n  just as in normal text. If the token \'defined\' is generated as a result\n  of this replacement process or use of the \'defined\' unary operator does\n  not match one of the two specified forms prior to macro replacement, the\n  behavior is undefined.\n\nThis isn\'t an idle threat, consider this program:\n  #define FOO\n  #define BAR defined(FOO)\n  #if BAR\n  ...\n  #else\n  ...\n  #endif\nclang and gcc will pick the #if branch while Visual Studio will take the\n#else branch.  Emit a warning about this undefined behavior.\n\nOne problem is that this also applies to function-like macros. While the\nexample above can be written like\n\n    #if defined(FOO) && defined(BAR)\n    #defined HAVE_FOO 1\n    #else\n    #define HAVE_FOO 0\n    #endif\n\nthere is no easy way to rewrite a function-like macro like `#define FOO(x)\n(defined __foo_##x && __foo_##x)`.  Function-like macros like this are used in\npractice, and compilers seem to not have differing behavior in that case. So\nthis a default-on warning only for object-like macros. For function-like\nmacros, it is an extension warning that only shows up with `-pedantic`.\n(But it\'s undefined behavior in both cases.)\n\nllvm-svn: 258128"},
[b]=T,
[f]={"b2348f4ced63",1453216531,"Add -Wexpansion-to-undefined: warn when using `defined` in a macro definition.","Add -Wexpansion-to-undefined: warn when using `defined` in a macro definition.\n\n[cpp.cond]p4:\n  Prior to evaluation, macro invocations in the list of preprocessing\n  tokens that will become the controlling constant expression are replaced\n  (except for those macro names modified by the \'defined\' unary operator),\n  just as in normal text. If the token \'defined\' is generated as a result\n  of this replacement process or use of the \'defined\' unary operator does\n  not match one of the two specified forms prior to macro replacement, the\n  behavior is undefined.\n\nThis isn\'t an idle threat, consider this program:\n  #define FOO\n  #define BAR defined(FOO)\n  #if BAR\n  ...\n  #else\n  ...\n  #endif\nclang and gcc will pick the #if branch while Visual Studio will take the\n#else branch.  Emit a warning about this undefined behavior.\n\nOne problem is that this also applies to function-like macros. While the\nexample above can be written like\n\n    #if defined(FOO) && defined(BAR)\n    #defined HAVE_FOO 1\n    #else\n    #define HAVE_FOO 0\n    #endif\n\nthere is no easy way to rewrite a function-like macro like `#define FOO(x)\n(defined __foo_##x && __foo_##x)`.  Function-like macros like this are used in\npractice, and compilers seem to not have differing behavior in that case. So\nthis a default-on warning only for object-like macros. For function-like\nmacros, it is an extension warning that only shows up with `-pedantic`.\n(But it\'s undefined behavior in both cases.)\n\nllvm-svn: 258128"},
[h]={{"clang/lib/Lex/PPExpressions.cpp",207,"/// EvaluateDefined - Process a \'defined(sym)\' expression.\nstatic bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  // [cpp.cond]p4:\n  //  Prior to evaluation, macro invocations in the list of preprocessing\n  //  tokens that will become the controlling constant expression are replaced\n  //  (except for those macro names modified by the \'defined\' unary operator),\n  //  just as in normal text. If the token \'defined\' is generated as a result\n  //  of this replacement process or use of the \'defined\' unary operator does\n  //  not match one of the two specified forms prior to macro replacement, the\n  //  behavior is undefined.\n  // This isn\'t an idle threat, consider this program:\n  //  #define FOO\n  //  #define BAR defined(FOO)\n  //  #if BAR\n  //  ...\n  //  #else\n  //  ...\n  //  #endif\n  // clang and gcc will pick the #if branch while Visual Studio will take the\n  // #else branch.  Emit a warning about this undefined behavior.\n  if (beginLoc.isMacroID()) {\n    // ...\n    // For object-type macros, it\'s easy to replace\n    //  #define FOO defined(BAR)\n    // with\n    //  #if defined(BAR)\n    //  #define FOO 1\n    //  #else\n    //  #define FOO 0\n    //  #endif\n    // and doing so makes sense since compilers handle this differently in\n    // practice (see example further up).  But for function-type macros,\n    // there is no good way to write\n    //  # define FOO(x) (defined(M_ ## x) && M_ ## x)\n    // in a different way, and compilers seem to agree on how to behave here.\n    // So warn by default on object-type macros, but only warn in -pedantic\n    // mode on function-type macros.\n    if (IsFunctionTypeMacro)\n      PP.Diag(beginLoc, diag::warn_defined_in_function_type_macro);"}},
[h]={{"clang/lib/Lex/PPExpressions.cpp",207,"/// EvaluateDefined - Process a \'defined(sym)\' expression.\nstatic bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  // [cpp.cond]p4:\n  //  Prior to evaluation, macro invocations in the list of preprocessing\n  //  tokens that will become the controlling constant expression are replaced\n  //  (except for those macro names modified by the \'defined\' unary operator),\n  //  just as in normal text. If the token \'defined\' is generated as a result\n  //  of this replacement process or use of the \'defined\' unary operator does\n  //  not match one of the two specified forms prior to macro replacement, the\n  //  behavior is undefined.\n  // This isn\'t an idle threat, consider this program:\n  //  #define FOO\n  //  #define BAR defined(FOO)\n  //  #if BAR\n  //  ...\n  //  #else\n  //  ...\n  //  #endif\n  // clang and gcc will pick the #if branch while Visual Studio will take the\n  // #else branch.  Emit a warning about this undefined behavior.\n  if (beginLoc.isMacroID()) {\n    // ...\n    // For object-type macros, it\'s easy to replace\n    //  #define FOO defined(BAR)\n    // with\n    //  #if defined(BAR)\n    //  #define FOO 1\n    //  #else\n    //  #define FOO 0\n    //  #endif\n    // and doing so makes sense since compilers handle this differently in\n    // practice (see example further up).  But for function-type macros,\n    // there is no good way to write\n    //  # define FOO(x) (defined(M_ ## x) && M_ ## x)\n    // in a different way, and compilers seem to agree on how to behave here.\n    // So warn by default on object-type macros, but only warn in -pedantic\n    // mode on function-type macros.\n    if (IsFunctionTypeMacro)\n      PP.Diag(beginLoc, diag::warn_defined_in_function_type_macro);"}},
[k]={
[l]={
["clang/test/Preprocessor/expr_define_expansion.c"]={"clang/test/Preprocessor/expr_define_expansion.c:10:5: warning: macro expansion producing \'defined\' has undefined behavior [-Wexpansion-to-defined]","clang/test/Preprocessor/expr_define_expansion.c:21:5: warning: macro expansion producing \'defined\' has undefined behavior [-Wexpansion-to-defined]"}
["clang/test/Preprocessor/expr_define_expansion.c"]={"clang/test/Preprocessor/expr_define_expansion.c:10:5: warning: macro expansion producing \'defined\' has undefined behavior [-Wexpansion-to-defined]","clang/test/Preprocessor/expr_define_expansion.c:21:5: warning: macro expansion producing \'defined\' has undefined behavior [-Wexpansion-to-defined]"}
}
}
},
},
["warn_defined_in_object_type_macro"]={
["warn_defined_in_object_type_macro"]={
[j]={"expansion-to-defined"},
[k]={"expansion-to-defined"},
[i]="expansion-to-defined",
[j]="expansion-to-defined",
[c]="macro expansion producing \'defined\' has undefined behavior",
[c]="warn_defined_in_object_type_macro",
[d]=g,
[d]="macro expansion producing \'defined\' has undefined behavior",
[e]="macro expansion producing \'defined\' has undefined behavior",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wexpansion\\-to\\-defined[^\\]]*\\]",
[g]="macro expansion producing \'defined\' has undefined behavior",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wexpansion\\-to\\-defined[^\\]]*\\]",
[a]={"b2348f4ced63",1453216531,"Add -Wexpansion-to-undefined: warn when using `defined` in a macro definition.","Add -Wexpansion-to-undefined: warn when using `defined` in a macro definition.\n\n[cpp.cond]p4:\n  Prior to evaluation, macro invocations in the list of preprocessing\n  tokens that will become the controlling constant expression are replaced\n  (except for those macro names modified by the \'defined\' unary operator),\n  just as in normal text. If the token \'defined\' is generated as a result\n  of this replacement process or use of the \'defined\' unary operator does\n  not match one of the two specified forms prior to macro replacement, the\n  behavior is undefined.\n\nThis isn\'t an idle threat, consider this program:\n  #define FOO\n  #define BAR defined(FOO)\n  #if BAR\n  ...\n  #else\n  ...\n  #endif\nclang and gcc will pick the #if branch while Visual Studio will take the\n#else branch.  Emit a warning about this undefined behavior.\n\nOne problem is that this also applies to function-like macros. While the\nexample above can be written like\n\n    #if defined(FOO) && defined(BAR)\n    #defined HAVE_FOO 1\n    #else\n    #define HAVE_FOO 0\n    #endif\n\nthere is no easy way to rewrite a function-like macro like `#define FOO(x)\n(defined __foo_##x && __foo_##x)`.  Function-like macros like this are used in\npractice, and compilers seem to not have differing behavior in that case. So\nthis a default-on warning only for object-like macros. For function-like\nmacros, it is an extension warning that only shows up with `-pedantic`.\n(But it\'s undefined behavior in both cases.)\n\nllvm-svn: 258128"},
[b]=T,
[f]={"b2348f4ced63",1453216531,"Add -Wexpansion-to-undefined: warn when using `defined` in a macro definition.","Add -Wexpansion-to-undefined: warn when using `defined` in a macro definition.\n\n[cpp.cond]p4:\n  Prior to evaluation, macro invocations in the list of preprocessing\n  tokens that will become the controlling constant expression are replaced\n  (except for those macro names modified by the \'defined\' unary operator),\n  just as in normal text. If the token \'defined\' is generated as a result\n  of this replacement process or use of the \'defined\' unary operator does\n  not match one of the two specified forms prior to macro replacement, the\n  behavior is undefined.\n\nThis isn\'t an idle threat, consider this program:\n  #define FOO\n  #define BAR defined(FOO)\n  #if BAR\n  ...\n  #else\n  ...\n  #endif\nclang and gcc will pick the #if branch while Visual Studio will take the\n#else branch.  Emit a warning about this undefined behavior.\n\nOne problem is that this also applies to function-like macros. While the\nexample above can be written like\n\n    #if defined(FOO) && defined(BAR)\n    #defined HAVE_FOO 1\n    #else\n    #define HAVE_FOO 0\n    #endif\n\nthere is no easy way to rewrite a function-like macro like `#define FOO(x)\n(defined __foo_##x && __foo_##x)`.  Function-like macros like this are used in\npractice, and compilers seem to not have differing behavior in that case. So\nthis a default-on warning only for object-like macros. For function-like\nmacros, it is an extension warning that only shows up with `-pedantic`.\n(But it\'s undefined behavior in both cases.)\n\nllvm-svn: 258128"},
[h]={{"clang/lib/Lex/PPExpressions.cpp",209,"/// EvaluateDefined - Process a \'defined(sym)\' expression.\nstatic bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  // [cpp.cond]p4:\n  //  Prior to evaluation, macro invocations in the list of preprocessing\n  //  tokens that will become the controlling constant expression are replaced\n  //  (except for those macro names modified by the \'defined\' unary operator),\n  //  just as in normal text. If the token \'defined\' is generated as a result\n  //  of this replacement process or use of the \'defined\' unary operator does\n  //  not match one of the two specified forms prior to macro replacement, the\n  //  behavior is undefined.\n  // This isn\'t an idle threat, consider this program:\n  //  #define FOO\n  //  #define BAR defined(FOO)\n  //  #if BAR\n  //  ...\n  //  #else\n  //  ...\n  //  #endif\n  // clang and gcc will pick the #if branch while Visual Studio will take the\n  // #else branch.  Emit a warning about this undefined behavior.\n  if (beginLoc.isMacroID()) {\n    // ...\n    // For object-type macros, it\'s easy to replace\n    //  #define FOO defined(BAR)\n    // with\n    //  #if defined(BAR)\n    //  #define FOO 1\n    //  #else\n    //  #define FOO 0\n    //  #endif\n    // and doing so makes sense since compilers handle this differently in\n    // practice (see example further up).  But for function-type macros,\n    // there is no good way to write\n    //  # define FOO(x) (defined(M_ ## x) && M_ ## x)\n    // in a different way, and compilers seem to agree on how to behave here.\n    // So warn by default on object-type macros, but only warn in -pedantic\n    // mode on function-type macros.\n    if (IsFunctionTypeMacro)\n    // ...\n    else\n      PP.Diag(beginLoc, diag::warn_defined_in_object_type_macro);"}}
[h]={{"clang/lib/Lex/PPExpressions.cpp",209,"/// EvaluateDefined - Process a \'defined(sym)\' expression.\nstatic bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  // [cpp.cond]p4:\n  //  Prior to evaluation, macro invocations in the list of preprocessing\n  //  tokens that will become the controlling constant expression are replaced\n  //  (except for those macro names modified by the \'defined\' unary operator),\n  //  just as in normal text. If the token \'defined\' is generated as a result\n  //  of this replacement process or use of the \'defined\' unary operator does\n  //  not match one of the two specified forms prior to macro replacement, the\n  //  behavior is undefined.\n  // This isn\'t an idle threat, consider this program:\n  //  #define FOO\n  //  #define BAR defined(FOO)\n  //  #if BAR\n  //  ...\n  //  #else\n  //  ...\n  //  #endif\n  // clang and gcc will pick the #if branch while Visual Studio will take the\n  // #else branch.  Emit a warning about this undefined behavior.\n  if (beginLoc.isMacroID()) {\n    // ...\n    // For object-type macros, it\'s easy to replace\n    //  #define FOO defined(BAR)\n    // with\n    //  #if defined(BAR)\n    //  #define FOO 1\n    //  #else\n    //  #define FOO 0\n    //  #endif\n    // and doing so makes sense since compilers handle this differently in\n    // practice (see example further up).  But for function-type macros,\n    // there is no good way to write\n    //  # define FOO(x) (defined(M_ ## x) && M_ ## x)\n    // in a different way, and compilers seem to agree on how to behave here.\n    // So warn by default on object-type macros, but only warn in -pedantic\n    // mode on function-type macros.\n    if (IsFunctionTypeMacro)\n    // ...\n    else\n      PP.Diag(beginLoc, diag::warn_defined_in_object_type_macro);"}}
},
},
["warn_delegating_ctor_cycle"]={
["warn_delegating_ctor_cycle"]={
[j]={"delegating-ctor-cycles"},
[k]={"delegating-ctor-cycles"},
[i]="delegating-ctor-cycles",
[j]="delegating-ctor-cycles",
[c]="constructor for %0 creates a delegation cycle",
[c]="warn_delegating_ctor_cycle",
[d]="(?:error|warning|fatal error)\\: ",
[d]="constructor for %0 creates a delegation cycle",
[e]="constructor for (.*?) creates a delegation cycle",
[e]="(?:error|warning|fatal error)\\: ",
[f]=" \\[[^\\]]*\\-Wdelegating\\-ctor\\-cycles[^\\]]*\\]",
[g]="constructor for (.*?) creates a delegation cycle",
[b]=l,
[a]=" \\[[^\\]]*\\-Wdelegating\\-ctor\\-cycles[^\\]]*\\]",
[a]={"e262299b72ea",1304553947,"Change cycle detection to be based off of a warning flag.","Change cycle detection to be based off of a warning flag.\n\nllvm-svn: 130898"},
[b]=m,
[h]={{"clang/lib/Sema/Sema.cpp",1195,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  if (LangOpts.CPlusPlus11 && !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation()))"},{C,18539,"static void DelegatingCycleHelper(CXXConstructorDecl *Ctor, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Valid, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Invalid, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Current, Sema &S) {\n  // ...\n  // We know that beyond here, we aren\'t chaining into a cycle.\n  if (!Target || !Target->isDelegatingConstructor() || Target->isInvalidDecl() || Valid.count(TCanonical)) {\n  // ...\n  } else if (TCanonical == Canonical || Invalid.count(TCanonical) || Current.count(TCanonical)) {\n    // If we haven\'t diagnosed this cycle yet, do so now.\n    if (!Invalid.count(TCanonical)) {\n      S.Diag((*Ctor->init_begin())->getSourceLocation(), diag::warn_delegating_ctor_cycle) << Ctor;"}},
[f]={"e262299b72ea",1304553947,"Change cycle detection to be based off of a warning flag.","Change cycle detection to be based off of a warning flag.\n\nllvm-svn: 130898"},
[k]={
[h]={{"clang/lib/Sema/Sema.cpp",1195,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  if (LangOpts.CPlusPlus11 && !Diags.isIgnored(diag::warn_delegating_ctor_cycle, SourceLocation()))"},{L,18539,"static void DelegatingCycleHelper(CXXConstructorDecl *Ctor, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Valid, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Invalid, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Current, Sema &S) {\n  // ...\n  // We know that beyond here, we aren\'t chaining into a cycle.\n  if (!Target || !Target->isDelegatingConstructor() || Target->isInvalidDecl() || Valid.count(TCanonical)) {\n  // ...\n  } else if (TCanonical == Canonical || Invalid.count(TCanonical) || Current.count(TCanonical)) {\n    // If we haven\'t diagnosed this cycle yet, do so now.\n    if (!Invalid.count(TCanonical)) {\n      S.Diag((*Ctor->init_begin())->getSourceLocation(), diag::warn_delegating_ctor_cycle) << Ctor;"}},
[l]={
["clang/test/SemaCXX/cxx0x-delegating-ctors.cpp"]={"clang/test/SemaCXX/cxx0x-delegating-ctors.cpp:25:19: error: constructor for \'foo\' creates a delegation cycle [-Wdelegating-ctor-cycles]","clang/test/SemaCXX/cxx0x-delegating-ctors.cpp:32:29: error: constructor for \'foo\' creates a delegation cycle [-Wdelegating-ctor-cycles]"}
["clang/test/SemaCXX/cxx0x-delegating-ctors.cpp"]={"clang/test/SemaCXX/cxx0x-delegating-ctors.cpp:25:19: error: constructor for \'foo\' creates a delegation cycle [-Wdelegating-ctor-cycles]","clang/test/SemaCXX/cxx0x-delegating-ctors.cpp:32:29: error: constructor for \'foo\' creates a delegation cycle [-Wdelegating-ctor-cycles]"}
}
}
},
},
["warn_delete_abstract_non_virtual_dtor"]={
["warn_delete_abstract_non_virtual_dtor"]={
[j]={B,H,"delete-abstract-non-virtual-dtor","delete-non-virtual-dtor",N},
[k]={K,O,"delete-abstract-non-virtual-dtor","delete-non-virtual-dtor",V},
[i]="delete-abstract-non-virtual-dtor",
[j]="delete-abstract-non-virtual-dtor",
[c]="%select{delete|destructor}0 called on %1 that is abstract but has non-virtual destructor",
[c]="warn_delete_abstract_non_virtual_dtor",
[d]=g,
[d]="%select{delete|destructor}0 called on %1 that is abstract but has non-virtual destructor",
[e]="(?:delete|destructor) called on (.*?) that is abstract but has non\\-virtual destructor",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdelete\\-abstract\\-non\\-virtual\\-dtor[^\\]]*\\]",
[g]="(?:delete|destructor) called on (.*?) that is abstract but has non\\-virtual destructor",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdelete\\-abstract\\-non\\-virtual\\-dtor[^\\]]*\\]",
[a]={"1b71a22b2832",1311722844,"Re-fix r136172 so it isn\'t an error; apparently, some people are fond of their undefined behavior.","Re-fix r136172 so it isn\'t an error; apparently, some people are fond of their undefined behavior.\n\nllvm-svn: 136183"},
[b]=m,
[f]={"1b71a22b2832",1311722844,"Re-fix r136172 so it isn\'t an error; apparently, some people are fond of their undefined behavior.","Re-fix r136172 so it isn\'t an error; apparently, some people are fond of their undefined behavior.\n\nllvm-svn: 136183"},
[h]={{bc,3968,"void Sema::CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc, bool IsDelete, bool CallCanBeVirtual, bool WarnOnNonAbstractTypes, SourceLocation DtorLoc) {\n  // ...\n  if (PointeeRD->isAbstract()) {\n    // ...\n    Diag(Loc, diag::warn_delete_abstract_non_virtual_dtor) << (IsDelete ? 0 : 1) << ClassType;"}},
[h]={{bc,3968,"void Sema::CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc, bool IsDelete, bool CallCanBeVirtual, bool WarnOnNonAbstractTypes, SourceLocation DtorLoc) {\n  // ...\n  if (PointeeRD->isAbstract()) {\n    // ...\n    Diag(Loc, diag::warn_delete_abstract_non_virtual_dtor) << (IsDelete ? 0 : 1) << ClassType;"}},
[k]={
[l]={
["clang/test/SemaCXX/delete-non-virtual-dtor.cpp"]={"clang/test/SemaCXX/delete-non-virtual-dtor.cpp:18:19: warning: delete called on \'S1\' that is abstract but has non-virtual destructor [-Wdelete-abstract-non-virtual-dtor]"}
["clang/test/SemaCXX/delete-non-virtual-dtor.cpp"]={"clang/test/SemaCXX/delete-non-virtual-dtor.cpp:18:19: warning: delete called on \'S1\' that is abstract but has non-virtual destructor [-Wdelete-abstract-non-virtual-dtor]"}
}
}
},
},
["warn_delete_array_type"]={
["warn_delete_array_type"]={
[c]="\'delete\' applied to a pointer-to-array type %0 treated as \'delete[]\'",
[c]="warn_delete_array_type",
[d]=g,
[d]="\'delete\' applied to a pointer-to-array type %0 treated as \'delete[]\'",
[e]="\'delete\' applied to a pointer\\-to\\-array type (.*?) treated as \'delete\\[\\]\'",
[e]=i,
[f]=Gb,
[g]="\'delete\' applied to a pointer\\-to\\-array type (.*?) treated as \'delete\\[\\]\'",
[b]=l,
[a]=Ib,
[a]={"14ec9f674a56",1284408954,"When applying \'delete\' on a pointer-to-array type match GCC and EDG behavior and treat it as \'delete...","When applying \'delete\' on a pointer-to-array type match GCC and EDG behavior and treat it as \'delete[]\'.\nAlso offer a fix-it hint adding \'[]\'.\n\nllvm-svn: 113778"},
[b]=m,
[f]={"14ec9f674a56",1284408954,"When applying \'delete\' on a pointer-to-array type match GCC and EDG behavior and treat it as \'delete...","When applying \'delete\' on a pointer-to-array type match GCC and EDG behavior and treat it as \'delete[]\'.\nAlso offer a fix-it hint adding \'[]\'.\n\nllvm-svn: 113778"},
[h]={{bc,3703,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  // ...\n  if (!Ex.get()->isTypeDependent()) {\n    // ...\n    if (Pointee->isArrayType() && !ArrayForm) {\n      Diag(StartLoc, diag::warn_delete_array_type) << Type << Ex.get()->getSourceRange() << FixItHint::CreateInsertion(getLocForEndOfToken(StartLoc), \"[]\");"}},
[h]={{bc,3703,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  // ...\n  if (!Ex.get()->isTypeDependent()) {\n    // ...\n    if (Pointee->isArrayType() && !ArrayForm) {\n      Diag(StartLoc, diag::warn_delete_array_type) << Type << Ex.get()->getSourceRange() << FixItHint::CreateInsertion(getLocForEndOfToken(StartLoc), \"[]\");"}},
[k]={
[l]={
["clang/test/CodeGenCXX/delete.cpp"]={"clang/test/CodeGenCXX/delete.cpp:113:5: warning: \'delete\' applied to a pointer-to-array type \'int (*)[20]\' treated as \'delete[]\'"}
["clang/test/CodeGenCXX/delete.cpp"]={"clang/test/CodeGenCXX/delete.cpp:113:5: warning: \'delete\' applied to a pointer-to-array type \'int (*)[20]\' treated as \'delete[]\'"}
}
}
},
},
["warn_delete_incomplete"]={
["warn_delete_incomplete"]={
[j]={"delete-incomplete"},
[k]={"delete-incomplete"},
[i]="delete-incomplete",
[j]="delete-incomplete",
[c]="deleting pointer to incomplete type %0 may cause undefined behavior",
[c]="warn_delete_incomplete",
[d]=g,
[d]="deleting pointer to incomplete type %0 may cause undefined behavior",
[e]="deleting pointer to incomplete type (.*?) may cause undefined behavior",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdelete\\-incomplete[^\\]]*\\]",
[g]="deleting pointer to incomplete type (.*?) may cause undefined behavior",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdelete\\-incomplete[^\\]]*\\]",
[a]={Ub,1237025389,Xb,Wb},
[b]=m,
[f]={Yb,1237025389,Zb,ac},
[h]={{bc,3696,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  // ...\n  if (!Ex.get()->isTypeDependent()) {\n    // ...\n    if (Pointee->isVoidType() && !isSFINAEContext()) {\n    // ...\n    } else if (Pointee->isFunctionType() || Pointee->isVoidType() || Pointee->isSizelessType()) {\n    // ...\n    } else if (!Pointee->isDependentType()) {\n      // ...\n      if (!RequireCompleteType(StartLoc, Pointee, diag::warn_delete_incomplete, Ex.get())) {"}},
[h]={{bc,3696,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  // ...\n  if (!Ex.get()->isTypeDependent()) {\n    // ...\n    if (Pointee->isVoidType() && !isSFINAEContext()) {\n    // ...\n    } else if (Pointee->isFunctionType() || Pointee->isVoidType() || Pointee->isSizelessType()) {\n    // ...\n    } else if (!Pointee->isDependentType()) {\n      // ...\n      if (!RequireCompleteType(StartLoc, Pointee, diag::warn_delete_incomplete, Ex.get())) {"}},
[k]={
[l]={
["clang/test/CXX/expr/expr.unary/expr.delete/p5.cpp"]={"clang/test/CXX/expr/expr.unary/expr.delete/p5.cpp:9:18: warning: deleting pointer to incomplete type \'T0\' may cause undefined behavior [-Wdelete-incomplete]","clang/test/CXX/expr/expr.unary/expr.delete/p5.cpp:14:31: warning: deleting pointer to incomplete type \'T1_B\' may cause undefined behavior [-Wdelete-incomplete]"}
["clang/test/CXX/expr/expr.unary/expr.delete/p5.cpp"]={"clang/test/CXX/expr/expr.unary/expr.delete/p5.cpp:9:18: warning: deleting pointer to incomplete type \'T0\' may cause undefined behavior [-Wdelete-incomplete]","clang/test/CXX/expr/expr.unary/expr.delete/p5.cpp:14:31: warning: deleting pointer to incomplete type \'T1_B\' may cause undefined behavior [-Wdelete-incomplete]"}
}
}
},
},
["warn_delete_non_virtual_dtor"]={
["warn_delete_non_virtual_dtor"]={
[j]={B,H,"delete-non-abstract-non-virtual-dtor","delete-non-virtual-dtor",N},
[k]={K,O,"delete-non-abstract-non-virtual-dtor","delete-non-virtual-dtor",V},
[i]="delete-non-abstract-non-virtual-dtor",
[j]="delete-non-abstract-non-virtual-dtor",
[c]="%select{delete|destructor}0 called on non-final %1 that has virtual functions but non-virtual destructor",
[c]="warn_delete_non_virtual_dtor",
[d]=g,
[d]="%select{delete|destructor}0 called on non-final %1 that has virtual functions but non-virtual destructor",
[e]="(?:delete|destructor) called on non\\-final (.*?) that has virtual functions but non\\-virtual destructor",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdelete\\-non\\-abstract\\-non\\-virtual\\-dtor[^\\]]*\\]",
[g]="(?:delete|destructor) called on non\\-final (.*?) that has virtual functions but non\\-virtual destructor",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdelete\\-non\\-abstract\\-non\\-virtual\\-dtor[^\\]]*\\]",
[a]={"8bd428574c71",1306266806,"Add new warning that warns when invoking \'delete\' on a polymorphic, non-final, class without a virtu...","Add new warning that warns when invoking \'delete\' on a polymorphic, non-final, class without a virtual destructor.\n\nPatch by Matthieu Monrocq!\n\nllvm-svn: 131989"},
[b]=m,
[f]={"8bd428574c71",1306266806,"Add new warning that warns when invoking \'delete\' on a polymorphic, non-final, class without a virtu...","Add new warning that warns when invoking \'delete\' on a polymorphic, non-final, class without a virtual destructor.\n\nPatch by Matthieu Monrocq!\n\nllvm-svn: 131989"},
[h]={{bc,3973,"void Sema::CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc, bool IsDelete, bool CallCanBeVirtual, bool WarnOnNonAbstractTypes, SourceLocation DtorLoc) {\n  // ...\n  if (PointeeRD->isAbstract()) {\n  // ...\n  } else if (WarnOnNonAbstractTypes) {\n    // ...\n    Diag(Loc, diag::warn_delete_non_virtual_dtor) << (IsDelete ? 0 : 1) << ClassType;"}},
[h]={{bc,3973,"void Sema::CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc, bool IsDelete, bool CallCanBeVirtual, bool WarnOnNonAbstractTypes, SourceLocation DtorLoc) {\n  // ...\n  if (PointeeRD->isAbstract()) {\n  // ...\n  } else if (WarnOnNonAbstractTypes) {\n    // ...\n    Diag(Loc, diag::warn_delete_non_virtual_dtor) << (IsDelete ? 0 : 1) << ClassType;"}},
[k]={
[l]={
["clang/test/SemaCXX/delete-non-virtual-dtor.cpp"]={"clang/test/SemaCXX/delete-non-virtual-dtor.cpp:27:19: warning: delete called on non-final \'S2\' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]"}
["clang/test/SemaCXX/delete-non-virtual-dtor.cpp"]={"clang/test/SemaCXX/delete-non-virtual-dtor.cpp:27:19: warning: delete called on non-final \'S2\' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]"}
}
}
},
},
["warn_delimited_ucn_empty"]={
["warn_delimited_ucn_empty"]={
[j]={"unicode"},
[k]={"unicode"},
[i]="unicode",
[j]="unicode",
[c]={{nil,kb,"empty delimited universal character name; treating as \'\\\' \'%0\' \'{\' \'}\'"},{Q,Q,"empty delimited universal character name; treating as \'\\\' \'u\' \'{\' \'}\'"}},
[c]={{nil,w,"warn_delimited_ucn_empty"}},
[d]=g,
[d]={{nil,C,"empty delimited universal character name; treating as \'\\\' \'%0\' \'{\' \'}\'"},{w,w,"empty delimited universal character name; treating as \'\\\' \'u\' \'{\' \'}\'"}},
[e]="empty delimited universal character name; treating as \'\\\\\' \'(.*?)\' \'\\{\' \'\\}\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunicode[^\\]]*\\]",
[g]="empty delimited universal character name; treating as \'\\\\\' \'(.*?)\' \'\\{\' \'\\}\'",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wunicode[^\\]]*\\]",
[a]={Eb,1625925174,Fb,Hb},
[b]={{nil,w,T}},
[h]={{Ab,3326,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\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);"},{Ab,3411,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (!FoundEndDelimiter || Buffer.empty()) {\n    if (Diagnose)\n      Diag(SlashLoc, FoundEndDelimiter ? diag::warn_delimited_ucn_empty : diag::warn_delimited_ucn_incomplete) << StringRef(KindLoc, 1);"}},
[f]={Lb,1625925174,Kb,Jb},
[k]={
[h]={{Fb,3326,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\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);"},{Fb,3411,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (!FoundEndDelimiter || Buffer.empty()) {\n    if (Diagnose)\n      Diag(SlashLoc, FoundEndDelimiter ? diag::warn_delimited_ucn_empty : diag::warn_delimited_ucn_incomplete) << StringRef(KindLoc, 1);"}},
[l]={
["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:121:9: warning: empty delimited universal character name; treating as \'\\\' \'u\' \'{\' \'}\' [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:129:9: warning: empty delimited universal character name; treating as \'\\\' \'N\' \'{\' \'}\' [-Wunicode]"}
["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:121:9: warning: empty delimited universal character name; treating as \'\\\' \'u\' \'{\' \'}\' [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:129:9: warning: empty delimited universal character name; treating as \'\\\' \'N\' \'{\' \'}\' [-Wunicode]"}
}
}
},
},
["warn_delimited_ucn_incomplete"]={
["warn_delimited_ucn_incomplete"]={
[j]={"unicode"},
[k]={"unicode"},
[i]="unicode",
[j]="unicode",
[c]={{nil,kb,"incomplete delimited universal character name; treating as \'\\\' \'%0\' \'{\' identifier"},{Q,Q,"incomplete delimited universal character name; treating as \'\\\' \'u\' \'{\' identifier"}},
[c]={{nil,w,"warn_delimited_ucn_incomplete"}},
[d]=g,
[d]={{nil,C,"incomplete delimited universal character name; treating as \'\\\' \'%0\' \'{\' identifier"},{w,w,"incomplete delimited universal character name; treating as \'\\\' \'u\' \'{\' identifier"}},
[e]="incomplete delimited universal character name; treating as \'\\\\\' \'(.*?)\' \'\\{\' identifier",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunicode[^\\]]*\\]",
[g]="incomplete delimited universal character name; treating as \'\\\\\' \'(.*?)\' \'\\{\' identifier",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wunicode[^\\]]*\\]",
[a]={Eb,1625925174,Fb,Hb},
[b]={{nil,w,T}},
[h]={{Ab,3307,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  while (Count != NumHexDigits || Delimited) {\n    // ...\n    if (Value == -1U) {\n      // ...\n      if (Diagnose)\n        Diag(SlashLoc, diag::warn_delimited_ucn_incomplete) << StringRef(KindLoc, 1);"},{Ab,3412,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (!FoundEndDelimiter || Buffer.empty()) {\n    if (Diagnose)\n      Diag(SlashLoc, FoundEndDelimiter ? diag::warn_delimited_ucn_empty : diag::warn_delimited_ucn_incomplete) << StringRef(KindLoc, 1);"}},
[f]={Lb,1625925174,Kb,Jb},
[k]={
[h]={{Fb,3307,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  while (Count != NumHexDigits || Delimited) {\n    // ...\n    if (Value == -1U) {\n      // ...\n      if (Diagnose)\n        Diag(SlashLoc, diag::warn_delimited_ucn_incomplete) << StringRef(KindLoc, 1);"},{Fb,3412,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (!FoundEndDelimiter || Buffer.empty()) {\n    if (Diagnose)\n      Diag(SlashLoc, FoundEndDelimiter ? diag::warn_delimited_ucn_empty : diag::warn_delimited_ucn_incomplete) << StringRef(KindLoc, 1);"}},
[l]={
["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:124:9: warning: incomplete delimited universal character name; treating as \'\\\' \'u\' \'{\' identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:125:9: warning: incomplete delimited universal character name; treating as \'\\\' \'u\' \'{\' identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:126:9: warning: incomplete delimited universal character name; treating as \'\\\' \'N\' \'{\' identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:139:12: warning: incomplete delimited universal character name; treating as \'\\\' \'N\' \'{\' identifier [-Wunicode]"}
["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:124:9: warning: incomplete delimited universal character name; treating as \'\\\' \'u\' \'{\' identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:125:9: warning: incomplete delimited universal character name; treating as \'\\\' \'u\' \'{\' identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:126:9: warning: incomplete delimited universal character name; treating as \'\\\' \'N\' \'{\' identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:139:12: warning: incomplete delimited universal character name; treating as \'\\\' \'N\' \'{\' identifier [-Wunicode]"}
}
}
},
},
["warn_depr_array_comparison"]={
["warn_depr_array_comparison"]={
[j]={ab,"deprecated-array-compare"},
[k]={jb,"deprecated-array-compare"},
[i]="deprecated-array-compare",
[j]="deprecated-array-compare",
[c]={{nil,z,"comparison between two arrays is deprecated; to compare array addresses, use unary \'+\' to decay operands to pointers"}},
[c]={{nil,q,"warn_depr_array_comparison"}},
[d]=g,
[d]={{nil,q,"comparison between two arrays is deprecated; to compare array addresses, use unary \'+\' to decay operands to pointers"}},
[e]="comparison between two arrays is deprecated; to compare array addresses, use unary \'\\+\' to decay operands to pointers",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-array\\-compare[^\\]]*\\]",
[g]="comparison between two arrays is deprecated; to compare array addresses, use unary \'\\+\' to decay operands to pointers",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-array\\-compare[^\\]]*\\]",
[a]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[b]={{nil,q,ob}},
[h]={{K,12654,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n  // ...\n  // C++2a [depr.array.comp]:\n  //  Equality and relational comparisons ([expr.eq], [expr.rel]) between two\n  //  operands of array type are deprecated.\n  if (S.getLangOpts().CPlusPlus20 && LHSStripped->getType()->isArrayType() && RHSStripped->getType()->isArrayType()) {\n    S.Diag(Loc, diag::warn_depr_array_comparison) << LHS->getSourceRange() << RHS->getSourceRange() << LHSStripped->getType() << RHSStripped->getType();"}},
[f]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[k]={
[h]={{S,12654,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n  // ...\n  // C++2a [depr.array.comp]:\n  //  Equality and relational comparisons ([expr.eq], [expr.rel]) between two\n  //  operands of array type are deprecated.\n  if (S.getLangOpts().CPlusPlus20 && LHSStripped->getType()->isArrayType() && RHSStripped->getType()->isArrayType()) {\n    S.Diag(Loc, diag::warn_depr_array_comparison) << LHS->getSourceRange() << RHS->getSourceRange() << LHSStripped->getType() << RHSStripped->getType();"}},
[l]={
["clang/test/SemaCXX/self-comparison.cpp"]={"clang/test/SemaCXX/self-comparison.cpp:18:23: warning: comparison between two arrays is deprecated; to compare array addresses, use unary \'+\' to decay operands to pointers [-Wdeprecated-array-compare]","clang/test/SemaCXX/self-comparison.cpp:21:14: warning: comparison between two arrays is deprecated; to compare array addresses, use unary \'+\' to decay operands to pointers [-Wdeprecated-array-compare]","clang/test/SemaCXX/self-comparison.cpp:27:16: warning: comparison between two arrays is deprecated; to compare array addresses, use unary \'+\' to decay operands to pointers [-Wdeprecated-array-compare]","clang/test/SemaCXX/self-comparison.cpp:84:19: warning: comparison between two arrays is deprecated; to compare array addresses, use unary \'+\' to decay operands to pointers [-Wdeprecated-array-compare]","clang/test/SemaCXX/self-comparison.cpp:105:19: warning: comparison between two arrays is deprecated; to compare array addresses, use unary \'+\' to decay operands to pointers [-Wdeprecated-array-compare]"}
["clang/test/SemaCXX/self-comparison.cpp"]={"clang/test/SemaCXX/self-comparison.cpp:18:23: warning: comparison between two arrays is deprecated; to compare array addresses, use unary \'+\' to decay operands to pointers [-Wdeprecated-array-compare]","clang/test/SemaCXX/self-comparison.cpp:21:14: warning: comparison between two arrays is deprecated; to compare array addresses, use unary \'+\' to decay operands to pointers [-Wdeprecated-array-compare]","clang/test/SemaCXX/self-comparison.cpp:27:16: warning: comparison between two arrays is deprecated; to compare array addresses, use unary \'+\' to decay operands to pointers [-Wdeprecated-array-compare]","clang/test/SemaCXX/self-comparison.cpp:84:19: warning: comparison between two arrays is deprecated; to compare array addresses, use unary \'+\' to decay operands to pointers [-Wdeprecated-array-compare]","clang/test/SemaCXX/self-comparison.cpp:105:19: warning: comparison between two arrays is deprecated; to compare array addresses, use unary \'+\' to decay operands to pointers [-Wdeprecated-array-compare]"}
}
}
},
},
["warn_deprecated"]={
["warn_deprecated"]={
[j]={ab,cd},
[k]={jb,Wc},
[i]=cd,
[j]=Wc,
[c]="%0 is deprecated",
[c]="warn_deprecated",
[d]=g,
[d]="%0 is deprecated",
[e]="(.*?) is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]",
[g]="(.*?) is deprecated",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]",
[a]={Ub,1237025389,Xb,Wb},
[b]=ob,
[f]={Yb,1237025389,Zb,ac},
[h]={{"clang/lib/Sema/SemaAvailability.cpp",436,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // ...\n  case AR_Deprecated:\n    diag = !ObjCPropertyAccess ? diag::warn_deprecated : diag::warn_property_method_deprecated;"}},
[h]={{"clang/lib/Sema/SemaAvailability.cpp",436,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // ...\n  case AR_Deprecated:\n    diag = !ObjCPropertyAccess ? diag::warn_deprecated : diag::warn_property_method_deprecated;"}},
[k]={
[l]={
["clang/test/Sema/pragma-warning.cpp"]={"clang/test/Sema/pragma-warning.cpp:12:3: warning: \'f\' is deprecated [-Wdeprecated-declarations]","clang/test/Sema/pragma-warning.cpp:21:3: warning: \'f\' is deprecated [-Wdeprecated-declarations]"}
["clang/test/Sema/pragma-warning.cpp"]={"clang/test/Sema/pragma-warning.cpp:12:3: warning: \'f\' is deprecated [-Wdeprecated-declarations]","clang/test/Sema/pragma-warning.cpp:21:3: warning: \'f\' is deprecated [-Wdeprecated-declarations]"}
}
}
},
},
["warn_deprecated_altivec_src_compat"]={
["warn_deprecated_altivec_src_compat"]={
[j]={"deprecated-altivec-src-compat"},
[k]={"deprecated-altivec-src-compat"},
[i]="deprecated-altivec-src-compat",
[j]="deprecated-altivec-src-compat",
[c]={{nil,jb,"Current handling of vector bool and vector pixel types in this context are deprecated. The default behaviour will soon change to that implied by the \'-altivec-compat=xl\' option"}},
[c]={{nil,I,"warn_deprecated_altivec_src_compat"}},
[d]=g,
[d]={{nil,I,"Current handling of vector bool and vector pixel types in this context are deprecated. The default behaviour will soon change to that implied by the \'-altivec-compat=xl\' option"}},
[e]="Current handling of vector bool and vector pixel types in this context are deprecated\\. The default behaviour will soon change to that implied by the \'\\-altivec\\-compat\\=xl\' option",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-altivec\\-src\\-compat[^\\]]*\\]",
[g]="Current handling of vector bool and vector pixel types in this context are deprecated\\. The default behaviour will soon change to that implied by the \'\\-altivec\\-compat\\=xl\' option",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-altivec\\-src\\-compat[^\\]]*\\]",
[a]={Tc,1615397021,Yc,Mc},
[b]={{nil,I,m}},
[h]={{K,13541,"/// CheckVectorCompareOperands - vector comparisons are a clang extension that\n/// operates on extended vector types.  Instead of producing an IntTy result,\n/// like a scalar comparison, a vector comparison produces a vector of integer\n/// types.\nQualType Sema::CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n  // Determine the return type of a vector compare. By default clang will return\n  // a scalar for all vector compares except vector bool and vector pixel.\n  // With the gcc compiler we will always return a vector type and with the xl\n  // compiler we will always return a scalar type. This switch allows choosing\n  // which behavior is prefered.\n  if (getLangOpts().AltiVec) {\n    // ...\n    case LangOptions::AltivecSrcCompatKind::Mixed:\n      // If AltiVec, the comparison results in a numeric type, i.e.\n      // bool for C++, int for C\n      if (vType->castAs<VectorType>()->getVectorKind() == VectorType::AltiVecVector)\n      // ...\n      else\n        Diag(Loc, diag::warn_deprecated_altivec_src_compat);"}},
[f]={dd,1615397021,bd,ad},
[k]={
[h]={{S,13541,"/// CheckVectorCompareOperands - vector comparisons are a clang extension that\n/// operates on extended vector types.  Instead of producing an IntTy result,\n/// like a scalar comparison, a vector comparison produces a vector of integer\n/// types.\nQualType Sema::CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n  // Determine the return type of a vector compare. By default clang will return\n  // a scalar for all vector compares except vector bool and vector pixel.\n  // With the gcc compiler we will always return a vector type and with the xl\n  // compiler we will always return a scalar type. This switch allows choosing\n  // which behavior is prefered.\n  if (getLangOpts().AltiVec) {\n    // ...\n    case LangOptions::AltivecSrcCompatKind::Mixed:\n      // If AltiVec, the comparison results in a numeric type, i.e.\n      // bool for C++, int for C\n      if (vType->castAs<VectorType>()->getVectorKind() == VectorType::AltiVecVector)\n      // ...\n      else\n        Diag(Loc, diag::warn_deprecated_altivec_src_compat);"}},
[l]={
["clang/test/CodeGen/PowerPC/vector-compat-pixel-bool.c"]={"clang/test/CodeGen/PowerPC/vector-compat-pixel-bool.c:23:12: warning: Current handling of vector bool and vector pixel types in this context are deprecated. The default behaviour will soon change to that implied by the \'-altivec-compat=xl\' option [-Wdeprecated-altivec-src-compat]","clang/test/CodeGen/PowerPC/vector-compat-pixel-bool.c:39:12: warning: Current handling of vector bool and vector pixel types in this context are deprecated. The default behaviour will soon change to that implied by the \'-altivec-compat=xl\' option [-Wdeprecated-altivec-src-compat]","clang/test/CodeGen/PowerPC/vector-compat-pixel-bool.c:55:12: warning: Current handling of vector bool and vector pixel types in this context are deprecated. The default behaviour will soon change to that implied by the \'-altivec-compat=xl\' option [-Wdeprecated-altivec-src-compat]","clang/test/CodeGen/PowerPC/vector-compat-pixel-bool.c:71:12: warning: Current handling of vector bool and vector pixel types in this context are deprecated. The default behaviour will soon change to that implied by the \'-altivec-compat=xl\' option [-Wdeprecated-altivec-src-compat]","clang/test/CodeGen/PowerPC/vector-compat-pixel-bool.c:87:12: warning: Current handling of vector bool and vector pixel types in this context are deprecated. The default behaviour will soon change to that implied by the \'-altivec-compat=xl\' option [-Wdeprecated-altivec-src-compat]"}
["clang/test/CodeGen/PowerPC/vector-compat-pixel-bool.c"]={"clang/test/CodeGen/PowerPC/vector-compat-pixel-bool.c:23:12: warning: Current handling of vector bool and vector pixel types in this context are deprecated. The default behaviour will soon change to that implied by the \'-altivec-compat=xl\' option [-Wdeprecated-altivec-src-compat]","clang/test/CodeGen/PowerPC/vector-compat-pixel-bool.c:39:12: warning: Current handling of vector bool and vector pixel types in this context are deprecated. The default behaviour will soon change to that implied by the \'-altivec-compat=xl\' option [-Wdeprecated-altivec-src-compat]","clang/test/CodeGen/PowerPC/vector-compat-pixel-bool.c:55:12: warning: Current handling of vector bool and vector pixel types in this context are deprecated. The default behaviour will soon change to that implied by the \'-altivec-compat=xl\' option [-Wdeprecated-altivec-src-compat]","clang/test/CodeGen/PowerPC/vector-compat-pixel-bool.c:71:12: warning: Current handling of vector bool and vector pixel types in this context are deprecated. The default behaviour will soon change to that implied by the \'-altivec-compat=xl\' option [-Wdeprecated-altivec-src-compat]","clang/test/CodeGen/PowerPC/vector-compat-pixel-bool.c:87:12: warning: Current handling of vector bool and vector pixel types in this context are deprecated. The default behaviour will soon change to that implied by the \'-altivec-compat=xl\' option [-Wdeprecated-altivec-src-compat]"}
}
}
},
},
["warn_deprecated_anonymous_namespace"]={
["warn_deprecated_anonymous_namespace"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]="\'deprecated\' attribute on anonymous namespace ignored",
[c]="warn_deprecated_anonymous_namespace",
[d]=g,
[d]="\'deprecated\' attribute on anonymous namespace ignored",
[e]="\'deprecated\' attribute on anonymous namespace ignored",
[e]=i,
[f]=vb,
[g]="\'deprecated\' attribute on anonymous namespace ignored",
[b]=l,
[a]=Db,
[a]={"43f40103f045",1416004496,"[c++1z] Support [[deprecated]] attributes on namespaces. Note that it only applies to situations whe...","[c++1z] Support [[deprecated]] attributes on namespaces. Note that it only applies to situations where the namespace is mentioned. Thus, use on anonymous namespaces is diagnosed.\n\nllvm-svn: 222054"},
[b]=m,
[h]={{E,8173,"static void handleDeprecatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NSD = dyn_cast<NamespaceDecl>(D)) {\n    if (NSD->isAnonymousNamespace()) {\n      S.Diag(AL.getLoc(), diag::warn_deprecated_anonymous_namespace);"}},
[f]={"43f40103f045",1416004496,"[c++1z] Support [[deprecated]] attributes on namespaces. Note that it only applies to situations whe...","[c++1z] Support [[deprecated]] attributes on namespaces. Note that it only applies to situations where the namespace is mentioned. Thus, use on anonymous namespaces is diagnosed.\n\nllvm-svn: 222054"},
[k]={
[h]={{N,8173,"static void handleDeprecatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NSD = dyn_cast<NamespaceDecl>(D)) {\n    if (NSD->isAnonymousNamespace()) {\n      S.Diag(AL.getLoc(), diag::warn_deprecated_anonymous_namespace);"}},
[l]={
["clang/test/SemaCXX/cxx-deprecated.cpp"]={"clang/test/SemaCXX/cxx-deprecated.cpp:3:13: warning: \'deprecated\' attribute on anonymous namespace ignored [-Wignored-attributes]"}
["clang/test/SemaCXX/cxx-deprecated.cpp"]={"clang/test/SemaCXX/cxx-deprecated.cpp:3:13: warning: \'deprecated\' attribute on anonymous namespace ignored [-Wignored-attributes]"}
}
}
},
},
["warn_deprecated_builtin"]={
["warn_deprecated_builtin"]={
[j]={ab,"deprecated-builtins"},
[k]={jb,"deprecated-builtins"},
[i]="deprecated-builtins",
[j]="deprecated-builtins",
[c]={{nil,kb,"builtin %0 is deprecated; use %1 instead"}},
[c]={{nil,C,"warn_deprecated_builtin"}},
[d]=g,
[d]={{nil,C,"builtin %0 is deprecated; use %1 instead"}},
[e]="builtin (.*?) is deprecated; use (.*?) instead",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-builtins[^\\]]*\\]",
[g]="builtin (.*?) is deprecated; use (.*?) instead",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-builtins[^\\]]*\\]",
[a]={Eb,1625925174,Fb,Hb},
[b]={{nil,C,ob}},
[f]={Lb,1625925174,Kb,Jb},
[h]={{bc,5558,"void DiagnoseBuiltinDeprecation(Sema &S, TypeTrait Kind, SourceLocation KWLoc) {\n  // ...\n  S.Diag(KWLoc, diag::warn_deprecated_builtin) << getTraitSpelling(Kind) << getTraitSpelling(Replacement);"}},
[h]={{bc,5558,"void DiagnoseBuiltinDeprecation(Sema &S, TypeTrait Kind, SourceLocation KWLoc) {\n  // ...\n  S.Diag(KWLoc, diag::warn_deprecated_builtin) << getTraitSpelling(Kind) << getTraitSpelling(Replacement);"}},
[k]={
[l]={
["clang/test/SemaCXX/deprecated-builtins.cpp"]={"clang/test/SemaCXX/deprecated-builtins.cpp:8:9: warning: builtin __has_nothrow_assign is deprecated; use __is_nothrow_assignable instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:9:9: warning: builtin __has_nothrow_move_assign is deprecated; use __is_nothrow_assignable instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:10:9: warning: builtin __has_nothrow_copy is deprecated; use __is_nothrow_constructible instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:11:9: warning: builtin __has_nothrow_constructor is deprecated; use __is_nothrow_constructible instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:12:9: warning: builtin __has_trivial_assign is deprecated; use __is_trivially_assignable instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:13:9: warning: builtin __has_trivial_move_assign is deprecated; use __is_trivially_assignable instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:14:9: warning: builtin __has_trivial_copy is deprecated; use __is_trivially_copyable instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:15:9: warning: builtin __has_trivial_constructor is deprecated; use __is_trivially_constructible instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:16:9: warning: builtin __has_trivial_move_constructor is deprecated; use __is_trivially_constructible instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:17:9: warning: builtin __has_trivial_destructor is deprecated; use __is_trivially_destructible instead [-Wdeprecated-builtins]"}
["clang/test/SemaCXX/deprecated-builtins.cpp"]={"clang/test/SemaCXX/deprecated-builtins.cpp:8:9: warning: builtin __has_nothrow_assign is deprecated; use __is_nothrow_assignable instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:9:9: warning: builtin __has_nothrow_move_assign is deprecated; use __is_nothrow_assignable instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:10:9: warning: builtin __has_nothrow_copy is deprecated; use __is_nothrow_constructible instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:11:9: warning: builtin __has_nothrow_constructor is deprecated; use __is_nothrow_constructible instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:12:9: warning: builtin __has_trivial_assign is deprecated; use __is_trivially_assignable instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:13:9: warning: builtin __has_trivial_move_assign is deprecated; use __is_trivially_assignable instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:14:9: warning: builtin __has_trivial_copy is deprecated; use __is_trivially_copyable instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:15:9: warning: builtin __has_trivial_constructor is deprecated; use __is_trivially_constructible instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:16:9: warning: builtin __has_trivial_move_constructor is deprecated; use __is_trivially_constructible instead [-Wdeprecated-builtins]","clang/test/SemaCXX/deprecated-builtins.cpp:17:9: warning: builtin __has_trivial_destructor is deprecated; use __is_trivially_destructible instead [-Wdeprecated-builtins]"}
}
}
},
},
["warn_deprecated_comma_subscript"]={
["warn_deprecated_comma_subscript"]={
[j]={ab,"deprecated-comma-subscript"},
[k]={jb,"deprecated-comma-subscript"},
[i]="deprecated-comma-subscript",
[j]="deprecated-comma-subscript",
[c]="top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23",
[c]={{nil,q,"warn_deprecated_comma_subscript"}},
[d]=g,
[d]="top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23",
[e]="top\\-level comma expression in array subscript is deprecated in C\\+\\+20 and unsupported in C\\+\\+23",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-comma\\-subscript[^\\]]*\\]",
[g]="top\\-level comma expression in array subscript is deprecated in C\\+\\+20 and unsupported in C\\+\\+23",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-comma\\-subscript[^\\]]*\\]",
[a]={"6a3820503910",1563615147,"[c++20] P1161R3: a[b,c] is deprecated.","[c++20] P1161R3: a[b,c] is deprecated.\n\nllvm-svn: 366630"},
[b]={{nil,q,ob}},
[h]={{K,5163,"ExprResult Sema::ActOnArraySubscriptExpr(Scope *S, Expr *base, SourceLocation lbLoc, MultiExprArg ArgExprs, SourceLocation rbLoc) {\n  // ...\n  if (ArgExprs.size() == 1 && getLangOpts().CPlusPlus20) {\n    // ...\n    if ((isa<BinaryOperator>(idx) && cast<BinaryOperator>(idx)->isCommaOp()) || (isa<CXXOperatorCallExpr>(idx) && cast<CXXOperatorCallExpr>(idx)->getOperator() == OO_Comma)) {\n      Diag(idx->getExprLoc(), diag::warn_deprecated_comma_subscript) << SourceRange(base->getBeginLoc(), rbLoc);"}},
[f]={"6a3820503910",1563615147,"[c++20] P1161R3: a[b,c] is deprecated.","[c++20] P1161R3: a[b,c] is deprecated.\n\nllvm-svn: 366630"},
[k]={
[h]={{S,5163,"ExprResult Sema::ActOnArraySubscriptExpr(Scope *S, Expr *base, SourceLocation lbLoc, MultiExprArg ArgExprs, SourceLocation rbLoc) {\n  // ...\n  if (ArgExprs.size() == 1 && getLangOpts().CPlusPlus20) {\n    // ...\n    if ((isa<BinaryOperator>(idx) && cast<BinaryOperator>(idx)->isCommaOp()) || (isa<CXXOperatorCallExpr>(idx) && cast<CXXOperatorCallExpr>(idx)->getOperator() == OO_Comma)) {\n      Diag(idx->getExprLoc(), diag::warn_deprecated_comma_subscript) << SourceRange(base->getBeginLoc(), rbLoc);"}},
[l]={
["clang/test/Parser/cxx2b-subscript.cpp"]={"clang/test/Parser/cxx2b-subscript.cpp:45:12: warning: top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23 [-Wdeprecated-comma-subscript]","clang/test/Parser/cxx2b-subscript.cpp:51:21: warning: top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23 [-Wdeprecated-comma-subscript]","clang/test/Parser/cxx2b-subscript.cpp:56:15: warning: top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23 [-Wdeprecated-comma-subscript]"}
["clang/test/Parser/cxx2b-subscript.cpp"]={"clang/test/Parser/cxx2b-subscript.cpp:45:12: warning: top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23 [-Wdeprecated-comma-subscript]","clang/test/Parser/cxx2b-subscript.cpp:51:21: warning: top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23 [-Wdeprecated-comma-subscript]","clang/test/Parser/cxx2b-subscript.cpp:56:15: warning: top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23 [-Wdeprecated-comma-subscript]"}
}
}
},
},
["warn_deprecated_copy"]={
["warn_deprecated_copy"]={
[j]={p,B,ab,"deprecated-copy",Fc},
[k]={r,K,jb,"deprecated-copy",Ic},
[i]="deprecated-copy",
[j]="deprecated-copy",
[c]={{nil,jb,"definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-declared copy %select{assignment operator|constructor}1"}},
[c]={{nil,I,"warn_deprecated_copy"}},
[d]=g,
[d]={{nil,I,"definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-declared copy %select{assignment operator|constructor}1"}},
[e]="definition of implicit copy (?:constructor|assignment operator) for (.*?) is deprecated because it has a user\\-declared copy (?:assignment operator|constructor)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-copy[^\\]]*\\]",
[g]="definition of implicit copy (?:constructor|assignment operator) for (.*?) is deprecated because it has a user\\-declared copy (?:assignment operator|constructor)",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-copy[^\\]]*\\]",
[a]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095"},
[b]={{nil,I,ob}},
[h]={{C,14733,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  // ...\n  if (UserDeclaredOperation) {\n    // ...\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}},
[f]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095"},
[k]={
[h]={{L,14733,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  // ...\n  if (UserDeclaredOperation) {\n    // ...\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}},
[l]={
["clang/test/SemaCXX/deprecated-copy.cpp"]={"clang/test/SemaCXX/deprecated-copy.cpp:7:8: warning: definition of implicit copy constructor for \'A\' is deprecated because it has a user-declared copy assignment operator [-Wdeprecated-copy]","clang/test/SemaCXX/deprecated-copy.cpp:11:8: warning: definition of implicit copy constructor for \'B\' is deprecated because it has a user-declared copy assignment operator [-Wdeprecated-copy]","clang/test/SemaCXX/deprecated-copy.cpp:25:8: warning: definition of implicit copy constructor for \'S\' is deprecated because it has a user-declared copy assignment operator [-Wdeprecated-copy]"}
["clang/test/SemaCXX/deprecated-copy.cpp"]={"clang/test/SemaCXX/deprecated-copy.cpp:7:8: warning: definition of implicit copy constructor for \'A\' is deprecated because it has a user-declared copy assignment operator [-Wdeprecated-copy]","clang/test/SemaCXX/deprecated-copy.cpp:11:8: warning: definition of implicit copy constructor for \'B\' is deprecated because it has a user-declared copy assignment operator [-Wdeprecated-copy]","clang/test/SemaCXX/deprecated-copy.cpp:25:8: warning: definition of implicit copy constructor for \'S\' is deprecated because it has a user-declared copy assignment operator [-Wdeprecated-copy]"}
}
}
},
},
["warn_deprecated_copy_with_dtor"]={
["warn_deprecated_copy_with_dtor"]={
[j]={ab,"deprecated-copy-dtor","deprecated-copy-with-dtor"},
[k]={jb,"deprecated-copy-dtor","deprecated-copy-with-dtor"},
[i]="deprecated-copy-with-dtor",
[j]="deprecated-copy-with-dtor",
[c]={{nil,jb,"definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-declared destructor"}},
[c]={{nil,I,"warn_deprecated_copy_with_dtor"}},
[d]=g,
[d]={{nil,I,"definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-declared destructor"}},
[e]="definition of implicit copy (?:constructor|assignment operator) for (.*?) is deprecated because it has a user\\-declared destructor",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-copy\\-with\\-dtor[^\\]]*\\]",
[g]="definition of implicit copy (?:constructor|assignment operator) for (.*?) is deprecated because it has a user\\-declared destructor",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-copy\\-with\\-dtor[^\\]]*\\]",
[a]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095"},
[b]={{nil,I,ob}},
[h]={{C,14732,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  // ...\n  if (UserDeclaredOperation) {\n    // ...\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}},
[f]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095"},
[k]={
[h]={{L,14732,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  // ...\n  if (UserDeclaredOperation) {\n    // ...\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}},
[l]={
["clang/test/SemaCXX/deprecated-copy-with-dtor.cpp"]={"clang/test/SemaCXX/deprecated-copy-with-dtor.cpp:10:4: warning: definition of implicit copy constructor for \'A\' is deprecated because it has a user-declared destructor [-Wdeprecated-copy-with-dtor]"}
["clang/test/SemaCXX/deprecated-copy-with-dtor.cpp"]={"clang/test/SemaCXX/deprecated-copy-with-dtor.cpp:10:4: warning: definition of implicit copy constructor for \'A\' is deprecated because it has a user-declared destructor [-Wdeprecated-copy-with-dtor]"}
}
}
},
},
["warn_deprecated_copy_with_user_provided_copy"]={
["warn_deprecated_copy_with_user_provided_copy"]={
[j]={p,B,ab,"deprecated-copy","deprecated-copy-with-user-provided-copy",Fc},
[k]={r,K,jb,"deprecated-copy","deprecated-copy-with-user-provided-copy",Ic},
[i]="deprecated-copy-with-user-provided-copy",
[j]="deprecated-copy-with-user-provided-copy",
[c]={{nil,jb,"definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-provided copy %select{assignment operator|constructor}1"}},
[c]={{nil,I,"warn_deprecated_copy_with_user_provided_copy"}},
[d]=g,
[d]={{nil,I,"definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-provided copy %select{assignment operator|constructor}1"}},
[e]="definition of implicit copy (?:constructor|assignment operator) for (.*?) is deprecated because it has a user\\-provided copy (?:assignment operator|constructor)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-copy\\-with\\-user\\-provided\\-copy[^\\]]*\\]",
[g]="definition of implicit copy (?:constructor|assignment operator) for (.*?) is deprecated because it has a user\\-provided copy (?:assignment operator|constructor)",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-copy\\-with\\-user\\-provided\\-copy[^\\]]*\\]",
[a]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095"},
[b]={{nil,I,ob}},
[h]={{C,14730,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  // ...\n  if (UserDeclaredOperation) {\n    // ...\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}},
[f]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095"},
[k]={
[h]={{L,14730,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  // ...\n  if (UserDeclaredOperation) {\n    // ...\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}},
[l]={
["clang/test/SemaCXX/deprecated-copy-with-user-provided-copy.cpp"]={"clang/test/SemaCXX/deprecated-copy-with-user-provided-copy.cpp:7:6: warning: definition of implicit copy constructor for \'A\' is deprecated because it has a user-provided copy assignment operator [-Wdeprecated-copy-with-user-provided-copy]"}
["clang/test/SemaCXX/deprecated-copy-with-user-provided-copy.cpp"]={"clang/test/SemaCXX/deprecated-copy-with-user-provided-copy.cpp:7:6: warning: definition of implicit copy constructor for \'A\' is deprecated because it has a user-provided copy assignment operator [-Wdeprecated-copy-with-user-provided-copy]"}
}
}
},
},
["warn_deprecated_copy_with_user_provided_dtor"]={
["warn_deprecated_copy_with_user_provided_dtor"]={
[j]={ab,"deprecated-copy-dtor","deprecated-copy-with-dtor","deprecated-copy-with-user-provided-dtor"},
[k]={jb,"deprecated-copy-dtor","deprecated-copy-with-dtor","deprecated-copy-with-user-provided-dtor"},
[i]="deprecated-copy-with-user-provided-dtor",
[j]="deprecated-copy-with-user-provided-dtor",
[c]={{nil,jb,"definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-provided destructor"}},
[c]={{nil,I,"warn_deprecated_copy_with_user_provided_dtor"}},
[d]=g,
[d]={{nil,I,"definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-provided destructor"}},
[e]="definition of implicit copy (?:constructor|assignment operator) for (.*?) is deprecated because it has a user\\-provided destructor",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-copy\\-with\\-user\\-provided\\-dtor[^\\]]*\\]",
[g]="definition of implicit copy (?:constructor|assignment operator) for (.*?) is deprecated because it has a user\\-provided destructor",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-copy\\-with\\-user\\-provided\\-dtor[^\\]]*\\]",
[a]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095"},
[b]={{nil,I,ob}},
[h]={{C,14728,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  // ...\n  if (UserDeclaredOperation) {\n    // ...\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}},
[f]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095"},
[k]={
[h]={{L,14728,"/// Diagnose an implicit copy operation for a class which is odr-used, but\n/// which is deprecated because the class has a user-declared copy constructor,\n/// copy assignment operator, or destructor.\nstatic void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) {\n  // ...\n  if (UserDeclaredOperation) {\n    // ...\n    unsigned DiagID = (UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_dtor : (UDOIsUserProvided && !UDOIsDestructor) ? diag::warn_deprecated_copy_with_user_provided_copy : (!UDOIsUserProvided && UDOIsDestructor) ? diag::warn_deprecated_copy_with_dtor : diag::warn_deprecated_copy;"}},
[l]={
["clang/test/SemaCXX/deprecated-copy-with-user-provided-dtor.cpp"]={"clang/test/SemaCXX/deprecated-copy-with-user-provided-dtor.cpp:7:3: warning: definition of implicit copy constructor for \'A\' is deprecated because it has a user-provided destructor [-Wdeprecated-copy-with-user-provided-dtor]"}
["clang/test/SemaCXX/deprecated-copy-with-user-provided-dtor.cpp"]={"clang/test/SemaCXX/deprecated-copy-with-user-provided-dtor.cpp:7:3: warning: definition of implicit copy constructor for \'A\' is deprecated because it has a user-provided destructor [-Wdeprecated-copy-with-user-provided-dtor]"}
}
}
},
},
["warn_deprecated_def"]={
["warn_deprecated_def"]={
[j]={"deprecated-implementations"},
[k]={"deprecated-implementations"},
[i]="deprecated-implementations",
[j]="deprecated-implementations",
[c]="Implementing deprecated %select{method|class|category}0",
[c]="warn_deprecated_def",
[d]=g,
[d]="Implementing deprecated %select{method|class|category}0",
[e]="implementing deprecated (?:method|class|category)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-implementations[^\\]]*\\]",
[g]="implementing deprecated (?:method|class|category)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-implementations[^\\]]*\\]",
[a]={"0c87d36d9d93",1297815251,"Fix typo (per Chris\'s comment).","Fix typo (per Chris\'s comment).\n\nllvm-svn: 125619"},
[b]=m,
[h]={{wc,315,"static void DiagnoseObjCImplementedDeprecations(Sema &S, const NamedDecl *ND, SourceLocation ImplLoc) {\n  // ...\n  S.Diag(ImplLoc, diag::warn_deprecated_def) << (isa<ObjCMethodDecl>(ND) ? /*Method*/ 0 : isa<ObjCCategoryDecl>(ND) || IsCategory ? /*Category*/ 2 : /*Class*/ 1);"}},
[f]={"0c87d36d9d93",1297815251,"Fix typo (per Chris\'s comment).","Fix typo (per Chris\'s comment).\n\nllvm-svn: 125619"},
[k]={
[h]={{Gc,315,"static void DiagnoseObjCImplementedDeprecations(Sema &S, const NamedDecl *ND, SourceLocation ImplLoc) {\n  // ...\n  S.Diag(ImplLoc, diag::warn_deprecated_def) << (isa<ObjCMethodDecl>(ND) ? /*Method*/ 0 : isa<ObjCCategoryDecl>(ND) || IsCategory ? /*Category*/ 2 : /*Class*/ 1);"}},
[l]={
["clang/test/SemaObjC/warn-deprecated-implementations.m"]={"clang/test/SemaObjC/warn-deprecated-implementations.m:21:1: warning: implementing deprecated method [-Wdeprecated-implementations]","clang/test/SemaObjC/warn-deprecated-implementations.m:39:17: warning: implementing deprecated class [-Wdeprecated-implementations]","clang/test/SemaObjC/warn-deprecated-implementations.m:42:17: warning: implementing deprecated category [-Wdeprecated-implementations]","clang/test/SemaObjC/warn-deprecated-implementations.m:58:1: warning: implementing deprecated method [-Wdeprecated-implementations]","clang/test/SemaObjC/warn-deprecated-implementations.m:79:17: warning: implementing deprecated category [-Wdeprecated-implementations]"}
["clang/test/SemaObjC/warn-deprecated-implementations.m"]={"clang/test/SemaObjC/warn-deprecated-implementations.m:21:1: warning: implementing deprecated method [-Wdeprecated-implementations]","clang/test/SemaObjC/warn-deprecated-implementations.m:39:17: warning: implementing deprecated class [-Wdeprecated-implementations]","clang/test/SemaObjC/warn-deprecated-implementations.m:42:17: warning: implementing deprecated category [-Wdeprecated-implementations]","clang/test/SemaObjC/warn-deprecated-implementations.m:58:1: warning: implementing deprecated method [-Wdeprecated-implementations]","clang/test/SemaObjC/warn-deprecated-implementations.m:79:17: warning: implementing deprecated category [-Wdeprecated-implementations]"}
}
}
},
},
["warn_deprecated_for_co_await"]={
["warn_deprecated_for_co_await"]={
[j]={"coroutine","deprecated-coroutine"},
[k]={"coroutine","deprecated-coroutine"},
[i]="deprecated-coroutine",
[j]="deprecated-coroutine",
[c]={{nil,Q,"\'for co_await\' belongs to CoroutineTS instead of C++20, which is deprecated"}},
[c]={{nil,w,"warn_deprecated_for_co_await"}},
[d]=g,
[d]={{nil,w,"\'for co_await\' belongs to CoroutineTS instead of C++20, which is deprecated"}},
[e]="\'for co_await\' belongs to CoroutineTS instead of C\\+\\+20, which is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-coroutine[^\\]]*\\]",
[g]="\'for co_await\' belongs to CoroutineTS instead of C\\+\\+20, which is deprecated",
[b]="Coroutines Issue",
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-coroutine[^\\]]*\\]",
[a]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions.\n\nThis implements the parsing and recognition of module partition CMIs\nand removes the FIXMEs in the parser.\n\nModule partitions are recognised in the base computation of visibility,\nhowever additional amendments to visibility follow in subsequent patches.\n\nDifferential Revision: https://reviews.llvm.org/D118586"},
[b]={{nil,w,"Coroutines Issue"}},
[f]={Md,1612659633,Jd,yd},
[h]={{nc,2231,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  if (CoawaitLoc.isValid() && getLangOpts().CPlusPlus20)\n    Diag(CoawaitLoc, diag::warn_deprecated_for_co_await);"}},
[h]={{nc,2231,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  if (CoawaitLoc.isValid() && getLangOpts().CPlusPlus20)\n    Diag(CoawaitLoc, diag::warn_deprecated_for_co_await);"}},
[k]={
[l]={
["clang/test/Parser/cxx20-coroutines.cpp"]={"clang/test/Parser/cxx20-coroutines.cpp:14:7: warning: \'for co_await\' belongs to CoroutineTS instead of C++20, which is deprecated [-Wdeprecated-coroutine]"}
["clang/test/Parser/cxx20-coroutines.cpp"]={"clang/test/Parser/cxx20-coroutines.cpp:14:7: warning: \'for co_await\' belongs to CoroutineTS instead of C++20, which is deprecated [-Wdeprecated-coroutine]"}
}
}
},
},
["warn_deprecated_fwdclass_message"]={
["warn_deprecated_fwdclass_message"]={
[j]={ab,cd},
[k]={jb,Wc},
[i]=cd,
[j]=Wc,
[c]="%0 may be deprecated because the receiver type is unknown",
[c]="warn_deprecated_fwdclass_message",
[d]=g,
[d]="%0 may be deprecated because the receiver type is unknown",
[e]="(.*?) may be deprecated because the receiver type is unknown",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]",
[g]="(.*?) may be deprecated because the receiver type is unknown",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]",
[a]={"7d6e11a1923a",1292892241,"Warn when message is sent to receiver of","Warn when message is sent to receiver of\nunknown type and there is a possibility that\nat runtime method is resolved to a deprecated or \nunavailable method.  Addreses // rdar://8769853\n\nllvm-svn: 122294"},
[b]=ob,
[f]={"7d6e11a1923a",1292892241,"Warn when message is sent to receiver of","Warn when message is sent to receiver of\nunknown type and there is a possibility that\nat runtime method is resolved to a deprecated or \nunavailable method.  Addreses // rdar://8769853\n\nllvm-svn: 122294"},
[h]={{"clang/lib/Sema/SemaAvailability.cpp",439,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // ...\n  case AR_Deprecated:\n    // ...\n    diag_fwdclass_message = diag::warn_deprecated_fwdclass_message;"}},
[h]={{"clang/lib/Sema/SemaAvailability.cpp",439,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // ...\n  case AR_Deprecated:\n    // ...\n    diag_fwdclass_message = diag::warn_deprecated_fwdclass_message;"}},
[k]={
[l]={
["clang/test/SemaObjC/warn-forward-class-attr-deprecated.m"]={"clang/test/SemaObjC/warn-forward-class-attr-deprecated.m:19:55: warning: \'filenames\' may be deprecated because the receiver type is unknown [-Wdeprecated-declarations]"}
["clang/test/SemaObjC/warn-forward-class-attr-deprecated.m"]={"clang/test/SemaObjC/warn-forward-class-attr-deprecated.m:19:55: warning: \'filenames\' may be deprecated because the receiver type is unknown [-Wdeprecated-declarations]"}
}
}
},
},
["warn_deprecated_ignored_on_using"]={
["warn_deprecated_ignored_on_using"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]={{nil,jb,"%0 currently has no effect on a using declaration"}},
[c]={{nil,I,"warn_deprecated_ignored_on_using"}},
[d]=g,
[d]={{nil,I,"%0 currently has no effect on a using declaration"}},
[e]="(.*?) currently has no effect on a using declaration",
[e]=i,
[f]=vb,
[g]="(.*?) currently has no effect on a using declaration",
[b]=l,
[a]=Db,
[a]={Tc,1615397021,Yc,Mc},
[b]={{nil,I,m}},
[h]={{E,2608,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (isa<UsingDecl, UnresolvedUsingTypenameDecl, UnresolvedUsingValueDecl>(D)) {\n    S.Diag(AL.getRange().getBegin(), diag::warn_deprecated_ignored_on_using) << AL;"},{E,8181,"static void handleDeprecatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NSD = dyn_cast<NamespaceDecl>(D)) {\n  // ...\n  } else if (isa<UsingDecl, UnresolvedUsingTypenameDecl, UnresolvedUsingValueDecl>(D)) {\n    S.Diag(AL.getRange().getBegin(), diag::warn_deprecated_ignored_on_using) << AL;"}},
[f]={dd,1615397021,bd,ad},
[k]={
[h]={{N,2608,"static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (isa<UsingDecl, UnresolvedUsingTypenameDecl, UnresolvedUsingValueDecl>(D)) {\n    S.Diag(AL.getRange().getBegin(), diag::warn_deprecated_ignored_on_using) << AL;"},{N,8181,"static void handleDeprecatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *NSD = dyn_cast<NamespaceDecl>(D)) {\n  // ...\n  } else if (isa<UsingDecl, UnresolvedUsingTypenameDecl, UnresolvedUsingValueDecl>(D)) {\n    S.Diag(AL.getRange().getBegin(), diag::warn_deprecated_ignored_on_using) << AL;"}},
[l]={
["clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp"]={"clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:10:3: warning: \'deprecated\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:11:15: warning: \'deprecated\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:12:28: warning: \'deprecated\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:13:28: warning: \'availability\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:15:10: warning: \'availability\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:22:5: warning: \'deprecated\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:23:5: warning: \'deprecated\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:25:25: warning: \'deprecated\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:26:16: warning: \'deprecated\' currently has no effect on a using declaration [-Wignored-attributes]"}
["clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp"]={"clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:10:3: warning: \'deprecated\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:11:15: warning: \'deprecated\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:12:28: warning: \'deprecated\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:13:28: warning: \'availability\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:15:10: warning: \'availability\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:22:5: warning: \'deprecated\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:23:5: warning: \'deprecated\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:25:25: warning: \'deprecated\' currently has no effect on a using declaration [-Wignored-attributes]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:26:16: warning: \'deprecated\' currently has no effect on a using declaration [-Wignored-attributes]"}
}
}
},
},
["warn_deprecated_increment_decrement_volatile"]={
["warn_deprecated_increment_decrement_volatile"]={
[j]={ab,Bc},
[k]={jb,Ac},
[i]=Bc,
[j]=Ac,
[c]={{nil,z,"%select{decrement|increment}0 of object of volatile-qualified type %1 is deprecated"}},
[c]={{nil,q,"warn_deprecated_increment_decrement_volatile"}},
[d]=g,
[d]={{nil,q,"%select{decrement|increment}0 of object of volatile-qualified type %1 is deprecated"}},
[e]="(?:decrement|increment) of object of volatile\\-qualified type (.*?) is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]",
[g]="(?:decrement|increment) of object of volatile\\-qualified type (.*?) is deprecated",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,ob}},
[h]={{K,14845,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n  // ...\n  if (S.getLangOpts().CPlusPlus20 && ResType.isVolatileQualified()) {\n    // ...\n    S.Diag(OpLoc, diag::warn_deprecated_increment_decrement_volatile) << IsInc << ResType;"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{S,14845,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n  // ...\n  if (S.getLangOpts().CPlusPlus20 && ResType.isVolatileQualified()) {\n    // ...\n    S.Diag(OpLoc, diag::warn_deprecated_increment_decrement_volatile) << IsInc << ResType;"}},
[l]={
["clang/test/SemaCXX/constant-expression-cxx14.cpp"]={"clang/test/SemaCXX/constant-expression-cxx14.cpp:347:23: warning: decrement of object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]"}
["clang/test/SemaCXX/constant-expression-cxx14.cpp"]={"clang/test/SemaCXX/constant-expression-cxx14.cpp:347:23: warning: decrement of object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]"}
}
}
},
},
["warn_deprecated_lax_vec_conv_all"]={
["warn_deprecated_lax_vec_conv_all"]={
[j]={"deprecate-lax-vec-conv-all"},
[k]={"deprecate-lax-vec-conv-all"},
[i]="deprecate-lax-vec-conv-all",
[j]="deprecate-lax-vec-conv-all",
[c]={{nil,kb,"Implicit conversion between vector types (\'%0\' and \'%1\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default."}},
[c]={{nil,C,"warn_deprecated_lax_vec_conv_all"}},
[d]=g,
[d]={{nil,C,"Implicit conversion between vector types (\'%0\' and \'%1\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default."}},
[e]="Implicit conversion between vector types \\(\'(.*?)\' and \'(.*?)\'\\) is deprecated\\. In the future, the behavior implied by \'\\-fno\\-lax\\-vector\\-conversions\' will be the default\\.",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecate\\-lax\\-vec\\-conv\\-all[^\\]]*\\]",
[g]="Implicit conversion between vector types \\(\'(.*?)\' and \'(.*?)\'\\) is deprecated\\. In the future, the behavior implied by \'\\-fno\\-lax\\-vector\\-conversions\' will be the default\\.",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecate\\-lax\\-vec\\-conv\\-all[^\\]]*\\]",
[a]={Eb,1625925174,Fb,Hb},
[b]={{nil,C,m}},
[h]={{K,10087,"/// CheckAssignmentConstraints (C99 6.5.16) - This routine currently\n/// has code to accommodate several GCC extensions when type checking\n/// pointers. Here are some objectionable examples that GCC considers warnings:\n///\n///  int a, *pint;\n///  short *pshort;\n///  struct foo *pfoo;\n///\n///  pint = pshort; // warning: assignment from incompatible pointer type\n///  a = pint; // warning: assignment makes integer from pointer without a cast\n///  pint = a; // warning: assignment makes pointer from integer without a cast\n///  pint = pfoo; // warning: assignment from incompatible pointer type\n///\n/// As a result, the code for dealing with pointers is more complex than the\n/// C99 spec dictates.\n///\n/// Sets \'Kind\' for any result kind except Incompatible.\nSema::AssignConvertType Sema::CheckAssignmentConstraints(QualType LHSType, ExprResult &RHS, CastKind &Kind, bool ConvertRHS) {\n  // ...\n  // Conversions to or from vector type.\n  if (LHSType->isVectorType() || RHSType->isVectorType()) {\n    if (LHSType->isVectorType() && RHSType->isVectorType()) {\n      // ...\n      // If we are allowing lax vector conversions, and LHS and RHS are both\n      // vectors, the total size only needs to be the same. This is a bitcast;\n      // no bits are changed but the result type is different.\n      if (isLaxVectorConversion(RHSType, LHSType)) {\n        // The default for lax vector conversions with Altivec vectors will\n        // change, so if we are converting between vector types where\n        // at least one is an Altivec vector, emit a warning.\n        if (Context.getTargetInfo().getTriple().isPPC() && anyAltivecTypes(RHSType, LHSType) && !Context.areCompatibleVectorTypes(RHSType, LHSType))\n          Diag(RHS.get()->getExprLoc(), diag::warn_deprecated_lax_vec_conv_all) << RHSType << LHSType;"},{K,10435,"/// CheckAssignmentConstraints (C99 6.5.16) - This routine currently\n/// has code to accommodate several GCC extensions when type checking\n/// pointers. Here are some objectionable examples that GCC considers warnings:\n///\n///  int a, *pint;\n///  short *pshort;\n///  struct foo *pfoo;\n///\n///  pint = pshort; // warning: assignment from incompatible pointer type\n///  a = pint; // warning: assignment makes integer from pointer without a cast\n///  pint = a; // warning: assignment makes pointer from integer without a cast\n///  pint = pfoo; // warning: assignment from incompatible pointer type\n///\n/// As a result, the code for dealing with pointers is more complex than the\n/// C99 spec dictates.\n///\n/// Sets \'Kind\' for any result kind except Incompatible.\nSema::AssignConvertType Sema::CheckAssignmentConstraints(QualType LHSType, ExprResult &RHS, CastKind &Kind, bool ConvertRHS) {\n  // ...\n  // Conversions to or from vector type.\n  if (LHSType->isVectorType() || RHSType->isVectorType()) {\n    // ...\n    // When the RHS comes from another lax conversion (e.g. binops between\n    // scalars and vectors) the result is canonicalized as a vector. When the\n    // LHS is also a vector, the lax is allowed by the condition above. Handle\n    // the case where LHS is a scalar.\n    if (LHSType->isScalarType()) {\n      // ...\n      if (VecType && VecType->getNumElements() == 1 && isLaxVectorConversion(RHSType, LHSType)) {\n        if (Context.getTargetInfo().getTriple().isPPC() && (VecType->getVectorKind() == VectorType::AltiVecVector || VecType->getVectorKind() == VectorType::AltiVecBool || VecType->getVectorKind() == VectorType::AltiVecPixel))\n          Diag(RHS.get()->getExprLoc(), diag::warn_deprecated_lax_vec_conv_all) << RHSType << LHSType;"},{K,11134,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // ...\n  if (isLaxVectorConversion(OtherType, VecType)) {\n    if (Context.getTargetInfo().getTriple().isPPC() && anyAltivecTypes(RHSType, LHSType) && !Context.areCompatibleVectorTypes(RHSType, LHSType))\n      Diag(Loc, diag::warn_deprecated_lax_vec_conv_all) << RHSType << LHSType;"},{"clang/lib/Sema/SemaOverload.cpp",1788,"/// Determine whether the conversion from FromType to ToType is a valid\n/// vector conversion.\n///\n/// \\param ICK Will be set to the vector conversion kind, if this is a vector\n/// conversion.\nstatic bool IsVectorConversion(Sema &S, QualType FromType, QualType ToType, ImplicitConversionKind &ICK, Expr *From, bool InOverloadResolution, bool CStyle) {\n  // ...\n  // We can perform the conversion between vector types in the following cases:\n  // 1)vector types are equivalent AltiVec and GCC vector types\n  // 2)lax vector conversions are permitted and the vector types are of the\n  //  same size\n  // 3)the destination type does not have the ARM MVE strict-polymorphism\n  //  attribute, which inhibits lax vector conversion for overload resolution\n  //  only\n  if (ToType->isVectorType() && FromType->isVectorType()) {\n    if (S.Context.areCompatibleVectorTypes(FromType, ToType) || (S.isLaxVectorConversion(FromType, ToType) && !ToType->hasAttr(attr::ArmMveStrictPolymorphism))) {\n      if (S.getASTContext().getTargetInfo().getTriple().isPPC() && S.isLaxVectorConversion(FromType, ToType) && S.anyAltivecTypes(FromType, ToType) && !S.Context.areCompatibleVectorTypes(FromType, ToType) && !InOverloadResolution && !CStyle) {\n        S.Diag(From->getBeginLoc(), diag::warn_deprecated_lax_vec_conv_all) << FromType << ToType;"}},
[f]={Lb,1625925174,Kb,Jb},
[k]={
[h]={{S,10087,"/// CheckAssignmentConstraints (C99 6.5.16) - This routine currently\n/// has code to accommodate several GCC extensions when type checking\n/// pointers. Here are some objectionable examples that GCC considers warnings:\n///\n///  int a, *pint;\n///  short *pshort;\n///  struct foo *pfoo;\n///\n///  pint = pshort; // warning: assignment from incompatible pointer type\n///  a = pint; // warning: assignment makes integer from pointer without a cast\n///  pint = a; // warning: assignment makes pointer from integer without a cast\n///  pint = pfoo; // warning: assignment from incompatible pointer type\n///\n/// As a result, the code for dealing with pointers is more complex than the\n/// C99 spec dictates.\n///\n/// Sets \'Kind\' for any result kind except Incompatible.\nSema::AssignConvertType Sema::CheckAssignmentConstraints(QualType LHSType, ExprResult &RHS, CastKind &Kind, bool ConvertRHS) {\n  // ...\n  // Conversions to or from vector type.\n  if (LHSType->isVectorType() || RHSType->isVectorType()) {\n    if (LHSType->isVectorType() && RHSType->isVectorType()) {\n      // ...\n      // If we are allowing lax vector conversions, and LHS and RHS are both\n      // vectors, the total size only needs to be the same. This is a bitcast;\n      // no bits are changed but the result type is different.\n      if (isLaxVectorConversion(RHSType, LHSType)) {\n        // The default for lax vector conversions with Altivec vectors will\n        // change, so if we are converting between vector types where\n        // at least one is an Altivec vector, emit a warning.\n        if (Context.getTargetInfo().getTriple().isPPC() && anyAltivecTypes(RHSType, LHSType) && !Context.areCompatibleVectorTypes(RHSType, LHSType))\n          Diag(RHS.get()->getExprLoc(), diag::warn_deprecated_lax_vec_conv_all) << RHSType << LHSType;"},{S,10435,"/// CheckAssignmentConstraints (C99 6.5.16) - This routine currently\n/// has code to accommodate several GCC extensions when type checking\n/// pointers. Here are some objectionable examples that GCC considers warnings:\n///\n///  int a, *pint;\n///  short *pshort;\n///  struct foo *pfoo;\n///\n///  pint = pshort; // warning: assignment from incompatible pointer type\n///  a = pint; // warning: assignment makes integer from pointer without a cast\n///  pint = a; // warning: assignment makes pointer from integer without a cast\n///  pint = pfoo; // warning: assignment from incompatible pointer type\n///\n/// As a result, the code for dealing with pointers is more complex than the\n/// C99 spec dictates.\n///\n/// Sets \'Kind\' for any result kind except Incompatible.\nSema::AssignConvertType Sema::CheckAssignmentConstraints(QualType LHSType, ExprResult &RHS, CastKind &Kind, bool ConvertRHS) {\n  // ...\n  // Conversions to or from vector type.\n  if (LHSType->isVectorType() || RHSType->isVectorType()) {\n    // ...\n    // When the RHS comes from another lax conversion (e.g. binops between\n    // scalars and vectors) the result is canonicalized as a vector. When the\n    // LHS is also a vector, the lax is allowed by the condition above. Handle\n    // the case where LHS is a scalar.\n    if (LHSType->isScalarType()) {\n      // ...\n      if (VecType && VecType->getNumElements() == 1 && isLaxVectorConversion(RHSType, LHSType)) {\n        if (Context.getTargetInfo().getTriple().isPPC() && (VecType->getVectorKind() == VectorType::AltiVecVector || VecType->getVectorKind() == VectorType::AltiVecBool || VecType->getVectorKind() == VectorType::AltiVecPixel))\n          Diag(RHS.get()->getExprLoc(), diag::warn_deprecated_lax_vec_conv_all) << RHSType << LHSType;"},{S,11134,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // ...\n  if (isLaxVectorConversion(OtherType, VecType)) {\n    if (Context.getTargetInfo().getTriple().isPPC() && anyAltivecTypes(RHSType, LHSType) && !Context.areCompatibleVectorTypes(RHSType, LHSType))\n      Diag(Loc, diag::warn_deprecated_lax_vec_conv_all) << RHSType << LHSType;"},{"clang/lib/Sema/SemaOverload.cpp",1788,"/// Determine whether the conversion from FromType to ToType is a valid\n/// vector conversion.\n///\n/// \\param ICK Will be set to the vector conversion kind, if this is a vector\n/// conversion.\nstatic bool IsVectorConversion(Sema &S, QualType FromType, QualType ToType, ImplicitConversionKind &ICK, Expr *From, bool InOverloadResolution, bool CStyle) {\n  // ...\n  // We can perform the conversion between vector types in the following cases:\n  // 1)vector types are equivalent AltiVec and GCC vector types\n  // 2)lax vector conversions are permitted and the vector types are of the\n  //  same size\n  // 3)the destination type does not have the ARM MVE strict-polymorphism\n  //  attribute, which inhibits lax vector conversion for overload resolution\n  //  only\n  if (ToType->isVectorType() && FromType->isVectorType()) {\n    if (S.Context.areCompatibleVectorTypes(FromType, ToType) || (S.isLaxVectorConversion(FromType, ToType) && !ToType->hasAttr(attr::ArmMveStrictPolymorphism))) {\n      if (S.getASTContext().getTargetInfo().getTriple().isPPC() && S.isLaxVectorConversion(FromType, ToType) && S.anyAltivecTypes(FromType, ToType) && !S.Context.areCompatibleVectorTypes(FromType, ToType) && !InOverloadResolution && !CStyle) {\n        S.Diag(From->getBeginLoc(), diag::warn_deprecated_lax_vec_conv_all) << FromType << ToType;"}},
[l]={
["clang/test/Parser/lax-conv.cpp"]={"clang/test/Parser/lax-conv.cpp:24:10: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:27:10: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:37:10: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:57:16: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:60:16: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:70:16: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:83:9: warning: Implicit conversion between vector types (\'\'__vector short\' (vector of 8 \'short\' values)\' and \'\'__vector __bool unsigned short\' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:84:9: warning: Implicit conversion between vector types (\'\'__vector unsigned short\' (vector of 8 \'unsigned short\' values)\' and \'\'__vector __bool unsigned short\' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:86:9: warning: Implicit conversion between vector types (\'\'__vector int\' (vector of 4 \'int\' values)\' and \'\'__vector __bool unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:87:9: warning: Implicit conversion between vector types (\'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\' and \'\'__vector __bool unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:89:9: warning: Implicit conversion between vector types (\'\'__vector long long\' (vector of 2 \'long long\' values)\' and \'\'__vector __bool unsigned long long\' (vector of 2 \'unsigned long long\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:90:9: warning: Implicit conversion between vector types (\'\'__vector unsigned long long\' (vector of 2 \'unsigned long long\' values)\' and \'\'__vector __bool unsigned long long\' (vector of 2 \'unsigned long long\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:92:9: warning: Implicit conversion between vector types (\'\'__vector signed char\' (vector of 16 \'signed char\' values)\' and \'\'__vector __bool unsigned char\' (vector of 16 \'unsigned char\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:93:9: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector __bool unsigned char\' (vector of 16 \'unsigned char\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:97:8: warning: Implicit conversion between vector types (\'\'__vector __bool unsigned short\' (vector of 8 \'unsigned short\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:98:8: warning: Implicit conversion between vector types (\'\'__vector short\' (vector of 8 \'short\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:99:8: warning: Implicit conversion between vector types (\'\'__vector unsigned short\' (vector of 8 \'unsigned short\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:101:8: warning: Implicit conversion between vector types (\'\'__vector __bool unsigned int\' (vector of 4 \'unsigned int\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:102:8: warning: Implicit conversion between vector types (\'\'__vector int\' (vector of 4 \'int\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:103:8: warning: Implicit conversion between vector types (\'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:105:8: warning: Implicit conversion between vector types (\'\'__vector __bool unsigned long long\' (vector of 2 \'unsigned long long\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:106:8: warning: Implicit conversion between vector types (\'\'__vector long long\' (vector of 2 \'long long\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:107:8: warning: Implicit conversion between vector types (\'\'__vector unsigned long long\' (vector of 2 \'unsigned long long\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:109:8: warning: Implicit conversion between vector types (\'\'__vector __bool unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:110:8: warning: Implicit conversion between vector types (\'\'__vector signed char\' (vector of 16 \'signed char\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:111:8: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]"}
["clang/test/Parser/lax-conv.cpp"]={"clang/test/Parser/lax-conv.cpp:24:10: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:27:10: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:37:10: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:57:16: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:60:16: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:70:16: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:83:9: warning: Implicit conversion between vector types (\'\'__vector short\' (vector of 8 \'short\' values)\' and \'\'__vector __bool unsigned short\' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:84:9: warning: Implicit conversion between vector types (\'\'__vector unsigned short\' (vector of 8 \'unsigned short\' values)\' and \'\'__vector __bool unsigned short\' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:86:9: warning: Implicit conversion between vector types (\'\'__vector int\' (vector of 4 \'int\' values)\' and \'\'__vector __bool unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:87:9: warning: Implicit conversion between vector types (\'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\' and \'\'__vector __bool unsigned int\' (vector of 4 \'unsigned int\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:89:9: warning: Implicit conversion between vector types (\'\'__vector long long\' (vector of 2 \'long long\' values)\' and \'\'__vector __bool unsigned long long\' (vector of 2 \'unsigned long long\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:90:9: warning: Implicit conversion between vector types (\'\'__vector unsigned long long\' (vector of 2 \'unsigned long long\' values)\' and \'\'__vector __bool unsigned long long\' (vector of 2 \'unsigned long long\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:92:9: warning: Implicit conversion between vector types (\'\'__vector signed char\' (vector of 16 \'signed char\' values)\' and \'\'__vector __bool unsigned char\' (vector of 16 \'unsigned char\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:93:9: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector __bool unsigned char\' (vector of 16 \'unsigned char\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:97:8: warning: Implicit conversion between vector types (\'\'__vector __bool unsigned short\' (vector of 8 \'unsigned short\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:98:8: warning: Implicit conversion between vector types (\'\'__vector short\' (vector of 8 \'short\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:99:8: warning: Implicit conversion between vector types (\'\'__vector unsigned short\' (vector of 8 \'unsigned short\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:101:8: warning: Implicit conversion between vector types (\'\'__vector __bool unsigned int\' (vector of 4 \'unsigned int\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:102:8: warning: Implicit conversion between vector types (\'\'__vector int\' (vector of 4 \'int\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:103:8: warning: Implicit conversion between vector types (\'\'__vector unsigned int\' (vector of 4 \'unsigned int\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:105:8: warning: Implicit conversion between vector types (\'\'__vector __bool unsigned long long\' (vector of 2 \'unsigned long long\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:106:8: warning: Implicit conversion between vector types (\'\'__vector long long\' (vector of 2 \'long long\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:107:8: warning: Implicit conversion between vector types (\'\'__vector unsigned long long\' (vector of 2 \'unsigned long long\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:109:8: warning: Implicit conversion between vector types (\'\'__vector __bool unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:110:8: warning: Implicit conversion between vector types (\'\'__vector signed char\' (vector of 16 \'signed char\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]","clang/test/Parser/lax-conv.cpp:111:8: warning: Implicit conversion between vector types (\'\'__vector unsigned char\' (vector of 16 \'unsigned char\' values)\' and \'\'__vector __pixel \' (vector of 8 \'unsigned short\' values)\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]"}
}
}
},
},
["warn_deprecated_literal_operator_id"]={
["warn_deprecated_literal_operator_id"]={
[j]={ab,"deprecated-literal-operator"},
[k]={jb,"deprecated-literal-operator"},
[i]="deprecated-literal-operator",
[j]="deprecated-literal-operator",
[c]="identifier %0 preceded by whitespace in a literal operator declaration is deprecated",
[c]="warn_deprecated_literal_operator_id",
[d]=g,
[d]="identifier %0 preceded by whitespace in a literal operator declaration is deprecated",
[e]="identifier (.*?) preceded by whitespace in a literal operator declaration is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-literal\\-operator[^\\]]*\\]",
[g]="identifier (.*?) preceded by whitespace in a literal operator declaration is deprecated",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-literal\\-operator[^\\]]*\\]",
[a]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"},
[b]=ob,
[f]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"},
[h]={{bc,515,"bool Sema::checkLiteralOperatorId(const CXXScopeSpec &SS, const UnqualifiedId &Name, bool IsUDSuffix) {\n  // ...\n  if (!IsUDSuffix) {\n    // ...\n    if (!PP.getSourceManager().isInSystemHeader(Loc)) {\n      if (auto Hint = FixItHint::CreateReplacement(Name.getSourceRange(), (StringRef(\"operator\\\"\\\"\") + II->getName()).str()); isReservedInAllContexts(Status)) {\n      // ...\n      } else {\n        Diag(Loc, diag::warn_deprecated_literal_operator_id) << II << Hint;"}},
[h]={{bc,515,"bool Sema::checkLiteralOperatorId(const CXXScopeSpec &SS, const UnqualifiedId &Name, bool IsUDSuffix) {\n  // ...\n  if (!IsUDSuffix) {\n    // ...\n    if (!PP.getSourceManager().isInSystemHeader(Loc)) {\n      if (auto Hint = FixItHint::CreateReplacement(Name.getSourceRange(), (StringRef(\"operator\\\"\\\"\") + II->getName()).str()); isReservedInAllContexts(Status)) {\n      // ...\n      } else {\n        Diag(Loc, diag::warn_deprecated_literal_operator_id) << II << Hint;"}},
[k]={
[l]={
["clang/test/CXX/drs/dr25xx.cpp"]={"clang/test/CXX/drs/dr25xx.cpp:69:29: warning: identifier \'_π___\' preceded by whitespace in a literal operator declaration is deprecated [-Wdeprecated-literal-operator]","clang/test/CXX/drs/dr25xx.cpp:74:13: warning: identifier \'_div\' preceded by whitespace in a literal operator declaration is deprecated [-Wdeprecated-literal-operator]","clang/test/CXX/drs/dr25xx.cpp:77:28: warning: identifier \'_π___\' preceded by whitespace in a literal operator declaration is deprecated [-Wdeprecated-literal-operator]"}
["clang/test/CXX/drs/dr25xx.cpp"]={"clang/test/CXX/drs/dr25xx.cpp:69:29: warning: identifier \'_π___\' preceded by whitespace in a literal operator declaration is deprecated [-Wdeprecated-literal-operator]","clang/test/CXX/drs/dr25xx.cpp:74:13: warning: identifier \'_div\' preceded by whitespace in a literal operator declaration is deprecated [-Wdeprecated-literal-operator]","clang/test/CXX/drs/dr25xx.cpp:77:28: warning: identifier \'_π___\' preceded by whitespace in a literal operator declaration is deprecated [-Wdeprecated-literal-operator]"}
}
}
},
},
["warn_deprecated_message"]={
["warn_deprecated_message"]={
[j]={ab,cd},
[k]={jb,Wc},
[i]=cd,
[j]=Wc,
[c]="%0 is deprecated: %1",
[c]="warn_deprecated_message",
[d]=g,
[d]="%0 is deprecated: %1",
[e]="(.*?) is deprecated\\: (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]",
[g]="(.*?) is deprecated\\: (.*?)",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]",
[a]={"55106310aeaf",1286399924,"Add message to attribute(deprecated).","Add message to attribute(deprecated).\nattribute(unavailable) to do next.\n// rdar:// 6734520.\n\nllvm-svn: 115842"},
[b]=ob,
[f]={"55106310aeaf",1286399924,"Add message to attribute(deprecated).","Add message to attribute(deprecated).\nattribute(unavailable) to do next.\n// rdar:// 6734520.\n\nllvm-svn: 115842"},
[h]={{"clang/lib/Sema/SemaAvailability.cpp",438,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // ...\n  case AR_Deprecated:\n    // ...\n    diag_message = diag::warn_deprecated_message;"}},
[h]={{"clang/lib/Sema/SemaAvailability.cpp",438,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // ...\n  case AR_Deprecated:\n    // ...\n    diag_message = diag::warn_deprecated_message;"}},
[k]={
[l]={
["clang/test/Sema/attr-availability-macosx.c"]={"clang/test/Sema/attr-availability-macosx.c:18:3: warning: \'f2\' is deprecated: first deprecated in macOS 10.5 [-Wdeprecated-declarations]"}
["clang/test/Sema/attr-availability-macosx.c"]={"clang/test/Sema/attr-availability-macosx.c:18:3: warning: \'f2\' is deprecated: first deprecated in macOS 10.5 [-Wdeprecated-declarations]"}
}
}
},
},
["warn_deprecated_noreturn_spelling"]={
["warn_deprecated_noreturn_spelling"]={
[j]={ab,"deprecated-attributes"},
[k]={jb,"deprecated-attributes"},
[i]="deprecated-attributes",
[j]="deprecated-attributes",
[c]={{nil,kb,"the \'[[_Noreturn]]\' attribute spelling is deprecated in C2x; use \'[[noreturn]]\' instead"}},
[c]={{nil,C,"warn_deprecated_noreturn_spelling"}},
[d]=g,
[d]={{nil,C,"the \'[[_Noreturn]]\' attribute spelling is deprecated in C2x; use \'[[noreturn]]\' instead"}},
[e]="the \'\\[\\[_Noreturn\\]\\]\' attribute spelling is deprecated in C2x; use \'\\[\\[noreturn\\]\\]\' instead",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-attributes[^\\]]*\\]",
[g]="the \'\\[\\[_Noreturn\\]\\]\' attribute spelling is deprecated in C2x; use \'\\[\\[noreturn\\]\\]\' instead",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-attributes[^\\]]*\\]",
[a]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
[b]={{nil,C,ob}},
[h]={{E,2205,"static void handleStandardNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  // The [[_Noreturn]] spelling is deprecated in C2x, so if that was used,\n  // issue an appropriate diagnostic. However, don\'t issue a diagnostic if the\n  // attribute name comes from a macro expansion. We don\'t want to punish users\n  // who write [[noreturn]] after including <stdnoreturn.h> (where \'noreturn\'\n  // is defined as a macro which expands to \'_Noreturn\').\n  if (!S.getLangOpts().CPlusPlus && A.getSemanticSpelling() == CXX11NoReturnAttr::C2x_Noreturn && !(A.getLoc().isMacroID() && S.getSourceManager().isInSystemMacro(A.getLoc())))\n    S.Diag(A.getLoc(), diag::warn_deprecated_noreturn_spelling) << A.getRange();"}},
[f]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
[k]={
[h]={{N,2205,"static void handleStandardNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  // The [[_Noreturn]] spelling is deprecated in C2x, so if that was used,\n  // issue an appropriate diagnostic. However, don\'t issue a diagnostic if the\n  // attribute name comes from a macro expansion. We don\'t want to punish users\n  // who write [[noreturn]] after including <stdnoreturn.h> (where \'noreturn\'\n  // is defined as a macro which expands to \'_Noreturn\').\n  if (!S.getLangOpts().CPlusPlus && A.getSemanticSpelling() == CXX11NoReturnAttr::C2x_Noreturn && !(A.getLoc().isMacroID() && S.getSourceManager().isInSystemMacro(A.getLoc())))\n    S.Diag(A.getLoc(), diag::warn_deprecated_noreturn_spelling) << A.getRange();"}},
[l]={
["clang/test/Sema/c2x-noreturn.c"]={"clang/test/Sema/c2x-noreturn.c:36:3: warning: the \'[[_Noreturn]]\' attribute spelling is deprecated in C2x; use \'[[noreturn]]\' instead [-Wdeprecated-attributes]","clang/test/Sema/c2x-noreturn.c:51:3: warning: the \'[[_Noreturn]]\' attribute spelling is deprecated in C2x; use \'[[noreturn]]\' instead [-Wdeprecated-attributes]","clang/test/Sema/c2x-noreturn.c:65:3: warning: the \'[[_Noreturn]]\' attribute spelling is deprecated in C2x; use \'[[noreturn]]\' instead [-Wdeprecated-attributes]"}
["clang/test/Sema/c2x-noreturn.c"]={"clang/test/Sema/c2x-noreturn.c:36:3: warning: the \'[[_Noreturn]]\' attribute spelling is deprecated in C2x; use \'[[noreturn]]\' instead [-Wdeprecated-attributes]","clang/test/Sema/c2x-noreturn.c:51:3: warning: the \'[[_Noreturn]]\' attribute spelling is deprecated in C2x; use \'[[noreturn]]\' instead [-Wdeprecated-attributes]","clang/test/Sema/c2x-noreturn.c:65:3: warning: the \'[[_Noreturn]]\' attribute spelling is deprecated in C2x; use \'[[noreturn]]\' instead [-Wdeprecated-attributes]"}
}
}
},
},
["warn_deprecated_redundant_constexpr_static_def"]={
["warn_deprecated_redundant_constexpr_static_def"]={
[j]={ab,"deprecated-redundant-constexpr-static-def"},
[k]={jb,"deprecated-redundant-constexpr-static-def"},
[i]="deprecated-redundant-constexpr-static-def",
[j]="deprecated-redundant-constexpr-static-def",
[c]="out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated",
[c]="warn_deprecated_redundant_constexpr_static_def",
[d]=g,
[d]="out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated",
[e]="out\\-of\\-line definition of constexpr static data member is redundant in C\\+\\+17 and is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-redundant\\-constexpr\\-static\\-def[^\\]]*\\]",
[g]="out\\-of\\-line definition of constexpr static data member is redundant in C\\+\\+17 and is deprecated",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-redundant\\-constexpr\\-static\\-def[^\\]]*\\]",
[a]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a","Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a\nvariable weak discardable linkage and partially-ordered initialization, and is\nimplied for constexpr static data members.)\n\nllvm-svn: 273754"},
[b]=ob,
[h]={{D,4729,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  // C++ doesn\'t have tentative definitions, so go right ahead and check here.\n  if (getLangOpts().CPlusPlus) {\n    if (Old->isStaticDataMember() && Old->getCanonicalDecl()->isInline() && Old->getCanonicalDecl()->isConstexpr()) {\n      // ...\n      Diag(New->getLocation(), diag::warn_deprecated_redundant_constexpr_static_def);"}},
[f]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a","Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a\nvariable weak discardable linkage and partially-ordered initialization, and is\nimplied for constexpr static data members.)\n\nllvm-svn: 273754"},
[k]={
[h]={{M,4729,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  // C++ doesn\'t have tentative definitions, so go right ahead and check here.\n  if (getLangOpts().CPlusPlus) {\n    if (Old->isStaticDataMember() && Old->getCanonicalDecl()->isInline() && Old->getCanonicalDecl()->isConstexpr()) {\n      // ...\n      Diag(New->getLocation(), diag::warn_deprecated_redundant_constexpr_static_def);"}},
[l]={
["clang/test/SemaCXX/redundant-out-of-line-static-constexpr-member-def-diag.cpp"]={"clang/test/SemaCXX/redundant-out-of-line-static-constexpr-member-def-diag.cpp:8:20: warning: out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated [-Wdeprecated-redundant-constexpr-static-def]","clang/test/SemaCXX/redundant-out-of-line-static-constexpr-member-def-diag.cpp:9:16: warning: out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated [-Wdeprecated-redundant-constexpr-static-def]"}
["clang/test/SemaCXX/redundant-out-of-line-static-constexpr-member-def-diag.cpp"]={"clang/test/SemaCXX/redundant-out-of-line-static-constexpr-member-def-diag.cpp:8:20: warning: out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated [-Wdeprecated-redundant-constexpr-static-def]","clang/test/SemaCXX/redundant-out-of-line-static-constexpr-member-def-diag.cpp:9:16: warning: out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated [-Wdeprecated-redundant-constexpr-static-def]"}
}
}
},
},
["warn_deprecated_register"]={
["warn_deprecated_register"]={
[j]={G,t,F,ab,"deprecated-register","register"},
[k]={Q,v,P,jb,"deprecated-register","register"},
[i]="deprecated-register",
[j]="deprecated-register",
[c]="\'register\' storage class specifier is deprecated and incompatible with C++1z",
[c]="warn_deprecated_register",
[d]=g,
[d]="\'register\' storage class specifier is deprecated and incompatible with C++1z",
[e]="\'register\' storage class specifier is deprecated and incompatible with C\\+\\+17",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-register[^\\]]*\\]",
[g]="\'register\' storage class specifier is deprecated and incompatible with C\\+\\+17",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-register[^\\]]*\\]",
[a]={"8ca78a16f4a5",1371088971,"Add -Wdeprecated warnings and fixits for things deprecated in C++11:","Add -Wdeprecated warnings and fixits for things deprecated in C++11:\n - \'register\' storage class\n - dynamic exception specifications\n\nOnly the former check is enabled by default for now (the latter might be quite noisy).\n\nllvm-svn: 183881"},
[b]=ob,
[h]={{D,7497,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (getLangOpts().CPlusPlus11 && SCSpec == DeclSpec::SCS_register && !D.getAsmLabel() && !getSourceManager().isInSystemMacro(D.getDeclSpec().getStorageClassSpecLoc())) {\n    // ...\n    Diag(D.getDeclSpec().getStorageClassSpecLoc(), getLangOpts().CPlusPlus17 ? diag::ext_register_storage_class : diag::warn_deprecated_register) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{D,14739,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n    // ...\n    // In C++11, the \'register\' storage class specifier is deprecated.\n    // In C++17, it is not allowed, but we tolerate it as an extension.\n    if (getLangOpts().CPlusPlus11) {\n      Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus17 ? diag::ext_register_storage_class : diag::warn_deprecated_register) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}},
[f]={"8ca78a16f4a5",1371088971,"Add -Wdeprecated warnings and fixits for things deprecated in C++11:","Add -Wdeprecated warnings and fixits for things deprecated in C++11:\n - \'register\' storage class\n - dynamic exception specifications\n\nOnly the former check is enabled by default for now (the latter might be quite noisy).\n\nllvm-svn: 183881"},
[k]={
[h]={{M,7497,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (getLangOpts().CPlusPlus11 && SCSpec == DeclSpec::SCS_register && !D.getAsmLabel() && !getSourceManager().isInSystemMacro(D.getDeclSpec().getStorageClassSpecLoc())) {\n    // ...\n    Diag(D.getDeclSpec().getStorageClassSpecLoc(), getLangOpts().CPlusPlus17 ? diag::ext_register_storage_class : diag::warn_deprecated_register) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{M,14739,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n    // ...\n    // In C++11, the \'register\' storage class specifier is deprecated.\n    // In C++17, it is not allowed, but we tolerate it as an extension.\n    if (getLangOpts().CPlusPlus11) {\n      Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus17 ? diag::ext_register_storage_class : diag::warn_deprecated_register) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}},
[l]={
["clang/test/SemaCXX/attr-cxx0x.cpp"]={"clang/test/SemaCXX/attr-cxx0x.cpp:15:14: warning: \'register\' storage class specifier is deprecated and incompatible with C++17 [-Wdeprecated-register]"}
["clang/test/SemaCXX/attr-cxx0x.cpp"]={"clang/test/SemaCXX/attr-cxx0x.cpp:15:14: warning: \'register\' storage class specifier is deprecated and incompatible with C++17 [-Wdeprecated-register]"}
}
}
},
},
["warn_deprecated_simple_assign_volatile"]={
["warn_deprecated_simple_assign_volatile"]={
[j]={ab,Bc},
[k]={jb,Ac},
[i]=Bc,
[j]=Ac,
[c]={{nil,z,"use of result of assignment to object of volatile-qualified type %0 is deprecated"}},
[c]={{nil,q,"warn_deprecated_simple_assign_volatile"}},
[d]=g,
[d]={{nil,q,"use of result of assignment to object of volatile-qualified type %0 is deprecated"}},
[e]="use of result of assignment to object of volatile\\-qualified type (.*?) is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]",
[g]="use of result of assignment to object of volatile\\-qualified type (.*?) is deprecated",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,ob}},
[h]={{K,18642,"void Sema::PopExpressionEvaluationContext() {\n  // ...\n  // Warn on any volatile-qualified simple-assignments that are not discarded-\n  // value expressions nor unevaluated operands (those cases get removed from\n  // this list by CheckUnusedVolatileAssignment).\n  for (auto *BO : Rec.VolatileAssignmentLHSs)\n    Diag(BO->getBeginLoc(), diag::warn_deprecated_simple_assign_volatile) << BO->getType();"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{S,18642,"void Sema::PopExpressionEvaluationContext() {\n  // ...\n  // Warn on any volatile-qualified simple-assignments that are not discarded-\n  // value expressions nor unevaluated operands (those cases get removed from\n  // this list by CheckUnusedVolatileAssignment).\n  for (auto *BO : Rec.VolatileAssignmentLHSs)\n    Diag(BO->getBeginLoc(), diag::warn_deprecated_simple_assign_volatile) << BO->getType();"}},
[l]={
["clang/test/SemaCXX/deprecated.cpp"]={"clang/test/SemaCXX/deprecated.cpp:161:18: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:162:24: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:164:22: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:165:22: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:166:23: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:157:9: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:158:13: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:159:9: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:176:9: warning: use of result of assignment to object of volatile-qualified type \'volatile bool\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:178:10: warning: use of result of assignment to object of volatile-qualified type \'volatile bool\' is deprecated [-Wdeprecated-volatile]"}
["clang/test/SemaCXX/deprecated.cpp"]={"clang/test/SemaCXX/deprecated.cpp:161:18: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:162:24: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:164:22: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:165:22: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:166:23: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:157:9: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:158:13: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:159:9: warning: use of result of assignment to object of volatile-qualified type \'volatile int\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:176:9: warning: use of result of assignment to object of volatile-qualified type \'volatile bool\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/deprecated.cpp:178:10: warning: use of result of assignment to object of volatile-qualified type \'volatile bool\' is deprecated [-Wdeprecated-volatile]"}
}
}
},
},
["warn_deprecated_string_literal_conversion"]={
["warn_deprecated_string_literal_conversion"]={
[j]={u,s,"c++11-compat-deprecated-writable-strings",o,ab,"deprecated-writable-strings","writable-strings","write-strings"},
[k]={y,u,"c++11-compat-deprecated-writable-strings",p,jb,"deprecated-writable-strings","writable-strings","write-strings"},
[i]="c++11-compat-deprecated-writable-strings",
[j]="c++11-compat-deprecated-writable-strings",
[c]="conversion from string literal to %0 is deprecated",
[c]="warn_deprecated_string_literal_conversion",
[d]=g,
[d]="conversion from string literal to %0 is deprecated",
[e]="conversion from string literal to (.*?) is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat\\-deprecated\\-writable\\-strings[^\\]]*\\]",
[g]="conversion from string literal to (.*?) is deprecated",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat\\-deprecated\\-writable\\-strings[^\\]]*\\]",
[a]={"e489a7d3d397",1267381825,"Warn about the deprecated string literal -> char* conversion. Fixes PR6428.","Warn about the deprecated string literal -> char* conversion. Fixes PR6428.\n\nllvm-svn: 97404"},
[b]=ob,
[f]={"e489a7d3d397",1267381825,"Warn about the deprecated string literal -> char* conversion. Fixes PR6428.","Warn about the deprecated string literal -> char* conversion. Fixes PR6428.\n\nllvm-svn: 97404"},
[h]={{bc,4753,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  // ...\n  case ICK_Qualification: {\n    // ...\n    if (SCS.DeprecatedStringLiteralToCharPtr && !getLangOpts().WritableStrings) {\n      Diag(From->getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::ext_deprecated_string_literal_conversion : diag::warn_deprecated_string_literal_conversion) << ToType.getNonReferenceType();"}},
[h]={{bc,4753,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  // ...\n  case ICK_Qualification: {\n    // ...\n    if (SCS.DeprecatedStringLiteralToCharPtr && !getLangOpts().WritableStrings) {\n      Diag(From->getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::ext_deprecated_string_literal_conversion : diag::warn_deprecated_string_literal_conversion) << ToType.getNonReferenceType();"}},
[k]={
[l]={
["clang/test/SemaCXX/type-convert-construct.cpp"]={"clang/test/SemaCXX/type-convert-construct.cpp:29:9: warning: conversion from string literal to \'char *\' is deprecated [-Wc++11-compat-deprecated-writable-strings]","clang/test/SemaCXX/type-convert-construct.cpp:36:10: warning: conversion from string literal to \'wchar_t *\' is deprecated [-Wc++11-compat-deprecated-writable-strings]"}
["clang/test/SemaCXX/type-convert-construct.cpp"]={"clang/test/SemaCXX/type-convert-construct.cpp:29:9: warning: conversion from string literal to \'char *\' is deprecated [-Wc++11-compat-deprecated-writable-strings]","clang/test/SemaCXX/type-convert-construct.cpp:36:10: warning: conversion from string literal to \'wchar_t *\' is deprecated [-Wc++11-compat-deprecated-writable-strings]"}
}
}
},
},
["warn_deprecated_this_capture"]={
["warn_deprecated_this_capture"]={
[j]={ab,"deprecated-this-capture"},
[k]={jb,"deprecated-this-capture"},
[i]="deprecated-this-capture",
[j]="deprecated-this-capture",
[c]={{nil,eb,"implicit capture of \'this\' with a capture default of \'=\' is deprecated"}},
[c]={{nil,D,"warn_deprecated_this_capture"}},
[d]=g,
[d]={{nil,D,"implicit capture of \'this\' with a capture default of \'=\' is deprecated"}},
[e]="implicit capture of \'this\' with a capture default of \'\\=\' is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-this\\-capture[^\\]]*\\]",
[g]="implicit capture of \'this\' with a capture default of \'\\=\' is deprecated",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-this\\-capture[^\\]]*\\]",
[a]={"d82201e7c66b",1530943128,"P0806R2 Implicit capture of this with a capture-default of [=] is","P0806R2 Implicit capture of this with a capture-default of [=] is\ndeprecated.\n\nAdd a -Wdeprecated warning for this in C++2a onwards. (In C++17 and\nbefore, there isn\'t a reasonable alternative because [=,this] is\nill-formed.)\n\nllvm-svn: 336480"},
[b]={{nil,D,ob}},
[f]={"d82201e7c66b",1530943128,"P0806R2 Implicit capture of this with a capture-default of [=] is","P0806R2 Implicit capture of this with a capture-default of [=] is\ndeprecated.\n\nAdd a -Wdeprecated warning for this in C++2a onwards. (In C++17 and\nbefore, there isn\'t a reasonable alternative because [=,this] is\nill-formed.)\n\nllvm-svn: 336480"},
[h]={{"clang/lib/Sema/SemaLambda.cpp",2037,"ExprResult Sema::BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc, LambdaScopeInfo *LSI) {\n  // ...\n  {\n    // ...\n    for (unsigned I = 0, N = LSI->Captures.size(); I != N; ++I) {\n      // ...\n      // Map the capture to our AST representation.\n      LambdaCapture Capture = [&] {\n        if (From.isThisCapture()) {\n          // Capturing \'this\' implicitly with a default of \'[=]\' is deprecated,\n          // because it results in a reference capture. Don\'t warn prior to\n          // C++2a; there\'s nothing that can be done about it before then.\n          if (getLangOpts().CPlusPlus20 && IsImplicit && CaptureDefault == LCD_ByCopy) {\n            Diag(From.getLocation(), diag::warn_deprecated_this_capture);"}},
[h]={{"clang/lib/Sema/SemaLambda.cpp",2037,"ExprResult Sema::BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc, LambdaScopeInfo *LSI) {\n  // ...\n  {\n    // ...\n    for (unsigned I = 0, N = LSI->Captures.size(); I != N; ++I) {\n      // ...\n      // Map the capture to our AST representation.\n      LambdaCapture Capture = [&] {\n        if (From.isThisCapture()) {\n          // Capturing \'this\' implicitly with a default of \'[=]\' is deprecated,\n          // because it results in a reference capture. Don\'t warn prior to\n          // C++2a; there\'s nothing that can be done about it before then.\n          if (getLangOpts().CPlusPlus20 && IsImplicit && CaptureDefault == LCD_ByCopy) {\n            Diag(From.getLocation(), diag::warn_deprecated_this_capture);"}},
[k]={
[l]={
["clang/test/SemaCXX/lambda-implicit-this-capture.cpp"]={"clang/test/SemaCXX/lambda-implicit-this-capture.cpp:11:14: warning: implicit capture of \'this\' with a capture default of \'=\' is deprecated [-Wdeprecated-this-capture]"}
["clang/test/SemaCXX/lambda-implicit-this-capture.cpp"]={"clang/test/SemaCXX/lambda-implicit-this-capture.cpp:11:14: warning: implicit capture of \'this\' with a capture default of \'=\' is deprecated [-Wdeprecated-this-capture]"}
}
}
},
},
["warn_deprecated_volatile_param"]={
["warn_deprecated_volatile_param"]={
[j]={ab,Bc},
[k]={jb,Ac},
[i]=Bc,
[j]=Ac,
[c]={{nil,z,"volatile-qualified parameter type %0 is deprecated"}},
[c]={{nil,q,"warn_deprecated_volatile_param"}},
[d]=g,
[d]={{nil,q,"volatile-qualified parameter type %0 is deprecated"}},
[e]="volatile\\-qualified parameter type (.*?) is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]",
[g]="volatile\\-qualified parameter type (.*?) is deprecated",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,ob}},
[h]={{Jb,3041,"QualType Sema::BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes, SourceLocation Loc, DeclarationName Entity, const FunctionProtoType::ExtProtoInfo &EPI) {\n  // ...\n  for (unsigned Idx = 0, Cnt = ParamTypes.size(); Idx < Cnt; ++Idx) {\n    // ...\n    // C++2a [dcl.fct]p4:\n    //  A parameter with volatile-qualified type is deprecated\n    if (ParamType.isVolatileQualified() && getLangOpts().CPlusPlus20)\n      Diag(Loc, diag::warn_deprecated_volatile_param) << ParamType;"},{Jb,5898,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  // C++2a [dcl.fct]p4:\n  //  A parameter with volatile-qualified type is deprecated\n  if (T.isVolatileQualified() && S.getLangOpts().CPlusPlus20 && (D.getContext() == DeclaratorContext::Prototype || D.getContext() == DeclaratorContext::LambdaExprParameter))\n    S.Diag(D.getIdentifierLoc(), diag::warn_deprecated_volatile_param) << T;"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{Nb,3041,"QualType Sema::BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes, SourceLocation Loc, DeclarationName Entity, const FunctionProtoType::ExtProtoInfo &EPI) {\n  // ...\n  for (unsigned Idx = 0, Cnt = ParamTypes.size(); Idx < Cnt; ++Idx) {\n    // ...\n    // C++2a [dcl.fct]p4:\n    //  A parameter with volatile-qualified type is deprecated\n    if (ParamType.isVolatileQualified() && getLangOpts().CPlusPlus20)\n      Diag(Loc, diag::warn_deprecated_volatile_param) << ParamType;"},{Nb,5898,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  // C++2a [dcl.fct]p4:\n  //  A parameter with volatile-qualified type is deprecated\n  if (T.isVolatileQualified() && S.getLangOpts().CPlusPlus20 && (D.getContext() == DeclaratorContext::Prototype || D.getContext() == DeclaratorContext::LambdaExprParameter))\n    S.Diag(D.getIdentifierLoc(), diag::warn_deprecated_volatile_param) << T;"}},
[l]={
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:1143:73: warning: volatile-qualified parameter type \'volatile void *volatile\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/coroutines.cpp:1242:73: warning: volatile-qualified parameter type \'volatile void *volatile\' is deprecated [-Wdeprecated-volatile]"}
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:1143:73: warning: volatile-qualified parameter type \'volatile void *volatile\' is deprecated [-Wdeprecated-volatile]","clang/test/SemaCXX/coroutines.cpp:1242:73: warning: volatile-qualified parameter type \'volatile void *volatile\' is deprecated [-Wdeprecated-volatile]"}
}
}
},
},
["warn_deprecated_volatile_return"]={
["warn_deprecated_volatile_return"]={
[j]={ab,Bc},
[k]={jb,Ac},
[i]=Bc,
[j]=Ac,
[c]={{nil,z,"volatile-qualified return type %0 is deprecated"}},
[c]={{nil,q,"warn_deprecated_volatile_return"}},
[d]=g,
[d]={{nil,q,"volatile-qualified return type %0 is deprecated"}},
[e]="volatile\\-qualified return type (.*?) is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]",
[g]="volatile\\-qualified return type (.*?) is deprecated",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,ob}},
[h]={{Jb,2941,"bool Sema::CheckFunctionReturnType(QualType T, SourceLocation Loc) {\n  // ...\n  // C++2a [dcl.fct]p12:\n  //  A volatile-qualified return type is deprecated\n  if (T.isVolatileQualified() && getLangOpts().CPlusPlus20)\n    Diag(Loc, diag::warn_deprecated_volatile_return) << T;"},{Jb,5368,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::Function: {\n      // ...\n      // cv-qualifiers on return types are pointless except when the type is a\n      // class type in C++.\n      if ((T.getCVRQualifiers() || T->isAtomicType()) && !(S.getLangOpts().CPlusPlus && (T->isDependentType() || T->isRecordType()))) {\n        // ...\n        // C++2a [dcl.fct]p12:\n        //  A volatile-qualified return type is deprecated\n        if (T.isVolatileQualified() && S.getLangOpts().CPlusPlus20)\n          S.Diag(DeclType.Loc, diag::warn_deprecated_volatile_return) << T;"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{Nb,2941,"bool Sema::CheckFunctionReturnType(QualType T, SourceLocation Loc) {\n  // ...\n  // C++2a [dcl.fct]p12:\n  //  A volatile-qualified return type is deprecated\n  if (T.isVolatileQualified() && getLangOpts().CPlusPlus20)\n    Diag(Loc, diag::warn_deprecated_volatile_return) << T;"},{Nb,5368,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::Function: {\n      // ...\n      // cv-qualifiers on return types are pointless except when the type is a\n      // class type in C++.\n      if ((T.getCVRQualifiers() || T->isAtomicType()) && !(S.getLangOpts().CPlusPlus && (T->isDependentType() || T->isRecordType()))) {\n        // ...\n        // C++2a [dcl.fct]p12:\n        //  A volatile-qualified return type is deprecated\n        if (T.isVolatileQualified() && S.getLangOpts().CPlusPlus20)\n          S.Diag(DeclType.Loc, diag::warn_deprecated_volatile_return) << T;"}},
[l]={
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:1033:3: warning: volatile-qualified return type \'const volatile bool\' is deprecated [-Wdeprecated-volatile]"}
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:1033:3: warning: volatile-qualified return type \'const volatile bool\' is deprecated [-Wdeprecated-volatile]"}
}
}
},
},
["warn_deprecated_volatile_structured_binding"]={
["warn_deprecated_volatile_structured_binding"]={
[j]={ab,Bc},
[k]={jb,Ac},
[i]=Bc,
[j]=Ac,
[c]={{nil,z,"volatile qualifier in structured binding declaration is deprecated"}},
[c]={{nil,q,"warn_deprecated_volatile_structured_binding"}},
[d]=g,
[d]={{nil,q,"volatile qualifier in structured binding declaration is deprecated"}},
[e]="volatile qualifier in structured binding declaration is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]",
[g]="volatile qualifier in structured binding declaration is deprecated",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,ob}},
[h]={{C,830,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  // C++2a [dcl.struct.bind]p1:\n  //  A cv that includes volatile is deprecated\n  if ((DS.getTypeQualifiers() & DeclSpec::TQ_volatile) && getLangOpts().CPlusPlus20)\n    Diag(DS.getVolatileSpecLoc(), diag::warn_deprecated_volatile_structured_binding);"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{L,830,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  // C++2a [dcl.struct.bind]p1:\n  //  A cv that includes volatile is deprecated\n  if ((DS.getTypeQualifiers() & DeclSpec::TQ_volatile) && getLangOpts().CPlusPlus20)\n    Diag(DS.getVolatileSpecLoc(), diag::warn_deprecated_volatile_structured_binding);"}},
[l]={
["clang/test/Parser/cxx1z-decomposition.cpp"]={"clang/test/Parser/cxx1z-decomposition.cpp:61:11: warning: volatile qualifier in structured binding declaration is deprecated [-Wdeprecated-volatile]"}
["clang/test/Parser/cxx1z-decomposition.cpp"]={"clang/test/Parser/cxx1z-decomposition.cpp:61:11: warning: volatile qualifier in structured binding declaration is deprecated [-Wdeprecated-volatile]"}
}
}
},
},
["warn_dereference_of_noderef_type"]={
["warn_dereference_of_noderef_type"]={
[j]={"noderef"},
[k]={"noderef"},
[i]="noderef",
[j]="noderef",
[c]={{nil,ob,"dereferencing %0; was declared with a \'noderef\' type"}},
[c]={{nil,B,"warn_dereference_of_noderef_type"}},
[d]=g,
[d]={{nil,B,"dereferencing %0; was declared with a \'noderef\' type"}},
[e]="dereferencing (.*?); was declared with a \'noderef\' type",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wnoderef[^\\]]*\\]",
[g]="dereferencing (.*?); was declared with a \'noderef\' type",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wnoderef[^\\]]*\\]",
[a]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute","[Sema/Attribute] Check for noderef attribute\n\nThis patch adds the noderef attribute in clang and checks for dereferences of\ntypes that have this attribute. This attribute is currently used by sparse and\nwould like to be ported to clang.\n\nDifferential Revision: https://reviews.llvm.org/D49511\n\nllvm-svn: 348442"},
[b]={{nil,B,r}},
[h]={{K,18116,"void Sema::WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec) {\n  for (const Expr *E : Rec.PossibleDerefs) {\n    // ...\n    if (DeclRef) {\n      // ...\n      Diag(E->getExprLoc(), diag::warn_dereference_of_noderef_type) << Decl->getName() << E->getSourceRange();"}},
[f]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute","[Sema/Attribute] Check for noderef attribute\n\nThis patch adds the noderef attribute in clang and checks for dereferences of\ntypes that have this attribute. This attribute is currently used by sparse and\nwould like to be ported to clang.\n\nDifferential Revision: https://reviews.llvm.org/D49511\n\nllvm-svn: 348442"},
[k]={
[h]={{S,18116,"void Sema::WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec) {\n  for (const Expr *E : Rec.PossibleDerefs) {\n    // ...\n    if (DeclRef) {\n      // ...\n      Diag(E->getExprLoc(), diag::warn_dereference_of_noderef_type) << Decl->getName() << E->getSourceRange();"}},
[l]={
["clang/test/Frontend/noderef.cpp"]={"clang/test/Frontend/noderef.cpp:31:12: warning: dereferencing i_ptr; was declared with a \'noderef\' type [-Wnoderef]","clang/test/Frontend/noderef.cpp:32:13: warning: dereferencing i_ptr; was declared with a \'noderef\' type [-Wnoderef]","clang/test/Frontend/noderef.cpp:103:13: warning: dereferencing a; was declared with a \'noderef\' type [-Wnoderef]","clang/test/Frontend/noderef.cpp:107:17: warning: dereferencing child; was declared with a \'noderef\' type [-Wnoderef]","clang/test/Frontend/noderef.cpp:111:17: warning: dereferencing a; was declared with a \'noderef\' type [-Wnoderef]","clang/test/Frontend/noderef.cpp:130:12: warning: dereferencing x; was declared with a \'noderef\' type [-Wnoderef]","clang/test/Frontend/noderef.cpp:135:16: warning: dereferencing glob_ptr; was declared with a \'noderef\' type [-Wnoderef]"}
["clang/test/Frontend/noderef.cpp"]={"clang/test/Frontend/noderef.cpp:31:12: warning: dereferencing i_ptr; was declared with a \'noderef\' type [-Wnoderef]","clang/test/Frontend/noderef.cpp:32:13: warning: dereferencing i_ptr; was declared with a \'noderef\' type [-Wnoderef]","clang/test/Frontend/noderef.cpp:103:13: warning: dereferencing a; was declared with a \'noderef\' type [-Wnoderef]","clang/test/Frontend/noderef.cpp:107:17: warning: dereferencing child; was declared with a \'noderef\' type [-Wnoderef]","clang/test/Frontend/noderef.cpp:111:17: warning: dereferencing a; was declared with a \'noderef\' type [-Wnoderef]","clang/test/Frontend/noderef.cpp:130:12: warning: dereferencing x; was declared with a \'noderef\' type [-Wnoderef]","clang/test/Frontend/noderef.cpp:135:16: warning: dereferencing glob_ptr; was declared with a \'noderef\' type [-Wnoderef]"}
}
}
},
},
["warn_dereference_of_noderef_type_no_decl"]={
["warn_dereference_of_noderef_type_no_decl"]={
[j]={"noderef"},
[k]={"noderef"},
[i]="noderef",
[j]="noderef",
[c]={{nil,ob,"dereferencing expression marked as \'noderef\'"}},
[c]={{nil,B,"warn_dereference_of_noderef_type_no_decl"}},
[d]=g,
[d]={{nil,B,"dereferencing expression marked as \'noderef\'"}},
[e]="dereferencing expression marked as \'noderef\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wnoderef[^\\]]*\\]",
[g]="dereferencing expression marked as \'noderef\'",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wnoderef[^\\]]*\\]",
[a]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute","[Sema/Attribute] Check for noderef attribute\n\nThis patch adds the noderef attribute in clang and checks for dereferences of\ntypes that have this attribute. This attribute is currently used by sparse and\nwould like to be ported to clang.\n\nDifferential Revision: https://reviews.llvm.org/D49511\n\nllvm-svn: 348442"},
[b]={{nil,B,r}},
[h]={{K,18262,"void Sema::WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec) {\n  for (const Expr *E : Rec.PossibleDerefs) {\n    // ...\n    if (DeclRef) {\n    // ...\n    } else {\n      Diag(E->getExprLoc(), diag::warn_dereference_of_noderef_type_no_decl) << E->getSourceRange();"}},
[f]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute","[Sema/Attribute] Check for noderef attribute\n\nThis patch adds the noderef attribute in clang and checks for dereferences of\ntypes that have this attribute. This attribute is currently used by sparse and\nwould like to be ported to clang.\n\nDifferential Revision: https://reviews.llvm.org/D49511\n\nllvm-svn: 348442"},
[k]={
[h]={{S,18262,"void Sema::WarnOnPendingNoDerefs(ExpressionEvaluationContextRecord &Rec) {\n  for (const Expr *E : Rec.PossibleDerefs) {\n    // ...\n    if (DeclRef) {\n    // ...\n    } else {\n      Diag(E->getExprLoc(), diag::warn_dereference_of_noderef_type_no_decl) << E->getSourceRange();"}},
[l]={
["clang/test/Frontend/noderef.c"]={"clang/test/Frontend/noderef.c:53:3: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:49:7: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:121:18: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:37:7: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:77:7: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:40:3: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:188:7: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:177:4: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:31:7: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:124:15: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:142:3: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:173:4: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:185:4: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:101:7: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:159:3: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:195:15: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]"}
["clang/test/Frontend/noderef.c"]={"clang/test/Frontend/noderef.c:53:3: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:49:7: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:121:18: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:37:7: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:77:7: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:40:3: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:188:7: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:177:4: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:31:7: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:124:15: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:142:3: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:173:4: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:185:4: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:101:7: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:159:3: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]","clang/test/Frontend/noderef.c:195:15: warning: dereferencing expression marked as \'noderef\' [-Wnoderef]"}
}
}
},
},
["warn_diagnose_if_succeeded"]={
["warn_diagnose_if_succeeded"]={
[j]={B,H,N,"user-defined-warnings"},
[k]={K,O,V,"user-defined-warnings"},
[i]="user-defined-warnings",
[j]="user-defined-warnings",
[c]="%0",
[c]="warn_diagnose_if_succeeded",
[d]=g,
[d]=Gd,
[e]="(.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wuser\\-defined\\-warnings[^\\]]*\\]",
[g]="(.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wuser\\-defined\\-warnings[^\\]]*\\]",
[a]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang.","Add the diagnose_if attribute to clang.\n\n`diagnose_if` can be used to have clang emit either warnings or errors\nfor function calls that meet user-specified conditions. For example:\n\n```\nconstexpr int foo(int a)\n  __attribute__((diagnose_if(a > 10, \"configurations with a > 10 are \"\n                                      \"expensive.\", \"warning\")));\n\nint f1 = foo(9);\nint f2 = foo(10); // warning: configuration with a > 10 are expensive.\nint f3 = foo(f2);\n```\n\nIt currently only emits diagnostics in cases where the condition is\nguaranteed to always be true. So, the following code will emit no\nwarnings:\n\n```\nconstexpr int bar(int a) {\n  foo(a);\n  return 0;\n}\n\nconstexpr int i = bar(10);\n```\n\nWe hope to support optionally emitting diagnostics for cases like that\n(and emitting runtime checks) in the future.\n\nRelease notes will appear shortly. :)\n\nDifferential Revision: https://reviews.llvm.org/D27424\n\nllvm-svn: 291418"},
[b]=m,
[f]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang.","Add the diagnose_if attribute to clang.\n\n`diagnose_if` can be used to have clang emit either warnings or errors\nfor function calls that meet user-specified conditions. For example:\n\n```\nconstexpr int foo(int a)\n  __attribute__((diagnose_if(a > 10, \"configurations with a > 10 are \"\n                                      \"expensive.\", \"warning\")));\n\nint f1 = foo(9);\nint f2 = foo(10); // warning: configuration with a > 10 are expensive.\nint f3 = foo(f2);\n```\n\nIt currently only emits diagnostics in cases where the condition is\nguaranteed to always be true. So, the following code will emit no\nwarnings:\n\n```\nconstexpr int bar(int a) {\n  foo(a);\n  return 0;\n}\n\nconstexpr int i = bar(10);\n```\n\nWe hope to support optionally emitting diagnostics for cases like that\n(and emitting runtime checks) in the future.\n\nRelease notes will appear shortly. :)\n\nDifferential Revision: https://reviews.llvm.org/D27424\n\nllvm-svn: 291418"},
[h]={{"clang/lib/Sema/SemaOpenMP.cpp",11167,"StmtResult Sema::ActOnOpenMPErrorDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc, bool InExContext) {\n  // ...\n  if (!AtC || AtC->getAtKind() == OMPC_AT_compilation) {\n    if (SeverityC && SeverityC->getSeverityKind() == OMPC_SEVERITY_warning)\n      Diag(SeverityC->getSeverityKindKwLoc(), diag::warn_diagnose_if_succeeded) << (ME ? cast<StringLiteral>(ME)->getString() : \"WARNING\");"},{"clang/lib/Sema/SemaOverload.cpp",6960,"template <typename CheckFn> static bool diagnoseDiagnoseIfAttrsWith(Sema &S, const NamedDecl *ND, bool ArgDependent, SourceLocation Loc, CheckFn &&IsSuccessful) {\n  // ...\n  for (const auto *DIA : llvm::make_range(WarningBegin, Attrs.end()))\n    if (IsSuccessful(DIA)) {\n      S.Diag(Loc, diag::warn_diagnose_if_succeeded) << DIA->getMessage();"}},
[h]={{"clang/lib/Sema/SemaOpenMP.cpp",11167,"StmtResult Sema::ActOnOpenMPErrorDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc, bool InExContext) {\n  // ...\n  if (!AtC || AtC->getAtKind() == OMPC_AT_compilation) {\n    if (SeverityC && SeverityC->getSeverityKind() == OMPC_SEVERITY_warning)\n      Diag(SeverityC->getSeverityKindKwLoc(), diag::warn_diagnose_if_succeeded) << (ME ? cast<StringLiteral>(ME)->getString() : \"WARNING\");"},{"clang/lib/Sema/SemaOverload.cpp",6960,"template <typename CheckFn> static bool diagnoseDiagnoseIfAttrsWith(Sema &S, const NamedDecl *ND, bool ArgDependent, SourceLocation Loc, CheckFn &&IsSuccessful) {\n  // ...\n  for (const auto *DIA : llvm::make_range(WarningBegin, Attrs.end()))\n    if (IsSuccessful(DIA)) {\n      S.Diag(Loc, diag::warn_diagnose_if_succeeded) << DIA->getMessage();"}},
[k]={
[l]={
["clang/test/SemaCXX/operator-new-size-diagnose_if.cpp"]={"clang/test/SemaCXX/operator-new-size-diagnose_if.cpp:19:3: warning: yay [-Wuser-defined-warnings]","clang/test/SemaCXX/operator-new-size-diagnose_if.cpp:20:3: warning: yay [-Wuser-defined-warnings]","clang/test/SemaCXX/operator-new-size-diagnose_if.cpp:21:3: warning: yay [-Wuser-defined-warnings]"}
["clang/test/SemaCXX/operator-new-size-diagnose_if.cpp"]={"clang/test/SemaCXX/operator-new-size-diagnose_if.cpp:19:3: warning: yay [-Wuser-defined-warnings]","clang/test/SemaCXX/operator-new-size-diagnose_if.cpp:20:3: warning: yay [-Wuser-defined-warnings]","clang/test/SemaCXX/operator-new-size-diagnose_if.cpp:21:3: warning: yay [-Wuser-defined-warnings]"}
}
}
},
},
["warn_direct_initialize_call"]={
["warn_direct_initialize_call"]={
[j]={"explicit-initialize-call"},
[k]={"explicit-initialize-call"},
[i]="explicit-initialize-call",
[j]="explicit-initialize-call",
[c]="explicit call to +initialize results in duplicate call to +initialize",
[c]="warn_direct_initialize_call",
[d]=g,
[d]="explicit call to +initialize results in duplicate call to +initialize",
[e]="explicit call to \\+initialize results in duplicate call to \\+initialize",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wexplicit\\-initialize\\-call[^\\]]*\\]",
[g]="explicit call to \\+initialize results in duplicate call to \\+initialize",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wexplicit\\-initialize\\-call[^\\]]*\\]",
[a]={"78e9debf68d4",1408726646,"Objective-C. Warn if user has made explicit call","Objective-C. Warn if user has made explicit call\nto +initilize as this results in an extra call\nto this method. rdar://16628028\n\nllvm-svn: 216271"},
[b]=m,
[h]={{Sc,2718,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  // Warn about explicit call of +initialize on its own class. But not on \'super\'.\n  if (Method && Method->getMethodFamily() == OMF_initialize) {\n    if (!SuperLoc.isValid()) {\n      // ...\n      if (ID == Class) {\n        Diag(Loc, diag::warn_direct_initialize_call);"}},
[f]={"78e9debf68d4",1408726646,"Objective-C. Warn if user has made explicit call","Objective-C. Warn if user has made explicit call\nto +initilize as this results in an extra call\nto this method. rdar://16628028\n\nllvm-svn: 216271"},
[k]={
[h]={{Uc,2718,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  // Warn about explicit call of +initialize on its own class. But not on \'super\'.\n  if (Method && Method->getMethodFamily() == OMF_initialize) {\n    if (!SuperLoc.isValid()) {\n      // ...\n      if (ID == Class) {\n        Diag(Loc, diag::warn_direct_initialize_call);"}},
[l]={
["clang/test/SemaObjC/warn-explicit-call-initialize.m"]={"clang/test/SemaObjC/warn-explicit-call-initialize.m:15:4: warning: explicit call to +initialize results in duplicate call to +initialize [-Wexplicit-initialize-call]","clang/test/SemaObjC/warn-explicit-call-initialize.m:16:4: warning: explicit call to +initialize results in duplicate call to +initialize [-Wexplicit-initialize-call]"}
["clang/test/SemaObjC/warn-explicit-call-initialize.m"]={"clang/test/SemaObjC/warn-explicit-call-initialize.m:15:4: warning: explicit call to +initialize results in duplicate call to +initialize [-Wexplicit-initialize-call]","clang/test/SemaObjC/warn-explicit-call-initialize.m:16:4: warning: explicit call to +initialize results in duplicate call to +initialize [-Wexplicit-initialize-call]"}
}
}
},
},
["warn_direct_ivar_access"]={
["warn_direct_ivar_access"]={
[j]={"direct-ivar-access"},
[k]={"direct-ivar-access"},
[i]="direct-ivar-access",
[j]="direct-ivar-access",
[c]="instance variable %0 is being directly accessed",
[c]="warn_direct_ivar_access",
[d]=g,
[d]="instance variable %0 is being directly accessed",
[e]="instance variable (.*?) is being directly accessed",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdirect\\-ivar\\-access[^\\]]*\\]",
[g]="instance variable (.*?) is being directly accessed",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdirect\\-ivar\\-access[^\\]]*\\]",
[a]={"14f1aa70a9fa",1344297051,"objective-c: Implement gcc\'s -Wdirect-ivar-access option.","objective-c: Implement gcc\'s -Wdirect-ivar-access option.\n// rdar://6505197\n\nllvm-svn: 161362"},
[b]=m,
[h]={{K,3041,"ExprResult Sema::BuildIvarRefExpr(Scope *S, SourceLocation Loc, ObjCIvarDecl *IV) {\n  // ...\n  if (MF != OMF_init && MF != OMF_dealloc && MF != OMF_finalize && !IvarBacksCurrentMethodAccessor(IFace, CurMethod, IV))\n    Diag(Loc, diag::warn_direct_ivar_access) << IV->getDeclName();"},{"clang/lib/Sema/SemaExprMember.cpp",1474,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    // ...\n    if (warn) {\n      // ...\n      if (warn)\n        S.Diag(MemberLoc, diag::warn_direct_ivar_access) << IV->getDeclName();"}},
[f]={"14f1aa70a9fa",1344297051,"objective-c: Implement gcc\'s -Wdirect-ivar-access option.","objective-c: Implement gcc\'s -Wdirect-ivar-access option.\n// rdar://6505197\n\nllvm-svn: 161362"},
[k]={
[h]={{S,3041,"ExprResult Sema::BuildIvarRefExpr(Scope *S, SourceLocation Loc, ObjCIvarDecl *IV) {\n  // ...\n  if (MF != OMF_init && MF != OMF_dealloc && MF != OMF_finalize && !IvarBacksCurrentMethodAccessor(IFace, CurMethod, IV))\n    Diag(Loc, diag::warn_direct_ivar_access) << IV->getDeclName();"},{"clang/lib/Sema/SemaExprMember.cpp",1474,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    // ...\n    if (warn) {\n      // ...\n      if (warn)\n        S.Diag(MemberLoc, diag::warn_direct_ivar_access) << IV->getDeclName();"}},
[l]={
["clang/test/SemaObjC/warn-direct-ivar-access.m"]={"clang/test/SemaObjC/warn-direct-ivar-access.m:22:5: warning: instance variable \'_myLeader\' is being directly accessed [-Wdirect-ivar-access]","clang/test/SemaObjC/warn-direct-ivar-access.m:22:17: warning: instance variable \'_isTickledPink\' is being directly accessed [-Wdirect-ivar-access]","clang/test/SemaObjC/warn-direct-ivar-access.m:37:5: warning: instance variable \'_isTickledPink\' is being directly accessed [-Wdirect-ivar-access]","clang/test/SemaObjC/warn-direct-ivar-access.m:37:27: warning: instance variable \'_myLeader\' is being directly accessed [-Wdirect-ivar-access]","clang/test/SemaObjC/warn-direct-ivar-access.m:39:16: warning: instance variable \'_myIntProp\' is being directly accessed [-Wdirect-ivar-access]","clang/test/SemaObjC/warn-direct-ivar-access.m:40:14: warning: instance variable \'_myIntProp\' is being directly accessed [-Wdirect-ivar-access]","clang/test/SemaObjC/warn-direct-ivar-access.m:41:12: warning: instance variable \'_isTickledPink\' is being directly accessed [-Wdirect-ivar-access]","clang/test/SemaObjC/warn-direct-ivar-access.m:74:38: warning: instance variable \'_property_in_protocol\' is being directly accessed [-Wdirect-ivar-access]"}
["clang/test/SemaObjC/warn-direct-ivar-access.m"]={"clang/test/SemaObjC/warn-direct-ivar-access.m:22:5: warning: instance variable \'_myLeader\' is being directly accessed [-Wdirect-ivar-access]","clang/test/SemaObjC/warn-direct-ivar-access.m:22:17: warning: instance variable \'_isTickledPink\' is being directly accessed [-Wdirect-ivar-access]","clang/test/SemaObjC/warn-direct-ivar-access.m:37:5: warning: instance variable \'_isTickledPink\' is being directly accessed [-Wdirect-ivar-access]","clang/test/SemaObjC/warn-direct-ivar-access.m:37:27: warning: instance variable \'_myLeader\' is being directly accessed [-Wdirect-ivar-access]","clang/test/SemaObjC/warn-direct-ivar-access.m:39:16: warning: instance variable \'_myIntProp\' is being directly accessed [-Wdirect-ivar-access]","clang/test/SemaObjC/warn-direct-ivar-access.m:40:14: warning: instance variable \'_myIntProp\' is being directly accessed [-Wdirect-ivar-access]","clang/test/SemaObjC/warn-direct-ivar-access.m:41:12: warning: instance variable \'_isTickledPink\' is being directly accessed [-Wdirect-ivar-access]","clang/test/SemaObjC/warn-direct-ivar-access.m:74:38: warning: instance variable \'_property_in_protocol\' is being directly accessed [-Wdirect-ivar-access]"}
}
}
},
},
["warn_direct_super_initialize_call"]={
["warn_direct_super_initialize_call"]={
[j]={"explicit-initialize-call"},
[k]={"explicit-initialize-call"},
[i]="explicit-initialize-call",
[j]="explicit-initialize-call",
[c]="explicit call to [super initialize] should only be in implementation of +initialize",
[c]="warn_direct_super_initialize_call",
[d]=g,
[d]="explicit call to [super initialize] should only be in implementation of +initialize",
[e]="explicit call to \\[super initialize\\] should only be in implementation of \\+initialize",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wexplicit\\-initialize\\-call[^\\]]*\\]",
[g]="explicit call to \\[super initialize\\] should only be in implementation of \\+initialize",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wexplicit\\-initialize\\-call[^\\]]*\\]",
[a]={"422922838920",1409002058,"Objective-C. Allow [super initialize] in an +initialize","Objective-C. Allow [super initialize] in an +initialize\nimplementation but not anywhere else.\nrdar://16628028\n\nllvm-svn: 216408"},
[b]=m,
[h]={{Sc,2726,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  // Warn about explicit call of +initialize on its own class. But not on \'super\'.\n  if (Method && Method->getMethodFamily() == OMF_initialize) {\n    if (!SuperLoc.isValid()) {\n    // ...\n    } else if (ObjCMethodDecl *CurMeth = getCurMethodDecl()) {\n      // [super initialize] is allowed only within an +initialize implementation\n      if (CurMeth->getMethodFamily() != OMF_initialize) {\n        Diag(Loc, diag::warn_direct_super_initialize_call);"}},
[f]={"422922838920",1409002058,"Objective-C. Allow [super initialize] in an +initialize","Objective-C. Allow [super initialize] in an +initialize\nimplementation but not anywhere else.\nrdar://16628028\n\nllvm-svn: 216408"},
[k]={
[h]={{Uc,2726,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  // Warn about explicit call of +initialize on its own class. But not on \'super\'.\n  if (Method && Method->getMethodFamily() == OMF_initialize) {\n    if (!SuperLoc.isValid()) {\n    // ...\n    } else if (ObjCMethodDecl *CurMeth = getCurMethodDecl()) {\n      // [super initialize] is allowed only within an +initialize implementation\n      if (CurMeth->getMethodFamily() != OMF_initialize) {\n        Diag(Loc, diag::warn_direct_super_initialize_call);"}},
[l]={
["clang/test/SemaObjC/warn-explicit-call-initialize.m"]={"clang/test/SemaObjC/warn-explicit-call-initialize.m:22:4: warning: explicit call to [super initialize] should only be in implementation of +initialize [-Wexplicit-initialize-call]"}
["clang/test/SemaObjC/warn-explicit-call-initialize.m"]={"clang/test/SemaObjC/warn-explicit-call-initialize.m:22:4: warning: explicit call to [super initialize] should only be in implementation of +initialize [-Wexplicit-initialize-call]"}
}
}
},
},
["warn_dispatch_body_ignored"]={
["warn_dispatch_body_ignored"]={
[j]={"function-multiversion"},
[k]={"function-multiversion"},
[i]="function-multiversion",
[j]="function-multiversion",
[c]={{nil,eb,"body of cpu_dispatch function will be ignored"}},
[c]={{nil,D,"warn_dispatch_body_ignored"}},
[d]=g,
[d]={{nil,D,"body of cpu_dispatch function will be ignored"}},
[e]="body of cpu_dispatch function will be ignored",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfunction\\-multiversion[^\\]]*\\]",
[g]="body of cpu_dispatch function will be ignored",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wfunction\\-multiversion[^\\]]*\\]",
[a]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning\n\nAs documented here: https://software.intel.com/en-us/node/682969 and\nhttps://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning\nis an ICC feature that provides for function multiversioning.\n\nThis feature is implemented with two attributes: First, cpu_specific,\nwhich specifies the individual function versions. Second, cpu_dispatch,\nwhich specifies the location of the resolver function and the list of\nresolvable functions.\n\nThis is valuable since it provides a mechanism where the resolver\'s TU\ncan be specified in one location, and the individual implementions\neach in their own translation units.\n\nThe goal of this patch is to be source-compatible with ICC, so this\nimplementation diverges from the ICC implementation in a few ways:\n1- Linux x86/64 only: This implementation uses ifuncs in order to\nproperly dispatch functions. This is is a valuable performance benefit\nover the ICC implementation. A future patch will be provided to enable\nthis feature on Windows, but it will obviously more closely fit ICC\'s\nimplementation.\n2- CPU Identification functions: ICC uses a set of custom functions to identify\nthe feature list of the host processor. This patch uses the cpu_supports\nfunctionality in order to better align with \'target\' multiversioning.\n1- cpu_dispatch function def/decl: ICC\'s cpu_dispatch requires that the function\nmarked cpu_dispatch be an empty definition. This patch supports that as well,\nhowever declarations are also permitted, since the linker will solve the\nissue of multiple emissions.\n\nDifferential Revision: https://reviews.llvm.org/D47474\n\nllvm-svn: 337552"},
[b]={{nil,D,r}},
[h]={{D,15786,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  // ...\n  {\n    // ...\n    if (FD) {\n      // ...\n      // Warn on CPUDispatch with an actual body.\n      if (FD->isMultiVersion() && FD->hasAttr<CPUDispatchAttr>() && Body)\n        if (const auto *CmpndBody = dyn_cast<CompoundStmt>(Body))\n          if (!CmpndBody->body_empty())\n            Diag(CmpndBody->body_front()->getBeginLoc(), diag::warn_dispatch_body_ignored);"}},
[f]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning\n\nAs documented here: https://software.intel.com/en-us/node/682969 and\nhttps://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning\nis an ICC feature that provides for function multiversioning.\n\nThis feature is implemented with two attributes: First, cpu_specific,\nwhich specifies the individual function versions. Second, cpu_dispatch,\nwhich specifies the location of the resolver function and the list of\nresolvable functions.\n\nThis is valuable since it provides a mechanism where the resolver\'s TU\ncan be specified in one location, and the individual implementions\neach in their own translation units.\n\nThe goal of this patch is to be source-compatible with ICC, so this\nimplementation diverges from the ICC implementation in a few ways:\n1- Linux x86/64 only: This implementation uses ifuncs in order to\nproperly dispatch functions. This is is a valuable performance benefit\nover the ICC implementation. A future patch will be provided to enable\nthis feature on Windows, but it will obviously more closely fit ICC\'s\nimplementation.\n2- CPU Identification functions: ICC uses a set of custom functions to identify\nthe feature list of the host processor. This patch uses the cpu_supports\nfunctionality in order to better align with \'target\' multiversioning.\n1- cpu_dispatch function def/decl: ICC\'s cpu_dispatch requires that the function\nmarked cpu_dispatch be an empty definition. This patch supports that as well,\nhowever declarations are also permitted, since the linker will solve the\nissue of multiple emissions.\n\nDifferential Revision: https://reviews.llvm.org/D47474\n\nllvm-svn: 337552"},
[k]={
[h]={{M,15786,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  // ...\n  {\n    // ...\n    if (FD) {\n      // ...\n      // Warn on CPUDispatch with an actual body.\n      if (FD->isMultiVersion() && FD->hasAttr<CPUDispatchAttr>() && Body)\n        if (const auto *CmpndBody = dyn_cast<CompoundStmt>(Body))\n          if (!CmpndBody->body_empty())\n            Diag(CmpndBody->body_front()->getBeginLoc(), diag::warn_dispatch_body_ignored);"}},
[l]={
["clang/test/Sema/attr-cpuspecific.c"]={"clang/test/Sema/attr-cpuspecific.c:102:3: warning: body of cpu_dispatch function will be ignored [-Wfunction-multiversion]"}
["clang/test/Sema/attr-cpuspecific.c"]={"clang/test/Sema/attr-cpuspecific.c:102:3: warning: body of cpu_dispatch function will be ignored [-Wfunction-multiversion]"}
}
}
},
},
["warn_division_sizeof_array"]={
["warn_division_sizeof_array"]={
[j]={"sizeof-array-div"},
[k]={"sizeof-array-div"},
[i]="sizeof-array-div",
[j]="sizeof-array-div",
[c]={{nil,z,"expression does not compute the number of elements in this array; element type is %0, not %1"}},
[c]={{nil,q,"warn_division_sizeof_array"}},
[d]=g,
[d]={{nil,q,"expression does not compute the number of elements in this array; element type is %0, not %1"}},
[e]="expression does not compute the number of elements in this array; element type is (.*?), not (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wsizeof\\-array\\-div[^\\]]*\\]",
[g]="expression does not compute the number of elements in this array; element type is (.*?), not (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wsizeof\\-array\\-div[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,m}},
[h]={{K,11329,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  // ...\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n  // ...\n  } else if (const auto *ArrayTy = S.Context.getAsArrayType(LHSTy)) {\n    // ...\n    S.Diag(Loc, diag::warn_division_sizeof_array) << LHSArg->getSourceRange() << ArrayElemTy << RHSTy;"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{S,11329,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  // ...\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n  // ...\n  } else if (const auto *ArrayTy = S.Context.getAsArrayType(LHSTy)) {\n    // ...\n    S.Diag(Loc, diag::warn_division_sizeof_array) << LHSArg->getSourceRange() << ArrayElemTy << RHSTy;"}},
[l]={
["clang/test/Sema/div-sizeof-array.cpp"]={"clang/test/Sema/div-sizeof-array.cpp:16:23: warning: expression does not compute the number of elements in this array; element type is \'int\', not \'int *\' [-Wsizeof-array-div]","clang/test/Sema/div-sizeof-array.cpp:19:24: warning: expression does not compute the number of elements in this array; element type is \'int\', not \'short\' [-Wsizeof-array-div]","clang/test/Sema/div-sizeof-array.cpp:51:29: warning: expression does not compute the number of elements in this array; element type is \'int *\', not \'int\' [-Wsizeof-array-div]"}
["clang/test/Sema/div-sizeof-array.cpp"]={"clang/test/Sema/div-sizeof-array.cpp:16:23: warning: expression does not compute the number of elements in this array; element type is \'int\', not \'int *\' [-Wsizeof-array-div]","clang/test/Sema/div-sizeof-array.cpp:19:24: warning: expression does not compute the number of elements in this array; element type is \'int\', not \'short\' [-Wsizeof-array-div]","clang/test/Sema/div-sizeof-array.cpp:51:29: warning: expression does not compute the number of elements in this array; element type is \'int *\', not \'int\' [-Wsizeof-array-div]"}
}
}
},
},
["warn_division_sizeof_ptr"]={
["warn_division_sizeof_ptr"]={
[j]={"sizeof-pointer-div"},
[k]={"sizeof-pointer-div"},
[i]="sizeof-pointer-div",
[j]="sizeof-pointer-div",
[c]={{nil,ob,"\'%0\' will return the size of the pointer, not the array itself"}},
[c]={{nil,B,"warn_division_sizeof_ptr"}},
[d]=g,
[d]={{nil,B,"\'%0\' will return the size of the pointer, not the array itself"}},
[e]="\'(.*?)\' will return the size of the pointer, not the array itself",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wsizeof\\-pointer\\-div[^\\]]*\\]",
[g]="\'(.*?)\' will return the size of the pointer, not the array itself",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wsizeof\\-pointer\\-div[^\\]]*\\]",
[a]={"b8dc05260c7d",1541089570,"[Diagnostics] Implement -Wsizeof-pointer-div ","[Diagnostics] Implement -Wsizeof-pointer-div \n\nSummary:\nvoid test(int *arr) {\n    int arr_len = sizeof(arr) / sizeof(*arr);  // warn, incorrect way to compute number of array elements\n}\n\nEnabled under -Wall (same behaviour as GCC)\n\nReviewers: rsmith, MTC, aaron.ballman\n\nReviewed By: aaron.ballman\n\nSubscribers: MTC, thakis, jfb, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D52949\n\nllvm-svn: 345847"},
[b]={{nil,B,m}},
[h]={{K,11315,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  // ...\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n    // ...\n    S.Diag(Loc, diag::warn_division_sizeof_ptr) << LHS << LHS->getSourceRange();"}},
[f]={"b8dc05260c7d",1541089570,"[Diagnostics] Implement -Wsizeof-pointer-div ","[Diagnostics] Implement -Wsizeof-pointer-div \n\nSummary:\nvoid test(int *arr) {\n    int arr_len = sizeof(arr) / sizeof(*arr);  // warn, incorrect way to compute number of array elements\n}\n\nEnabled under -Wall (same behaviour as GCC)\n\nReviewers: rsmith, MTC, aaron.ballman\n\nReviewed By: aaron.ballman\n\nSubscribers: MTC, thakis, jfb, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D52949\n\nllvm-svn: 345847"},
[k]={
[h]={{S,11315,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  // ...\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n    // ...\n    S.Diag(Loc, diag::warn_division_sizeof_ptr) << LHS << LHS->getSourceRange();"}},
[l]={
["clang/test/Sema/div-sizeof-ptr.cpp"]={"clang/test/Sema/div-sizeof-ptr.cpp:12:22: warning: \'sizeof (p)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:13:21: warning: \'sizeof p\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:14:22: warning: \'sizeof (p)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:15:22: warning: \'sizeof (p)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:16:22: warning: \'sizeof (p)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:17:22: warning: \'sizeof (r)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:20:22: warning: \'sizeof (d)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:21:22: warning: \'sizeof (d)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:23:23: warning: \'sizeof (*q)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:24:23: warning: \'sizeof (p)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]"}
["clang/test/Sema/div-sizeof-ptr.cpp"]={"clang/test/Sema/div-sizeof-ptr.cpp:12:22: warning: \'sizeof (p)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:13:21: warning: \'sizeof p\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:14:22: warning: \'sizeof (p)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:15:22: warning: \'sizeof (p)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:16:22: warning: \'sizeof (p)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:17:22: warning: \'sizeof (r)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:20:22: warning: \'sizeof (d)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:21:22: warning: \'sizeof (d)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:23:23: warning: \'sizeof (*q)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]","clang/test/Sema/div-sizeof-ptr.cpp:24:23: warning: \'sizeof (p)\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]"}
}
}
},
},
["warn_dllimport_dropped_from_inline_function"]={
["warn_dllimport_dropped_from_inline_function"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]="%q0 redeclared inline; %1 attribute ignored",
[c]="warn_dllimport_dropped_from_inline_function",
[d]=g,
[d]="%q0 redeclared inline; %1 attribute ignored",
[e]="(.*?) redeclared inline; (.*?) attribute ignored",
[e]=i,
[f]=vb,
[g]="(.*?) redeclared inline; (.*?) attribute ignored",
[b]=l,
[a]=Db,
[a]={"606bd6dcc547",1415024685,"Don\'t dllimport inline functions when targeting MinGW (PR21366)","Don\'t dllimport inline functions when targeting MinGW (PR21366)\n\nIt turns out that MinGW never dllimports of exports inline functions.\nThis means that code compiled with Clang would fail to link with\nMinGW-compiled libraries since we might try to import functions that\nare not imported.\n\nTo fix this, make Clang never dllimport inline functions when targeting\nMinGW.\n\nllvm-svn: 221154"},
[b]=m,
[h]={{D,7160,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  // ...\n  if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n  // ...\n  } else if (IsInline && OldImportAttr && !IsMicrosoftABI) {\n    // ...\n    S.Diag(NewDecl->getLocation(), diag::warn_dllimport_dropped_from_inline_function) << NewDecl << OldImportAttr;"}},
[f]={"606bd6dcc547",1415024685,"Don\'t dllimport inline functions when targeting MinGW (PR21366)","Don\'t dllimport inline functions when targeting MinGW (PR21366)\n\nIt turns out that MinGW never dllimports of exports inline functions.\nThis means that code compiled with Clang would fail to link with\nMinGW-compiled libraries since we might try to import functions that\nare not imported.\n\nTo fix this, make Clang never dllimport inline functions when targeting\nMinGW.\n\nllvm-svn: 221154"},
[k]={
[h]={{M,7160,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  // ...\n  if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n  // ...\n  } else if (IsInline && OldImportAttr && !IsMicrosoftABI) {\n    // ...\n    S.Diag(NewDecl->getLocation(), diag::warn_dllimport_dropped_from_inline_function) << NewDecl << OldImportAttr;"}},
[l]={
["clang/test/Sema/dllimport.c"]={"clang/test/Sema/dllimport.c:208:35: warning: \'redecl6\' redeclared inline; \'dllimport\' attribute ignored [-Wignored-attributes]"}
["clang/test/Sema/dllimport.c"]={"clang/test/Sema/dllimport.c:208:35: warning: \'redecl6\' redeclared inline; \'dllimport\' attribute ignored [-Wignored-attributes]"}
}
}
},
},
["warn_doc_api_container_decl_mismatch"]={
["warn_doc_api_container_decl_mismatch"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="\'%select{\\|@}0%select{class|interface|protocol|struct|union}1\' command should not be used in a comment attached to a non-%select{class|interface|protocol|struct|union}2 declaration",
[c]="warn_doc_api_container_decl_mismatch",
[d]=g,
[d]="\'%select{\\|@}0%select{class|interface|protocol|struct|union}1\' command should not be used in a comment attached to a non-%select{class|interface|protocol|struct|union}2 declaration",
[e]="\'(?:\\\\|@)(?:class|interface|protocol|struct|union)\' command should not be used in a comment attached to a non\\-(?:class|interface|protocol|struct|union) declaration",
[e]=i,
[f]=Lb,
[g]="\'(?:\\\\|@)(?:class|interface|protocol|struct|union)\' command should not be used in a comment attached to a non\\-(?:class|interface|protocol|struct|union) declaration",
[b]=pb,
[a]=Qb,
[a]={"a649eee9e877",1362699191,"HeaderDoc: Support more of HeaderDoc documentation ","HeaderDoc: Support more of HeaderDoc documentation \ncommands; top level tags such as @interface and\ntheir 2nd level tags such as @coclass, etc.\n// rdar://12379114\n\nllvm-svn: 176667"},
[b]=sb,
[h]={{wb,165,"void Sema::checkContainerDeclVerbatimLine(const BlockCommandComment *Comment) {\n  // ...\n  if (DiagSelect)\n    Diag(Comment->getLocation(), diag::warn_doc_api_container_decl_mismatch) << Comment->getCommandMarker() << (DiagSelect - 1) << (DiagSelect - 1) << Comment->getSourceRange();"}},
[f]={"a649eee9e877",1362699191,"HeaderDoc: Support more of HeaderDoc documentation ","HeaderDoc: Support more of HeaderDoc documentation \ncommands; top level tags such as @interface and\ntheir 2nd level tags such as @coclass, etc.\n// rdar://12379114\n\nllvm-svn: 176667"},
[k]={
[h]={{Bb,165,"void Sema::checkContainerDeclVerbatimLine(const BlockCommandComment *Comment) {\n  // ...\n  if (DiagSelect)\n    Diag(Comment->getLocation(), diag::warn_doc_api_container_decl_mismatch) << Comment->getCommandMarker() << (DiagSelect - 1) << (DiagSelect - 1) << Comment->getSourceRange();"}},
[l]={
["clang/test/Sema/warn-documentation.m"]={"clang/test/Sema/warn-documentation.m:116:2: warning: \'@interface\' command should not be used in a comment attached to a non-interface declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.m:143:2: warning: \'@protocol\' command should not be used in a comment attached to a non-protocol declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.m:167:3: warning: \'@protocol\' command should not be used in a comment attached to a non-protocol declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.m:173:4: warning: \'@struct\' command should not be used in a comment attached to a non-struct declaration [-Wdocumentation]"}
["clang/test/Sema/warn-documentation.m"]={"clang/test/Sema/warn-documentation.m:116:2: warning: \'@interface\' command should not be used in a comment attached to a non-interface declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.m:143:2: warning: \'@protocol\' command should not be used in a comment attached to a non-protocol declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.m:167:3: warning: \'@protocol\' command should not be used in a comment attached to a non-protocol declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.m:173:4: warning: \'@struct\' command should not be used in a comment attached to a non-struct declaration [-Wdocumentation]"}
}
}
},
},
["warn_doc_block_command_duplicate"]={
["warn_doc_block_command_duplicate"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="duplicated command \'%select{\\|@}0%1\'",
[c]="warn_doc_block_command_duplicate",
[d]=g,
[d]="duplicated command \'%select{\\|@}0%1\'",
[e]="duplicated command \'(?:\\\\|@)(.*?)\'",
[e]=i,
[f]=Lb,
[g]="duplicated command \'(?:\\\\|@)(.*?)\'",
[b]=pb,
[a]=Qb,
[a]={"5ec0c7536a98",1344272907,"Comment diagnostics: warn on duplicate \\brief and \\return commands.","Comment diagnostics: warn on duplicate \\brief and \\return commands.\n\nDoxygen manual claims that multiple \\brief or \\returns commands will be merged\ntogether, but actual behavior is different (second \\brief command becomes a\npart of a discussion, second \\returns becomes a \"Returns: blah\" paragraph on\nits own).  Anyway, it seems to be a bad idea to use multiple \\brief or \\returns\ncommands in a single command.\n\nllvm-svn: 161325"},
[b]=sb,
[h]={{wb,623,"void Sema::checkBlockCommandDuplicate(const BlockCommandComment *Command) {\n  // ...\n  Diag(Command->getLocation(), diag::warn_doc_block_command_duplicate) << Command->getCommandMarker() << CommandName << Command->getSourceRange();"}},
[f]={"5ec0c7536a98",1344272907,"Comment diagnostics: warn on duplicate \\brief and \\return commands.","Comment diagnostics: warn on duplicate \\brief and \\return commands.\n\nDoxygen manual claims that multiple \\brief or \\returns commands will be merged\ntogether, but actual behavior is different (second \\brief command becomes a\npart of a discussion, second \\returns becomes a \"Returns: blah\" paragraph on\nits own).  Anyway, it seems to be a bad idea to use multiple \\brief or \\returns\ncommands in a single command.\n\nllvm-svn: 161325"},
[k]={
[h]={{Bb,623,"void Sema::checkBlockCommandDuplicate(const BlockCommandComment *Command) {\n  // ...\n  Diag(Command->getLocation(), diag::warn_doc_block_command_duplicate) << Command->getCommandMarker() << CommandName << Command->getSourceRange();"}},
[l]={
[gc]={"clang/test/Sema/warn-documentation.cpp:158:6: warning: duplicated command \'\\brief\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:166:6: warning: duplicated command \'\\short\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:174:6: warning: duplicated command \'\\brief\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:732:6: warning: duplicated command \'\\headerfile\' [-Wdocumentation]"}
[gc]={"clang/test/Sema/warn-documentation.cpp:158:6: warning: duplicated command \'\\brief\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:166:6: warning: duplicated command \'\\short\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:174:6: warning: duplicated command \'\\brief\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:732:6: warning: duplicated command \'\\headerfile\' [-Wdocumentation]"}
}
}
},
},
["warn_doc_block_command_empty_paragraph"]={
["warn_doc_block_command_empty_paragraph"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="empty paragraph passed to \'%select{\\|@}0%1\' command",
[c]="warn_doc_block_command_empty_paragraph",
[d]=g,
[d]="empty paragraph passed to \'%select{\\|@}0%1\' command",
[e]="empty paragraph passed to \'(?:\\\\|@)(.*?)\' command",
[e]=i,
[f]=Lb,
[g]="empty paragraph passed to \'(?:\\\\|@)(.*?)\' command",
[b]=pb,
[a]=Qb,
[a]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few","Enable comment parsing and semantic analysis to emit diagnostics.  A few\ndiagnostics implemented -- see testcases.\n\nI created a new TableGen file for comment diagnostics,\nDiagnosticCommentKinds.td, because comment diagnostics don\'t logically\nfit into AST diagnostics file.  But I don\'t feel strongly about it.\n\nThis also implements support for self-closing HTML tags in comment\nlexer and parser (for example, <br />).\n\nIn order to issue precise diagnostics CommentSema needs to know the\ndeclaration the comment is attached to.  There is no easy way to find a decl by \ncomment, so we match comments and decls in lockstep: after parsing one\ndeclgroup we check if we have any new, not yet attached comments.  If we do --\nthen we do the usual comment-finding process.\n\nIt is interesting that this automatically handles trailing comments.\nWe pick up not only comments that precede the declaration, but also\ncomments that *follow* the declaration -- thanks to the lookahead in\nthe lexer: after parsing the declgroup we\'ve consumed the semicolon\nand looked ahead through comments.\n\nAdded -Wdocumentation-html flag for semantic HTML errors to allow the user to \ndisable only HTML warnings (but not HTML parse errors, which we emit as\nwarnings in -Wdocumentation).\n\nllvm-svn: 160078"},
[b]=sb,
[h]={{wb,549,"void Sema::checkBlockCommandEmptyParagraph(BlockCommandComment *Command) {\n  // ...\n  if (Paragraph->isWhitespace()) {\n    // ...\n    Diag(DiagLoc, diag::warn_doc_block_command_empty_paragraph) << Command->getCommandMarker() << Command->getCommandName(Traits) << Command->getSourceRange();"}},
[f]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few","Enable comment parsing and semantic analysis to emit diagnostics.  A few\ndiagnostics implemented -- see testcases.\n\nI created a new TableGen file for comment diagnostics,\nDiagnosticCommentKinds.td, because comment diagnostics don\'t logically\nfit into AST diagnostics file.  But I don\'t feel strongly about it.\n\nThis also implements support for self-closing HTML tags in comment\nlexer and parser (for example, <br />).\n\nIn order to issue precise diagnostics CommentSema needs to know the\ndeclaration the comment is attached to.  There is no easy way to find a decl by \ncomment, so we match comments and decls in lockstep: after parsing one\ndeclgroup we check if we have any new, not yet attached comments.  If we do --\nthen we do the usual comment-finding process.\n\nIt is interesting that this automatically handles trailing comments.\nWe pick up not only comments that precede the declaration, but also\ncomments that *follow* the declaration -- thanks to the lookahead in\nthe lexer: after parsing the declgroup we\'ve consumed the semicolon\nand looked ahead through comments.\n\nAdded -Wdocumentation-html flag for semantic HTML errors to allow the user to \ndisable only HTML warnings (but not HTML parse errors, which we emit as\nwarnings in -Wdocumentation).\n\nllvm-svn: 160078"},
[k]={
[h]={{Bb,549,"void Sema::checkBlockCommandEmptyParagraph(BlockCommandComment *Command) {\n  // ...\n  if (Paragraph->isWhitespace()) {\n    // ...\n    Diag(DiagLoc, diag::warn_doc_block_command_empty_paragraph) << Command->getCommandMarker() << Command->getCommandName(Traits) << Command->getSourceRange();"}},
[l]={
["clang/test/Sema/warn-documentation-crlf.c"]={"clang/test/Sema/warn-documentation-crlf.c:10:13: warning: empty paragraph passed to \'@param\' command [-Wdocumentation]"}
["clang/test/Sema/warn-documentation-crlf.c"]={"clang/test/Sema/warn-documentation-crlf.c:10:13: warning: empty paragraph passed to \'@param\' command [-Wdocumentation]"}
}
}
},
},
["warn_doc_container_decl_mismatch"]={
["warn_doc_container_decl_mismatch"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="\'%select{\\|@}0%select{classdesign|coclass|dependency|helper|helperclass|helps|instancesize|ownership|performance|security|superclass}1\' command should not be used in a comment attached to a non-container declaration",
[c]="warn_doc_container_decl_mismatch",
[d]=g,
[d]="\'%select{\\|@}0%select{classdesign|coclass|dependency|helper|helperclass|helps|instancesize|ownership|performance|security|superclass}1\' command should not be used in a comment attached to a non-container declaration",
[e]="\'(?:\\\\|@)(?:classdesign|coclass|dependency|helper|helperclass|helps|instancesize|ownership|performance|security|superclass)\' command should not be used in a comment attached to a non\\-container declaration",
[e]=i,
[f]=Lb,
[g]="\'(?:\\\\|@)(?:classdesign|coclass|dependency|helper|helperclass|helps|instancesize|ownership|performance|security|superclass)\' command should not be used in a comment attached to a non\\-container declaration",
[b]=pb,
[a]=Qb,
[a]={"a649eee9e877",1362699191,"HeaderDoc: Support more of HeaderDoc documentation ","HeaderDoc: Support more of HeaderDoc documentation \ncommands; top level tags such as @interface and\ntheir 2nd level tags such as @coclass, etc.\n// rdar://12379114\n\nllvm-svn: 176667"},
[b]=sb,
[h]={{wb,215,"void Sema::checkContainerDecl(const BlockCommandComment *Comment) {\n  // ...\n  if (DiagSelect)\n    Diag(Comment->getLocation(), diag::warn_doc_container_decl_mismatch) << Comment->getCommandMarker() << (DiagSelect - 1) << Comment->getSourceRange();"}},
[f]={"a649eee9e877",1362699191,"HeaderDoc: Support more of HeaderDoc documentation ","HeaderDoc: Support more of HeaderDoc documentation \ncommands; top level tags such as @interface and\ntheir 2nd level tags such as @coclass, etc.\n// rdar://12379114\n\nllvm-svn: 176667"},
[k]={
[h]={{Bb,215,"void Sema::checkContainerDecl(const BlockCommandComment *Comment) {\n  // ...\n  if (DiagSelect)\n    Diag(Comment->getLocation(), diag::warn_doc_container_decl_mismatch) << Comment->getCommandMarker() << (DiagSelect - 1) << Comment->getSourceRange();"}},
[l]={
["clang/test/Sema/warn-documentation.m"]={"clang/test/Sema/warn-documentation.m:117:2: warning: \'@classdesign\' command should not be used in a comment attached to a non-container declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.m:118:2: warning: \'@coclass\' command should not be used in a comment attached to a non-container declaration [-Wdocumentation]"}
["clang/test/Sema/warn-documentation.m"]={"clang/test/Sema/warn-documentation.m:117:2: warning: \'@classdesign\' command should not be used in a comment attached to a non-container declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.m:118:2: warning: \'@coclass\' command should not be used in a comment attached to a non-container declaration [-Wdocumentation]"}
}
}
},
},
["warn_doc_deprecated_not_sync"]={
["warn_doc_deprecated_not_sync"]={
[j]={M,"documentation-deprecated-sync"},
[k]={U,"documentation-deprecated-sync"},
[i]="documentation-deprecated-sync",
[j]="documentation-deprecated-sync",
[c]={{nil,z,"declaration is marked with \'%select{\\|@}0deprecated\' command but does not have a deprecation attribute"},{I,nil,"declaration is marked with \'\\deprecated\' command but does not have a deprecation attribute"}},
[c]="warn_doc_deprecated_not_sync",
[d]=g,
[d]={{nil,q,"declaration is marked with \'%select{\\|@}0deprecated\' command but does not have a deprecation attribute"},{x,nil,"declaration is marked with \'\\deprecated\' command but does not have a deprecation attribute"}},
[e]="declaration is marked with \'(?:\\\\|@)deprecated\' command but does not have a deprecation attribute",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-deprecated\\-sync[^\\]]*\\]",
[g]="declaration is marked with \'(?:\\\\|@)deprecated\' command but does not have a deprecation attribute",
[b]=pb,
[a]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-deprecated\\-sync[^\\]]*\\]",
[a]={"1da888691587",1348350470,"Comment sema: warn when comment has \\deprecated but declaration does not have a","Comment sema: warn when comment has \\deprecated but declaration does not have a\ndeprecation attribute (\'deprecated\', \'availability\' or \'unavailable\').\n\nThis warning is under a separate flag, -Wdocumentation-deprecated-sync, so it\ncan be turned off easily while leaving other -Wdocumentation warnings on.\n\nllvm-svn: 164467"},
[b]=sb,
[h]={{wb,655,"void Sema::checkDeprecatedCommand(const BlockCommandComment *Command) {\n  // ...\n  Diag(Command->getLocation(), diag::warn_doc_deprecated_not_sync) << Command->getSourceRange() << Command->getCommandMarker();"}},
[f]={"1da888691587",1348350470,"Comment sema: warn when comment has \\deprecated but declaration does not have a","Comment sema: warn when comment has \\deprecated but declaration does not have a\ndeprecation attribute (\'deprecated\', \'availability\' or \'unavailable\').\n\nThis warning is under a separate flag, -Wdocumentation-deprecated-sync, so it\ncan be turned off easily while leaving other -Wdocumentation warnings on.\n\nllvm-svn: 164467"},
[k]={
[h]={{Bb,655,"void Sema::checkDeprecatedCommand(const BlockCommandComment *Command) {\n  // ...\n  Diag(Command->getLocation(), diag::warn_doc_deprecated_not_sync) << Command->getSourceRange() << Command->getCommandMarker();"}},
[l]={
["clang/test/Sema/warn-documentation-fixits.c"]={"clang/test/Sema/warn-documentation-fixits.c:6:6: warning: declaration is marked with \'\\deprecated\' command but does not have a deprecation attribute [-Wdocumentation-deprecated-sync]","clang/test/Sema/warn-documentation-fixits.c:10:6: warning: declaration is marked with \'\\deprecated\' command but does not have a deprecation attribute [-Wdocumentation-deprecated-sync]","clang/test/Sema/warn-documentation-fixits.c:16:6: warning: declaration is marked with \'\\deprecated\' command but does not have a deprecation attribute [-Wdocumentation-deprecated-sync]","clang/test/Sema/warn-documentation-fixits.c:23:6: warning: declaration is marked with \'\\deprecated\' command but does not have a deprecation attribute [-Wdocumentation-deprecated-sync]"}
["clang/test/Sema/warn-documentation-fixits.c"]={"clang/test/Sema/warn-documentation-fixits.c:6:6: warning: declaration is marked with \'\\deprecated\' command but does not have a deprecation attribute [-Wdocumentation-deprecated-sync]","clang/test/Sema/warn-documentation-fixits.c:10:6: warning: declaration is marked with \'\\deprecated\' command but does not have a deprecation attribute [-Wdocumentation-deprecated-sync]","clang/test/Sema/warn-documentation-fixits.c:16:6: warning: declaration is marked with \'\\deprecated\' command but does not have a deprecation attribute [-Wdocumentation-deprecated-sync]","clang/test/Sema/warn-documentation-fixits.c:23:6: warning: declaration is marked with \'\\deprecated\' command but does not have a deprecation attribute [-Wdocumentation-deprecated-sync]"}
}
}
},
},
["warn_doc_function_method_decl_mismatch"]={
["warn_doc_function_method_decl_mismatch"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="\'%select{\\|@}0%select{function|functiongroup|method|methodgroup|callback}1\' command should be used in a comment attached to %select{a function|a function|an Objective-C method|an Objective-C method|a pointer to function}2 declaration",
[c]="warn_doc_function_method_decl_mismatch",
[d]=g,
[d]="\'%select{\\|@}0%select{function|functiongroup|method|methodgroup|callback}1\' command should be used in a comment attached to %select{a function|a function|an Objective-C method|an Objective-C method|a pointer to function}2 declaration",
[e]="\'(?:\\\\|@)(?:function|functiongroup|method|methodgroup|callback)\' command should be used in a comment attached to (?:a function|a function|an Objective\\-C method|an Objective\\-C method|a pointer to function) declaration",
[e]=i,
[f]=Lb,
[g]="\'(?:\\\\|@)(?:function|functiongroup|method|methodgroup|callback)\' command should be used in a comment attached to (?:a function|a function|an Objective\\-C method|an Objective\\-C method|a pointer to function) declaration",
[b]=pb,
[a]=Qb,
[a]={"41bb7131b39a",1362591411,"say objective-C in the warning and streamline","say objective-C in the warning and streamline\nseveral diagnostics into one. // rdar://13094352\n\nllvm-svn: 176560"},
[b]=sb,
[h]={{wb,126,"void Sema::checkFunctionDeclVerbatimLine(const BlockCommandComment *Comment) {\n  // ...\n  if (DiagSelect)\n    Diag(Comment->getLocation(), diag::warn_doc_function_method_decl_mismatch) << Comment->getCommandMarker() << (DiagSelect - 1) << (DiagSelect - 1) << Comment->getSourceRange();"}},
[f]={"41bb7131b39a",1362591411,"say objective-C in the warning and streamline","say objective-C in the warning and streamline\nseveral diagnostics into one. // rdar://13094352\n\nllvm-svn: 176560"},
[k]={
[h]={{Bb,126,"void Sema::checkFunctionDeclVerbatimLine(const BlockCommandComment *Comment) {\n  // ...\n  if (DiagSelect)\n    Diag(Comment->getLocation(), diag::warn_doc_function_method_decl_mismatch) << Comment->getCommandMarker() << (DiagSelect - 1) << (DiagSelect - 1) << Comment->getSourceRange();"}},
[l]={
["clang/test/Sema/warn-documentation.m"]={"clang/test/Sema/warn-documentation.m:104:6: warning: \'@method\' command should be used in a comment attached to an Objective-C method declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.m:132:3: warning: \'@methodgroup\' command should be used in a comment attached to an Objective-C method declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.m:135:3: warning: \'@method\' command should be used in a comment attached to an Objective-C method declaration [-Wdocumentation]"}
["clang/test/Sema/warn-documentation.m"]={"clang/test/Sema/warn-documentation.m:104:6: warning: \'@method\' command should be used in a comment attached to an Objective-C method declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.m:132:3: warning: \'@methodgroup\' command should be used in a comment attached to an Objective-C method declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.m:135:3: warning: \'@method\' command should be used in a comment attached to an Objective-C method declaration [-Wdocumentation]"}
}
}
},
},
["warn_doc_html_end_forbidden"]={
["warn_doc_html_end_forbidden"]={
[j]={M,Uc},
[k]={U,Sc},
[i]=Uc,
[j]=Sc,
[c]="HTML end tag \'%0\' is forbidden",
[c]="warn_doc_html_end_forbidden",
[d]=g,
[d]="HTML end tag \'%0\' is forbidden",
[e]="HTML end tag \'(.*?)\' is forbidden",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-html[^\\]]*\\]",
[g]="HTML end tag \'(.*?)\' is forbidden",
[b]=pb,
[a]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-html[^\\]]*\\]",
[a]={"e00ffc7bb836",1342140264,"Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close...","Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close tags\' to \'HTML end tags\' according to HTML spec.\n\nllvm-svn: 160153"},
[b]=sb,
[h]={{wb,457,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  // ...\n  if (isHTMLEndTagForbidden(TagName)) {\n    Diag(HET->getLocation(), diag::warn_doc_html_end_forbidden) << TagName << HET->getSourceRange();"}},
[f]={"e00ffc7bb836",1342140264,"Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close...","Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close tags\' to \'HTML end tags\' according to HTML spec.\n\nllvm-svn: 160153"},
[k]={
[h]={{Bb,457,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  // ...\n  if (isHTMLEndTagForbidden(TagName)) {\n    Diag(HET->getLocation(), diag::warn_doc_html_end_forbidden) << TagName << HET->getSourceRange();"}},
[l]={
[gc]={"clang/test/Sema/warn-documentation.cpp:62:11: warning: HTML end tag \'br\' is forbidden [-Wdocumentation-html]"}
[gc]={"clang/test/Sema/warn-documentation.cpp:62:11: warning: HTML end tag \'br\' is forbidden [-Wdocumentation-html]"}
}
}
},
},
["warn_doc_html_end_unbalanced"]={
["warn_doc_html_end_unbalanced"]={
[j]={M,Uc},
[k]={U,Sc},
[i]=Uc,
[j]=Sc,
[c]="HTML end tag does not match any start tag",
[c]="warn_doc_html_end_unbalanced",
[d]=g,
[d]="HTML end tag does not match any start tag",
[e]="HTML end tag does not match any start tag",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-html[^\\]]*\\]",
[g]="HTML end tag does not match any start tag",
[b]=pb,
[a]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-html[^\\]]*\\]",
[a]={"e00ffc7bb836",1342140264,"Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close...","Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close tags\' to \'HTML end tags\' according to HTML spec.\n\nllvm-svn: 160153"},
[b]=sb,
[h]={{wb,473,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  // ...\n  if (!FoundOpen) {\n    Diag(HET->getLocation(), diag::warn_doc_html_end_unbalanced) << HET->getSourceRange();"}},
[f]={"e00ffc7bb836",1342140264,"Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close...","Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close tags\' to \'HTML end tags\' according to HTML spec.\n\nllvm-svn: 160153"},
[k]={
[h]={{Bb,473,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  // ...\n  if (!FoundOpen) {\n    Diag(HET->getLocation(), diag::warn_doc_html_end_unbalanced) << HET->getSourceRange();"}},
[l]={
[gc]={"clang/test/Sema/warn-documentation.cpp:97:17: warning: HTML end tag does not match any start tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:102:21: warning: HTML end tag does not match any start tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:107:21: warning: HTML end tag does not match any start tag [-Wdocumentation-html]"}
[gc]={"clang/test/Sema/warn-documentation.cpp:97:17: warning: HTML end tag does not match any start tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:102:21: warning: HTML end tag does not match any start tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:107:21: warning: HTML end tag does not match any start tag [-Wdocumentation-html]"}
}
}
},
},
["warn_doc_html_missing_end_tag"]={
["warn_doc_html_missing_end_tag"]={
[j]={M,Uc},
[k]={U,Sc},
[i]=Uc,
[j]=Sc,
[c]="HTML tag \'%0\' requires an end tag",
[c]="warn_doc_html_missing_end_tag",
[d]=g,
[d]="HTML tag \'%0\' requires an end tag",
[e]="HTML tag \'(.*?)\' requires an end tag",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-html[^\\]]*\\]",
[g]="HTML tag \'(.*?)\' requires an end tag",
[b]=pb,
[a]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-html[^\\]]*\\]",
[a]={"93043620bc63",1398164353,"Comment parsing: in the generated XML file, mark HTML that is safe to pass","Comment parsing: in the generated XML file, mark HTML that is safe to pass\nthrough to the output even if the input comment comes from an untrusted source\n\nAttribute filtering is currently based on a blacklist, which right now includes\nall event handler attributes (they contain JavaScipt code).  It should be\nswitched to a whitelist, but going over all of the HTML5 spec requires a\nsignificant amount of time.\n\nllvm-svn: 206882"},
[b]=sb,
[h]={{wb,530,"FullComment *Sema::actOnFullComment(ArrayRef<BlockContentComment *> Blocks) {\n  // ...\n  // Complain about HTML tags that are not closed.\n  while (!HTMLOpenTags.empty()) {\n    // ...\n    Diag(HST->getLocation(), diag::warn_doc_html_missing_end_tag) << HST->getTagName() << HST->getSourceRange();"}},
[f]={"93043620bc63",1398164353,"Comment parsing: in the generated XML file, mark HTML that is safe to pass","Comment parsing: in the generated XML file, mark HTML that is safe to pass\nthrough to the output even if the input comment comes from an untrusted source\n\nAttribute filtering is currently based on a blacklist, which right now includes\nall event handler attributes (they contain JavaScipt code).  It should be\nswitched to a whitelist, but going over all of the HTML5 spec requires a\nsignificant amount of time.\n\nllvm-svn: 206882"},
[k]={
[h]={{Bb,530,"FullComment *Sema::actOnFullComment(ArrayRef<BlockContentComment *> Blocks) {\n  // ...\n  // Complain about HTML tags that are not closed.\n  while (!HTMLOpenTags.empty()) {\n    // ...\n    Diag(HST->getLocation(), diag::warn_doc_html_missing_end_tag) << HST->getTagName() << HST->getSourceRange();"}},
[l]={
[gc]={"clang/test/Sema/warn-documentation.cpp:10:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:15:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:21:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:26:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:31:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:36:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:41:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:46:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:97:9: warning: HTML tag \'i\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:97:6: warning: HTML tag \'b\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:111:6: warning: HTML tag \'b\' requires an end tag [-Wdocumentation-html]"}
[gc]={"clang/test/Sema/warn-documentation.cpp:10:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:15:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:21:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:26:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:31:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:36:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:41:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:46:6: warning: HTML tag \'a\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:97:9: warning: HTML tag \'i\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:97:6: warning: HTML tag \'b\' requires an end tag [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:111:6: warning: HTML tag \'b\' requires an end tag [-Wdocumentation-html]"}
}
}
},
},
["warn_doc_html_start_end_mismatch"]={
["warn_doc_html_start_end_mismatch"]={
[j]={M,Uc},
[k]={U,Sc},
[i]=Uc,
[j]=Sc,
[c]="HTML start tag \'%0\' closed by \'%1\'",
[c]="warn_doc_html_start_end_mismatch",
[d]=g,
[d]="HTML start tag \'%0\' closed by \'%1\'",
[e]="HTML start tag \'(.*?)\' closed by \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-html[^\\]]*\\]",
[g]="HTML start tag \'(.*?)\' closed by \'(.*?)\'",
[b]=pb,
[a]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-html[^\\]]*\\]",
[a]={"e00ffc7bb836",1342140264,"Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close...","Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close tags\' to \'HTML end tags\' according to HTML spec.\n\nllvm-svn: 160153"},
[b]=sb,
[h]={{wb,502,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  // ...\n  while (!HTMLOpenTags.empty()) {\n    // ...\n    if (OpenLineInvalid || CloseLineInvalid || OpenLine == CloseLine) {\n      Diag(HST->getLocation(), diag::warn_doc_html_start_end_mismatch) << HST->getTagName() << HET->getTagName() << HST->getSourceRange() << HET->getSourceRange();"},{wb,507,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  // ...\n  while (!HTMLOpenTags.empty()) {\n    // ...\n    if (OpenLineInvalid || CloseLineInvalid || OpenLine == CloseLine) {\n    // ...\n    } else {\n      Diag(HST->getLocation(), diag::warn_doc_html_start_end_mismatch) << HST->getTagName() << HET->getTagName() << HST->getSourceRange();"}},
[f]={"e00ffc7bb836",1342140264,"Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close...","Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close tags\' to \'HTML end tags\' according to HTML spec.\n\nllvm-svn: 160153"},
[k]={
[h]={{Bb,502,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  // ...\n  while (!HTMLOpenTags.empty()) {\n    // ...\n    if (OpenLineInvalid || CloseLineInvalid || OpenLine == CloseLine) {\n      Diag(HST->getLocation(), diag::warn_doc_html_start_end_mismatch) << HST->getTagName() << HET->getTagName() << HST->getSourceRange() << HET->getSourceRange();"},{Bb,507,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  // ...\n  while (!HTMLOpenTags.empty()) {\n    // ...\n    if (OpenLineInvalid || CloseLineInvalid || OpenLine == CloseLine) {\n    // ...\n    } else {\n      Diag(HST->getLocation(), diag::warn_doc_html_start_end_mismatch) << HST->getTagName() << HET->getTagName() << HST->getSourceRange();"}},
[l]={
[gc]={"clang/test/Sema/warn-documentation.cpp:102:9: warning: HTML start tag \'i\' closed by \'b\' [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:107:9: warning: HTML start tag \'i\' closed by \'b\' [-Wdocumentation-html]"}
[gc]={"clang/test/Sema/warn-documentation.cpp:102:9: warning: HTML start tag \'i\' closed by \'b\' [-Wdocumentation-html]","clang/test/Sema/warn-documentation.cpp:107:9: warning: HTML start tag \'i\' closed by \'b\' [-Wdocumentation-html]"}
}
}
},
},
["warn_doc_html_start_tag_expected_ident_or_greater"]={
["warn_doc_html_start_tag_expected_ident_or_greater"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="HTML start tag prematurely ended, expected attribute name or \'>\'",
[c]="warn_doc_html_start_tag_expected_ident_or_greater",
[d]=g,
[d]="HTML start tag prematurely ended, expected attribute name or \'>\'",
[e]="HTML start tag prematurely ended, expected attribute name or \'\\>\'",
[e]=i,
[f]=Lb,
[g]="HTML start tag prematurely ended, expected attribute name or \'\\>\'",
[b]=pb,
[a]=Qb,
[a]={"e00ffc7bb836",1342140264,"Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close...","Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close tags\' to \'HTML end tags\' according to HTML spec.\n\nllvm-svn: 160153"},
[b]=sb,
[f]={"e00ffc7bb836",1342140264,"Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close...","Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close tags\' to \'HTML end tags\' according to HTML spec.\n\nllvm-svn: 160153"},
[h]={{"clang/lib/AST/CommentParser.cpp",487,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  // ...\n  while (true) {\n    // ...\n    case tok::html_equals:\n    case tok::html_quoted_string:\n      Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_ident_or_greater);"},{"clang/lib/AST/CommentParser.cpp",516,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      if (StartLineInvalid || EndLineInvalid || StartLine == EndLine)\n        Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_ident_or_greater) << HST->getSourceRange();"},{"clang/lib/AST/CommentParser.cpp",520,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      if (StartLineInvalid || EndLineInvalid || StartLine == EndLine)\n      // ...\n      else {\n        Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_ident_or_greater);"}},
[h]={{"clang/lib/AST/CommentParser.cpp",487,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  // ...\n  while (true) {\n    // ...\n    case tok::html_equals:\n    case tok::html_quoted_string:\n      Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_ident_or_greater);"},{"clang/lib/AST/CommentParser.cpp",516,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      if (StartLineInvalid || EndLineInvalid || StartLine == EndLine)\n        Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_ident_or_greater) << HST->getSourceRange();"},{"clang/lib/AST/CommentParser.cpp",520,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      if (StartLineInvalid || EndLineInvalid || StartLine == EndLine)\n      // ...\n      else {\n        Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_ident_or_greater);"}},
[k]={
[l]={
[gc]={"clang/test/Sema/warn-documentation.cpp:21:18: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:26:8: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:31:8: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:36:14: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:41:14: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:46:14: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:51:2: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:56:25: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]"}
[gc]={"clang/test/Sema/warn-documentation.cpp:21:18: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:26:8: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:31:8: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:36:14: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:41:14: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:46:14: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:51:2: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:56:25: warning: HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]"}
}
}
},
},
["warn_doc_html_start_tag_expected_quoted_string"]={
["warn_doc_html_start_tag_expected_quoted_string"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="expected quoted string after equals sign",
[c]="warn_doc_html_start_tag_expected_quoted_string",
[d]=g,
[d]="expected quoted string after equals sign",
[e]="expected quoted string after equals sign",
[e]=i,
[f]=Lb,
[g]="expected quoted string after equals sign",
[b]=pb,
[a]=Qb,
[a]={"e00ffc7bb836",1342140264,"Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close...","Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close tags\' to \'HTML end tags\' according to HTML spec.\n\nllvm-svn: 160153"},
[b]=sb,
[f]={"e00ffc7bb836",1342140264,"Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close...","Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close tags\' to \'HTML end tags\' according to HTML spec.\n\nllvm-svn: 160153"},
[h]={{"clang/lib/AST/CommentParser.cpp",450,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  // ...\n  while (true) {\n    // ...\n    case tok::html_ident: {\n      // ...\n      if (Tok.isNot(tok::html_quoted_string)) {\n        Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_quoted_string) << SourceRange(Equals.getLocation());"}},
[h]={{"clang/lib/AST/CommentParser.cpp",450,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  // ...\n  while (true) {\n    // ...\n    case tok::html_ident: {\n      // ...\n      if (Tok.isNot(tok::html_quoted_string)) {\n        Diag(Tok.getLocation(), diag::warn_doc_html_start_tag_expected_quoted_string) << SourceRange(Equals.getLocation());"}},
[k]={
[l]={
[gc]={"clang/test/Sema/warn-documentation.cpp:10:13: warning: expected quoted string after equals sign [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:15:13: warning: expected quoted string after equals sign [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:21:14: warning: expected quoted string after equals sign [-Wdocumentation]"}
[gc]={"clang/test/Sema/warn-documentation.cpp:10:13: warning: expected quoted string after equals sign [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:15:13: warning: expected quoted string after equals sign [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:21:14: warning: expected quoted string after equals sign [-Wdocumentation]"}
}
}
},
},
["warn_doc_inline_command_not_enough_arguments"]={
["warn_doc_inline_command_not_enough_arguments"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]={{nil,kb,"\'%select{\\|@}0%1\' command has %plural{0:no|:%2}2 word argument%s2, expected %3"}},
[c]={{nil,C,"warn_doc_inline_command_not_enough_arguments"}},
[d]=g,
[d]={{nil,C,"\'%select{\\|@}0%1\' command has %plural{0:no|:%2}2 word argument%s2, expected %3"}},
[e]="\'(?:\\\\|@)(.*?)\' command has (?:no|(.*?)) word argument(.*?), expected (.*?)",
[e]=i,
[f]=Lb,
[g]="\'(?:\\\\|@)(.*?)\' command has (?:no|(.*?)) word argument(.*?), expected (.*?)",
[b]=pb,
[a]=Qb,
[a]={"d3a4033d6ee1",1652441850,"Comment parsing: Allow inline commands to have 0 or more than 1 argument","Comment parsing: Allow inline commands to have 0 or more than 1 argument\n\nThat\'s required to support `\\n`, but can also be used for other commands.\nWe already had the infrastructure in place to parse a varying number of\narguments, we simply needed to generalize it so that it would work not\nonly for block commands.\n\nThis should fix #55319.\n\nReviewed By: gribozavr2\n\nDifferential Revision: https://reviews.llvm.org/D125429"},
[b]={{nil,C,sb}},
[f]={"d3a4033d6ee1",1652441850,"Comment parsing: Allow inline commands to have 0 or more than 1 argument","Comment parsing: Allow inline commands to have 0 or more than 1 argument\n\nThat\'s required to support `\\n`, but can also be used for other commands.\nWe already had the infrastructure in place to parse a varying number of\narguments, we simply needed to generalize it so that it would work not\nonly for block commands.\n\nThis should fix #55319.\n\nReviewed By: gribozavr2\n\nDifferential Revision: https://reviews.llvm.org/D125429"},
[h]={{"clang/lib/AST/CommentParser.cpp",417,"InlineCommandComment *Parser::parseInlineCommand() {\n  // ...\n  if (Args.size() < Info->NumArgs) {\n    Diag(CommandTok.getEndLocation().getLocWithOffset(1), diag::warn_doc_inline_command_not_enough_arguments) << CommandTok.is(tok::at_command) << Info->Name << Args.size() << Info->NumArgs << SourceRange(CommandTok.getLocation(), CommandTok.getEndLocation());"}},
[h]={{"clang/lib/AST/CommentParser.cpp",417,"InlineCommandComment *Parser::parseInlineCommand() {\n  // ...\n  if (Args.size() < Info->NumArgs) {\n    Diag(CommandTok.getEndLocation().getLocWithOffset(1), diag::warn_doc_inline_command_not_enough_arguments) << CommandTok.is(tok::at_command) << Info->Name << Args.size() << Info->NumArgs << SourceRange(CommandTok.getLocation(), CommandTok.getEndLocation());"}},
[k]={
[l]={
[gc]={"clang/test/Sema/warn-documentation.cpp:1135:7: warning: \'\\a\' command has no word arguments, expected 1 [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1142:12: warning: \'\\anchor\' command has no word arguments, expected 1 [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1149:7: warning: \'@b\' command has no word arguments, expected 1 [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1156:7: warning: \'\\c\' command has no word arguments, expected 1 [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1163:7: warning: \'\\e\' command has no word arguments, expected 1 [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1170:8: warning: \'\\em\' command has no word arguments, expected 1 [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1177:7: warning: \'\\p\' command has no word arguments, expected 1 [-Wdocumentation]"}
[gc]={"clang/test/Sema/warn-documentation.cpp:1135:7: warning: \'\\a\' command has no word arguments, expected 1 [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1142:12: warning: \'\\anchor\' command has no word arguments, expected 1 [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1149:7: warning: \'@b\' command has no word arguments, expected 1 [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1156:7: warning: \'\\c\' command has no word arguments, expected 1 [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1163:7: warning: \'\\e\' command has no word arguments, expected 1 [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1170:8: warning: \'\\em\' command has no word arguments, expected 1 [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1177:7: warning: \'\\p\' command has no word arguments, expected 1 [-Wdocumentation]"}
}
}
},
},
["warn_doc_param_duplicate"]={
["warn_doc_param_duplicate"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="parameter \'%0\' is already documented",
[c]="warn_doc_param_duplicate",
[d]=g,
[d]="parameter \'%0\' is already documented",
[e]="parameter \'(.*?)\' is already documented",
[e]=i,
[f]=Lb,
[g]="parameter \'(.*?)\' is already documented",
[b]=pb,
[a]=Qb,
[a]={"8f0f1b0c41cd",1343166256,"Comment diagnostics: add warning for multiple \\param commands with duplicate","Comment diagnostics: add warning for multiple \\param commands with duplicate\nparameter names.\n\nllvm-svn: 160696"},
[b]=sb,
[h]={{wb,743,"void Sema::resolveParamCommandIndexes(const FullComment *FC) {\n  // ...\n  // First pass over all \\\\param commands: resolve all parameter names.\n  for (Comment::child_iterator I = FC->child_begin(), E = FC->child_end(); I != E; ++I) {\n    // ...\n    if (ParamVarDocs[ResolvedParamIndex]) {\n      // ...\n      Diag(ArgRange.getBegin(), diag::warn_doc_param_duplicate) << ParamName << ArgRange;"}},
[f]={"8f0f1b0c41cd",1343166256,"Comment diagnostics: add warning for multiple \\param commands with duplicate","Comment diagnostics: add warning for multiple \\param commands with duplicate\nparameter names.\n\nllvm-svn: 160696"},
[k]={
[h]={{Bb,743,"void Sema::resolveParamCommandIndexes(const FullComment *FC) {\n  // ...\n  // First pass over all \\\\param commands: resolve all parameter names.\n  for (Comment::child_iterator I = FC->child_begin(), E = FC->child_end(); I != E; ++I) {\n    // ...\n    if (ParamVarDocs[ResolvedParamIndex]) {\n      // ...\n      Diag(ArgRange.getBegin(), diag::warn_doc_param_duplicate) << ParamName << ArgRange;"}},
[l]={
[gc]={"clang/test/Sema/warn-documentation.cpp:315:12: warning: parameter \'a\' is already documented [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:322:12: warning: parameter \'x2\' is already documented [-Wdocumentation]"}
[gc]={"clang/test/Sema/warn-documentation.cpp:315:12: warning: parameter \'a\' is already documented [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:322:12: warning: parameter \'x2\' is already documented [-Wdocumentation]"}
}
}
},
},
["warn_doc_param_invalid_direction"]={
["warn_doc_param_invalid_direction"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="unrecognized parameter passing direction, valid directions are \'[in]\', \'[out]\' and \'[in,out]\'",
[c]="warn_doc_param_invalid_direction",
[d]=g,
[d]="unrecognized parameter passing direction, valid directions are \'[in]\', \'[out]\' and \'[in,out]\'",
[e]="unrecognized parameter passing direction, valid directions are \'\\[in\\]\', \'\\[out\\]\' and \'\\[in,out\\]\'",
[e]=i,
[f]=Lb,
[g]="unrecognized parameter passing direction, valid directions are \'\\[in\\]\', \'\\[out\\]\' and \'\\[in,out\\]\'",
[b]=pb,
[a]=Qb,
[a]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few","Enable comment parsing and semantic analysis to emit diagnostics.  A few\ndiagnostics implemented -- see testcases.\n\nI created a new TableGen file for comment diagnostics,\nDiagnosticCommentKinds.td, because comment diagnostics don\'t logically\nfit into AST diagnostics file.  But I don\'t feel strongly about it.\n\nThis also implements support for self-closing HTML tags in comment\nlexer and parser (for example, <br />).\n\nIn order to issue precise diagnostics CommentSema needs to know the\ndeclaration the comment is attached to.  There is no easy way to find a decl by \ncomment, so we match comments and decls in lockstep: after parsing one\ndeclgroup we check if we have any new, not yet attached comments.  If we do --\nthen we do the usual comment-finding process.\n\nIt is interesting that this automatically handles trailing comments.\nWe pick up not only comments that precede the declaration, but also\ncomments that *follow* the declaration -- thanks to the lookahead in\nthe lexer: after parsing the declgroup we\'ve consumed the semicolon\nand looked ahead through comments.\n\nAdded -Wdocumentation-html flag for semantic HTML errors to allow the user to \ndisable only HTML warnings (but not HTML parse errors, which we emit as\nwarnings in -Wdocumentation).\n\nllvm-svn: 160078"},
[b]=sb,
[h]={{wb,250,"void Sema::actOnParamCommandDirectionArg(ParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  // ...\n  if (Direction == -1) {\n    // ...\n    if (Direction != -1) {\n    // ...\n    } else {\n      Diag(ArgLocBegin, diag::warn_doc_param_invalid_direction) << ArgRange;"}},
[f]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few","Enable comment parsing and semantic analysis to emit diagnostics.  A few\ndiagnostics implemented -- see testcases.\n\nI created a new TableGen file for comment diagnostics,\nDiagnosticCommentKinds.td, because comment diagnostics don\'t logically\nfit into AST diagnostics file.  But I don\'t feel strongly about it.\n\nThis also implements support for self-closing HTML tags in comment\nlexer and parser (for example, <br />).\n\nIn order to issue precise diagnostics CommentSema needs to know the\ndeclaration the comment is attached to.  There is no easy way to find a decl by \ncomment, so we match comments and decls in lockstep: after parsing one\ndeclgroup we check if we have any new, not yet attached comments.  If we do --\nthen we do the usual comment-finding process.\n\nIt is interesting that this automatically handles trailing comments.\nWe pick up not only comments that precede the declaration, but also\ncomments that *follow* the declaration -- thanks to the lookahead in\nthe lexer: after parsing the declgroup we\'ve consumed the semicolon\nand looked ahead through comments.\n\nAdded -Wdocumentation-html flag for semantic HTML errors to allow the user to \ndisable only HTML warnings (but not HTML parse errors, which we emit as\nwarnings in -Wdocumentation).\n\nllvm-svn: 160078"},
[k]={
[h]={{Bb,250,"void Sema::actOnParamCommandDirectionArg(ParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  // ...\n  if (Direction == -1) {\n    // ...\n    if (Direction != -1) {\n    // ...\n    } else {\n      Diag(ArgLocBegin, diag::warn_doc_param_invalid_direction) << ArgRange;"}},
[l]={
[gc]={"clang/test/Sema/warn-documentation.cpp:255:12: warning: unrecognized parameter passing direction, valid directions are \'[in]\', \'[out]\' and \'[in,out]\' [-Wdocumentation]"}
[gc]={"clang/test/Sema/warn-documentation.cpp:255:12: warning: unrecognized parameter passing direction, valid directions are \'[in]\', \'[out]\' and \'[in,out]\' [-Wdocumentation]"}
}
}
},
},
["warn_doc_param_not_attached_to_a_function_decl"]={
["warn_doc_param_not_attached_to_a_function_decl"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="\'%select{\\|@}0param\' command used in a comment that is not attached to a function declaration",
[c]="warn_doc_param_not_attached_to_a_function_decl",
[d]=g,
[d]="\'%select{\\|@}0param\' command used in a comment that is not attached to a function declaration",
[e]="\'(?:\\\\|@)param\' command used in a comment that is not attached to a function declaration",
[e]=i,
[f]=Lb,
[g]="\'(?:\\\\|@)param\' command used in a comment that is not attached to a function declaration",
[b]=pb,
[a]=Qb,
[a]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few","Enable comment parsing and semantic analysis to emit diagnostics.  A few\ndiagnostics implemented -- see testcases.\n\nI created a new TableGen file for comment diagnostics,\nDiagnosticCommentKinds.td, because comment diagnostics don\'t logically\nfit into AST diagnostics file.  But I don\'t feel strongly about it.\n\nThis also implements support for self-closing HTML tags in comment\nlexer and parser (for example, <br />).\n\nIn order to issue precise diagnostics CommentSema needs to know the\ndeclaration the comment is attached to.  There is no easy way to find a decl by \ncomment, so we match comments and decls in lockstep: after parsing one\ndeclgroup we check if we have any new, not yet attached comments.  If we do --\nthen we do the usual comment-finding process.\n\nIt is interesting that this automatically handles trailing comments.\nWe pick up not only comments that precede the declaration, but also\ncomments that *follow* the declaration -- thanks to the lookahead in\nthe lexer: after parsing the declgroup we\'ve consumed the semicolon\nand looked ahead through comments.\n\nAdded -Wdocumentation-html flag for semantic HTML errors to allow the user to \ndisable only HTML warnings (but not HTML parse errors, which we emit as\nwarnings in -Wdocumentation).\n\nllvm-svn: 160078"},
[b]=sb,
[h]={{wb,92,"ParamCommandComment *Sema::actOnParamCommandStart(SourceLocation LocBegin, SourceLocation LocEnd, unsigned CommandID, CommandMarkerKind CommandMarker) {\n  // ...\n  if (!involvesFunctionType())\n    Diag(Command->getLocation(), diag::warn_doc_param_not_attached_to_a_function_decl) << CommandMarker << Command->getCommandNameRange(Traits);"}},
[f]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few","Enable comment parsing and semantic analysis to emit diagnostics.  A few\ndiagnostics implemented -- see testcases.\n\nI created a new TableGen file for comment diagnostics,\nDiagnosticCommentKinds.td, because comment diagnostics don\'t logically\nfit into AST diagnostics file.  But I don\'t feel strongly about it.\n\nThis also implements support for self-closing HTML tags in comment\nlexer and parser (for example, <br />).\n\nIn order to issue precise diagnostics CommentSema needs to know the\ndeclaration the comment is attached to.  There is no easy way to find a decl by \ncomment, so we match comments and decls in lockstep: after parsing one\ndeclgroup we check if we have any new, not yet attached comments.  If we do --\nthen we do the usual comment-finding process.\n\nIt is interesting that this automatically handles trailing comments.\nWe pick up not only comments that precede the declaration, but also\ncomments that *follow* the declaration -- thanks to the lookahead in\nthe lexer: after parsing the declgroup we\'ve consumed the semicolon\nand looked ahead through comments.\n\nAdded -Wdocumentation-html flag for semantic HTML errors to allow the user to \ndisable only HTML warnings (but not HTML parse errors, which we emit as\nwarnings in -Wdocumentation).\n\nllvm-svn: 160078"},
[k]={
[h]={{Bb,92,"ParamCommandComment *Sema::actOnParamCommandStart(SourceLocation LocBegin, SourceLocation LocEnd, unsigned CommandID, CommandMarkerKind CommandMarker) {\n  // ...\n  if (!involvesFunctionType())\n    Diag(Command->getLocation(), diag::warn_doc_param_not_attached_to_a_function_decl) << CommandMarker << Command->getCommandNameRange(Traits);"}},
[l]={
[gc]={"clang/test/Sema/warn-documentation.cpp:216:6: warning: \'\\param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:222:6: warning: \'@param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:400:6: warning: \'\\param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:406:6: warning: \'@param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:410:6: warning: \'\\param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:496:6: warning: \'\\param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:501:6: warning: \'@param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:505:6: warning: \'\\param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1443:5: warning: \'@param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1454:7: warning: \'\\param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]"}
[gc]={"clang/test/Sema/warn-documentation.cpp:216:6: warning: \'\\param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:222:6: warning: \'@param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:400:6: warning: \'\\param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:406:6: warning: \'@param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:410:6: warning: \'\\param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:496:6: warning: \'\\param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:501:6: warning: \'@param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:505:6: warning: \'\\param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1443:5: warning: \'@param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]","clang/test/Sema/warn-documentation.cpp:1454:7: warning: \'\\param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]"}
}
}
},
},
["warn_doc_param_not_found"]={
["warn_doc_param_not_found"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="parameter \'%0\' not found in the function declaration",
[c]="warn_doc_param_not_found",
[d]=g,
[d]="parameter \'%0\' not found in the function declaration",
[e]="parameter \'(.*?)\' not found in the function declaration",
[e]=i,
[f]=Lb,
[g]="parameter \'(.*?)\' not found in the function declaration",
[b]=pb,
[a]=Qb,
[a]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few","Enable comment parsing and semantic analysis to emit diagnostics.  A few\ndiagnostics implemented -- see testcases.\n\nI created a new TableGen file for comment diagnostics,\nDiagnosticCommentKinds.td, because comment diagnostics don\'t logically\nfit into AST diagnostics file.  But I don\'t feel strongly about it.\n\nThis also implements support for self-closing HTML tags in comment\nlexer and parser (for example, <br />).\n\nIn order to issue precise diagnostics CommentSema needs to know the\ndeclaration the comment is attached to.  There is no easy way to find a decl by \ncomment, so we match comments and decls in lockstep: after parsing one\ndeclgroup we check if we have any new, not yet attached comments.  If we do --\nthen we do the usual comment-finding process.\n\nIt is interesting that this automatically handles trailing comments.\nWe pick up not only comments that precede the declaration, but also\ncomments that *follow* the declaration -- thanks to the lookahead in\nthe lexer: after parsing the declgroup we\'ve consumed the semicolon\nand looked ahead through comments.\n\nAdded -Wdocumentation-html flag for semantic HTML errors to allow the user to \ndisable only HTML warnings (but not HTML parse errors, which we emit as\nwarnings in -Wdocumentation).\n\nllvm-svn: 160078"},
[b]=sb,
[h]={{wb,767,"void Sema::resolveParamCommandIndexes(const FullComment *FC) {\n  // ...\n  // Second pass over unresolved \\\\param commands: do typo correction.\n  // Suggest corrections from a set of parameter declarations that have no\n  // corresponding \\\\param.\n  for (unsigned i = 0, e = UnresolvedParamCommands.size(); i != e; ++i) {\n    // ...\n    Diag(ArgRange.getBegin(), diag::warn_doc_param_not_found) << ParamName << ArgRange;"},{D,14658,"void Sema::ActOnDocumentableDecls(ArrayRef<Decl *> Group) {\n  // ...\n  if (Diags.isIgnored(diag::warn_doc_param_not_found, Group[0]->getLocation()) && Diags.isIgnored(diag::warn_unknown_comment_command_name, Group[0]->getLocation()))"}},
[f]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few","Enable comment parsing and semantic analysis to emit diagnostics.  A few\ndiagnostics implemented -- see testcases.\n\nI created a new TableGen file for comment diagnostics,\nDiagnosticCommentKinds.td, because comment diagnostics don\'t logically\nfit into AST diagnostics file.  But I don\'t feel strongly about it.\n\nThis also implements support for self-closing HTML tags in comment\nlexer and parser (for example, <br />).\n\nIn order to issue precise diagnostics CommentSema needs to know the\ndeclaration the comment is attached to.  There is no easy way to find a decl by \ncomment, so we match comments and decls in lockstep: after parsing one\ndeclgroup we check if we have any new, not yet attached comments.  If we do --\nthen we do the usual comment-finding process.\n\nIt is interesting that this automatically handles trailing comments.\nWe pick up not only comments that precede the declaration, but also\ncomments that *follow* the declaration -- thanks to the lookahead in\nthe lexer: after parsing the declgroup we\'ve consumed the semicolon\nand looked ahead through comments.\n\nAdded -Wdocumentation-html flag for semantic HTML errors to allow the user to \ndisable only HTML warnings (but not HTML parse errors, which we emit as\nwarnings in -Wdocumentation).\n\nllvm-svn: 160078"},
[k]={
[h]={{Bb,767,"void Sema::resolveParamCommandIndexes(const FullComment *FC) {\n  // ...\n  // Second pass over unresolved \\\\param commands: do typo correction.\n  // Suggest corrections from a set of parameter declarations that have no\n  // corresponding \\\\param.\n  for (unsigned i = 0, e = UnresolvedParamCommands.size(); i != e; ++i) {\n    // ...\n    Diag(ArgRange.getBegin(), diag::warn_doc_param_not_found) << ParamName << ArgRange;"},{M,14658,"void Sema::ActOnDocumentableDecls(ArrayRef<Decl *> Group) {\n  // ...\n  if (Diags.isIgnored(diag::warn_doc_param_not_found, Group[0]->getLocation()) && Diags.isIgnored(diag::warn_unknown_comment_command_name, Group[0]->getLocation()))"}},
[l]={
["clang/test/Sema/warn-documentation-crlf.c"]={"clang/test/Sema/warn-documentation-crlf.c:10:11: warning: parameter \'abc\' not found in the function declaration [-Wdocumentation]"}
["clang/test/Sema/warn-documentation-crlf.c"]={"clang/test/Sema/warn-documentation-crlf.c:10:11: warning: parameter \'abc\' not found in the function declaration [-Wdocumentation]"}
}
}
},
},
["warn_doc_param_spaces_in_direction"]={
["warn_doc_param_spaces_in_direction"]={
[j]={"documentation-pedantic"},
[k]={"documentation-pedantic"},
[i]="documentation-pedantic",
[j]="documentation-pedantic",
[c]="whitespace is not allowed in parameter passing direction",
[c]="warn_doc_param_spaces_in_direction",
[d]=g,
[d]="whitespace is not allowed in parameter passing direction",
[e]="whitespace is not allowed in parameter passing direction",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-pedantic[^\\]]*\\]",
[g]="whitespace is not allowed in parameter passing direction",
[b]=pb,
[a]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-pedantic[^\\]]*\\]",
[a]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few","Enable comment parsing and semantic analysis to emit diagnostics.  A few\ndiagnostics implemented -- see testcases.\n\nI created a new TableGen file for comment diagnostics,\nDiagnosticCommentKinds.td, because comment diagnostics don\'t logically\nfit into AST diagnostics file.  But I don\'t feel strongly about it.\n\nThis also implements support for self-closing HTML tags in comment\nlexer and parser (for example, <br />).\n\nIn order to issue precise diagnostics CommentSema needs to know the\ndeclaration the comment is attached to.  There is no easy way to find a decl by \ncomment, so we match comments and decls in lockstep: after parsing one\ndeclgroup we check if we have any new, not yet attached comments.  If we do --\nthen we do the usual comment-finding process.\n\nIt is interesting that this automatically handles trailing comments.\nWe pick up not only comments that precede the declaration, but also\ncomments that *follow* the declaration -- thanks to the lookahead in\nthe lexer: after parsing the declgroup we\'ve consumed the semicolon\nand looked ahead through comments.\n\nAdded -Wdocumentation-html flag for semantic HTML errors to allow the user to \ndisable only HTML warnings (but not HTML parse errors, which we emit as\nwarnings in -Wdocumentation).\n\nllvm-svn: 160078"},
[b]=sb,
[h]={{wb,247,"void Sema::actOnParamCommandDirectionArg(ParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  // ...\n  if (Direction == -1) {\n    // ...\n    if (Direction != -1) {\n      // ...\n      Diag(ArgLocBegin, diag::warn_doc_param_spaces_in_direction) << ArgRange << FixItHint::CreateReplacement(ArgRange, FixedName);"}},
[f]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few","Enable comment parsing and semantic analysis to emit diagnostics.  A few\ndiagnostics implemented -- see testcases.\n\nI created a new TableGen file for comment diagnostics,\nDiagnosticCommentKinds.td, because comment diagnostics don\'t logically\nfit into AST diagnostics file.  But I don\'t feel strongly about it.\n\nThis also implements support for self-closing HTML tags in comment\nlexer and parser (for example, <br />).\n\nIn order to issue precise diagnostics CommentSema needs to know the\ndeclaration the comment is attached to.  There is no easy way to find a decl by \ncomment, so we match comments and decls in lockstep: after parsing one\ndeclgroup we check if we have any new, not yet attached comments.  If we do --\nthen we do the usual comment-finding process.\n\nIt is interesting that this automatically handles trailing comments.\nWe pick up not only comments that precede the declaration, but also\ncomments that *follow* the declaration -- thanks to the lookahead in\nthe lexer: after parsing the declgroup we\'ve consumed the semicolon\nand looked ahead through comments.\n\nAdded -Wdocumentation-html flag for semantic HTML errors to allow the user to \ndisable only HTML warnings (but not HTML parse errors, which we emit as\nwarnings in -Wdocumentation).\n\nllvm-svn: 160078"},
[k]={
[h]={{Bb,247,"void Sema::actOnParamCommandDirectionArg(ParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  // ...\n  if (Direction == -1) {\n    // ...\n    if (Direction != -1) {\n      // ...\n      Diag(ArgLocBegin, diag::warn_doc_param_spaces_in_direction) << ArgRange << FixItHint::CreateReplacement(ArgRange, FixedName);"}},
[l]={
[gc]={"clang/test/Sema/warn-documentation.cpp:247:12: warning: whitespace is not allowed in parameter passing direction [-Wdocumentation-pedantic]","clang/test/Sema/warn-documentation.cpp:251:12: warning: whitespace is not allowed in parameter passing direction [-Wdocumentation-pedantic]"}
[gc]={"clang/test/Sema/warn-documentation.cpp:247:12: warning: whitespace is not allowed in parameter passing direction [-Wdocumentation-pedantic]","clang/test/Sema/warn-documentation.cpp:251:12: warning: whitespace is not allowed in parameter passing direction [-Wdocumentation-pedantic]"}
}
}
},
},
["warn_doc_returns_attached_to_a_void_function"]={
["warn_doc_returns_attached_to_a_void_function"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="\'%select{\\|@}0%1\' command used in a comment that is attached to a %select{function returning void|constructor|destructor|method returning void}2",
[c]="warn_doc_returns_attached_to_a_void_function",
[d]=g,
[d]="\'%select{\\|@}0%1\' command used in a comment that is attached to a %select{function returning void|constructor|destructor|method returning void}2",
[e]="\'(?:\\\\|@)(.*?)\' command used in a comment that is attached to a (?:function returning void|constructor|destructor|method returning void)",
[e]=i,
[f]=Lb,
[g]="\'(?:\\\\|@)(.*?)\' command used in a comment that is attached to a (?:function returning void|constructor|destructor|method returning void)",
[b]=pb,
[a]=Qb,
[a]={"6430583017c0",1344028532,"Comment diagnostics: warn if \\returns is used in a non-function comment or if","Comment diagnostics: warn if \\returns is used in a non-function comment or if\nthe function returns void.\n\nllvm-svn: 161261"},
[b]=sb,
[h]={{wb,586,"void Sema::checkReturnsCommand(const BlockCommandComment *Command) {\n  // ...\n  if (involvesFunctionType()) {\n    // ...\n    if (ThisDeclInfo->ReturnType->isVoidType()) {\n      // ...\n      Diag(Command->getLocation(), diag::warn_doc_returns_attached_to_a_void_function) << Command->getCommandMarker() << Command->getCommandName(Traits) << DiagKind << Command->getSourceRange();"}},
[f]={"6430583017c0",1344028532,"Comment diagnostics: warn if \\returns is used in a non-function comment or if","Comment diagnostics: warn if \\returns is used in a non-function comment or if\nthe function returns void.\n\nllvm-svn: 161261"},
[k]={
[h]={{Bb,586,"void Sema::checkReturnsCommand(const BlockCommandComment *Command) {\n  // ...\n  if (involvesFunctionType()) {\n    // ...\n    if (ThisDeclInfo->ReturnType->isVoidType()) {\n      // ...\n      Diag(Command->getLocation(), diag::warn_doc_returns_attached_to_a_void_function) << Command->getCommandMarker() << Command->getCommandName(Traits) << DiagKind << Command->getSourceRange();"}},
[l]={
["clang/test/Sema/warn-documentation.m"]={"clang/test/Sema/warn-documentation.m:91:6: warning: \'\\returns\' command used in a comment that is attached to a method returning void [-Wdocumentation]","clang/test/Sema/warn-documentation.m:257:5: warning: \'\\returns\' command used in a comment that is attached to a function returning void [-Wdocumentation]"}
["clang/test/Sema/warn-documentation.m"]={"clang/test/Sema/warn-documentation.m:91:6: warning: \'\\returns\' command used in a comment that is attached to a method returning void [-Wdocumentation]","clang/test/Sema/warn-documentation.m:257:5: warning: \'\\returns\' command used in a comment that is attached to a function returning void [-Wdocumentation]"}
}
}
},
},
["warn_doc_returns_not_attached_to_a_function_decl"]={
["warn_doc_returns_not_attached_to_a_function_decl"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="\'%select{\\|@}0%1\' command used in a comment that is not attached to a function or method declaration",
[c]="warn_doc_returns_not_attached_to_a_function_decl",
[d]=g,
[d]="\'%select{\\|@}0%1\' command used in a comment that is not attached to a function or method declaration",
[e]="\'(?:\\\\|@)(.*?)\' command used in a comment that is not attached to a function or method declaration",
[e]=i,
[f]=Lb,
[g]="\'(?:\\\\|@)(.*?)\' command used in a comment that is not attached to a function or method declaration",
[b]=pb,
[a]=Qb,
[a]={"6430583017c0",1344028532,"Comment diagnostics: warn if \\returns is used in a non-function comment or if","Comment diagnostics: warn if \\returns is used in a non-function comment or if\nthe function returns void.\n\nllvm-svn: 161261"},
[b]=sb,
[h]={{wb,596,"void Sema::checkReturnsCommand(const BlockCommandComment *Command) {\n  // ...\n  Diag(Command->getLocation(), diag::warn_doc_returns_not_attached_to_a_function_decl) << Command->getCommandMarker() << Command->getCommandName(Traits) << Command->getSourceRange();"}},
[f]={"6430583017c0",1344028532,"Comment diagnostics: warn if \\returns is used in a non-function comment or if","Comment diagnostics: warn if \\returns is used in a non-function comment or if\nthe function returns void.\n\nllvm-svn: 161261"},
[k]={
[h]={{Bb,596,"void Sema::checkReturnsCommand(const BlockCommandComment *Command) {\n  // ...\n  Diag(Command->getLocation(), diag::warn_doc_returns_not_attached_to_a_function_decl) << Command->getCommandMarker() << Command->getCommandName(Traits) << Command->getSourceRange();"}},
[l]={
["clang/test/Sema/no-documentation-warn-tagdecl-specifier.c"]={"clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:18:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]","clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:27:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]","clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:32:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]","clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:37:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]","clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:60:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]","clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:69:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]","clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:74:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]","clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:79:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]"}
["clang/test/Sema/no-documentation-warn-tagdecl-specifier.c"]={"clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:18:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]","clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:27:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]","clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:32:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]","clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:37:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]","clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:60:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]","clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:69:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]","clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:74:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]","clang/test/Sema/no-documentation-warn-tagdecl-specifier.c:79:6: warning: \'@return\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]"}
}
}
},
},
["warn_doc_tparam_duplicate"]={
["warn_doc_tparam_duplicate"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="template parameter \'%0\' is already documented",
[c]="warn_doc_tparam_duplicate",
[d]=g,
[d]="template parameter \'%0\' is already documented",
[e]="template parameter \'(.*?)\' is already documented",
[e]=i,
[f]=Lb,
[g]="template parameter \'(.*?)\' is already documented",
[b]=pb,
[a]=Qb,
[a]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels.","Comment parsing: add support for \\tparam command on all levels.\n\nThe only caveat is renumbering CXCommentKind enum for aesthetic reasons -- this\nbreaks libclang binary compatibility, but should not be a problem since API is\nso new.\n\nThis also fixes PR13372 as a side-effect.\n\nllvm-svn: 161087"},
[b]=sb,
[h]={{wb,322,"void Sema::actOnTParamCommandParamNameArg(TParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  // ...\n  if (resolveTParamReference(Arg, TemplateParameters, &Position)) {\n    // ...\n    if (PrevCommand) {\n      // ...\n      Diag(ArgLocBegin, diag::warn_doc_tparam_duplicate) << Arg << ArgRange;"}},
[f]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels.","Comment parsing: add support for \\tparam command on all levels.\n\nThe only caveat is renumbering CXCommentKind enum for aesthetic reasons -- this\nbreaks libclang binary compatibility, but should not be a problem since API is\nso new.\n\nThis also fixes PR13372 as a side-effect.\n\nllvm-svn: 161087"},
[k]={
[h]={{Bb,322,"void Sema::actOnTParamCommandParamNameArg(TParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  // ...\n  if (resolveTParamReference(Arg, TemplateParameters, &Position)) {\n    // ...\n    if (PrevCommand) {\n      // ...\n      Diag(ArgLocBegin, diag::warn_doc_tparam_duplicate) << Arg << ArgRange;"}},
[l]={
[gc]={"clang/test/Sema/warn-documentation.cpp:586:13: warning: template parameter \'T1\' is already documented [-Wdocumentation]"}
[gc]={"clang/test/Sema/warn-documentation.cpp:586:13: warning: template parameter \'T1\' is already documented [-Wdocumentation]"}
}
}
},
},
["warn_doc_tparam_not_attached_to_a_template_decl"]={
["warn_doc_tparam_not_attached_to_a_template_decl"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="\'%select{\\|@}0tparam\' command used in a comment that is not attached to a template declaration",
[c]="warn_doc_tparam_not_attached_to_a_template_decl",
[d]=g,
[d]="\'%select{\\|@}0tparam\' command used in a comment that is not attached to a template declaration",
[e]="\'(?:\\\\|@)tparam\' command used in a comment that is not attached to a template declaration",
[e]=i,
[f]=Lb,
[g]="\'(?:\\\\|@)tparam\' command used in a comment that is not attached to a template declaration",
[b]=pb,
[a]=Qb,
[a]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels.","Comment parsing: add support for \\tparam command on all levels.\n\nThe only caveat is renumbering CXCommentKind enum for aesthetic reasons -- this\nbreaks libclang binary compatibility, but should not be a problem since API is\nso new.\n\nThis also fixes PR13372 as a side-effect.\n\nllvm-svn: 161087"},
[b]=sb,
[h]={{wb,291,"TParamCommandComment *Sema::actOnTParamCommandStart(SourceLocation LocBegin, SourceLocation LocEnd, unsigned CommandID, CommandMarkerKind CommandMarker) {\n  // ...\n  if (!isTemplateOrSpecialization())\n    Diag(Command->getLocation(), diag::warn_doc_tparam_not_attached_to_a_template_decl) << CommandMarker << Command->getCommandNameRange(Traits);"}},
[f]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels.","Comment parsing: add support for \\tparam command on all levels.\n\nThe only caveat is renumbering CXCommentKind enum for aesthetic reasons -- this\nbreaks libclang binary compatibility, but should not be a problem since API is\nso new.\n\nThis also fixes PR13372 as a side-effect.\n\nllvm-svn: 161087"},
[k]={
[h]={{Bb,291,"TParamCommandComment *Sema::actOnTParamCommandStart(SourceLocation LocBegin, SourceLocation LocEnd, unsigned CommandID, CommandMarkerKind CommandMarker) {\n  // ...\n  if (!isTemplateOrSpecialization())\n    Diag(Command->getLocation(), diag::warn_doc_tparam_not_attached_to_a_template_decl) << CommandMarker << Command->getCommandNameRange(Traits);"}},
[l]={
["clang/test/AST/ast-dump-comment.cpp"]={"clang/test/AST/ast-dump-comment.cpp:53:6: warning: \'\\tparam\' command used in a comment that is not attached to a template declaration [-Wdocumentation]"}
["clang/test/AST/ast-dump-comment.cpp"]={"clang/test/AST/ast-dump-comment.cpp:53:6: warning: \'\\tparam\' command used in a comment that is not attached to a template declaration [-Wdocumentation]"}
}
}
},
},
["warn_doc_tparam_not_found"]={
["warn_doc_tparam_not_found"]={
[j]={M},
[k]={U},
[i]=M,
[j]=U,
[c]="template parameter \'%0\' not found in the template declaration",
[c]="warn_doc_tparam_not_found",
[d]=g,
[d]="template parameter \'%0\' not found in the template declaration",
[e]="template parameter \'(.*?)\' not found in the template declaration",
[e]=i,
[f]=Lb,
[g]="template parameter \'(.*?)\' not found in the template declaration",
[b]=pb,
[a]=Qb,
[a]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels.","Comment parsing: add support for \\tparam command on all levels.\n\nThe only caveat is renumbering CXCommentKind enum for aesthetic reasons -- this\nbreaks libclang binary compatibility, but should not be a problem since API is\nso new.\n\nThis also fixes PR13372 as a side-effect.\n\nllvm-svn: 161087"},
[b]=sb,
[h]={{wb,332,"void Sema::actOnTParamCommandParamNameArg(TParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  // ...\n  Diag(ArgLocBegin, diag::warn_doc_tparam_not_found) << Arg << ArgRange;"}},
[f]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels.","Comment parsing: add support for \\tparam command on all levels.\n\nThe only caveat is renumbering CXCommentKind enum for aesthetic reasons -- this\nbreaks libclang binary compatibility, but should not be a problem since API is\nso new.\n\nThis also fixes PR13372 as a side-effect.\n\nllvm-svn: 161087"},
[k]={
[h]={{Bb,332,"void Sema::actOnTParamCommandParamNameArg(TParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  // ...\n  Diag(ArgLocBegin, diag::warn_doc_tparam_not_found) << Arg << ArgRange;"}},
[l]={
["clang/test/Sema/warn-documentation-fixits.cpp"]={"clang/test/Sema/warn-documentation-fixits.cpp:14:13: warning: template parameter \'ZZZZZZZZZZ\' not found in the template declaration [-Wdocumentation]","clang/test/Sema/warn-documentation-fixits.cpp:19:13: warning: template parameter \'SomTy\' not found in the template declaration [-Wdocumentation]"}
["clang/test/Sema/warn-documentation-fixits.cpp"]={"clang/test/Sema/warn-documentation-fixits.cpp:14:13: warning: template parameter \'ZZZZZZZZZZ\' not found in the template declaration [-Wdocumentation]","clang/test/Sema/warn-documentation-fixits.cpp:19:13: warning: template parameter \'SomTy\' not found in the template declaration [-Wdocumentation]"}
}
}
},
},
["warn_double_const_requires_fp64"]={
["warn_double_const_requires_fp64"]={
[c]={{nil,jb,"double precision constant requires %select{cl_khr_fp64|cl_khr_fp64 and __opencl_c_fp64}0, casting to single precision"},{Sb,nil,"double precision constant requires cl_khr_fp64, casting to single precision"}},
[c]="warn_double_const_requires_fp64",
[d]=g,
[d]={{nil,I,"double precision constant requires %select{cl_khr_fp64|cl_khr_fp64 and __opencl_c_fp64}0, casting to single precision"},{db,nil,"double precision constant requires cl_khr_fp64, casting to single precision"}},
[e]="double precision constant requires (?:cl_khr_fp64|cl_khr_fp64 and __opencl_c_fp64), casting to single precision",
[e]=i,
[f]=Gb,
[g]="double precision constant requires (?:cl_khr_fp64|cl_khr_fp64 and __opencl_c_fp64), casting to single precision",
[b]=l,
[a]=Ib,
[a]={"c77f85b4b0fe",1299871499,"OpenCL: if double precision floating point constant encountered","OpenCL: if double precision floating point constant encountered\nwithout cl_khr_fp64, warn and cast to single precision\n\nllvm-svn: 127476"},
[b]=m,
[h]={{K,4044,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.isFixedPointLiteral()) {\n  // ...\n  } else if (Literal.isFloatingLiteral()) {\n    // ...\n    if (Ty == Context.DoubleTy) {\n      if (getLangOpts().SinglePrecisionConstants) {\n      // ...\n      } else if (getLangOpts().OpenCL && !getOpenCLOptions().isAvailableOption(\"cl_khr_fp64\", getLangOpts())) {\n        // ...\n        Diag(Tok.getLocation(), diag::warn_double_const_requires_fp64) << (getLangOpts().getOpenCLCompatibleVersion() >= 300);"}},
[f]={"c77f85b4b0fe",1299871499,"OpenCL: if double precision floating point constant encountered","OpenCL: if double precision floating point constant encountered\nwithout cl_khr_fp64, warn and cast to single precision\n\nllvm-svn: 127476"},
[k]={
[h]={{S,4044,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.isFixedPointLiteral()) {\n  // ...\n  } else if (Literal.isFloatingLiteral()) {\n    // ...\n    if (Ty == Context.DoubleTy) {\n      if (getLangOpts().SinglePrecisionConstants) {\n      // ...\n      } else if (getLangOpts().OpenCL && !getOpenCLOptions().isAvailableOption(\"cl_khr_fp64\", getLangOpts())) {\n        // ...\n        Diag(Tok.getLocation(), diag::warn_double_const_requires_fp64) << (getLangOpts().getOpenCLCompatibleVersion() >= 300);"}},
[l]={
["clang/test/CodeGenOpenCL/fpmath.cl"]={"clang/test/CodeGenOpenCL/fpmath.cl:37:16: warning: double precision constant requires cl_khr_fp64, casting to single precision"}
["clang/test/CodeGenOpenCL/fpmath.cl"]={"clang/test/CodeGenOpenCL/fpmath.cl:37:16: warning: double precision constant requires cl_khr_fp64, casting to single precision"}
}
}
},
},
["warn_double_lock"]={
["warn_double_lock"]={
[j]={Ac,Qb},
[k]={Fc,Ub},
[i]=Qb,
[j]=Ub,
[c]="acquiring %0 \'%1\' that is already held",
[c]="warn_double_lock",
[d]=g,
[d]="acquiring %0 \'%1\' that is already held",
[e]="acquiring (.*?) \'(.*?)\' that is already held",
[e]=i,
[f]=Vc,
[g]="acquiring (.*?) \'(.*?)\' that is already held",
[b]=l,
[a]=Yc,
[a]={"afbbd8e5adac",1314125194,"Thread-safety analysis: adding in a basic lockset tracking system. This","Thread-safety analysis: adding in a basic lockset tracking system. This\nsystem flags an error when unlocking a lock which was not held, locking\nthe same lock twice, having a different lockset on each iteration of a\nloop, or going out of scope while still holding a lock. In order to\nsuccessfully use the lockset, this patch also makes sure that attribute\narguments are attached correctly for later parsing.\n\nThis patch was also worked on by DeLesley Hutchins.\n\nNote: This patch has been reviewed by Chandler Carruth and Jeffrey\nYasskin. Feel free to provide post-commit review comments for a\nsubsequent patch.\n\nllvm-svn: 138350"},
[b]=m,
[h]={{gb,1896,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleDoubleLock(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocDoubleLock) override {\n    // ...\n    PartialDiagnosticAt Warning(LocDoubleLock, S.PDiag(diag::warn_double_lock) << Kind << LockName);"}},
[f]={"afbbd8e5adac",1314125194,"Thread-safety analysis: adding in a basic lockset tracking system. This","Thread-safety analysis: adding in a basic lockset tracking system. This\nsystem flags an error when unlocking a lock which was not held, locking\nthe same lock twice, having a different lockset on each iteration of a\nloop, or going out of scope while still holding a lock. In order to\nsuccessfully use the lockset, this patch also makes sure that attribute\narguments are attached correctly for later parsing.\n\nThis patch was also worked on by DeLesley Hutchins.\n\nNote: This patch has been reviewed by Chandler Carruth and Jeffrey\nYasskin. Feel free to provide post-commit review comments for a\nsubsequent patch.\n\nllvm-svn: 138350"},
[k]={
[h]={{qb,1896,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleDoubleLock(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocDoubleLock) override {\n    // ...\n    PartialDiagnosticAt Warning(LocDoubleLock, S.PDiag(diag::warn_double_lock) << Kind << LockName);"}},
[l]={
["clang/test/Sema/warn-thread-safety-analysis.c"]={"clang/test/Sema/warn-thread-safety-analysis.c:84:3: warning: acquiring mutex \'mu1\' that is already held [-Wthread-safety-analysis]"}
["clang/test/Sema/warn-thread-safety-analysis.c"]={"clang/test/Sema/warn-thread-safety-analysis.c:84:3: warning: acquiring mutex \'mu1\' that is already held [-Wthread-safety-analysis]"}
}
}
},
},
["warn_drv_assuming_mfloat_abi_is"]={
["warn_drv_assuming_mfloat_abi_is"]={
[c]="unknown platform, assuming -mfloat-abi=%0",
[c]="warn_drv_assuming_mfloat_abi_is",
[d]=g,
[d]="unknown platform, assuming -mfloat-abi=%0",
[e]="unknown platform, assuming \\-mfloat\\-abi\\=(.*?)",
[e]=i,
[f]=Gb,
[g]="unknown platform, assuming \\-mfloat\\-abi\\=(.*?)",
[b]=p,
[a]=Ib,
[a]={"7848592ec652",1252623609,"Initial handling of -m{soft-float,hard-float,float-abi=} for ARM.","Initial handling of -m{soft-float,hard-float,float-abi=} for ARM.\n\nllvm-svn: 81471"},
[b]=r,
[f]={"7848592ec652",1252623609,"Initial handling of -m{soft-float,hard-float,float-abi=} for ARM.","Initial handling of -m{soft-float,hard-float,float-abi=} for ARM.\n\nllvm-svn: 81471"},
[h]={{wd,472,"// Select the float ABI as determined by -msoft-float, -mhard-float, and\n// -mfloat-abi=.\narm::FloatABI arm::getARMFloatABI(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) {\n  // ...\n  if (ABI == FloatABI::Invalid) {\n    // ...\n    if (Triple.getOS() != llvm::Triple::UnknownOS || !Triple.isOSBinFormatMachO())\n      D.Diag(diag::warn_drv_assuming_mfloat_abi_is) << \"soft\";"}},
[h]={{wd,472,"// Select the float ABI as determined by -msoft-float, -mhard-float, and\n// -mfloat-abi=.\narm::FloatABI arm::getARMFloatABI(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) {\n  // ...\n  if (ABI == FloatABI::Invalid) {\n    // ...\n    if (Triple.getOS() != llvm::Triple::UnknownOS || !Triple.isOSBinFormatMachO())\n      D.Diag(diag::warn_drv_assuming_mfloat_abi_is) << \"soft\";"}},
[k]={
[l]={
["clang/test/Preprocessor/arm-target-features.c"]={"clang: warning: unknown platform, assuming -mfloat-abi=soft","clang: warning: unknown platform, assuming -mfloat-abi=soft","clang: warning: unknown platform, assuming -mfloat-abi=soft"}
["clang/test/Preprocessor/arm-target-features.c"]={"clang: warning: unknown platform, assuming -mfloat-abi=soft","clang: warning: unknown platform, assuming -mfloat-abi=soft","clang: warning: unknown platform, assuming -mfloat-abi=soft"}
}
}
},
},
["warn_drv_avr_family_linking_stdlibs_not_implemented"]={
["warn_drv_avr_family_linking_stdlibs_not_implemented"]={
[j]={Dc},
[k]={Ec},
[i]=Dc,
[j]=Ec,
[c]={{nil,I,"support for linking stdlibs for microcontroller \'%0\' is not implemented"}},
[c]={{nil,x,"warn_drv_avr_family_linking_stdlibs_not_implemented"}},
[d]=g,
[d]={{nil,x,"support for linking stdlibs for microcontroller \'%0\' is not implemented"}},
[e]="support for linking stdlibs for microcontroller \'(.*?)\' is not implemented",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]",
[g]="support for linking stdlibs for microcontroller \'(.*?)\' is not implemented",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]",
[a]={jc,1534346725,ic,dc},
[b]={{nil,x,r}},
[f]={mc,1534346725,ic,hc},
[h]={{"clang/lib/Driver/ToolChains/AVR.cpp",481,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs)) {\n    if (!CPU.empty()) {\n      if (!FamilyName) {\n        // ...\n        D.Diag(diag::warn_drv_avr_family_linking_stdlibs_not_implemented) << CPU;"}}
[h]={{"clang/lib/Driver/ToolChains/AVR.cpp",481,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs)) {\n    if (!CPU.empty()) {\n      if (!FamilyName) {\n        // ...\n        D.Diag(diag::warn_drv_avr_family_linking_stdlibs_not_implemented) << CPU;"}}
},
},
["warn_drv_avr_libc_not_found"]={
["warn_drv_avr_libc_not_found"]={
[j]={Dc},
[k]={Ec},
[i]=Dc,
[j]=Ec,
[c]={{nil,I,"no avr-libc installation can be found on the system, cannot link standard libraries"}},
[c]={{nil,x,"warn_drv_avr_libc_not_found"}},
[d]=g,
[d]={{nil,x,"no avr-libc installation can be found on the system, cannot link standard libraries"}},
[e]="no avr\\-libc installation can be found on the system, cannot link standard libraries",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]",
[g]="no avr\\-libc installation can be found on the system, cannot link standard libraries",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]",
[a]={jc,1534346725,ic,dc},
[b]={{nil,x,r}},
[f]={mc,1534346725,ic,hc},
[h]={{"clang/lib/Driver/ToolChains/AVR.cpp",485,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs)) {\n    if (!CPU.empty()) {\n      if (!FamilyName) {\n      // ...\n      } else if (!AVRLibcRoot) {\n        // ...\n        D.Diag(diag::warn_drv_avr_libc_not_found);"}}
[h]={{"clang/lib/Driver/ToolChains/AVR.cpp",485,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs)) {\n    if (!CPU.empty()) {\n      if (!FamilyName) {\n      // ...\n      } else if (!AVRLibcRoot) {\n        // ...\n        D.Diag(diag::warn_drv_avr_libc_not_found);"}}
},
},
["warn_drv_avr_linker_section_addresses_not_implemented"]={
["warn_drv_avr_linker_section_addresses_not_implemented"]={
[j]={Dc},
[k]={Ec},
[i]=Dc,
[j]=Ec,
[c]={{nil,Sb,"support for passing the data section address to the linker for microcontroller \'%0\' is not implemented"}},
[c]={{nil,db,"warn_drv_avr_linker_section_addresses_not_implemented"}},
[d]=g,
[d]={{nil,db,"support for passing the data section address to the linker for microcontroller \'%0\' is not implemented"}},
[e]="support for passing the data section address to the linker for microcontroller \'(.*?)\' is not implemented",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]",
[g]="support for passing the data section address to the linker for microcontroller \'(.*?)\' is not implemented",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]",
[a]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
[b]={{nil,db,r}},
[f]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
[h]={{"clang/lib/Driver/ToolChains/AVR.cpp",507,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (SectionAddressData) {\n  // ...\n  } else {\n    // ...\n    D.Diag(diag::warn_drv_avr_linker_section_addresses_not_implemented) << CPU;"}}
[h]={{"clang/lib/Driver/ToolChains/AVR.cpp",507,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (SectionAddressData) {\n  // ...\n  } else {\n    // ...\n    D.Diag(diag::warn_drv_avr_linker_section_addresses_not_implemented) << CPU;"}}
},
},
["warn_drv_avr_mcu_not_specified"]={
["warn_drv_avr_mcu_not_specified"]={
[j]={Dc},
[k]={Ec},
[i]=Dc,
[j]=Ec,
[c]={{nil,I,"no target microcontroller specified on command line, cannot link standard libraries, please pass -mmcu=<mcu name>"}},
[c]={{nil,x,"warn_drv_avr_mcu_not_specified"}},
[d]=g,
[d]={{nil,x,"no target microcontroller specified on command line, cannot link standard libraries, please pass -mmcu=<mcu name>"}},
[e]="no target microcontroller specified on command line, cannot link standard libraries, please pass \\-mmcu\\=\\<mcu name\\>",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]",
[g]="no target microcontroller specified on command line, cannot link standard libraries, please pass \\-mmcu\\=\\<mcu name\\>",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]",
[a]={jc,1534346725,ic,dc},
[b]={{nil,x,r}},
[f]={mc,1534346725,ic,hc},
[h]={{"clang/lib/Driver/ToolChains/AVR.cpp",373,"/// AVR Toolchain\nAVRToolChain::AVRToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) : Generic_ELF(D, Triple, Args) {\n  // ...\n  if (getCPUName(D, Args, Triple).empty())\n    D.Diag(diag::warn_drv_avr_mcu_not_specified);"}}
[h]={{"clang/lib/Driver/ToolChains/AVR.cpp",373,"/// AVR Toolchain\nAVRToolChain::AVRToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) : Generic_ELF(D, Triple, Args) {\n  // ...\n  if (getCPUName(D, Args, Triple).empty())\n    D.Diag(diag::warn_drv_avr_mcu_not_specified);"}}
},
},
["warn_drv_avr_stdlib_not_linked"]={
["warn_drv_avr_stdlib_not_linked"]={
[j]={Dc},
[k]={Ec},
[i]=Dc,
[j]=Ec,
[c]={{nil,I,"standard library not linked and so no interrupt vector table or compiler runtime routines will be linked"}},
[c]={{nil,x,"warn_drv_avr_stdlib_not_linked"}},
[d]=g,
[d]={{nil,x,"standard library not linked and so no interrupt vector table or compiler runtime routines will be linked"}},
[e]="standard library not linked and so no interrupt vector table or compiler runtime routines will be linked",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]",
[g]="standard library not linked and so no interrupt vector table or compiler runtime routines will be linked",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]",
[a]={jc,1534346725,ic,dc},
[b]={{nil,x,r}},
[f]={mc,1534346725,ic,hc},
[h]={{"clang/lib/Driver/ToolChains/AVR.cpp",498,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs)) {\n    // ...\n    if (!LinkStdlib)\n      D.Diag(diag::warn_drv_avr_stdlib_not_linked);"}}
[h]={{"clang/lib/Driver/ToolChains/AVR.cpp",498,"void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs)) {\n    // ...\n    if (!LinkStdlib)\n      D.Diag(diag::warn_drv_avr_stdlib_not_linked);"}}
},
},
["warn_drv_clang_unsupported"]={
["warn_drv_clang_unsupported"]={
[c]="the clang compiler does not support \'%0\'",
[c]="warn_drv_clang_unsupported",
[d]=g,
[d]="the clang compiler does not support \'%0\'",
[e]="the clang compiler does not support \'(.*?)\'",
[e]=i,
[f]=Gb,
[g]="the clang compiler does not support \'(.*?)\'",
[b]=p,
[a]=Ib,
[a]={"513d500fda01",1239131904,"Driver: Explicitly warn that -pg isn\'t supported (even though we","Driver: Explicitly warn that -pg isn\'t supported (even though we\naren\'t failing the compilation).\n\nllvm-svn: 68540"},
[b]=r,
[h]={{T,6965,"#endif\n  // ...\n  // -fsigned-bitfields is default, and clang doesn\'t yet support\n  // -funsigned-bitfields.\n  if (!Args.hasFlag(options::OPT_fsigned_bitfields, options::OPT_funsigned_bitfields, true))\n    D.Diag(diag::warn_drv_clang_unsupported) << Args.getLastArg(options::OPT_funsigned_bitfields)->getAsString(Args);"}}
[f]={"513d500fda01",1239131904,"Driver: Explicitly warn that -pg isn\'t supported (even though we","Driver: Explicitly warn that -pg isn\'t supported (even though we\naren\'t failing the compilation).\n\nllvm-svn: 68540"},
[h]={{ab,6965,"#endif\n  // ...\n  // -fsigned-bitfields is default, and clang doesn\'t yet support\n  // -funsigned-bitfields.\n  if (!Args.hasFlag(options::OPT_fsigned_bitfields, options::OPT_funsigned_bitfields, true))\n    D.Diag(diag::warn_drv_clang_unsupported) << Args.getLastArg(options::OPT_funsigned_bitfields)->getAsString(Args);"}}
},
},
["warn_drv_darwin_sdk_invalid_settings"]={
["warn_drv_darwin_sdk_invalid_settings"]={
[j]={"darwin-sdk-settings"},
[k]={"darwin-sdk-settings"},
[i]="darwin-sdk-settings",
[j]="darwin-sdk-settings",
[c]={{nil,ob,"SDK settings were ignored as \'SDKSettings.json\' could not be parsed"}},
[c]={{nil,B,"warn_drv_darwin_sdk_invalid_settings"}},
[d]=g,
[d]={{nil,B,"SDK settings were ignored as \'SDKSettings.json\' could not be parsed"}},
[e]="SDK settings were ignored as \'SDKSettings\\.json\' could not be parsed",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdarwin\\-sdk\\-settings[^\\]]*\\]",
[g]="SDK settings were ignored as \'SDKSettings\\.json\' could not be parsed",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wdarwin\\-sdk\\-settings[^\\]]*\\]",
[a]={jc,1534346725,ic,dc},
[b]={{nil,B,r}},
[h]={{od,2131,"std::optional<DarwinSDKInfo> parseSDKSettings(llvm::vfs::FileSystem &VFS, const ArgList &Args, const Driver &TheDriver) {\n  // ...\n  if (!SDKInfoOrErr) {\n    // ...\n    TheDriver.Diag(diag::warn_drv_darwin_sdk_invalid_settings);"}}
[f]={mc,1534346725,ic,hc},
[h]={{qd,2131,"std::optional<DarwinSDKInfo> parseSDKSettings(llvm::vfs::FileSystem &VFS, const ArgList &Args, const Driver &TheDriver) {\n  // ...\n  if (!SDKInfoOrErr) {\n    // ...\n    TheDriver.Diag(diag::warn_drv_darwin_sdk_invalid_settings);"}}
},
},
["warn_drv_deprecated_arg"]={
["warn_drv_deprecated_arg"]={
[j]={ab},
[k]={jb},
[i]=ab,
[j]=jb,
[c]="argument \'%0\' is deprecated, use \'%1\' instead",
[c]="warn_drv_deprecated_arg",
[d]=g,
[d]="argument \'%0\' is deprecated, use \'%1\' instead",
[e]="argument \'(.*?)\' is deprecated, use \'(.*?)\' instead",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]",
[g]="argument \'(.*?)\' is deprecated, use \'(.*?)\' instead",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]",
[a]={"aa716577495a",1352164322,"Per discussion on cfe-commits, treat -faddress-sanitizer,","Per discussion on cfe-commits, treat -faddress-sanitizer,\n-fno-address-sanitizer, -fthread-sanitizer, -fno-thread-sanitizer, and\n-fcatch-undefined-behavior as deprecated: produce a warning if they are used\npointing to the corresponding -fsanitize= option. In passing add the missing\n\'-\' to some diagnostics.\n\nllvm-svn: 167429"},
[b]=ob,
[h]={{Md,798,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Parse -f(no-)?sanitize-coverage flags if coverage is supported by the\n  // enabled sanitizers.\n  for (const auto *Arg : Args) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_coverage)) {\n      // ...\n      if (Arg->getNumValues() == 1 && !StringRef(Arg->getValue(0)).getAsInteger(0, LegacySanitizeCoverage)) {\n        // ...\n        if (LegacySanitizeCoverage != 0 && DiagnoseErrors) {\n          D.Diag(diag::warn_drv_deprecated_arg) << Arg->getAsString(Args) << \"-fsanitize-coverage=trace-pc-guard\";"},{Md,834,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Choose at most one coverage type: function, bb, or edge.\n  if (DiagnoseErrors) {\n    // ...\n    // Basic block tracing and 8-bit counters require some type of coverage\n    // enabled.\n    if (CoverageFeatures & CoverageTraceBB)\n      D.Diag(clang::diag::warn_drv_deprecated_arg) << \"-fsanitize-coverage=trace-bb\""},{Md,838,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Choose at most one coverage type: function, bb, or edge.\n  if (DiagnoseErrors) {\n    // ...\n    if (CoverageFeatures & Coverage8bitCounters)\n      D.Diag(clang::diag::warn_drv_deprecated_arg) << \"-fsanitize-coverage=8bit-counters\""},{Md,850,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  if ((CoverageFeatures & InsertionPointTypes) && !(CoverageFeatures & InstrumentationTypes) && DiagnoseErrors) {\n    D.Diag(clang::diag::warn_drv_deprecated_arg) << \"-fsanitize-coverage=[func|bb|edge]\""}}
[f]={"aa716577495a",1352164322,"Per discussion on cfe-commits, treat -faddress-sanitizer,","Per discussion on cfe-commits, treat -faddress-sanitizer,\n-fno-address-sanitizer, -fthread-sanitizer, -fno-thread-sanitizer, and\n-fcatch-undefined-behavior as deprecated: produce a warning if they are used\npointing to the corresponding -fsanitize= option. In passing add the missing\n\'-\' to some diagnostics.\n\nllvm-svn: 167429"},
[h]={{Id,798,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Parse -f(no-)?sanitize-coverage flags if coverage is supported by the\n  // enabled sanitizers.\n  for (const auto *Arg : Args) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_coverage)) {\n      // ...\n      if (Arg->getNumValues() == 1 && !StringRef(Arg->getValue(0)).getAsInteger(0, LegacySanitizeCoverage)) {\n        // ...\n        if (LegacySanitizeCoverage != 0 && DiagnoseErrors) {\n          D.Diag(diag::warn_drv_deprecated_arg) << Arg->getAsString(Args) << \"-fsanitize-coverage=trace-pc-guard\";"},{Id,834,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Choose at most one coverage type: function, bb, or edge.\n  if (DiagnoseErrors) {\n    // ...\n    // Basic block tracing and 8-bit counters require some type of coverage\n    // enabled.\n    if (CoverageFeatures & CoverageTraceBB)\n      D.Diag(clang::diag::warn_drv_deprecated_arg) << \"-fsanitize-coverage=trace-bb\""},{Id,838,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Choose at most one coverage type: function, bb, or edge.\n  if (DiagnoseErrors) {\n    // ...\n    if (CoverageFeatures & Coverage8bitCounters)\n      D.Diag(clang::diag::warn_drv_deprecated_arg) << \"-fsanitize-coverage=8bit-counters\""},{Id,850,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  if ((CoverageFeatures & InsertionPointTypes) && !(CoverageFeatures & InstrumentationTypes) && DiagnoseErrors) {\n    D.Diag(clang::diag::warn_drv_deprecated_arg) << \"-fsanitize-coverage=[func|bb|edge]\""}}
},
},
["warn_drv_diagnostics_hotness_requires_pgo"]={
["warn_drv_diagnostics_hotness_requires_pgo"]={
[j]={qb},
[k]={tb},
[i]=qb,
[j]=tb,
[c]={{nil,nd,"argument \'%0\' requires profile-guided optimization information"}},
[c]={{nil,Ab,"warn_drv_diagnostics_hotness_requires_pgo"}},
[d]=g,
[d]={{nil,Ab,"argument \'%0\' requires profile-guided optimization information"}},
[e]="argument \'(.*?)\' requires profile\\-guided optimization information",
[e]=i,
[f]=p,
[g]="argument \'(.*?)\' requires profile\\-guided optimization information",
[b]=p,
[a]=r,
[a]={"dc6fa5d1f678",1498884278,"[Driver] Add -fdiagnostics-hotness-threshold","[Driver] Add -fdiagnostics-hotness-threshold\n\nSummary:\nDepends on https://reviews.llvm.org/D34867.\n\nAdd a Clang frontend option to enable optimization remark hotness\nthresholds, which were added to LLVM in https://reviews.llvm.org/D34867.\nThis prevents diagnostics that do not meet a minimum hotness\nthreshold from being output. When generating optimization remarks for large\ncodebases with a ton of cold code paths, this option can be used\nto limit the optimization remark output at a reasonable size.\nDiscussion of this change can be read here:\nhttp://lists.llvm.org/pipermail/llvm-dev/2017-June/114377.html\n\nReviewers: anemet, davidxl, hfinkel\n\nReviewed By: anemet\n\nSubscribers: fhahn, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D34868\n\nllvm-svn: 306945"},
[b]={{nil,Ab,r}},
[h]={{Ic,1993,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Opts.DiagnosticsWithHotness && !UsingProfile &&\n    // ...\n    Diags.Report(diag::warn_drv_diagnostics_hotness_requires_pgo) << \"-fdiagnostics-show-hotness\";"},{Ic,2010,"#include \"clang/Driver/Options.inc\"\n  // ...\n  // Parse remarks hotness threshold. Valid value is either integer or \'auto\'.\n  if (auto *arg = Args.getLastArg(options::OPT_fdiagnostics_hotness_threshold_EQ)) {\n    // ...\n    if (!ResultOrErr) {\n    // ...\n    } else {\n      // ...\n      if ((!Opts.DiagnosticsHotnessThreshold || *Opts.DiagnosticsHotnessThreshold > 0) && !UsingProfile)\n        Diags.Report(diag::warn_drv_diagnostics_hotness_requires_pgo) << \"-fdiagnostics-hotness-threshold=\";"}},
[f]={"dc6fa5d1f678",1498884278,"[Driver] Add -fdiagnostics-hotness-threshold","[Driver] Add -fdiagnostics-hotness-threshold\n\nSummary:\nDepends on https://reviews.llvm.org/D34867.\n\nAdd a Clang frontend option to enable optimization remark hotness\nthresholds, which were added to LLVM in https://reviews.llvm.org/D34867.\nThis prevents diagnostics that do not meet a minimum hotness\nthreshold from being output. When generating optimization remarks for large\ncodebases with a ton of cold code paths, this option can be used\nto limit the optimization remark output at a reasonable size.\nDiscussion of this change can be read here:\nhttp://lists.llvm.org/pipermail/llvm-dev/2017-June/114377.html\n\nReviewers: anemet, davidxl, hfinkel\n\nReviewed By: anemet\n\nSubscribers: fhahn, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D34868\n\nllvm-svn: 306945"},
[k]={
[h]={{Jc,1993,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Opts.DiagnosticsWithHotness && !UsingProfile &&\n    // ...\n    Diags.Report(diag::warn_drv_diagnostics_hotness_requires_pgo) << \"-fdiagnostics-show-hotness\";"},{Jc,2010,"#include \"clang/Driver/Options.inc\"\n  // ...\n  // Parse remarks hotness threshold. Valid value is either integer or \'auto\'.\n  if (auto *arg = Args.getLastArg(options::OPT_fdiagnostics_hotness_threshold_EQ)) {\n    // ...\n    if (!ResultOrErr) {\n    // ...\n    } else {\n      // ...\n      if ((!Opts.DiagnosticsHotnessThreshold || *Opts.DiagnosticsHotnessThreshold > 0) && !UsingProfile)\n        Diags.Report(diag::warn_drv_diagnostics_hotness_requires_pgo) << \"-fdiagnostics-hotness-threshold=\";"}},
[l]={
["clang/test/Profile/misexpect-branch.c"]={"warning: argument \'-fdiagnostics-misexpect-tolerance=\' requires profile-guided optimization information"}
["clang/test/Profile/misexpect-branch.c"]={"warning: argument \'-fdiagnostics-misexpect-tolerance=\' requires profile-guided optimization information"}
}
}
},
},
["warn_drv_diagnostics_misexpect_requires_pgo"]={
["warn_drv_diagnostics_misexpect_requires_pgo"]={
[j]={qb},
[k]={tb},
[i]=qb,
[j]=tb,
[c]={{nil,kb,"argument \'%0\' requires profile-guided optimization information"}},
[c]={{nil,C,"warn_drv_diagnostics_misexpect_requires_pgo"}},
[d]=g,
[d]={{nil,C,"argument \'%0\' requires profile-guided optimization information"}},
[e]="argument \'(.*?)\' requires profile\\-guided optimization information",
[e]=i,
[f]=Ec,
[g]="argument \'(.*?)\' requires profile\\-guided optimization information",
[b]=p,
[a]=Cc,
[a]={"c5e5b54350fe",1645456106,"[CUDA] Add driver support for compiling CUDA with the new driver","[CUDA] Add driver support for compiling CUDA with the new driver\n\nThis patch adds the basic support for the clang driver to compile and link CUDA\nusing the new offloading driver. This requires handling the CUDA offloading kind\nand embedding the generated files into the host. This will allow us to link\nOpenMP code with CUDA code in the linker wrapper. More support will be required\nto create functional CUDA / HIP binaries using this method.\n\nDepends on D120270 D120271 D120934\n\nReviewed By: tra\n\nDifferential Revision: https://reviews.llvm.org/D120272"},
[b]={{nil,C,r}},
[h]={{Ic,2027,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (auto *arg = Args.getLastArg(options::OPT_fdiagnostics_misexpect_tolerance_EQ)) {\n    // ...\n    if (!ResultOrErr) {\n    // ...\n    } else {\n      // ...\n      if ((!Opts.DiagnosticsMisExpectTolerance || *Opts.DiagnosticsMisExpectTolerance > 0) && !UsingProfile)\n        Diags.Report(diag::warn_drv_diagnostics_misexpect_requires_pgo) << \"-fdiagnostics-misexpect-tolerance=\";"}}
[f]={"c5e5b54350fe",1645456106,"[CUDA] Add driver support for compiling CUDA with the new driver","[CUDA] Add driver support for compiling CUDA with the new driver\n\nThis patch adds the basic support for the clang driver to compile and link CUDA\nusing the new offloading driver. This requires handling the CUDA offloading kind\nand embedding the generated files into the host. This will allow us to link\nOpenMP code with CUDA code in the linker wrapper. More support will be required\nto create functional CUDA / HIP binaries using this method.\n\nDepends on D120270 D120271 D120934\n\nReviewed By: tra\n\nDifferential Revision: https://reviews.llvm.org/D120272"},
[h]={{Jc,2027,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (auto *arg = Args.getLastArg(options::OPT_fdiagnostics_misexpect_tolerance_EQ)) {\n    // ...\n    if (!ResultOrErr) {\n    // ...\n    } else {\n      // ...\n      if ((!Opts.DiagnosticsMisExpectTolerance || *Opts.DiagnosticsMisExpectTolerance > 0) && !UsingProfile)\n        Diags.Report(diag::warn_drv_diagnostics_misexpect_requires_pgo) << \"-fdiagnostics-misexpect-tolerance=\";"}}
},
},
["warn_drv_disabling_vptr_no_rtti_default"]={
["warn_drv_disabling_vptr_no_rtti_default"]={
[j]={"auto-disable-vptr-sanitizer"},
[k]={"auto-disable-vptr-sanitizer"},
[i]="auto-disable-vptr-sanitizer",
[j]="auto-disable-vptr-sanitizer",
[c]="implicitly disabling vptr sanitizer because rtti wasn\'t enabled",
[c]="warn_drv_disabling_vptr_no_rtti_default",
[d]=g,
[d]="implicitly disabling vptr sanitizer because rtti wasn\'t enabled",
[e]="implicitly disabling vptr sanitizer because rtti wasn\'t enabled",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wauto\\-disable\\-vptr\\-sanitizer[^\\]]*\\]",
[g]="implicitly disabling vptr sanitizer because rtti wasn\'t enabled",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wauto\\-disable\\-vptr\\-sanitizer[^\\]]*\\]",
[a]={"28f353c7d0d3",1422575803,"Add some more PS4 driver settings related to rtti and exceptions.","Add some more PS4 driver settings related to rtti and exceptions.\n\nSummary:\nThe PS4 defaults to -fno-rtti, and has to have rtti enabled when enabling\nexceptions.\n\nThis commit makes clang add the -fno-rtti by default on the PS4, unless\n-frtti was passed in.\n\nIt also diagnoses misuses for the PS4:\n- Exceptions need rtti. Warn and enable rtti if no rtti flag was passed,\n  error if -fno-rtti was passed.\n\nI also added a more general warning for when -fno-rtti is the default\n(currently it\'s only on the PS4) and the vptr sanitizer is on.\n\nFixed a few tests, due to different flag order when passing cc1 arguments.\n\nReviewers: chandlerc\n\nSubscribers: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D7250\n\nllvm-svn: 227518"},
[b]=r,
[h]={{Md,473,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {\n      // ...\n      // Test for -fno-rtti + explicit -fsanitizer=vptr before expanding groups\n      // so we don\'t error out if -fno-rtti and -fsanitize=undefined were\n      // passed.\n      if ((Add & SanitizerKind::Vptr) && (RTTIMode == ToolChain::RM_Disabled)) {\n        if (const llvm::opt::Arg *NoRTTIArg = TC.getRTTIArg()) {\n        // ...\n        } else {\n          // The vptr sanitizer requires RTTI, but RTTI is disabled (by\n          // default). Warn that the vptr sanitizer is being disabled.\n          if (DiagnoseErrors)\n            D.Diag(diag::warn_drv_disabling_vptr_no_rtti_default);"}}
[f]={"28f353c7d0d3",1422575803,"Add some more PS4 driver settings related to rtti and exceptions.","Add some more PS4 driver settings related to rtti and exceptions.\n\nSummary:\nThe PS4 defaults to -fno-rtti, and has to have rtti enabled when enabling\nexceptions.\n\nThis commit makes clang add the -fno-rtti by default on the PS4, unless\n-frtti was passed in.\n\nIt also diagnoses misuses for the PS4:\n- Exceptions need rtti. Warn and enable rtti if no rtti flag was passed,\n  error if -fno-rtti was passed.\n\nI also added a more general warning for when -fno-rtti is the default\n(currently it\'s only on the PS4) and the vptr sanitizer is on.\n\nFixed a few tests, due to different flag order when passing cc1 arguments.\n\nReviewers: chandlerc\n\nSubscribers: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D7250\n\nllvm-svn: 227518"},
[h]={{Id,473,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {\n      // ...\n      // Test for -fno-rtti + explicit -fsanitizer=vptr before expanding groups\n      // so we don\'t error out if -fno-rtti and -fsanitize=undefined were\n      // passed.\n      if ((Add & SanitizerKind::Vptr) && (RTTIMode == ToolChain::RM_Disabled)) {\n        if (const llvm::opt::Arg *NoRTTIArg = TC.getRTTIArg()) {\n        // ...\n        } else {\n          // The vptr sanitizer requires RTTI, but RTTI is disabled (by\n          // default). Warn that the vptr sanitizer is being disabled.\n          if (DiagnoseErrors)\n            D.Diag(diag::warn_drv_disabling_vptr_no_rtti_default);"}}
},
},
["warn_drv_dwarf_version_limited_by_target"]={
["warn_drv_dwarf_version_limited_by_target"]={
[j]={"unsupported-target-opt"},
[k]={"unsupported-target-opt"},
[i]="unsupported-target-opt",
[j]="unsupported-target-opt",
[c]={{nil,Q,"debug information option \'%0\' is not supported; requires DWARF-%2 but target \'%1\' only provides DWARF-%3"},{jb,Sb,"debug information option \'%0\' is not supported. It needs DWARF-%2 but target \'%1\' only provides DWARF-%3."}},
[c]={{nil,db,"warn_drv_dwarf_version_limited_by_target"}},
[d]=g,
[d]={{nil,w,"debug information option \'%0\' is not supported; requires DWARF-%2 but target \'%1\' only provides DWARF-%3"},{I,db,"debug information option \'%0\' is not supported. It needs DWARF-%2 but target \'%1\' only provides DWARF-%3."}},
[e]="debug information option \'(.*?)\' is not supported; requires DWARF\\-(.*?) but target \'(.*?)\' only provides DWARF\\-(.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-target\\-opt[^\\]]*\\]",
[g]="debug information option \'(.*?)\' is not supported; requires DWARF\\-(.*?) but target \'(.*?)\' only provides DWARF\\-(.*?)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-target\\-opt[^\\]]*\\]",
[a]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
[b]={{nil,db,r}},
[h]={{T,4395,"static void renderDebugOptions(const ToolChain &TC, const Driver &D, const llvm::Triple &T, const ArgList &Args, bool EmitCodeView, bool IRInput, ArgStringList &CmdArgs, llvm::codegenoptions::DebugInfoKind &DebugInfoKind, DwarfFissionKind &DwarfFission) {\n  // ...\n  if (Args.hasFlag(options::OPT_gembed_source, options::OPT_gno_embed_source, false)) {\n    // ...\n    if (RequestedDWARFVersion < 5)\n    // ...\n    else if (EffectiveDWARFVersion < 5)\n      // ...\n      D.Diag(diag::warn_drv_dwarf_version_limited_by_target) << A->getAsString(Args) << TC.getTripleString() << 5 << EffectiveDWARFVersion;"}}
[f]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
[h]={{ab,4395,"static void renderDebugOptions(const ToolChain &TC, const Driver &D, const llvm::Triple &T, const ArgList &Args, bool EmitCodeView, bool IRInput, ArgStringList &CmdArgs, llvm::codegenoptions::DebugInfoKind &DebugInfoKind, DwarfFissionKind &DwarfFission) {\n  // ...\n  if (Args.hasFlag(options::OPT_gembed_source, options::OPT_gno_embed_source, false)) {\n    // ...\n    if (RequestedDWARFVersion < 5)\n    // ...\n    else if (EffectiveDWARFVersion < 5)\n      // ...\n      D.Diag(diag::warn_drv_dwarf_version_limited_by_target) << A->getAsString(Args) << TC.getTripleString() << 5 << EffectiveDWARFVersion;"}}
},
},
["warn_drv_dxc_missing_dxv"]={
["warn_drv_dxc_missing_dxv"]={
[j]={"dxil-validation"},
[k]={"dxil-validation"},
[i]="dxil-validation",
[j]="dxil-validation",
[c]="dxv not found. Resulting DXIL will not be validated or signed for use in release environments.",
[c]="warn_drv_dxc_missing_dxv",
[d]=g,
[d]="dxv not found. Resulting DXIL will not be validated or signed for use in release environments.",
[e]="dxv not found\\. Resulting DXIL will not be validated or signed for use in release environments\\.",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdxil\\-validation[^\\]]*\\]",
[g]="dxv not found\\. Resulting DXIL will not be validated or signed for use in release environments\\.",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wdxil\\-validation[^\\]]*\\]",
[a]={"d5a7439e220c",1673633136,"[HLSL] [Dirver] add dxv as a VerifyDebug Job","[HLSL] [Dirver] add dxv as a VerifyDebug Job\n\nNew option --dxv-path is  added for dxc mode to set the installation path for dxv.\nIf cannot find dxv, a warning will be report.\n\ndxv will be executed with command line dxv file_name -o file_name.\nIt will validate and sign the file and overwrite it.\n\nDifferential Revision: https://reviews.llvm.org/D141705"},
[b]=r,
[f]={"d5a7439e220c",1673633136,"[HLSL] [Dirver] add dxv as a VerifyDebug Job","[HLSL] [Dirver] add dxv as a VerifyDebug Job\n\nNew option --dxv-path is  added for dxc mode to set the installation path for dxv.\nIf cannot find dxv, a warning will be report.\n\ndxv will be executed with command line dxv file_name -o file_name.\nIt will validate and sign the file and overwrite it.\n\nDifferential Revision: https://reviews.llvm.org/D141705"},
[h]={{"clang/lib/Driver/ToolChains/HLSL.cpp",266,"bool HLSLToolChain::requiresValidation(DerivedArgList &Args) const {\n  // ...\n  getDriver().Diag(diag::warn_drv_dxc_missing_dxv);"}},
[h]={{"clang/lib/Driver/ToolChains/HLSL.cpp",266,"bool HLSLToolChain::requiresValidation(DerivedArgList &Args) const {\n  // ...\n  getDriver().Diag(diag::warn_drv_dxc_missing_dxv);"}},
[k]={
[l]={
["clang/test/Driver/dxc_D.hlsl"]={"clang: warning: dxv not found. Resulting DXIL will not be validated or signed for use in release environments. [-Wdxil-validation]"}
["clang/test/Driver/dxc_D.hlsl"]={"clang: warning: dxv not found. Resulting DXIL will not be validated or signed for use in release environments. [-Wdxil-validation]"}
}
}
},
},
["warn_drv_empty_joined_argument"]={
["warn_drv_empty_joined_argument"]={
[j]={qb},
[k]={tb},
[i]=qb,
[j]=tb,
[c]="joined argument expects additional value: \'%0\'",
[c]="warn_drv_empty_joined_argument",
[d]=g,
[d]="joined argument expects additional value: \'%0\'",
[e]="joined argument expects additional value\\: \'(.*?)\'",
[e]=i,
[f]=Ec,
[g]="joined argument expects additional value\\: \'(.*?)\'",
[b]=p,
[a]=Cc,
[a]={"ce975d999750",1329933322,"[driver] Add a warning for when -mcpu= is specified without an argument.  There","[driver] Add a warning for when -mcpu= is specified without an argument.  There\nare likely many other OPT_xxxx_EQ options that could/should be added here.\nrdar://10704648\n\nllvm-svn: 151174"},
[b]=r,
[h]={{Nb,309,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // ...\n  // Check for unsupported options.\n  for (const Arg *A : Args) {\n    // ...\n    // Warn about -mcpu= without an argument.\n    if (A->getOption().matches(options::OPT_mcpu_EQ) && A->containsValue(\"\")) {\n      Diag(diag::warn_drv_empty_joined_argument) << A->getAsString(Args);"},{Nb,311,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // ...\n  // Check for unsupported options.\n  for (const Arg *A : Args) {\n    // ...\n    // Warn about -mcpu= without an argument.\n    if (A->getOption().matches(options::OPT_mcpu_EQ) && A->containsValue(\"\")) {\n      // ...\n      ContainsError |= Diags.getDiagnosticLevel(diag::warn_drv_empty_joined_argument, SourceLocation()) > DiagnosticsEngine::Warning;"},{Nb,870,"void Driver::CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs) {\n  // ...\n  if (IsOpenMPOffloading) {\n    // ...\n    // If the user specified -fopenmp-targets= we create a toolchain for each\n    // valid triple. Otherwise, if only --offload-arch= was specified we instead\n    // attempt to derive the appropriate toolchains from the arguments.\n    if (Arg *OpenMPTargets = C.getInputArgs().getLastArg(options::OPT_fopenmp_targets_EQ)) {\n      if (OpenMPTargets && !OpenMPTargets->getNumValues()) {\n        Diag(clang::diag::warn_drv_empty_joined_argument) << OpenMPTargets->getAsString(C.getInputArgs());"}}
[f]={"ce975d999750",1329933322,"[driver] Add a warning for when -mcpu= is specified without an argument.  There","[driver] Add a warning for when -mcpu= is specified without an argument.  There\nare likely many other OPT_xxxx_EQ options that could/should be added here.\nrdar://10704648\n\nllvm-svn: 151174"},
[h]={{Vb,309,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // ...\n  // Check for unsupported options.\n  for (const Arg *A : Args) {\n    // ...\n    // Warn about -mcpu= without an argument.\n    if (A->getOption().matches(options::OPT_mcpu_EQ) && A->containsValue(\"\")) {\n      Diag(diag::warn_drv_empty_joined_argument) << A->getAsString(Args);"},{Vb,311,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // ...\n  // Check for unsupported options.\n  for (const Arg *A : Args) {\n    // ...\n    // Warn about -mcpu= without an argument.\n    if (A->getOption().matches(options::OPT_mcpu_EQ) && A->containsValue(\"\")) {\n      // ...\n      ContainsError |= Diags.getDiagnosticLevel(diag::warn_drv_empty_joined_argument, SourceLocation()) > DiagnosticsEngine::Warning;"},{Vb,870,"void Driver::CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs) {\n  // ...\n  if (IsOpenMPOffloading) {\n    // ...\n    // If the user specified -fopenmp-targets= we create a toolchain for each\n    // valid triple. Otherwise, if only --offload-arch= was specified we instead\n    // attempt to derive the appropriate toolchains from the arguments.\n    if (Arg *OpenMPTargets = C.getInputArgs().getLastArg(options::OPT_fopenmp_targets_EQ)) {\n      if (OpenMPTargets && !OpenMPTargets->getNumValues()) {\n        Diag(clang::diag::warn_drv_empty_joined_argument) << OpenMPTargets->getAsString(C.getInputArgs());"}}
},
},
["warn_drv_fine_grained_bitfield_accesses_ignored"]={
["warn_drv_fine_grained_bitfield_accesses_ignored"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]={{nil,lb,"option \'-ffine-grained-bitfield-accesses\' cannot be enabled together with a sanitizer; flag ignored"}},
[c]={{nil,F,"warn_drv_fine_grained_bitfield_accesses_ignored"}},
[d]=g,
[d]={{nil,F,"option \'-ffine-grained-bitfield-accesses\' cannot be enabled together with a sanitizer; flag ignored"}},
[e]="option \'\\-ffine\\-grained\\-bitfield\\-accesses\' cannot be enabled together with a sanitizer; flag ignored",
[e]=i,
[f]=p,
[g]="option \'\\-ffine\\-grained\\-bitfield\\-accesses\' cannot be enabled together with a sanitizer; flag ignored",
[b]=p,
[a]=r,
[a]={"9b3d6272800a",1508172627,"[Bitfield] Add an option to access bitfield in a fine-grained manner.","[Bitfield] Add an option to access bitfield in a fine-grained manner.\n\nCurrently all the consecutive bitfields are wrapped as a large integer unless there is unamed zero sized bitfield in between. The patch provides an alternative manner which makes the bitfield to be accessed as separate memory location if it has legal integer width and is naturally aligned. Such separate bitfield may split the original consecutive bitfields into subgroups of consecutive bitfields, and each subgroup will be wrapped as an integer. Now This is all controlled by an option -ffine-grained-bitfield-accesses. The alternative of bitfield access manner can improve the access efficiency of those bitfields with legal width and being aligned, but may reduce the chance of load/store combining of other bitfields, so it depends on how the bitfields are defined and actually accessed to choose when to use the option. For now the option is off by default.\n\nDifferential revision: https://reviews.llvm.org/D36562\n\nllvm-svn: 315915"},
[b]={{nil,F,r}},
[h]={{Ic,4472,"bool CompilerInvocation::CreateFromArgsImpl(CompilerInvocation &Res, ArrayRef<const char *> CommandLineArgs, DiagnosticsEngine &Diags, const char *Argv0) {\n  // ...\n  // If sanitizer is enabled, disable OPT_ffine_grained_bitfield_accesses.\n  if (Res.getCodeGenOpts().FineGrainedBitfieldAccesses && !Res.getLangOpts()->Sanitize.empty()) {\n    // ...\n    Diags.Report(diag::warn_drv_fine_grained_bitfield_accesses_ignored);"}},
[f]={"9b3d6272800a",1508172627,"[Bitfield] Add an option to access bitfield in a fine-grained manner.","[Bitfield] Add an option to access bitfield in a fine-grained manner.\n\nCurrently all the consecutive bitfields are wrapped as a large integer unless there is unamed zero sized bitfield in between. The patch provides an alternative manner which makes the bitfield to be accessed as separate memory location if it has legal integer width and is naturally aligned. Such separate bitfield may split the original consecutive bitfields into subgroups of consecutive bitfields, and each subgroup will be wrapped as an integer. Now This is all controlled by an option -ffine-grained-bitfield-accesses. The alternative of bitfield access manner can improve the access efficiency of those bitfields with legal width and being aligned, but may reduce the chance of load/store combining of other bitfields, so it depends on how the bitfields are defined and actually accessed to choose when to use the option. For now the option is off by default.\n\nDifferential revision: https://reviews.llvm.org/D36562\n\nllvm-svn: 315915"},
[k]={
[h]={{Jc,4472,"bool CompilerInvocation::CreateFromArgsImpl(CompilerInvocation &Res, ArrayRef<const char *> CommandLineArgs, DiagnosticsEngine &Diags, const char *Argv0) {\n  // ...\n  // If sanitizer is enabled, disable OPT_ffine_grained_bitfield_accesses.\n  if (Res.getCodeGenOpts().FineGrainedBitfieldAccesses && !Res.getLangOpts()->Sanitize.empty()) {\n    // ...\n    Diags.Report(diag::warn_drv_fine_grained_bitfield_accesses_ignored);"}},
[l]={
["clang/test/CodeGenCXX/finegrain-bitfield-access.cpp"]={"warning: option \'-ffine-grained-bitfield-accesses\' cannot be enabled together with a sanitizer; flag ignored"}
["clang/test/CodeGenCXX/finegrain-bitfield-access.cpp"]={"warning: option \'-ffine-grained-bitfield-accesses\' cannot be enabled together with a sanitizer; flag ignored"}
}
}
},
},
["warn_drv_fjmc_for_elf_only"]={
["warn_drv_fjmc_for_elf_only"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]={{nil,kb,"-fjmc works only for ELF; option ignored"}},
[c]={{nil,C,"warn_drv_fjmc_for_elf_only"}},
[d]=g,
[d]={{nil,C,"-fjmc works only for ELF; option ignored"}},
[e]="\\-fjmc works only for ELF; option ignored",
[e]=i,
[f]=Vb,
[g]="\\-fjmc works only for ELF; option ignored",
[b]=p,
[a]=Xb,
[a]={qc,1610286626,rc,sc},
[b]={{nil,C,r}},
[h]={{T,5723,"#endif\n  // ...\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT_fjmc, options::OPT_fno_jmc, false)) {\n    if (TC.getTriple().isOSBinFormatELF()) {\n    // ...\n    } else {\n      D.Diag(clang::diag::warn_drv_fjmc_for_elf_only);"},{"clang/lib/Driver/ToolChains/CommonArgs.cpp",818,"#endif\n  // ...\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT_fjmc, options::OPT_fno_jmc, false)) {\n    if (ToolChain.getEffectiveTriple().isOSBinFormatELF())\n    // ...\n    else\n      D.Diag(clang::diag::warn_drv_fjmc_for_elf_only);"}}
[f]={oc,1610286626,vc,sc},
[h]={{ab,5723,"#endif\n  // ...\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT_fjmc, options::OPT_fno_jmc, false)) {\n    if (TC.getTriple().isOSBinFormatELF()) {\n    // ...\n    } else {\n      D.Diag(clang::diag::warn_drv_fjmc_for_elf_only);"},{"clang/lib/Driver/ToolChains/CommonArgs.cpp",818,"#endif\n  // ...\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT_fjmc, options::OPT_fno_jmc, false)) {\n    if (ToolChain.getEffectiveTriple().isOSBinFormatELF())\n    // ...\n    else\n      D.Diag(clang::diag::warn_drv_fjmc_for_elf_only);"}}
},
},
["warn_drv_fuse_ld_path"]={
["warn_drv_fuse_ld_path"]={
[j]={p,B,Fc,"fuse-ld-path"},
[k]={r,K,Ic,"fuse-ld-path"},
[i]="fuse-ld-path",
[j]="fuse-ld-path",
[c]={{nil,Q,"\'-fuse-ld=\' taking a path is deprecated; use \'--ld-path=\' instead"},{jb,Sb,"\'-fuse-ld=\' taking a path is deprecated. Use \'--ld-path=\' instead"}},
[c]={{nil,db,"warn_drv_fuse_ld_path"}},
[d]=g,
[d]={{nil,w,"\'-fuse-ld=\' taking a path is deprecated; use \'--ld-path=\' instead"},{I,db,"\'-fuse-ld=\' taking a path is deprecated. Use \'--ld-path=\' instead"}},
[e]="\'\\-fuse\\-ld\\=\' taking a path is deprecated; use \'\\-\\-ld\\-path\\=\' instead",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfuse\\-ld\\-path[^\\]]*\\]",
[g]="\'\\-fuse\\-ld\\=\' taking a path is deprecated; use \'\\-\\-ld\\-path\\=\' instead",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wfuse\\-ld\\-path[^\\]]*\\]",
[a]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
[b]={{nil,db,r}},
[f]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
[h]={{"clang/lib/Driver/ToolChain.cpp",830,"std::string ToolChain::GetLinkerPath(bool *LinkerIsLLD) const {\n  // ...\n  // Extending -fuse-ld= to an absolute or relative path is unexpected. Checking\n  // for the linker flavor is brittle. In addition, prepending \"ld.\" or \"ld64.\"\n  // to a relative path is surprising. This is more complex due to priorities\n  // among -B, COMPILER_PATH and PATH. --ld-path= should be used instead.\n  if (UseLinker.contains(\'/\'))\n    getDriver().Diag(diag::warn_drv_fuse_ld_path);"}}
[h]={{"clang/lib/Driver/ToolChain.cpp",830,"std::string ToolChain::GetLinkerPath(bool *LinkerIsLLD) const {\n  // ...\n  // Extending -fuse-ld= to an absolute or relative path is unexpected. Checking\n  // for the linker flavor is brittle. In addition, prepending \"ld.\" or \"ld64.\"\n  // to a relative path is surprising. This is more complex due to priorities\n  // among -B, COMPILER_PATH and PATH. --ld-path= should be used instead.\n  if (UseLinker.contains(\'/\'))\n    getDriver().Diag(diag::warn_drv_fuse_ld_path);"}}
},
},
["warn_drv_global_isel_incomplete"]={
["warn_drv_global_isel_incomplete"]={
[j]={"global-isel"},
[k]={"global-isel"},
[i]="global-isel",
[j]="global-isel",
[c]={{nil,mb,"-fglobal-isel support for the \'%0\' architecture is incomplete"}},
[c]={{nil,z,"warn_drv_global_isel_incomplete"}},
[d]=g,
[d]={{nil,z,"-fglobal-isel support for the \'%0\' architecture is incomplete"}},
[e]="\\-fglobal\\-isel support for the \'(.*?)\' architecture is incomplete",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wglobal\\-isel[^\\]]*\\]",
[g]="\\-fglobal\\-isel support for the \'(.*?)\' architecture is incomplete",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wglobal\\-isel[^\\]]*\\]",
[a]={jc,1534346725,ic,dc},
[b]={{nil,z,r}},
[h]={{T,7399,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_fglobal_isel, options::OPT_fno_global_isel)) {\n    // ...\n    if (A->getOption().matches(options::OPT_fglobal_isel)) {\n      // ...\n      if (!IsArchSupported || !IsOptLevelSupported) {\n        // ...\n        if (!IsArchSupported)\n          D.Diag(diag::warn_drv_global_isel_incomplete) << Triple.getArchName();"}}
[f]={mc,1534346725,ic,hc},
[h]={{ab,7399,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_fglobal_isel, options::OPT_fno_global_isel)) {\n    // ...\n    if (A->getOption().matches(options::OPT_fglobal_isel)) {\n      // ...\n      if (!IsArchSupported || !IsOptLevelSupported) {\n        // ...\n        if (!IsArchSupported)\n          D.Diag(diag::warn_drv_global_isel_incomplete) << Triple.getArchName();"}}
},
},
["warn_drv_global_isel_incomplete_opt"]={
["warn_drv_global_isel_incomplete_opt"]={
[j]={"global-isel"},
[k]={"global-isel"},
[i]="global-isel",
[j]="global-isel",
[c]={{nil,mb,"-fglobal-isel support is incomplete for this architecture at the current optimization level"}},
[c]={{nil,z,"warn_drv_global_isel_incomplete_opt"}},
[d]=g,
[d]={{nil,z,"-fglobal-isel support is incomplete for this architecture at the current optimization level"}},
[e]="\\-fglobal\\-isel support is incomplete for this architecture at the current optimization level",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wglobal\\-isel[^\\]]*\\]",
[g]="\\-fglobal\\-isel support is incomplete for this architecture at the current optimization level",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wglobal\\-isel[^\\]]*\\]",
[a]={jc,1534346725,ic,dc},
[b]={{nil,z,r}},
[h]={{T,7401,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_fglobal_isel, options::OPT_fno_global_isel)) {\n    // ...\n    if (A->getOption().matches(options::OPT_fglobal_isel)) {\n      // ...\n      if (!IsArchSupported || !IsOptLevelSupported) {\n        // ...\n        if (!IsArchSupported)\n        // ...\n        else\n          D.Diag(diag::warn_drv_global_isel_incomplete_opt);"}}
[f]={mc,1534346725,ic,hc},
[h]={{ab,7401,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_fglobal_isel, options::OPT_fno_global_isel)) {\n    // ...\n    if (A->getOption().matches(options::OPT_fglobal_isel)) {\n      // ...\n      if (!IsArchSupported || !IsOptLevelSupported) {\n        // ...\n        if (!IsArchSupported)\n        // ...\n        else\n          D.Diag(diag::warn_drv_global_isel_incomplete_opt);"}}
},
},
["warn_drv_input_file_unused"]={
["warn_drv_input_file_unused"]={
[j]={qb},
[k]={tb},
[i]=qb,
[j]=tb,
[c]="%0: \'%1\' input unused%select{ when \'%3\' is present|}2",
[c]="warn_drv_input_file_unused",
[d]=g,
[d]="%0: \'%1\' input unused%select{ when \'%3\' is present|}2",
[e]="(.*?)\\: \'(.*?)\' input unused(?: when \'(.*?)\' is present|)",
[e]=i,
[f]=Ec,
[g]="(.*?)\\: \'(.*?)\' input unused(?: when \'(.*?)\' is present|)",
[b]=p,
[a]=Cc,
[a]={Ub,1237025389,Xb,Wb},
[b]=r,
[h]={{Nb,4031,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  for (auto &I : Inputs) {\n    // ...\n    if (InitialPhase > FinalPhase) {\n      // ...\n      // Special case when final phase determined by binary name, rather than\n      // by a command-line argument with a corresponding Arg.\n      if (CCCIsCPP())\n      // ...\n      // Special case \'-E\' warning on a previously preprocessed file to make\n      // more sense.\n      else if (InitialPhase == phases::Compile && (Args.getLastArg(options::OPT__SLASH_EP, options::OPT__SLASH_P) || Args.getLastArg(options::OPT_E) || Args.getLastArg(options::OPT_M, options::OPT_MM)) && getPreprocessedType(InputType) == types::TY_INVALID)\n      // ...\n      else\n        Diag(clang::diag::warn_drv_input_file_unused) << InputArg->getAsString(Args) << getPhaseName(InitialPhase) << !!FinalPhaseArg << (FinalPhaseArg ? FinalPhaseArg->getOption().getName() : \"\");"},{"clang/lib/Tooling/CompilationDatabase.cpp",189,"// Special DiagnosticConsumer that looks for warn_drv_input_file_unused\n// diagnostics from the driver and collects the option strings for those unused\n// options.\nclass UnusedInputDiagConsumer : public DiagnosticConsumer {\n  // ...\n  void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) override {\n    if (Info.getID() == diag::warn_drv_input_file_unused) {"}},
[f]={Yb,1237025389,Zb,ac},
[k]={
[h]={{Vb,4031,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  for (auto &I : Inputs) {\n    // ...\n    if (InitialPhase > FinalPhase) {\n      // ...\n      // Special case when final phase determined by binary name, rather than\n      // by a command-line argument with a corresponding Arg.\n      if (CCCIsCPP())\n      // ...\n      // Special case \'-E\' warning on a previously preprocessed file to make\n      // more sense.\n      else if (InitialPhase == phases::Compile && (Args.getLastArg(options::OPT__SLASH_EP, options::OPT__SLASH_P) || Args.getLastArg(options::OPT_E) || Args.getLastArg(options::OPT_M, options::OPT_MM)) && getPreprocessedType(InputType) == types::TY_INVALID)\n      // ...\n      else\n        Diag(clang::diag::warn_drv_input_file_unused) << InputArg->getAsString(Args) << getPhaseName(InitialPhase) << !!FinalPhaseArg << (FinalPhaseArg ? FinalPhaseArg->getOption().getName() : \"\");"},{"clang/lib/Tooling/CompilationDatabase.cpp",189,"// Special DiagnosticConsumer that looks for warn_drv_input_file_unused\n// diagnostics from the driver and collects the option strings for those unused\n// options.\nclass UnusedInputDiagConsumer : public DiagnosticConsumer {\n  // ...\n  void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) override {\n    if (Info.getID() == diag::warn_drv_input_file_unused) {"}},
[l]={
["clang/test/CodeGenCoroutines/coro-symmetric-transfer-01.cpp"]={"clang: warning: build/tools/clang/test/CodeGenCoroutines/Output/coro-symmetric-transfer-01.cpp.tmp: \'linker\' input unused [-Wunused-command-line-argument]"}
["clang/test/CodeGenCoroutines/coro-symmetric-transfer-01.cpp"]={"clang: warning: build/tools/clang/test/CodeGenCoroutines/Output/coro-symmetric-transfer-01.cpp.tmp: \'linker\' input unused [-Wunused-command-line-argument]"}
}
}
},
},
["warn_drv_input_file_unused_by_cpp"]={
["warn_drv_input_file_unused_by_cpp"]={
[j]={qb},
[k]={tb},
[i]=qb,
[j]=tb,
[c]="%0: \'%1\' input unused in cpp mode",
[c]="warn_drv_input_file_unused_by_cpp",
[d]=g,
[d]="%0: \'%1\' input unused in cpp mode",
[e]="(.*?)\\: \'(.*?)\' input unused in cpp mode",
[e]=i,
[f]=Ec,
[g]="(.*?)\\: \'(.*?)\' input unused in cpp mode",
[b]=p,
[a]=Cc,
[a]={"403f76ee02a3",1344226146,"PR13529: Don\'t crash if the driver sees an unused input file when running as","PR13529: Don\'t crash if the driver sees an unused input file when running as\n\'clang-cpp\'.\n\nFor now, the test uses \"REQUIRES: shell\" to determine if the host system\nsupports \"ln -s\", which it uses to create a \'clang-cpp\' symlink. This is a bit\nhacky and should likely be directly supported by lit.cfg.\n\nllvm-svn: 161317"},
[b]=r,
[h]={{Nb,4017,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  for (auto &I : Inputs) {\n    // ...\n    if (InitialPhase > FinalPhase) {\n      // ...\n      // Special case when final phase determined by binary name, rather than\n      // by a command-line argument with a corresponding Arg.\n      if (CCCIsCPP())\n        Diag(clang::diag::warn_drv_input_file_unused_by_cpp) << InputArg->getAsString(Args) << getPhaseName(InitialPhase);"}},
[f]={"403f76ee02a3",1344226146,"PR13529: Don\'t crash if the driver sees an unused input file when running as","PR13529: Don\'t crash if the driver sees an unused input file when running as\n\'clang-cpp\'.\n\nFor now, the test uses \"REQUIRES: shell\" to determine if the host system\nsupports \"ln -s\", which it uses to create a \'clang-cpp\' symlink. This is a bit\nhacky and should likely be directly supported by lit.cfg.\n\nllvm-svn: 161317"},
[k]={
[h]={{Vb,4017,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  for (auto &I : Inputs) {\n    // ...\n    if (InitialPhase > FinalPhase) {\n      // ...\n      // Special case when final phase determined by binary name, rather than\n      // by a command-line argument with a corresponding Arg.\n      if (CCCIsCPP())\n        Diag(clang::diag::warn_drv_input_file_unused_by_cpp) << InputArg->getAsString(Args) << getPhaseName(InitialPhase);"}},
[l]={
["clang/test/Driver/ccc-as-cpp.c"]={"clang: warning: -lfoo: \'linker\' input unused in cpp mode [-Wunused-command-line-argument]"}
["clang/test/Driver/ccc-as-cpp.c"]={"clang: warning: -lfoo: \'linker\' input unused in cpp mode [-Wunused-command-line-argument]"}
}
}
},
},
["warn_drv_invalid_arch_name_with_suggestion"]={
["warn_drv_invalid_arch_name_with_suggestion"]={
[j]={qb},
[k]={tb},
[i]=qb,
[j]=tb,
[c]={{nil,Q,"ignoring invalid /arch: argument \'%0\'; for %select{64|32}1-bit expected one of %2"}},
[c]={{nil,w,"warn_drv_invalid_arch_name_with_suggestion"}},
[d]=g,
[d]={{nil,w,"ignoring invalid /arch: argument \'%0\'; for %select{64|32}1-bit expected one of %2"}},
[e]="ignoring invalid \\/arch\\: argument \'(.*?)\'; for (?:64|32)\\-bit expected one of (.*?)",
[e]=i,
[f]=Ec,
[g]="ignoring invalid \\/arch\\: argument \'(.*?)\'; for (?:64|32)\\-bit expected one of (.*?)",
[b]=p,
[a]=Cc,
[a]={qc,1610286626,rc,sc},
[b]={{nil,w,r}},
[f]={oc,1610286626,vc,sc},
[h]={{"clang/lib/Driver/ToolChains/Arch/X86.cpp",62,"std::string x86::getX86TargetCPU(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT__SLASH_arch)) {\n    // ...\n    if (CPU.empty()) {\n      // ...\n      D.Diag(diag::warn_drv_invalid_arch_name_with_suggestion) << A->getValue() << (Triple.getArch() == llvm::Triple::x86) << join(ValidArchs, \", \");"}}
[h]={{"clang/lib/Driver/ToolChains/Arch/X86.cpp",62,"std::string x86::getX86TargetCPU(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT__SLASH_arch)) {\n    // ...\n    if (CPU.empty()) {\n      // ...\n      D.Diag(diag::warn_drv_invalid_arch_name_with_suggestion) << A->getValue() << (Triple.getArch() == llvm::Triple::x86) << join(ValidArchs, \", \");"}}
},
},
["warn_drv_jmc_requires_debuginfo"]={
["warn_drv_jmc_requires_debuginfo"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]={{nil,kb,"%0 requires debug info. Use %1 or debug options that enable debugger\'s stepping function; option ignored"}},
[c]={{nil,C,"warn_drv_jmc_requires_debuginfo"}},
[d]=g,
[d]={{nil,C,"%0 requires debug info. Use %1 or debug options that enable debugger\'s stepping function; option ignored"}},
[e]="(.*?) requires debug info\\. Use (.*?) or debug options that enable debugger\'s stepping function; option ignored",
[e]=i,
[f]=Vb,
[g]="(.*?) requires debug info\\. Use (.*?) or debug options that enable debugger\'s stepping function; option ignored",
[b]=p,
[a]=Xb,
[a]={qc,1610286626,rc,sc},
[b]={{nil,C,r}},
[h]={{T,5720,"#endif\n  // ...\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT_fjmc, options::OPT_fno_jmc, false)) {\n    if (TC.getTriple().isOSBinFormatELF()) {\n      if (DebugInfoKind >= llvm::codegenoptions::DebugInfoConstructor)\n      // ...\n      else\n        D.Diag(clang::diag::warn_drv_jmc_requires_debuginfo) << \"-fjmc\""},{T,7826,"void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType, ArgStringList &CmdArgs, llvm::codegenoptions::DebugInfoKind *DebugInfoKind, bool *EmitCodeView) const {\n  // ...\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT__SLASH_JMC, options::OPT__SLASH_JMC_,\n    // ...\n    if (*EmitCodeView && *DebugInfoKind >= llvm::codegenoptions::DebugInfoConstructor)\n    // ...\n    else\n      D.Diag(clang::diag::warn_drv_jmc_requires_debuginfo) << \"/JMC\""}}
[f]={oc,1610286626,vc,sc},
[h]={{ab,5720,"#endif\n  // ...\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT_fjmc, options::OPT_fno_jmc, false)) {\n    if (TC.getTriple().isOSBinFormatELF()) {\n      if (DebugInfoKind >= llvm::codegenoptions::DebugInfoConstructor)\n      // ...\n      else\n        D.Diag(clang::diag::warn_drv_jmc_requires_debuginfo) << \"-fjmc\""},{ab,7826,"void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType, ArgStringList &CmdArgs, llvm::codegenoptions::DebugInfoKind *DebugInfoKind, bool *EmitCodeView) const {\n  // ...\n  // This controls whether or not we perform JustMyCode instrumentation.\n  if (Args.hasFlag(options::OPT__SLASH_JMC, options::OPT__SLASH_JMC_,\n    // ...\n    if (*EmitCodeView && *DebugInfoKind >= llvm::codegenoptions::DebugInfoConstructor)\n    // ...\n    else\n      D.Diag(clang::diag::warn_drv_jmc_requires_debuginfo) << \"/JMC\""}}
},
},
["warn_drv_libstdcxx_not_found"]={
["warn_drv_libstdcxx_not_found"]={
[j]={"stdlibcxx-not-found"},
[k]={"stdlibcxx-not-found"},
[i]="stdlibcxx-not-found",
[j]="stdlibcxx-not-found",
[c]={{nil,I,"include path for libstdc++ headers not found; pass \'-stdlib=libc++\' on the command line to use the libc++ standard library instead"}},
[c]={{nil,x,"warn_drv_libstdcxx_not_found"}},
[d]=g,
[d]={{nil,x,"include path for libstdc++ headers not found; pass \'-stdlib=libc++\' on the command line to use the libc++ standard library instead"}},
[e]="include path for libstdc\\+\\+ headers not found; pass \'\\-stdlib\\=libc\\+\\+\' on the command line to use the libc\\+\\+ standard library instead",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wstdlibcxx\\-not\\-found[^\\]]*\\]",
[g]="include path for libstdc\\+\\+ headers not found; pass \'\\-stdlib\\=libc\\+\\+\' on the command line to use the libc\\+\\+ standard library instead",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wstdlibcxx\\-not\\-found[^\\]]*\\]",
[a]={jc,1534346725,ic,dc},
[b]={{nil,x,r}},
[h]={{od,2551,"void DarwinClang::AddClangCXXStdlibIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const {\n  // ...\n  case ToolChain::CST_Libstdcxx:\n    // ...\n    if (!IsBaseFound) {\n      getDriver().Diag(diag::warn_drv_libstdcxx_not_found);"}}
[f]={mc,1534346725,ic,hc},
[h]={{qd,2551,"void DarwinClang::AddClangCXXStdlibIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const {\n  // ...\n  case ToolChain::CST_Libstdcxx:\n    // ...\n    if (!IsBaseFound) {\n      getDriver().Diag(diag::warn_drv_libstdcxx_not_found);"}}
},
},
["warn_drv_loongarch_conflicting_implied_val"]={
["warn_drv_loongarch_conflicting_implied_val"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]="ignoring \'%0\' as it conflicts with that implied by \'%1\' (%2)",
[c]="warn_drv_loongarch_conflicting_implied_val",
[d]=g,
[d]="ignoring \'%0\' as it conflicts with that implied by \'%1\' (%2)",
[e]="ignoring \'(.*?)\' as it conflicts with that implied by \'(.*?)\' \\((.*?)\\)",
[e]=i,
[f]=Vb,
[g]="ignoring \'(.*?)\' as it conflicts with that implied by \'(.*?)\' \\((.*?)\\)",
[b]=p,
[a]=Xb,
[a]={"f6932007ab4e",1687763241,"[Clang][LoongArch] Consume and check -mabi and -mfpu even if -m*-float is present","[Clang][LoongArch] Consume and check -mabi and -mfpu even if -m*-float is present\n\nThis kind of CLI flags duplication can sometimes be convenient for build\nsystems that may have to tinker with these.\n\nFor example, in the Linux kernel we almost always want to ensure no FP\ninstruction is emitted, so `-msoft-float` is present by default; but\nsometimes we do want to allow FPU usage (e.g. certain parts of amdgpu DC\ncode), in which case we want the `-msoft-float` stripped and `-mfpu=64`\nadded. Here we face a dilemma without this change:\n\n* Either `-mabi` is not supplied by `arch/loongarch` Makefile, in which\n  case the correct ABI has to be supplied by the driver Makefile\n  (otherwise the ABI will become double-float due to `-mfpu`), which is\n  arguably not appropriate for a driver;\n* Or `-mabi` is still supplied by `arch/loongarch` Makefile, and the\n  build immediately errors out because\n  `-Werror=unused-command-line-argument` is unconditionally set for\n  Clang builds.\n\nTo solve this, simply make sure to check `-mabi` and `-mfpu` (and gain\nsome useful diagnostics in case of conflicting settings) when\n`-m*-float` is successfully parsed.\n\nReviewed By: SixWeining, MaskRay\n\nDifferential Revision: https://reviews.llvm.org/D153707"},
[b]=r,
[f]={"f6932007ab4e",1687763241,"[Clang][LoongArch] Consume and check -mabi and -mfpu even if -m*-float is present","[Clang][LoongArch] Consume and check -mabi and -mfpu even if -m*-float is present\n\nThis kind of CLI flags duplication can sometimes be convenient for build\nsystems that may have to tinker with these.\n\nFor example, in the Linux kernel we almost always want to ensure no FP\ninstruction is emitted, so `-msoft-float` is present by default; but\nsometimes we do want to allow FPU usage (e.g. certain parts of amdgpu DC\ncode), in which case we want the `-msoft-float` stripped and `-mfpu=64`\nadded. Here we face a dilemma without this change:\n\n* Either `-mabi` is not supplied by `arch/loongarch` Makefile, in which\n  case the correct ABI has to be supplied by the driver Makefile\n  (otherwise the ABI will become double-float due to `-mfpu`), which is\n  arguably not appropriate for a driver;\n* Or `-mabi` is still supplied by `arch/loongarch` Makefile, and the\n  build immediately errors out because\n  `-Werror=unused-command-line-argument` is unconditionally set for\n  Clang builds.\n\nTo solve this, simply make sure to check `-mabi` and `-mfpu` (and gain\nsome useful diagnostics in case of conflicting settings) when\n`-m*-float` is successfully parsed.\n\nReviewed By: SixWeining, MaskRay\n\nDifferential Revision: https://reviews.llvm.org/D153707"},
[h]={{"clang/lib/Driver/ToolChains/Arch/LoongArch.cpp",78,"StringRef loongarch::getLoongArchABI(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // ...\n  // Check -m*-float firstly since they have highest priority.\n  if (const Arg *A = Args.getLastArg(options::OPT_mdouble_float, options::OPT_msingle_float, options::OPT_msoft_float)) {\n    // ...\n    // Check `-mabi=` and `-mfpu=` settings and report if they conflict with\n    // the higher-priority settings implied by -m*-float.\n    //\n    // ImpliedABI and ImpliedFPU are guaranteed to have valid values because\n    // one of the match arms must match if execution can arrive here at all.\n    if (!MABIValue.empty() && ImpliedABI != MABIValue)\n      D.Diag(diag::warn_drv_loongarch_conflicting_implied_val) << MABIArg->getAsString(Args) << A->getAsString(Args) << ImpliedABI;"},{"clang/lib/Driver/ToolChains/Arch/LoongArch.cpp",82,"StringRef loongarch::getLoongArchABI(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // ...\n  // Check -m*-float firstly since they have highest priority.\n  if (const Arg *A = Args.getLastArg(options::OPT_mdouble_float, options::OPT_msingle_float, options::OPT_msoft_float)) {\n    // ...\n    if (FPU != -1 && ImpliedFPU != FPU)\n      D.Diag(diag::warn_drv_loongarch_conflicting_implied_val) << MFPUArg->getAsString(Args) << A->getAsString(Args) << ImpliedFPU;"}}
[h]={{"clang/lib/Driver/ToolChains/Arch/LoongArch.cpp",78,"StringRef loongarch::getLoongArchABI(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // ...\n  // Check -m*-float firstly since they have highest priority.\n  if (const Arg *A = Args.getLastArg(options::OPT_mdouble_float, options::OPT_msingle_float, options::OPT_msoft_float)) {\n    // ...\n    // Check `-mabi=` and `-mfpu=` settings and report if they conflict with\n    // the higher-priority settings implied by -m*-float.\n    //\n    // ImpliedABI and ImpliedFPU are guaranteed to have valid values because\n    // one of the match arms must match if execution can arrive here at all.\n    if (!MABIValue.empty() && ImpliedABI != MABIValue)\n      D.Diag(diag::warn_drv_loongarch_conflicting_implied_val) << MABIArg->getAsString(Args) << A->getAsString(Args) << ImpliedABI;"},{"clang/lib/Driver/ToolChains/Arch/LoongArch.cpp",82,"StringRef loongarch::getLoongArchABI(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // ...\n  // Check -m*-float firstly since they have highest priority.\n  if (const Arg *A = Args.getLastArg(options::OPT_mdouble_float, options::OPT_msingle_float, options::OPT_msoft_float)) {\n    // ...\n    if (FPU != -1 && ImpliedFPU != FPU)\n      D.Diag(diag::warn_drv_loongarch_conflicting_implied_val) << MFPUArg->getAsString(Args) << A->getAsString(Args) << ImpliedFPU;"}}
},
},
["warn_drv_missing_multilib"]={
["warn_drv_missing_multilib"]={
[j]={"missing-multilib"},
[k]={"missing-multilib"},
[i]="missing-multilib",
[j]="missing-multilib",
[c]="no multilib found matching flags: %0",
[c]="warn_drv_missing_multilib",
[d]=g,
[d]="no multilib found matching flags: %0",
[e]="no multilib found matching flags\\: (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmissing\\-multilib[^\\]]*\\]",
[g]="no multilib found matching flags\\: (.*?)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-multilib[^\\]]*\\]",
[a]={"dc8cbbd55f80",1688026032,"[Clang][Driver] Change missing multilib error to warning","[Clang][Driver] Change missing multilib error to warning\n\nThe error could be awkward to work around when experimenting with flags\nthat didn\'t have a matching multilib. It also broke many tests when\nmultilib.yaml was present in the build directory.\n\nReviewed By: simon_tatham, MaskRay\n\nDifferential Revision: https://reviews.llvm.org/D153885"},
[b]=r,
[f]={"dc8cbbd55f80",1688026032,"[Clang][Driver] Change missing multilib error to warning","[Clang][Driver] Change missing multilib error to warning\n\nThe error could be awkward to work around when experimenting with flags\nthat didn\'t have a matching multilib. It also broke many tests when\nmultilib.yaml was present in the build directory.\n\nReviewed By: simon_tatham, MaskRay\n\nDifferential Revision: https://reviews.llvm.org/D153885"},
[h]={{"clang/lib/Driver/ToolChains/BareMetal.cpp",190,"static void findMultilibsFromYAML(const ToolChain &TC, const Driver &D, StringRef MultilibPath, const ArgList &Args, DetectedMultilibs &Result) {\n  // ...\n  D.Diag(clang::diag::warn_drv_missing_multilib) << llvm::join(Flags, \" \");"}}
[h]={{"clang/lib/Driver/ToolChains/BareMetal.cpp",190,"static void findMultilibsFromYAML(const ToolChain &TC, const Driver &D, StringRef MultilibPath, const ArgList &Args, DetectedMultilibs &Result) {\n  // ...\n  D.Diag(clang::diag::warn_drv_missing_multilib) << llvm::join(Flags, \" \");"}}
},
},
["warn_drv_missing_plugin_arg"]={
["warn_drv_missing_plugin_arg"]={
[j]={Bb},
[k]={Gb},
[i]=Bb,
[j]=Gb,
[c]={{nil,Q,"missing plugin argument for plugin %0 in %1"}},
[c]={{nil,w,"warn_drv_missing_plugin_arg"}},
[d]=g,
[d]={{nil,w,"missing plugin argument for plugin %0 in %1"}},
[e]="missing plugin argument for plugin (.*?) in (.*?)",
[e]=i,
[f]=Rc,
[g]="missing plugin argument for plugin (.*?) in (.*?)",
[b]=p,
[a]=Tc,
[a]={qc,1610286626,rc,sc},
[b]={{nil,w,r}},
[h]={{T,7110,"#endif\n  // ...\n  // Turn -fplugin-arg-pluginname-key=value into\n  // -plugin-arg-pluginname key=value\n  // GCC has an actual plugin_argument struct with key/value pairs that it\n  // passes to its plugins, but we don\'t, so just pass it on as-is.\n  //\n  // The syntax for -fplugin-arg- is ambiguous if both plugin name and\n  // argument key are allowed to contain dashes. GCC therefore only\n  // allows dashes in the key. We do the same.\n  for (const Arg *A : Args.filtered(options::OPT_fplugin_arg)) {\n    // ...\n    if (FirstDashIndex == StringRef::npos || Arg.empty()) {\n      if (PluginName.empty()) {\n      // ...\n      } else {\n        D.Diag(diag::warn_drv_missing_plugin_arg) << PluginName << A->getAsString(Args);"}}
[f]={oc,1610286626,vc,sc},
[h]={{ab,7110,"#endif\n  // ...\n  // Turn -fplugin-arg-pluginname-key=value into\n  // -plugin-arg-pluginname key=value\n  // GCC has an actual plugin_argument struct with key/value pairs that it\n  // passes to its plugins, but we don\'t, so just pass it on as-is.\n  //\n  // The syntax for -fplugin-arg- is ambiguous if both plugin name and\n  // argument key are allowed to contain dashes. GCC therefore only\n  // allows dashes in the key. We do the same.\n  for (const Arg *A : Args.filtered(options::OPT_fplugin_arg)) {\n    // ...\n    if (FirstDashIndex == StringRef::npos || Arg.empty()) {\n      if (PluginName.empty()) {\n      // ...\n      } else {\n        D.Diag(diag::warn_drv_missing_plugin_arg) << PluginName << A->getAsString(Args);"}}
},
},
["warn_drv_missing_plugin_name"]={
["warn_drv_missing_plugin_name"]={
[j]={Bb},
[k]={Gb},
[i]=Bb,
[j]=Gb,
[c]={{nil,Q,"missing plugin name in %0"}},
[c]={{nil,w,"warn_drv_missing_plugin_name"}},
[d]=g,
[d]={{nil,w,"missing plugin name in %0"}},
[e]="missing plugin name in (.*?)",
[e]=i,
[f]=Rc,
[g]="missing plugin name in (.*?)",
[b]=p,
[a]=Tc,
[a]={qc,1610286626,rc,sc},
[b]={{nil,w,r}},
[h]={{T,7108,"#endif\n  // ...\n  // Turn -fplugin-arg-pluginname-key=value into\n  // -plugin-arg-pluginname key=value\n  // GCC has an actual plugin_argument struct with key/value pairs that it\n  // passes to its plugins, but we don\'t, so just pass it on as-is.\n  //\n  // The syntax for -fplugin-arg- is ambiguous if both plugin name and\n  // argument key are allowed to contain dashes. GCC therefore only\n  // allows dashes in the key. We do the same.\n  for (const Arg *A : Args.filtered(options::OPT_fplugin_arg)) {\n    // ...\n    if (FirstDashIndex == StringRef::npos || Arg.empty()) {\n      if (PluginName.empty()) {\n        D.Diag(diag::warn_drv_missing_plugin_name) << A->getAsString(Args);"}}
[f]={oc,1610286626,vc,sc},
[h]={{ab,7108,"#endif\n  // ...\n  // Turn -fplugin-arg-pluginname-key=value into\n  // -plugin-arg-pluginname key=value\n  // GCC has an actual plugin_argument struct with key/value pairs that it\n  // passes to its plugins, but we don\'t, so just pass it on as-is.\n  //\n  // The syntax for -fplugin-arg- is ambiguous if both plugin name and\n  // argument key are allowed to contain dashes. GCC therefore only\n  // allows dashes in the key. We do the same.\n  for (const Arg *A : Args.filtered(options::OPT_fplugin_arg)) {\n    // ...\n    if (FirstDashIndex == StringRef::npos || Arg.empty()) {\n      if (PluginName.empty()) {\n        D.Diag(diag::warn_drv_missing_plugin_name) << A->getAsString(Args);"}}
},
},
["warn_drv_moutline_atomics_unsupported_opt"]={
["warn_drv_moutline_atomics_unsupported_opt"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]={{nil,Q,"\'%0\' does not support \'-%1\'; flag ignored"},{jb,Sb,"The \'%0\' architecture does not support -moutline-atomics; flag ignored"}},
[c]={{nil,db,"warn_drv_moutline_atomics_unsupported_opt"}},
[d]=g,
[d]={{nil,w,"\'%0\' does not support \'-%1\'; flag ignored"},{I,db,"The \'%0\' architecture does not support -moutline-atomics; flag ignored"}},
[e]="\'(.*?)\' does not support \'\\-(.*?)\'; flag ignored",
[e]=i,
[f]=Vb,
[g]="\'(.*?)\' does not support \'\\-(.*?)\'; flag ignored",
[b]=p,
[a]=Xb,
[a]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
[b]={{nil,db,r}},
[h]={{T,7440,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_moutline_atomics, options::OPT_mno_outline_atomics)) {\n    // Option -moutline-atomics supported for AArch64 target only.\n    if (!Triple.isAArch64()) {\n      D.Diag(diag::warn_drv_moutline_atomics_unsupported_opt) << Triple.getArchName() << A->getOption().getName();"}}
[f]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
[h]={{ab,7440,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_moutline_atomics, options::OPT_mno_outline_atomics)) {\n    // Option -moutline-atomics supported for AArch64 target only.\n    if (!Triple.isAArch64()) {\n      D.Diag(diag::warn_drv_moutline_atomics_unsupported_opt) << Triple.getArchName() << A->getOption().getName();"}}
},
},
["warn_drv_moutline_unsupported_opt"]={
["warn_drv_moutline_unsupported_opt"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]={{nil,Q,"\'%0\' does not support \'-moutline\'; flag ignored"},{jb,eb,"The \'%0\' architecture does not support -moutline; flag ignored"}},
[c]={{nil,D,"warn_drv_moutline_unsupported_opt"}},
[d]=g,
[d]={{nil,w,"\'%0\' does not support \'-moutline\'; flag ignored"},{I,D,"The \'%0\' architecture does not support -moutline; flag ignored"}},
[e]="\'(.*?)\' does not support \'\\-moutline\'; flag ignored",
[e]=i,
[f]=Vb,
[g]="\'(.*?)\' does not support \'\\-moutline\'; flag ignored",
[b]=p,
[a]=Xb,
[a]={"a67abc83b733",1530050988,"[MachineOutliner] Emit a warning when using -moutline on unsupported targets","[MachineOutliner] Emit a warning when using -moutline on unsupported targets\n\nInstead of just saying \"flag unused\", we should tell the user that the\noutliner isn\'t (at least officially) supported for some given architecture.\n\nThis adds a warning that will state something like\n\nThe \'blah\' architecture does not support -moutline; flag ignored\n\nwhen we call -moutline with the \'blah\' architecture.\n\nSince the outliner is still mostly an AArch64 thing, any architecture\nother than AArch64 will emit this warning.\n\nllvm-svn: 335672"},
[b]={{nil,D,r}},
[f]={"a67abc83b733",1530050988,"[MachineOutliner] Emit a warning when using -moutline on unsupported targets","[MachineOutliner] Emit a warning when using -moutline on unsupported targets\n\nInstead of just saying \"flag unused\", we should tell the user that the\noutliner isn\'t (at least officially) supported for some given architecture.\n\nThis adds a warning that will state something like\n\nThe \'blah\' architecture does not support -moutline; flag ignored\n\nwhen we call -moutline with the \'blah\' architecture.\n\nSince the outliner is still mostly an AArch64 thing, any architecture\nother than AArch64 will emit this warning.\n\nllvm-svn: 335672"},
[h]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",2355,"void tools::addMachineOutlinerArgs(const Driver &D, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, const llvm::Triple &Triple, bool IsLTO, const StringRef PluginOptPrefix) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_moutline, options::OPT_mno_outline)) {\n    if (A->getOption().matches(options::OPT_moutline)) {\n      // We only support -moutline in AArch64 and ARM targets right now. If\n      // we\'re not compiling for these, emit a warning and ignore the flag.\n      // Otherwise, add the proper mllvm flags.\n      if (!(Triple.isARM() || Triple.isThumb() || Triple.getArch() == llvm::Triple::aarch64 || Triple.getArch() == llvm::Triple::aarch64_32)) {\n        D.Diag(diag::warn_drv_moutline_unsupported_opt) << Triple.getArchName();"}}
[h]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",2355,"void tools::addMachineOutlinerArgs(const Driver &D, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, const llvm::Triple &Triple, bool IsLTO, const StringRef PluginOptPrefix) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_moutline, options::OPT_mno_outline)) {\n    if (A->getOption().matches(options::OPT_moutline)) {\n      // We only support -moutline in AArch64 and ARM targets right now. If\n      // we\'re not compiling for these, emit a warning and ignore the flag.\n      // Otherwise, add the proper mllvm flags.\n      if (!(Triple.isARM() || Triple.isThumb() || Triple.getArch() == llvm::Triple::aarch64 || Triple.getArch() == llvm::Triple::aarch64_32)) {\n        D.Diag(diag::warn_drv_moutline_unsupported_opt) << Triple.getArchName();"}}
},
},
["warn_drv_msp430_hwmult_mismatch"]={
["warn_drv_msp430_hwmult_mismatch"]={
[j]={Bb},
[k]={Gb},
[i]=Bb,
[j]=Gb,
[c]={{nil,Q,"the given MCU supports %0 hardware multiply, but \'-mhwmult\' is set to %1"},{jb,ob,"the given MCU supports %0 hardware multiply, but -mhwmult is set to %1."}},
[c]={{nil,B,"warn_drv_msp430_hwmult_mismatch"}},
[d]=g,
[d]={{nil,w,"the given MCU supports %0 hardware multiply, but \'-mhwmult\' is set to %1"},{I,B,"the given MCU supports %0 hardware multiply, but -mhwmult is set to %1."}},
[e]="the given MCU supports (.*?) hardware multiply, but \'\\-mhwmult\' is set to (.*?)",
[e]=i,
[f]=Rc,
[g]="the given MCU supports (.*?) hardware multiply, but \'\\-mhwmult\' is set to (.*?)",
[b]=p,
[a]=Tc,
[a]={jc,1534346725,ic,dc},
[b]={{nil,B,r}},
[f]={mc,1534346725,ic,hc},
[h]={{"clang/lib/Driver/ToolChains/MSP430.cpp",91,"void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (MCU && HWMult != SupportedHWMult)\n    D.Diag(clang::diag::warn_drv_msp430_hwmult_mismatch) << SupportedHWMult << HWMult;"}}
[h]={{"clang/lib/Driver/ToolChains/MSP430.cpp",91,"void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (MCU && HWMult != SupportedHWMult)\n    D.Diag(clang::diag::warn_drv_msp430_hwmult_mismatch) << SupportedHWMult << HWMult;"}}
},
},
["warn_drv_msp430_hwmult_no_device"]={
["warn_drv_msp430_hwmult_no_device"]={
[j]={Bb},
[k]={Gb},
[i]=Bb,
[j]=Gb,
[c]={{nil,Q,"no MCU device specified, but \'-mhwmult\' is set to \'auto\', assuming no hardware multiply; use \'-mmcu\' to specify an MSP430 device, or \'-mhwmult\' to set the hardware multiply type explicitly"},{jb,ob,"no MCU device specified, but \'-mhwmult\' is set to \'auto\', assuming no hardware multiply. Use -mmcu to specify a MSP430 device, or -mhwmult to set hardware multiply type explicitly."}},
[c]={{nil,B,"warn_drv_msp430_hwmult_no_device"}},
[d]=g,
[d]={{nil,w,"no MCU device specified, but \'-mhwmult\' is set to \'auto\', assuming no hardware multiply; use \'-mmcu\' to specify an MSP430 device, or \'-mhwmult\' to set the hardware multiply type explicitly"},{I,B,"no MCU device specified, but \'-mhwmult\' is set to \'auto\', assuming no hardware multiply. Use -mmcu to specify a MSP430 device, or -mhwmult to set hardware multiply type explicitly."}},
[e]="no MCU device specified, but \'\\-mhwmult\' is set to \'auto\', assuming no hardware multiply; use \'\\-mmcu\' to specify an MSP430 device, or \'\\-mhwmult\' to set the hardware multiply type explicitly",
[e]=i,
[f]=Rc,
[g]="no MCU device specified, but \'\\-mhwmult\' is set to \'auto\', assuming no hardware multiply; use \'\\-mmcu\' to specify an MSP430 device, or \'\\-mhwmult\' to set the hardware multiply type explicitly",
[b]=p,
[a]=Tc,
[a]={jc,1534346725,ic,dc},
[b]={{nil,B,r}},
[f]={mc,1534346725,ic,hc},
[h]={{"clang/lib/Driver/ToolChains/MSP430.cpp",76,"void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (HWMult == \"auto\") {\n    // \'auto\' - deduce hw multiplier support based on mcu name provided.\n    // If no mcu name is provided, assume no hw multiplier is supported.\n    if (!MCU)\n      D.Diag(clang::diag::warn_drv_msp430_hwmult_no_device);"}}
[h]={{"clang/lib/Driver/ToolChains/MSP430.cpp",76,"void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (HWMult == \"auto\") {\n    // \'auto\' - deduce hw multiplier support based on mcu name provided.\n    // If no mcu name is provided, assume no hw multiplier is supported.\n    if (!MCU)\n      D.Diag(clang::diag::warn_drv_msp430_hwmult_no_device);"}}
},
},
["warn_drv_msp430_hwmult_unsupported"]={
["warn_drv_msp430_hwmult_unsupported"]={
[j]={Bb},
[k]={Gb},
[i]=Bb,
[j]=Gb,
[c]={{nil,Q,"the given MCU does not support hardware multiply, but \'-mhwmult\' is set to %0"},{jb,ob,"the given MCU does not support hardware multiply, but -mhwmult is set to %0."}},
[c]={{nil,B,"warn_drv_msp430_hwmult_unsupported"}},
[d]=g,
[d]={{nil,w,"the given MCU does not support hardware multiply, but \'-mhwmult\' is set to %0"},{I,B,"the given MCU does not support hardware multiply, but -mhwmult is set to %0."}},
[e]="the given MCU does not support hardware multiply, but \'\\-mhwmult\' is set to (.*?)",
[e]=i,
[f]=Rc,
[g]="the given MCU does not support hardware multiply, but \'\\-mhwmult\' is set to (.*?)",
[b]=p,
[a]=Tc,
[a]={jc,1534346725,ic,dc},
[b]={{nil,B,r}},
[f]={mc,1534346725,ic,hc},
[h]={{"clang/lib/Driver/ToolChains/MSP430.cpp",89,"void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (MCU && SupportedHWMult == \"none\")\n    D.Diag(clang::diag::warn_drv_msp430_hwmult_unsupported) << HWMult;"}}
[h]={{"clang/lib/Driver/ToolChains/MSP430.cpp",89,"void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (MCU && SupportedHWMult == \"none\")\n    D.Diag(clang::diag::warn_drv_msp430_hwmult_unsupported) << HWMult;"}}
},
},
["warn_drv_msvc_not_found"]={
["warn_drv_msvc_not_found"]={
[j]={"msvc-not-found"},
[k]={"msvc-not-found"},
[i]="msvc-not-found",
[j]="msvc-not-found",
[c]={{nil,nd,"unable to find a Visual Studio installation; try running Clang from a developer command prompt"}},
[c]={{nil,Ab,"warn_drv_msvc_not_found"}},
[d]=g,
[d]={{nil,Ab,"unable to find a Visual Studio installation; try running Clang from a developer command prompt"}},
[e]="unable to find a Visual Studio installation; try running Clang from a developer command prompt",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmsvc\\-not\\-found[^\\]]*\\]",
[g]="unable to find a Visual Studio installation; try running Clang from a developer command prompt",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wmsvc\\-not\\-found[^\\]]*\\]",
[a]={"f6302523490c",1489594055,"Update clang-cl driver for MSVC 2017.","Update clang-cl driver for MSVC 2017.\n\n2017 changes the way you find an installed copy of\nVisual Studio as well as its internal directory layout.\nAs a result, clang-cl was unable to find VS2017 even\nwhen you had run vcvarsall to set up a toolchain\nenvironment.  This patch updates everything for 2017\nand cleans up the way we handle a tiered search a la\nenvironment -> installation -> PATH for which copy\nof Visual Studio to bind to.\n\nPatch originally by Hamza Sood, with some fixups for landing.\n\nDifferential Revision: https://reviews.llvm.org/D30758\n\nllvm-svn: 297851"},
[b]={{nil,Ab,r}},
[f]={"f6302523490c",1489594055,"Update clang-cl driver for MSVC 2017.","Update clang-cl driver for MSVC 2017.\n\n2017 changes the way you find an installed copy of\nVisual Studio as well as its internal directory layout.\nAs a result, clang-cl was unable to find VS2017 even\nwhen you had run vcvarsall to set up a toolchain\nenvironment.  This patch updates everything for 2017\nand cleans up the way we handle a tiered search a la\nenvironment -> installation -> PATH for which copy\nof Visual Studio to bind to.\n\nPatch originally by Hamza Sood, with some fixups for landing.\n\nDifferential Revision: https://reviews.llvm.org/D30758\n\nllvm-svn: 297851"},
[h]={{"clang/lib/Driver/ToolChains/MSVC.cpp",341,"void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (Linker.equals_insensitive(\"link\")) {\n    // ...\n    if (!TC.FoundMSVCInstall() && !canExecute(TC.getVFS(), linkPath)) {\n      // ...\n      if (canExecute(TC.getVFS(), ClPath)) {\n        // ...\n        if (!canExecute(TC.getVFS(), linkPath))\n          C.getDriver().Diag(clang::diag::warn_drv_msvc_not_found);"},{"clang/lib/Driver/ToolChains/MSVC.cpp",343,"void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (Linker.equals_insensitive(\"link\")) {\n    // ...\n    if (!TC.FoundMSVCInstall() && !canExecute(TC.getVFS(), linkPath)) {\n      // ...\n      if (canExecute(TC.getVFS(), ClPath)) {\n      // ...\n      } else {\n        C.getDriver().Diag(clang::diag::warn_drv_msvc_not_found);"}}
[h]={{"clang/lib/Driver/ToolChains/MSVC.cpp",341,"void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (Linker.equals_insensitive(\"link\")) {\n    // ...\n    if (!TC.FoundMSVCInstall() && !canExecute(TC.getVFS(), linkPath)) {\n      // ...\n      if (canExecute(TC.getVFS(), ClPath)) {\n        // ...\n        if (!canExecute(TC.getVFS(), linkPath))\n          C.getDriver().Diag(clang::diag::warn_drv_msvc_not_found);"},{"clang/lib/Driver/ToolChains/MSVC.cpp",343,"void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (Linker.equals_insensitive(\"link\")) {\n    // ...\n    if (!TC.FoundMSVCInstall() && !canExecute(TC.getVFS(), linkPath)) {\n      // ...\n      if (canExecute(TC.getVFS(), ClPath)) {\n      // ...\n      } else {\n        C.getDriver().Diag(clang::diag::warn_drv_msvc_not_found);"}}
},
},
["warn_drv_multi_gpu_arch"]={
["warn_drv_multi_gpu_arch"]={
[j]={"multi-gpu"},
[k]={"multi-gpu"},
[i]="multi-gpu",
[j]="multi-gpu",
[c]="multiple %0 architectures are detected: %1; only the first one is used for \'%2\'",
[c]="warn_drv_multi_gpu_arch",
[d]=g,
[d]="multiple %0 architectures are detected: %1; only the first one is used for \'%2\'",
[e]="multiple (.*?) architectures are detected\\: (.*?); only the first one is used for \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmulti\\-gpu[^\\]]*\\]",
[g]="multiple (.*?) architectures are detected\\: (.*?); only the first one is used for \'(.*?)\'",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wmulti\\-gpu[^\\]]*\\]",
[a]={"91b9bdeb9256",1688572615,"[AMDGPU] Support -mcpu=native for OpenCL","[AMDGPU] Support -mcpu=native for OpenCL\n\nWhen -mcpu=native is specified, try detecting GPU\non the system by using amdgpu-arch tool. If it\nfails to detect GPU, emit an error about GPU\nnot detected. If multiple GPUs are detected,\nuse the first GPU and emit a warning.\n\nReviewed by: Matt Arsenault, Fangrui Song\n\nDifferential Revision: https://reviews.llvm.org/D154531"},
[b]=r,
[f]={"91b9bdeb9256",1688572615,"[AMDGPU] Support -mcpu=native for OpenCL","[AMDGPU] Support -mcpu=native for OpenCL\n\nWhen -mcpu=native is specified, try detecting GPU\non the system by using amdgpu-arch tool. If it\nfails to detect GPU, emit an error about GPU\nnot detected. If multiple GPUs are detected,\nuse the first GPU and emit a warning.\n\nReviewed by: Matt Arsenault, Fangrui Song\n\nDifferential Revision: https://reviews.llvm.org/D154531"},
[h]={{"clang/lib/Driver/ToolChains/AMDGPU.cpp",651,"DerivedArgList *AMDGPUToolChain::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const {\n  // ...\n  if (LastMCPUArg && StringRef(LastMCPUArg->getValue()) == \"native\") {\n    // ...\n    if (!GPUsOrErr) {\n    // ...\n    } else {\n      // ...\n      if (GPUs.size() > 1) {\n        getDriver().Diag(diag::warn_drv_multi_gpu_arch) << llvm::Triple::getArchTypeName(getArch()) << llvm::join(GPUs, \", \") << \"-mcpu\";"}}
[h]={{"clang/lib/Driver/ToolChains/AMDGPU.cpp",651,"DerivedArgList *AMDGPUToolChain::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const {\n  // ...\n  if (LastMCPUArg && StringRef(LastMCPUArg->getValue()) == \"native\") {\n    // ...\n    if (!GPUsOrErr) {\n    // ...\n    } else {\n      // ...\n      if (GPUs.size() > 1) {\n        getDriver().Diag(diag::warn_drv_multi_gpu_arch) << llvm::Triple::getArchTypeName(getArch()) << llvm::join(GPUs, \", \") << \"-mcpu\";"}}
},
},
["warn_drv_needs_hvx"]={
["warn_drv_needs_hvx"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]={{nil,Q,"%0 requires HVX, use -mhvx/-mhvx= to enable it"}},
[c]={{nil,w,"warn_drv_needs_hvx"}},
[d]=g,
[d]={{nil,w,"%0 requires HVX, use -mhvx/-mhvx= to enable it"}},
[e]="(.*?) requires HVX, use \\-mhvx\\/\\-mhvx\\= to enable it",
[e]=i,
[f]=Vb,
[g]="(.*?) requires HVX, use \\-mhvx\\/\\-mhvx\\= to enable it",
[b]=p,
[a]=Xb,
[a]={qc,1610286626,rc,sc},
[b]={{nil,w,r}},
[f]={oc,1610286626,vc,sc},
[h]={{"clang/lib/Driver/ToolChains/Hexagon.cpp",191,"// Hexagon target features.\nvoid hexagon::getHexagonTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (HexagonToolChain::isAutoHVXEnabled(Args) && !HasHVX)\n    D.Diag(diag::warn_drv_needs_hvx) << \"auto-vectorization\";"}}
[h]={{"clang/lib/Driver/ToolChains/Hexagon.cpp",191,"// Hexagon target features.\nvoid hexagon::getHexagonTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (HexagonToolChain::isAutoHVXEnabled(Args) && !HasHVX)\n    D.Diag(diag::warn_drv_needs_hvx) << \"auto-vectorization\";"}}
},
},
["warn_drv_new_cuda_version"]={
["warn_drv_new_cuda_version"]={
[j]={"unknown-cuda-version"},
[k]={"unknown-cuda-version"},
[i]="unknown-cuda-version",
[j]="unknown-cuda-version",
[c]={{nil,Q,"CUDA version%0 is newer than the latest%select{| partially}1 supported version %2"}},
[c]={{nil,w,"warn_drv_new_cuda_version"}},
[d]=g,
[d]={{nil,w,"CUDA version%0 is newer than the latest%select{| partially}1 supported version %2"}},
[e]="CUDA version(.*?) is newer than the latest(?:| partially) supported version (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunknown\\-cuda\\-version[^\\]]*\\]",
[g]="CUDA version(.*?) is newer than the latest(?:| partially) supported version (.*?)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-cuda\\-version[^\\]]*\\]",
[a]={qc,1610286626,rc,sc},
[b]={{nil,w,r}},
[f]={oc,1610286626,vc,sc},
[h]={{"clang/lib/Driver/ToolChains/Cuda.cpp",119,"void CudaInstallationDetector::WarnIfUnsupportedVersion() {\n  if (Version > CudaVersion::PARTIALLY_SUPPORTED) {\n    // ...\n    D.Diag(diag::warn_drv_new_cuda_version) << VersionString << (CudaVersion::PARTIALLY_SUPPORTED != CudaVersion::FULLY_SUPPORTED) << CudaVersionToString(CudaVersion::PARTIALLY_SUPPORTED);"}}
[h]={{"clang/lib/Driver/ToolChains/Cuda.cpp",119,"void CudaInstallationDetector::WarnIfUnsupportedVersion() {\n  if (Version > CudaVersion::PARTIALLY_SUPPORTED) {\n    // ...\n    D.Diag(diag::warn_drv_new_cuda_version) << VersionString << (CudaVersion::PARTIALLY_SUPPORTED != CudaVersion::FULLY_SUPPORTED) << CudaVersionToString(CudaVersion::PARTIALLY_SUPPORTED);"}}
},
},
["warn_drv_no_floating_point_registers"]={
["warn_drv_no_floating_point_registers"]={
[j]={"unsupported-abi"},
[k]={"unsupported-abi"},
[i]="unsupported-abi",
[j]="unsupported-abi",
[c]="\'%0\': selected processor lacks floating point registers",
[c]="warn_drv_no_floating_point_registers",
[d]=g,
[d]="\'%0\': selected processor lacks floating point registers",
[e]="\'(.*?)\'\\: selected processor lacks floating point registers",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-abi[^\\]]*\\]",
[g]="\'(.*?)\'\\: selected processor lacks floating point registers",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-abi[^\\]]*\\]",
[a]={"1d511e1864f1",1684763280,"[ARM][Driver] Warn if -mhard-float is incompatible","[ARM][Driver] Warn if -mhard-float is incompatible\n\nMixing -mfloat-abi=hard with a CPU that doesn\'t have floating point\nregisters is an error in GCC:\n  cc1: error: \'-mfloat-abi=hard\': selected processor lacks an FPU\n\nSince there is code in the wild (including in clang tests) that relies\non Clang\'s current behaviour, emit a warning instead of an error.\n\nUnlike the GCC error, the new warning refers to floating point\nregisters instead of an FPU. This is because -mfloat-abi=hard and\n-march=armv8.1-m.main+mve+nofp are compatible - in that case floating\npoint registers are required, but an FPU is not required.\n\nMy initial thought was to use the floating point ABI calculated by\narm::getARMFloatABI() but in invalid cases which error for other\nreasons the ABI is miscalculated and the warning would cause confusion.\nTherefore only warn if the user specifies the float ABI explicitly.\n\nFixes part of https://github.com/llvm/llvm-project/issues/55755\n\nDifferential Revision: https://reviews.llvm.org/D150902"},
[b]=r,
[f]={"1d511e1864f1",1684763280,"[ARM][Driver] Warn if -mhard-float is incompatible","[ARM][Driver] Warn if -mhard-float is incompatible\n\nMixing -mfloat-abi=hard with a CPU that doesn\'t have floating point\nregisters is an error in GCC:\n  cc1: error: \'-mfloat-abi=hard\': selected processor lacks an FPU\n\nSince there is code in the wild (including in clang tests) that relies\non Clang\'s current behaviour, emit a warning instead of an error.\n\nUnlike the GCC error, the new warning refers to floating point\nregisters instead of an FPU. This is because -mfloat-abi=hard and\n-march=armv8.1-m.main+mve+nofp are compatible - in that case floating\npoint registers are required, but an FPU is not required.\n\nMy initial thought was to use the floating point ABI calculated by\narm::getARMFloatABI() but in invalid cases which error for other\nreasons the ABI is miscalculated and the warning would cause confusion.\nTherefore only warn if the user specifies the float ABI explicitly.\n\nFixes part of https://github.com/llvm/llvm-project/issues/55755\n\nDifferential Revision: https://reviews.llvm.org/D150902"},
[h]={{wd,174,"// If -mfloat-abi=hard or -mhard-float are specified explicitly then check that\n// floating point registers are available on the target CPU.\nstatic void checkARMFloatABI(const Driver &D, const ArgList &Args, bool HasFPRegs) {\n  // ...\n  if (A && (A->getOption().matches(options::OPT_mhard_float) || (A->getOption().matches(options::OPT_mfloat_abi_EQ) && A->getValue() == StringRef(\"hard\"))))\n    D.Diag(clang::diag::warn_drv_no_floating_point_registers) << A->getAsString(Args);"}},
[h]={{wd,174,"// If -mfloat-abi=hard or -mhard-float are specified explicitly then check that\n// floating point registers are available on the target CPU.\nstatic void checkARMFloatABI(const Driver &D, const ArgList &Args, bool HasFPRegs) {\n  // ...\n  if (A && (A->getOption().matches(options::OPT_mhard_float) || (A->getOption().matches(options::OPT_mfloat_abi_EQ) && A->getValue() == StringRef(\"hard\"))))\n    D.Diag(clang::diag::warn_drv_no_floating_point_registers) << A->getAsString(Args);"}},
[k]={
[l]={
["clang/test/Preprocessor/arm-target-features.c"]={"clang: warning: \'-mfloat-abi=hard\': selected processor lacks floating point registers [-Wunsupported-abi]"}
["clang/test/Preprocessor/arm-target-features.c"]={"clang: warning: \'-mfloat-abi=hard\': selected processor lacks floating point registers [-Wunsupported-abi]"}
}
}
},
},
["warn_drv_object_size_disabled_O0"]={
["warn_drv_object_size_disabled_O0"]={
[j]={Bb},
[k]={Gb},
[i]=Bb,
[j]=Gb,
[c]={{nil,nd,"the object size sanitizer has no effect at -O0, but is explicitly enabled: %0"}},
[c]={{nil,Ab,"warn_drv_object_size_disabled_O0"}},
[d]=g,
[d]={{nil,Ab,"the object size sanitizer has no effect at -O0, but is explicitly enabled: %0"}},
[e]="the object size sanitizer has no effect at \\-O0, but is explicitly enabled\\: (.*?)",
[e]=i,
[f]=Rc,
[g]="the object size sanitizer has no effect at \\-O0, but is explicitly enabled\\: (.*?)",
[b]=p,
[a]=Tc,
[a]={"7aacb659dad5",1498259724,"[ubsan] Disable the object size check at -O0","[ubsan] Disable the object size check at -O0\n\nThis check currently isn\'t able to diagnose any issues at -O0, not is it\nlikely to [1]. Disabling the check at -O0 leads to substantial compile\ntime and binary size savings.\n\n[1] [cfe-dev] Disabling ubsan\'s object size check at -O0\n\nDifferential Revision: https://reviews.llvm.org/D34563\n\nllvm-svn: 306181"},
[b]={{nil,Ab,r}},
[h]={{Md,364,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {\n      // ...\n      if (RemoveObjectSizeAtO0) {\n        // ...\n        // The user explicitly enabled the object size sanitizer. Warn\n        // that this does nothing at -O0.\n        if ((Add & SanitizerKind::ObjectSize) && DiagnoseErrors)\n          D.Diag(diag::warn_drv_object_size_disabled_O0) << Arg->getAsString(Args);"}}
[f]={"7aacb659dad5",1498259724,"[ubsan] Disable the object size check at -O0","[ubsan] Disable the object size check at -O0\n\nThis check currently isn\'t able to diagnose any issues at -O0, not is it\nlikely to [1]. Disabling the check at -O0 leads to substantial compile\ntime and binary size savings.\n\n[1] [cfe-dev] Disabling ubsan\'s object size check at -O0\n\nDifferential Revision: https://reviews.llvm.org/D34563\n\nllvm-svn: 306181"},
[h]={{Id,364,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {\n      // ...\n      if (RemoveObjectSizeAtO0) {\n        // ...\n        // The user explicitly enabled the object size sanitizer. Warn\n        // that this does nothing at -O0.\n        if ((Add & SanitizerKind::ObjectSize) && DiagnoseErrors)\n          D.Diag(diag::warn_drv_object_size_disabled_O0) << Arg->getAsString(Args);"}}
},
},
["warn_drv_omp_offload_target_duplicate"]={
["warn_drv_omp_offload_target_duplicate"]={
[j]={"openmp","openmp-target"},
[k]={"openmp","openmp-target"},
[i]="openmp-target",
[j]="openmp-target",
[c]={{nil,Q,"OpenMP offloading target \'%0\' is similar to target \'%1\' already specified; will be ignored"},{jb,nil,"The OpenMP offloading target \'%0\' is similar to target \'%1\' already specified - will be ignored."}},
[c]="warn_drv_omp_offload_target_duplicate",
[d]=g,
[d]={{nil,w,"OpenMP offloading target \'%0\' is similar to target \'%1\' already specified; will be ignored"},{I,nil,"The OpenMP offloading target \'%0\' is similar to target \'%1\' already specified - will be ignored."}},
[e]="OpenMP offloading target \'(.*?)\' is similar to target \'(.*?)\' already specified; will be ignored",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wopenmp\\-target[^\\]]*\\]",
[g]="OpenMP offloading target \'(.*?)\' is similar to target \'(.*?)\' already specified; will be ignored",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wopenmp\\-target[^\\]]*\\]",
[a]={"39f9da2a8752",1477586285,"[Driver][OpenMP] Create tool chains for OpenMP offloading kind.","[Driver][OpenMP] Create tool chains for OpenMP offloading kind.\n\nSummary: This patch adds new logic to create the necessary tool chains to support offloading for OpenMP. The OpenMP related options are checked and the tool chains created accordingly. Diagnostics are emitted in case the options are illegal or express unknown targets.\n\nReviewers: echristo, tra, jlebar, rsmith, ABataev, hfinkel\n\nSubscribers: whchung, mkuron, mehdi_amini, cfe-commits, Hahnfeld, arpith-jacob, carlo.bertolli, caomhin\n\nDifferential Revision: https://reviews.llvm.org/D21843\n\nllvm-svn: 285311"},
[b]=r,
[h]={{Nb,940,"void Driver::CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs) {\n  // ...\n  if (IsOpenMPOffloading) {\n    // ...\n    for (StringRef Val : OpenMPTriples) {\n      // ...\n      if (Duplicate != FoundNormalizedTriples.end()) {\n        Diag(clang::diag::warn_drv_omp_offload_target_duplicate) << Val << Duplicate->second;"}}
[f]={"39f9da2a8752",1477586285,"[Driver][OpenMP] Create tool chains for OpenMP offloading kind.","[Driver][OpenMP] Create tool chains for OpenMP offloading kind.\n\nSummary: This patch adds new logic to create the necessary tool chains to support offloading for OpenMP. The OpenMP related options are checked and the tool chains created accordingly. Diagnostics are emitted in case the options are illegal or express unknown targets.\n\nReviewers: echristo, tra, jlebar, rsmith, ABataev, hfinkel\n\nSubscribers: whchung, mkuron, mehdi_amini, cfe-commits, Hahnfeld, arpith-jacob, carlo.bertolli, caomhin\n\nDifferential Revision: https://reviews.llvm.org/D21843\n\nllvm-svn: 285311"},
[h]={{Vb,940,"void Driver::CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs) {\n  // ...\n  if (IsOpenMPOffloading) {\n    // ...\n    for (StringRef Val : OpenMPTriples) {\n      // ...\n      if (Duplicate != FoundNormalizedTriples.end()) {\n        Diag(clang::diag::warn_drv_omp_offload_target_duplicate) << Val << Duplicate->second;"}}
},
},
["warn_drv_optimization_value"]={
["warn_drv_optimization_value"]={
[j]={Bb},
[k]={Gb},
[i]=Bb,
[j]=Gb,
[c]="optimization level \'%0\' is not supported; using \'%1%2\' instead",
[c]="warn_drv_optimization_value",
[d]=g,
[d]="optimization level \'%0\' is not supported; using \'%1%2\' instead",
[e]="optimization level \'(.*?)\' is not supported; using \'(.*?)(.*?)\' instead",
[e]=i,
[f]=p,
[g]="optimization level \'(.*?)\' is not supported; using \'(.*?)(.*?)\' instead",
[b]=p,
[a]=r,
[a]={"6ae39801189b",1384529954,"Using an invalid -O falls back on -O3 instead of an error","Using an invalid -O falls back on -O3 instead of an error\n\nSummary:\nCurrently with clang:\n$ clang -O20 foo.c\nerror: invalid value \'20\' in \'-O20\'\n\nWith the patch:\n$ clang -O20 foo.c\nwarning: optimization level \'-O20\' is unsupported; using \'-O3\' instead.\n1 warning generated.\n\nThis matches the gcc behavior (with a warning added)\n\nPass all tests:\nTesting: 0 .. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90..\nTesting Time: 94.14s\n  Expected Passes    : 6721\n  Expected Failures  : 20\n  Unsupported Tests  : 17\n\n(which was not the case of http://llvm-reviews.chandlerc.com/D2125)\n\nReviewers: chandlerc, rafael, rengolin, hfinkel\n\nReviewed By: rengolin\n\nCC: cfe-commits\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2152\n\nllvm-svn: 194817"},
[b]=r,
[h]={{Ic,1617,"bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK, DiagnosticsEngine &Diags, const llvm::Triple &T, const std::string &OutputFile, const LangOptions &LangOptsRef) {\n  // ...\n  if (OptimizationLevel > MaxOptLevel) {\n    // ...\n    Diags.Report(diag::warn_drv_optimization_value) << Args.getLastArg(OPT_O)->getAsString(Args) << \"-O\" << MaxOptLevel;"}},
[f]={"6ae39801189b",1384529954,"Using an invalid -O falls back on -O3 instead of an error","Using an invalid -O falls back on -O3 instead of an error\n\nSummary:\nCurrently with clang:\n$ clang -O20 foo.c\nerror: invalid value \'20\' in \'-O20\'\n\nWith the patch:\n$ clang -O20 foo.c\nwarning: optimization level \'-O20\' is unsupported; using \'-O3\' instead.\n1 warning generated.\n\nThis matches the gcc behavior (with a warning added)\n\nPass all tests:\nTesting: 0 .. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90..\nTesting Time: 94.14s\n  Expected Passes    : 6721\n  Expected Failures  : 20\n  Unsupported Tests  : 17\n\n(which was not the case of http://llvm-reviews.chandlerc.com/D2125)\n\nReviewers: chandlerc, rafael, rengolin, hfinkel\n\nReviewed By: rengolin\n\nCC: cfe-commits\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2152\n\nllvm-svn: 194817"},
[k]={
[h]={{Jc,1617,"bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK, DiagnosticsEngine &Diags, const llvm::Triple &T, const std::string &OutputFile, const LangOptions &LangOptsRef) {\n  // ...\n  if (OptimizationLevel > MaxOptLevel) {\n    // ...\n    Diags.Report(diag::warn_drv_optimization_value) << Args.getLastArg(OPT_O)->getAsString(Args) << \"-O\" << MaxOptLevel;"}},
[l]={
["clang/test/Frontend/invalid-o-level.c"]={"warning: optimization level \'-O8\' is not supported; using \'-O3\' instead"}
["clang/test/Frontend/invalid-o-level.c"]={"warning: optimization level \'-O8\' is not supported; using \'-O3\' instead"}
}
}
},
},
["warn_drv_overriding_flag_option"]={
["warn_drv_overriding_flag_option"]={
[j]={"overriding-t-option"},
[k]={"overriding-t-option"},
[i]="overriding-t-option",
[j]="overriding-t-option",
[c]="overriding \'%0\' option with \'%1\'",
[c]="warn_drv_overriding_flag_option",
[d]=g,
[d]="overriding \'%0\' option with \'%1\'",
[e]="overriding \'(.*?)\' option with \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Woverriding\\-t\\-option[^\\]]*\\]",
[g]="overriding \'(.*?)\' option with \'(.*?)\'",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Woverriding\\-t\\-option[^\\]]*\\]",
[a]={"d9ad0681fad9",1378917521,"clang-cl: Warn about overriding /MD with /MT etc.","clang-cl: Warn about overriding /MD with /MT etc.\n\nThis also bakes the /M options into a separate option group to make\nthem easier to refer to from the code.\n\nllvm-svn: 190529"},
[b]=r,
[h]={{Nb,2622,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  // ...\n  // The last /TC or /TP option sets the input type to C or C++ globally.\n  if (Arg *TCTP = Args.getLastArgNoClaim(options::OPT__SLASH_TC, options::OPT__SLASH_TP)) {\n    // ...\n    for (Arg *A : Args.filtered(options::OPT__SLASH_TC, options::OPT__SLASH_TP)) {\n      if (Previous) {\n        Diag(clang::diag::warn_drv_overriding_flag_option) << Previous->getSpelling() << A->getSpelling();"},{T,2842,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const Arg *A : Args) {\n    // ...\n    case options::OPT_ffp_model_EQ: {\n      // ...\n      if (OFastEnabled && !Val.equals(\"fast\")) {\n        // ...\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-model=\" + Val) << \"-Ofast\";"},{T,2853,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const Arg *A : Args) {\n    // ...\n    case options::OPT_ffp_model_EQ: {\n      // ...\n      // ffp-model= is a Driver option, it is entirely rewritten into more\n      // granular options before being passed into cc1.\n      // Use the gcc option in the switch below.\n      if (!FPModel.empty() && !FPModel.equals(Val))\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-model=\" + FPModel) << Args.MakeArgString(\"-ffp-model=\" + Val);"},{T,2902,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const Arg *A : Args) {\n    // ...\n    case options::OPT_ftrapping_math:\n      if (!TrappingMathPresent && !FPExceptionBehavior.empty() && !FPExceptionBehavior.equals(\"strict\"))\n        // ...\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-exception-behavior=\" + FPExceptionBehavior) << \"-ftrapping-math\";"},{T,2913,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const Arg *A : Args) {\n    // ...\n    case options::OPT_fno_trapping_math:\n      if (!TrappingMathPresent && !FPExceptionBehavior.empty() && !FPExceptionBehavior.equals(\"ignore\"))\n        // ...\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-exception-behavior=\" + FPExceptionBehavior) << \"-fno-trapping-math\";"},{T,2978,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const Arg *A : Args) {\n    // ...\n    // Validate and pass through -ffp-exception-behavior option.\n    case options::OPT_ffp_exception_behavior_EQ: {\n      // ...\n      if (!TrappingMathPresent && !FPExceptionBehavior.empty() && !FPExceptionBehavior.equals(Val))\n        // ...\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-exception-behavior=\" + FPExceptionBehavior) << Args.MakeArgString(\"-ffp-exception-behavior=\" + Val);"},{T,3126,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const Arg *A : Args) {\n    // ...\n    if (StrictFPModel) {\n      // If -ffp-model=strict has been specified on command line but\n      // subsequent options conflict then emit warning diagnostic.\n      if (HonorINFs && HonorNaNs && !AssociativeMath && !ReciprocalMath && SignedZeros && TrappingMath && RoundingFPMath && !ApproxFunc && DenormalFPMath == llvm::DenormalMode::getIEEE() && DenormalFP32Math == llvm::DenormalMode::getIEEE() && FPContract.equals(\"off\"))\n      // ...\n      else {\n        // ...\n        if (RHS != \"-ffp-model=strict\")\n          D.Diag(clang::diag::warn_drv_overriding_flag_option) << \"-ffp-model=strict\" << RHS;"},{T,3220,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  // -ffast-math enables the __FAST_MATH__ preprocessor macro, but check for the\n  // individual features enabled by -ffast-math instead of the option itself as\n  // that\'s consistent with gcc\'s behaviour.\n  if (!HonorINFs && !HonorNaNs && !MathErrno && AssociativeMath && ApproxFunc && ReciprocalMath && !SignedZeros && !TrappingMath && !RoundingFPMath) {\n    // ...\n    if (FPModel.equals(\"fast\")) {\n      if (FPContract.equals(\"fast\"))\n      // ...\n      else if (FPContract.empty())\n      // ...\n      else\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << \"-ffp-model=fast\" << Args.MakeArgString(\"-ffp-contract=\" + FPContract);"},{od,2202,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  if (OSTarget) {\n    // ...\n    if (OSVersionArgTarget) {\n      // ...\n      if (OSTarget->getPlatform() != OSVersionArgTarget->getPlatform() || (Driver::GetReleaseVersion(OSTarget->getOSVersion(), TargetMajor, TargetMinor, TargetMicro, TargetExtra) && Driver::GetReleaseVersion(OSVersionArgTarget->getOSVersion(), ArgMajor, ArgMinor, ArgMicro, ArgExtra) && (VersionTuple(TargetMajor, TargetMinor, TargetMicro) != VersionTuple(ArgMajor, ArgMinor, ArgMicro) || TargetExtra != ArgExtra))) {\n        // Select the OS version from the -m<os>-version-min argument when\n        // the -target does not include an OS version.\n        if (OSTarget->getPlatform() == OSVersionArgTarget->getPlatform() && !OSTarget->hasOSVersion()) {\n        // ...\n        } else {\n          // ...\n          getDriver().Diag(clang::diag::warn_drv_overriding_flag_option) << OSVersionArg << TargetArg;"}},
[f]={"d9ad0681fad9",1378917521,"clang-cl: Warn about overriding /MD with /MT etc.","clang-cl: Warn about overriding /MD with /MT etc.\n\nThis also bakes the /M options into a separate option group to make\nthem easier to refer to from the code.\n\nllvm-svn: 190529"},
[k]={
[h]={{Vb,2622,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  // ...\n  // The last /TC or /TP option sets the input type to C or C++ globally.\n  if (Arg *TCTP = Args.getLastArgNoClaim(options::OPT__SLASH_TC, options::OPT__SLASH_TP)) {\n    // ...\n    for (Arg *A : Args.filtered(options::OPT__SLASH_TC, options::OPT__SLASH_TP)) {\n      if (Previous) {\n        Diag(clang::diag::warn_drv_overriding_flag_option) << Previous->getSpelling() << A->getSpelling();"},{ab,2842,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const Arg *A : Args) {\n    // ...\n    case options::OPT_ffp_model_EQ: {\n      // ...\n      if (OFastEnabled && !Val.equals(\"fast\")) {\n        // ...\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-model=\" + Val) << \"-Ofast\";"},{ab,2853,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const Arg *A : Args) {\n    // ...\n    case options::OPT_ffp_model_EQ: {\n      // ...\n      // ffp-model= is a Driver option, it is entirely rewritten into more\n      // granular options before being passed into cc1.\n      // Use the gcc option in the switch below.\n      if (!FPModel.empty() && !FPModel.equals(Val))\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-model=\" + FPModel) << Args.MakeArgString(\"-ffp-model=\" + Val);"},{ab,2902,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const Arg *A : Args) {\n    // ...\n    case options::OPT_ftrapping_math:\n      if (!TrappingMathPresent && !FPExceptionBehavior.empty() && !FPExceptionBehavior.equals(\"strict\"))\n        // ...\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-exception-behavior=\" + FPExceptionBehavior) << \"-ftrapping-math\";"},{ab,2913,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const Arg *A : Args) {\n    // ...\n    case options::OPT_fno_trapping_math:\n      if (!TrappingMathPresent && !FPExceptionBehavior.empty() && !FPExceptionBehavior.equals(\"ignore\"))\n        // ...\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-exception-behavior=\" + FPExceptionBehavior) << \"-fno-trapping-math\";"},{ab,2978,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const Arg *A : Args) {\n    // ...\n    // Validate and pass through -ffp-exception-behavior option.\n    case options::OPT_ffp_exception_behavior_EQ: {\n      // ...\n      if (!TrappingMathPresent && !FPExceptionBehavior.empty() && !FPExceptionBehavior.equals(Val))\n        // ...\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << Args.MakeArgString(\"-ffp-exception-behavior=\" + FPExceptionBehavior) << Args.MakeArgString(\"-ffp-exception-behavior=\" + Val);"},{ab,3126,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const Arg *A : Args) {\n    // ...\n    if (StrictFPModel) {\n      // If -ffp-model=strict has been specified on command line but\n      // subsequent options conflict then emit warning diagnostic.\n      if (HonorINFs && HonorNaNs && !AssociativeMath && !ReciprocalMath && SignedZeros && TrappingMath && RoundingFPMath && !ApproxFunc && DenormalFPMath == llvm::DenormalMode::getIEEE() && DenormalFP32Math == llvm::DenormalMode::getIEEE() && FPContract.equals(\"off\"))\n      // ...\n      else {\n        // ...\n        if (RHS != \"-ffp-model=strict\")\n          D.Diag(clang::diag::warn_drv_overriding_flag_option) << \"-ffp-model=strict\" << RHS;"},{ab,3220,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  // -ffast-math enables the __FAST_MATH__ preprocessor macro, but check for the\n  // individual features enabled by -ffast-math instead of the option itself as\n  // that\'s consistent with gcc\'s behaviour.\n  if (!HonorINFs && !HonorNaNs && !MathErrno && AssociativeMath && ApproxFunc && ReciprocalMath && !SignedZeros && !TrappingMath && !RoundingFPMath) {\n    // ...\n    if (FPModel.equals(\"fast\")) {\n      if (FPContract.equals(\"fast\"))\n      // ...\n      else if (FPContract.empty())\n      // ...\n      else\n        D.Diag(clang::diag::warn_drv_overriding_flag_option) << \"-ffp-model=fast\" << Args.MakeArgString(\"-ffp-contract=\" + FPContract);"},{qd,2202,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  if (OSTarget) {\n    // ...\n    if (OSVersionArgTarget) {\n      // ...\n      if (OSTarget->getPlatform() != OSVersionArgTarget->getPlatform() || (Driver::GetReleaseVersion(OSTarget->getOSVersion(), TargetMajor, TargetMinor, TargetMicro, TargetExtra) && Driver::GetReleaseVersion(OSVersionArgTarget->getOSVersion(), ArgMajor, ArgMinor, ArgMicro, ArgExtra) && (VersionTuple(TargetMajor, TargetMinor, TargetMicro) != VersionTuple(ArgMajor, ArgMinor, ArgMicro) || TargetExtra != ArgExtra))) {\n        // Select the OS version from the -m<os>-version-min argument when\n        // the -target does not include an OS version.\n        if (OSTarget->getPlatform() == OSVersionArgTarget->getPlatform() && !OSTarget->hasOSVersion()) {\n        // ...\n        } else {\n          // ...\n          getDriver().Diag(clang::diag::warn_drv_overriding_flag_option) << OSVersionArg << TargetArg;"}},
[l]={
["clang/test/CodeGen/ffp-model.c"]={"clang: warning: overriding \'-ffp-model=strict\' option with \'-ffast-math\' [-Woverriding-t-option]"}
["clang/test/CodeGen/ffp-model.c"]={"clang: warning: overriding \'-ffp-model=strict\' option with \'-ffast-math\' [-Woverriding-t-option]"}
}
}
},
},
["warn_drv_partially_supported_cuda_version"]={
["warn_drv_partially_supported_cuda_version"]={
[j]={"unknown-cuda-version"},
[k]={"unknown-cuda-version"},
[i]="unknown-cuda-version",
[j]="unknown-cuda-version",
[c]={{nil,Q,"CUDA version %0 is only partially supported"}},
[c]={{nil,w,"warn_drv_partially_supported_cuda_version"}},
[d]=g,
[d]={{nil,w,"CUDA version %0 is only partially supported"}},
[e]="CUDA version (.*?) is only partially supported",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunknown\\-cuda\\-version[^\\]]*\\]",
[g]="CUDA version (.*?) is only partially supported",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-cuda\\-version[^\\]]*\\]",
[a]={qc,1610286626,rc,sc},
[b]={{nil,w,r}},
[f]={oc,1610286626,vc,sc},
[h]={{"clang/lib/Driver/ToolChains/Cuda.cpp",124,"void CudaInstallationDetector::WarnIfUnsupportedVersion() {\n  if (Version > CudaVersion::PARTIALLY_SUPPORTED) {\n  // ...\n  } else if (Version > CudaVersion::FULLY_SUPPORTED)\n    D.Diag(diag::warn_drv_partially_supported_cuda_version) << CudaVersionToString(Version);"}}
[h]={{"clang/lib/Driver/ToolChains/Cuda.cpp",124,"void CudaInstallationDetector::WarnIfUnsupportedVersion() {\n  if (Version > CudaVersion::PARTIALLY_SUPPORTED) {\n  // ...\n  } else if (Version > CudaVersion::FULLY_SUPPORTED)\n    D.Diag(diag::warn_drv_partially_supported_cuda_version) << CudaVersionToString(Version);"}}
},
},
["warn_drv_pch_not_first_include"]={
["warn_drv_pch_not_first_include"]={
[c]="precompiled header \'%0\' was ignored because \'%1\' is not first \'-include\'",
[c]="warn_drv_pch_not_first_include",
[d]=g,
[d]="precompiled header \'%0\' was ignored because \'%1\' is not first \'-include\'",
[e]="precompiled header \'(.*?)\' was ignored because \'(.*?)\' is not first \'\\-include\'",
[e]=i,
[f]=Gb,
[g]="precompiled header \'(.*?)\' was ignored because \'(.*?)\' is not first \'\\-include\'",
[b]=p,
[a]=Ib,
[a]={"2f23b414e9bc",1285865627,"Driver: Ignore the found PCH file if its \'-include\' is not the first one.","Driver: Ignore the found PCH file if its \'-include\' is not the first one.\n\nllvm-svn: 115158"},
[b]=r,
[h]={{T,1300,"void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, const Driver &D, const ArgList &Args, ArgStringList &CmdArgs, const InputInfo &Output, const InputInfoList &Inputs) const {\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_clang_i_Group)) {\n    if (A->getOption().matches(options::OPT_include) && D.getProbePrecompiled()) {\n      // ...\n      if (FoundPCH) {\n        if (IsFirstImplicitInclude) {\n        // ...\n        } else {\n          // ...\n          D.Diag(diag::warn_drv_pch_not_first_include) << P << A->getAsString(Args);"}}
[f]={"2f23b414e9bc",1285865627,"Driver: Ignore the found PCH file if its \'-include\' is not the first one.","Driver: Ignore the found PCH file if its \'-include\' is not the first one.\n\nllvm-svn: 115158"},
[h]={{ab,1300,"void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, const Driver &D, const ArgList &Args, ArgStringList &CmdArgs, const InputInfo &Output, const InputInfoList &Inputs) const {\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_clang_i_Group)) {\n    if (A->getOption().matches(options::OPT_include) && D.getProbePrecompiled()) {\n      // ...\n      if (FoundPCH) {\n        if (IsFirstImplicitInclude) {\n        // ...\n        } else {\n          // ...\n          D.Diag(diag::warn_drv_pch_not_first_include) << P << A->getAsString(Args);"}}
},
},
["warn_drv_potentially_misspelled_joined_argument"]={
["warn_drv_potentially_misspelled_joined_argument"]={
[j]={Hd},
[k]={"unknown-argument"},
[i]=Hd,
[j]="unknown-argument",
[c]={{nil,yc,"joined argument treated as \'%0\'; did you mean \'%1\'?"}},
[c]={{nil,bb,"warn_drv_potentially_misspelled_joined_argument"}},
[d]=g,
[d]={{nil,bb,"joined argument treated as \'%0\'; did you mean \'%1\'?"}},
[e]="joined argument treated as \'(.*?)\'; did you mean \'(.*?)\'\\?",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunknown\\-argument[^\\]]*\\]",
[g]="joined argument treated as \'(.*?)\'; did you mean \'(.*?)\'\\?",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-argument[^\\]]*\\]",
[a]={"5aba68960719",1665085845,"[Clang] Emit a warning for ambiguous joined \'-o\' arguments","[Clang] Emit a warning for ambiguous joined \'-o\' arguments\n\nThe offloading toolchain makes heavy use of options beginning with\n`--o`. This is problematic when combined with the joined `-o` flag. In\nthe following situation, the user will not get the expected output and\nwill not notice as the expected output will still be written.\n```\nclang++ -x cuda foo.cu -offload-arch=sm_80 -o foo\n```\n\nThis patch introduces a warning that checks for joined `-o` arguments\nthat would also be a valid driver argument if an additional `-` were\nadded. I believe this situation is uncommon enough to warrant a warning,\nand can be trivially fixed by the end user by using the more common\nseparate form instead.\n\nReviewed By: tra, MaskRay\n\nDifferential Revision: https://reviews.llvm.org/D135389"},
[b]={{nil,bb,r}},
[h]={{Nb,350,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_o)) {\n    // ...\n    if (getOpts().findExact(\"-\" + ArgString, Nearest, IncludedFlagsBitmask, ExcludedFlagsBitmask))\n      Diags.Report(diag::warn_drv_potentially_misspelled_joined_argument) << A->getAsString(Args) << Nearest;"}}
[f]={"5aba68960719",1665085845,"[Clang] Emit a warning for ambiguous joined \'-o\' arguments","[Clang] Emit a warning for ambiguous joined \'-o\' arguments\n\nThe offloading toolchain makes heavy use of options beginning with\n`--o`. This is problematic when combined with the joined `-o` flag. In\nthe following situation, the user will not get the expected output and\nwill not notice as the expected output will still be written.\n```\nclang++ -x cuda foo.cu -offload-arch=sm_80 -o foo\n```\n\nThis patch introduces a warning that checks for joined `-o` arguments\nthat would also be a valid driver argument if an additional `-` were\nadded. I believe this situation is uncommon enough to warrant a warning,\nand can be trivially fixed by the end user by using the more common\nseparate form instead.\n\nReviewed By: tra, MaskRay\n\nDifferential Revision: https://reviews.llvm.org/D135389"},
[h]={{Vb,350,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_o)) {\n    // ...\n    if (getOpts().findExact(\"-\" + ArgString, Nearest, IncludedFlagsBitmask, ExcludedFlagsBitmask))\n      Diags.Report(diag::warn_drv_potentially_misspelled_joined_argument) << A->getAsString(Args) << Nearest;"}}
},
},
["warn_drv_preprocessed_input_file_unused"]={
["warn_drv_preprocessed_input_file_unused"]={
[j]={qb},
[k]={tb},
[i]=qb,
[j]=tb,
[c]="%0: previously preprocessed input%select{ unused when \'%2\' is present|}1",
[c]="warn_drv_preprocessed_input_file_unused",
[d]=g,
[d]="%0: previously preprocessed input%select{ unused when \'%2\' is present|}1",
[e]="(.*?)\\: previously preprocessed input(?: unused when \'(.*?)\' is present|)",
[e]=i,
[f]=Ec,
[g]="(.*?)\\: previously preprocessed input(?: unused when \'(.*?)\' is present|)",
[b]=p,
[a]=Cc,
[a]={"07806ca7ab36",1253160806,"Improve driver error message when only running the preprocessor and an input is","Improve driver error message when only running the preprocessor and an input is\nalready preprocessed.\n\n--\nddunbar@giles:tmp$ touch t.i\nddunbar@giles:tmp$ gcc -E t.i\nddunbar@giles:tmp$ clang -E t.i\nclang: warning: t.i: previously preprocessed input unused when \'-E\' is present\nddunbar@giles:tmp$ \n--\n\n<rdar://problem/6813375> [driver] driver prints confusing message when running -E on preprocessed file\n\nllvm-svn: 82120"},
[b]=r,
[h]={{Nb,4027,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  for (auto &I : Inputs) {\n    // ...\n    if (InitialPhase > FinalPhase) {\n      // ...\n      // Special case when final phase determined by binary name, rather than\n      // by a command-line argument with a corresponding Arg.\n      if (CCCIsCPP())\n      // ...\n      // Special case \'-E\' warning on a previously preprocessed file to make\n      // more sense.\n      else if (InitialPhase == phases::Compile && (Args.getLastArg(options::OPT__SLASH_EP, options::OPT__SLASH_P) || Args.getLastArg(options::OPT_E) || Args.getLastArg(options::OPT_M, options::OPT_MM)) && getPreprocessedType(InputType) == types::TY_INVALID)\n        Diag(clang::diag::warn_drv_preprocessed_input_file_unused) << InputArg->getAsString(Args) << !!FinalPhaseArg << (FinalPhaseArg ? FinalPhaseArg->getOption().getName() : \"\");"}}
[f]={"07806ca7ab36",1253160806,"Improve driver error message when only running the preprocessor and an input is","Improve driver error message when only running the preprocessor and an input is\nalready preprocessed.\n\n--\nddunbar@giles:tmp$ touch t.i\nddunbar@giles:tmp$ gcc -E t.i\nddunbar@giles:tmp$ clang -E t.i\nclang: warning: t.i: previously preprocessed input unused when \'-E\' is present\nddunbar@giles:tmp$ \n--\n\n<rdar://problem/6813375> [driver] driver prints confusing message when running -E on preprocessed file\n\nllvm-svn: 82120"},
[h]={{Vb,4027,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  for (auto &I : Inputs) {\n    // ...\n    if (InitialPhase > FinalPhase) {\n      // ...\n      // Special case when final phase determined by binary name, rather than\n      // by a command-line argument with a corresponding Arg.\n      if (CCCIsCPP())\n      // ...\n      // Special case \'-E\' warning on a previously preprocessed file to make\n      // more sense.\n      else if (InitialPhase == phases::Compile && (Args.getLastArg(options::OPT__SLASH_EP, options::OPT__SLASH_P) || Args.getLastArg(options::OPT_E) || Args.getLastArg(options::OPT_M, options::OPT_MM)) && getPreprocessedType(InputType) == types::TY_INVALID)\n        Diag(clang::diag::warn_drv_preprocessed_input_file_unused) << InputArg->getAsString(Args) << !!FinalPhaseArg << (FinalPhaseArg ? FinalPhaseArg->getOption().getName() : \"\");"}}
},
},
["warn_drv_ps_force_pic"]={
["warn_drv_ps_force_pic"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]={{nil,kb,"option \'%0\' was ignored by the %1 toolchain, using \'-fPIC\'"}},
[c]={{nil,C,"warn_drv_ps_force_pic"}},
[d]=g,
[d]={{nil,C,"option \'%0\' was ignored by the %1 toolchain, using \'-fPIC\'"}},
[e]="option \'(.*?)\' was ignored by the (.*?) toolchain, using \'\\-fPIC\'",
[e]=i,
[f]=Vb,
[g]="option \'(.*?)\' was ignored by the (.*?) toolchain, using \'\\-fPIC\'",
[b]=p,
[a]=Xb,
[a]={"aef03c9b3bed",1651866463,"[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clan...","[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang\n\nGCC 12 has been released and contains unconditional support for\n-ftrivial-auto-var-init=zero:\nhttps://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-ftrivial-auto-var-init\n\nMaintain compatibility with GCC, and remove the -enable flag for \"zero\"\nmode. The flag is left to generate an \"unused\" warning, though, to not\nbreak all the existing users. The flag will be fully removed in Clang 17.\n\nLink: https://github.com/llvm/llvm-project/issues/44842\n\nReviewed By: nickdesaulniers, MaskRay, srhines, xbolva00\n\nDifferential Revision: https://reviews.llvm.org/D125142"},
[b]={{nil,C,r}},
[f]={"aef03c9b3bed",1651866463,"[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clan...","[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang\n\nGCC 12 has been released and contains unconditional support for\n-ftrivial-auto-var-init=zero:\nhttps://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-ftrivial-auto-var-init\n\nMaintain compatibility with GCC, and remove the -enable flag for \"zero\"\nmode. The flag is left to generate an \"unused\" warning, though, to not\nbreak all the existing users. The flag will be fully removed in Clang 17.\n\nLink: https://github.com/llvm/llvm-project/issues/44842\n\nReviewed By: nickdesaulniers, MaskRay, srhines, xbolva00\n\nDifferential Revision: https://reviews.llvm.org/D125142"},
[h]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",1517,"/// Parses the various -fpic/-fPIC/-fpie/-fPIE arguments.  Then,\n/// smooshes them together with platform defaults, to decide whether\n/// this compile should be using PIC mode or not. Returns a tuple of\n/// (RelocationModel, PICLevel, IsPIE).\nstd::tuple<llvm::Reloc::Model, unsigned, bool> tools::ParsePICArgs(const ToolChain &ToolChain, const ArgList &Args) {\n  // ...\n  // Check whether the tool chain trumps the PIC-ness decision. If the PIC-ness\n  // is forced, then neither PIC nor PIE flags will have no effect.\n  if (!ToolChain.isPICDefaultForced()) {\n    if (LastPICArg) {\n      // ...\n      if (O.matches(options::OPT_fPIC) || O.matches(options::OPT_fpic) || O.matches(options::OPT_fPIE) || O.matches(options::OPT_fpie)) {\n      // ...\n      } else {\n        // ...\n        if (EffectiveTriple.isPS()) {\n          // ...\n          if (Model != \"kernel\") {\n            // ...\n            ToolChain.getDriver().Diag(diag::warn_drv_ps_force_pic) << LastPICArg->getSpelling() << (EffectiveTriple.isPS4() ? \"PS4\" : \"PS5\");"}}
[h]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",1517,"/// Parses the various -fpic/-fPIC/-fpie/-fPIE arguments.  Then,\n/// smooshes them together with platform defaults, to decide whether\n/// this compile should be using PIC mode or not. Returns a tuple of\n/// (RelocationModel, PICLevel, IsPIE).\nstd::tuple<llvm::Reloc::Model, unsigned, bool> tools::ParsePICArgs(const ToolChain &ToolChain, const ArgList &Args) {\n  // ...\n  // Check whether the tool chain trumps the PIC-ness decision. If the PIC-ness\n  // is forced, then neither PIC nor PIE flags will have no effect.\n  if (!ToolChain.isPICDefaultForced()) {\n    if (LastPICArg) {\n      // ...\n      if (O.matches(options::OPT_fPIC) || O.matches(options::OPT_fpic) || O.matches(options::OPT_fPIE) || O.matches(options::OPT_fpie)) {\n      // ...\n      } else {\n        // ...\n        if (EffectiveTriple.isPS()) {\n          // ...\n          if (Model != \"kernel\") {\n            // ...\n            ToolChain.getDriver().Diag(diag::warn_drv_ps_force_pic) << LastPICArg->getSpelling() << (EffectiveTriple.isPS4() ? \"PS4\" : \"PS5\");"}}
},
},
["warn_drv_sarif_format_unstable"]={
["warn_drv_sarif_format_unstable"]={
[j]={"sarif-format-unstable"},
[k]={"sarif-format-unstable"},
[i]="sarif-format-unstable",
[j]="sarif-format-unstable",
[c]={{nil,kb,"diagnostic formatting in SARIF mode is currently unstable"}},
[c]={{nil,C,"warn_drv_sarif_format_unstable"}},
[d]=g,
[d]={{nil,C,"diagnostic formatting in SARIF mode is currently unstable"}},
[e]="diagnostic formatting in SARIF mode is currently unstable",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wsarif\\-format\\-unstable[^\\]]*\\]",
[g]="diagnostic formatting in SARIF mode is currently unstable",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wsarif\\-format\\-unstable[^\\]]*\\]",
[a]={"aef03c9b3bed",1651866463,"[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clan...","[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang\n\nGCC 12 has been released and contains unconditional support for\n-ftrivial-auto-var-init=zero:\nhttps://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-ftrivial-auto-var-init\n\nMaintain compatibility with GCC, and remove the -enable flag for \"zero\"\nmode. The flag is left to generate an \"unused\" warning, though, to not\nbreak all the existing users. The flag will be fully removed in Clang 17.\n\nLink: https://github.com/llvm/llvm-project/issues/44842\n\nReviewed By: nickdesaulniers, MaskRay, srhines, xbolva00\n\nDifferential Revision: https://reviews.llvm.org/D125142"},
[b]={{nil,C,r}},
[h]={{T,4111,"static void RenderDiagnosticsOptions(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs) {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_fdiagnostics_format_EQ)) {\n    // ...\n    if (StringRef(A->getValue()) == \"sarif\" || StringRef(A->getValue()) == \"SARIF\")\n      D.Diag(diag::warn_drv_sarif_format_unstable);"}},
[f]={"aef03c9b3bed",1651866463,"[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clan...","[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang\n\nGCC 12 has been released and contains unconditional support for\n-ftrivial-auto-var-init=zero:\nhttps://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-ftrivial-auto-var-init\n\nMaintain compatibility with GCC, and remove the -enable flag for \"zero\"\nmode. The flag is left to generate an \"unused\" warning, though, to not\nbreak all the existing users. The flag will be fully removed in Clang 17.\n\nLink: https://github.com/llvm/llvm-project/issues/44842\n\nReviewed By: nickdesaulniers, MaskRay, srhines, xbolva00\n\nDifferential Revision: https://reviews.llvm.org/D125142"},
[k]={
[h]={{ab,4111,"static void RenderDiagnosticsOptions(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs) {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_fdiagnostics_format_EQ)) {\n    // ...\n    if (StringRef(A->getValue()) == \"sarif\" || StringRef(A->getValue()) == \"SARIF\")\n      D.Diag(diag::warn_drv_sarif_format_unstable);"}},
[l]={
["clang/test/Frontend/sarif-diagnostics.cpp"]={"clang: warning: diagnostic formatting in SARIF mode is currently unstable [-Wsarif-format-unstable]"}
["clang/test/Frontend/sarif-diagnostics.cpp"]={"clang: warning: diagnostic formatting in SARIF mode is currently unstable [-Wsarif-format-unstable]"}
}
}
},
},
["warn_drv_treating_input_as_cxx"]={
["warn_drv_treating_input_as_cxx"]={
[j]={ab},
[k]={jb},
[i]=ab,
[j]=jb,
[c]="treating \'%0\' input as \'%1\' when in C++ mode, this behavior is deprecated",
[c]="warn_drv_treating_input_as_cxx",
[d]=g,
[d]="treating \'%0\' input as \'%1\' when in C++ mode, this behavior is deprecated",
[e]="treating \'(.*?)\' input as \'(.*?)\' when in C\\+\\+ mode, this behavior is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]",
[g]="treating \'(.*?)\' input as \'(.*?)\' when in C\\+\\+ mode, this behavior is deprecated",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]",
[a]={"0ac9445098f7",1266438778,"PR5803: clang++: Treat untyped \'C\' inputs as C++.","PR5803: clang++: Treat untyped \'C\' inputs as C++.\n - Patch by Andrzej K. Haczewski, with a tweak by me to emit a \'deprecated\'\n  diagnostic when we do this. We\'ll see what zee users say.\n\nllvm-svn: 96511"},
[b]=ob,
[h]={{Nb,2702,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  // ...\n  for (Arg *A : Args) {\n    if (A->getOption().getKind() == Option::InputClass) {\n      // ...\n      // Infer the input type if necessary.\n      if (InputType == types::TY_Nothing) {\n        // ...\n        // stdin must be handled specially.\n        if (memcmp(Value, \"-\", 2) == 0) {\n        // ...\n        } else {\n          // ...\n          // If the driver is invoked as C++ compiler (like clang++ or c++) it\n          // should autodetect some input files as C++ for g++ compatibility.\n          if (CCCIsCXX()) {\n            // ...\n            // Do not complain about foo.h, when we are known to be processing\n            // it as a C++20 header unit.\n            if (Ty != OldTy && !(OldTy == types::TY_CHeader && hasHeaderMode()))\n              Diag(clang::diag::warn_drv_treating_input_as_cxx) << getTypeName(OldTy) << getTypeName(Ty);"}},
[f]={"0ac9445098f7",1266438778,"PR5803: clang++: Treat untyped \'C\' inputs as C++.","PR5803: clang++: Treat untyped \'C\' inputs as C++.\n - Patch by Andrzej K. Haczewski, with a tweak by me to emit a \'deprecated\'\n  diagnostic when we do this. We\'ll see what zee users say.\n\nllvm-svn: 96511"},
[k]={
[h]={{Vb,2702,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  // ...\n  for (Arg *A : Args) {\n    if (A->getOption().getKind() == Option::InputClass) {\n      // ...\n      // Infer the input type if necessary.\n      if (InputType == types::TY_Nothing) {\n        // ...\n        // stdin must be handled specially.\n        if (memcmp(Value, \"-\", 2) == 0) {\n        // ...\n        } else {\n          // ...\n          // If the driver is invoked as C++ compiler (like clang++ or c++) it\n          // should autodetect some input files as C++ for g++ compatibility.\n          if (CCCIsCXX()) {\n            // ...\n            // Do not complain about foo.h, when we are known to be processing\n            // it as a C++20 header unit.\n            if (Ty != OldTy && !(OldTy == types::TY_CHeader && hasHeaderMode()))\n              Diag(clang::diag::warn_drv_treating_input_as_cxx) << getTypeName(OldTy) << getTypeName(Ty);"}},
[l]={
["clang/test/Driver/aix-ld.c"]={"clang: warning: treating \'c\' input as \'c++\' when in C++ mode, this behavior is deprecated [-Wdeprecated]"}
["clang/test/Driver/aix-ld.c"]={"clang: warning: treating \'c\' input as \'c++\' when in C++ mode, this behavior is deprecated [-Wdeprecated]"}
}
}
},
},
["warn_drv_unable_to_find_directory_expected"]={
["warn_drv_unable_to_find_directory_expected"]={
[j]={"invalid-or-nonexistent-directory"},
[k]={"invalid-or-nonexistent-directory"},
[i]="invalid-or-nonexistent-directory",
[j]="invalid-or-nonexistent-directory",
[c]="unable to find %0 directory, expected to be in \'%1\' found via %2",
[c]="warn_drv_unable_to_find_directory_expected",
[d]=g,
[d]="unable to find %0 directory, expected to be in \'%1\' found via %2",
[e]="unable to find (.*?) directory, expected to be in \'(.*?)\' found via (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winvalid\\-or\\-nonexistent\\-directory[^\\]]*\\]",
[g]="unable to find (.*?) directory, expected to be in \'(.*?)\' found via (.*?)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-or\\-nonexistent\\-directory[^\\]]*\\]",
[a]={"c52c30a78e7c",1443132412,"This patch adds missing pieces to clang, including the PS4 toolchain","This patch adds missing pieces to clang, including the PS4 toolchain\ndefinition, added warnings, PS4 defaults, and Driver changes needed for\nour compiler.\n\nA patch by Filipe Cabecinhas, Pierre Gousseau and Katya Romanova!\n\nDifferential Revision: http://reviews.llvm.org/D11279\n\nllvm-svn: 248546"},
[b]=r,
[f]={"c52c30a78e7c",1443132412,"This patch adds missing pieces to clang, including the PS4 toolchain","This patch adds missing pieces to clang, including the PS4 toolchain\ndefinition, added warnings, PS4 defaults, and Driver changes needed for\nour compiler.\n\nA patch by Filipe Cabecinhas, Pierre Gousseau and Katya Romanova!\n\nDifferential Revision: http://reviews.llvm.org/D11279\n\nllvm-svn: 248546"},
[h]={{"clang/lib/Driver/ToolChains/PS4CPU.cpp",285,"toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, StringRef Platform, const char *EnvVar) : Generic_ELF(D, Triple, Args) {\n  // ...\n  if (!Args.hasArg(options::OPT_nostdinc) && !Args.hasArg(options::OPT_nostdlibinc) && !Args.hasArg(options::OPT_isysroot) && !Args.hasArg(options::OPT__sysroot_EQ) && !llvm::sys::fs::exists(SDKIncludeDir)) {\n    D.Diag(clang::diag::warn_drv_unable_to_find_directory_expected) << Twine(Platform, \" system headers\").str() << SDKIncludeDir << Whence;"},{"clang/lib/Driver/ToolChains/PS4CPU.cpp",297,"toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, StringRef Platform, const char *EnvVar) : Generic_ELF(D, Triple, Args) {\n  // ...\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs) && !Args.hasArg(options::OPT__sysroot_EQ) && !Args.hasArg(options::OPT_E) && !Args.hasArg(options::OPT_c) && !Args.hasArg(options::OPT_S) && !Args.hasArg(options::OPT_emit_ast) && !llvm::sys::fs::exists(SDKLibDir)) {\n    D.Diag(clang::diag::warn_drv_unable_to_find_directory_expected) << Twine(Platform, \" system libraries\").str() << SDKLibDir << Whence;"}}
[h]={{"clang/lib/Driver/ToolChains/PS4CPU.cpp",285,"toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, StringRef Platform, const char *EnvVar) : Generic_ELF(D, Triple, Args) {\n  // ...\n  if (!Args.hasArg(options::OPT_nostdinc) && !Args.hasArg(options::OPT_nostdlibinc) && !Args.hasArg(options::OPT_isysroot) && !Args.hasArg(options::OPT__sysroot_EQ) && !llvm::sys::fs::exists(SDKIncludeDir)) {\n    D.Diag(clang::diag::warn_drv_unable_to_find_directory_expected) << Twine(Platform, \" system headers\").str() << SDKIncludeDir << Whence;"},{"clang/lib/Driver/ToolChains/PS4CPU.cpp",297,"toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, StringRef Platform, const char *EnvVar) : Generic_ELF(D, Triple, Args) {\n  // ...\n  if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nodefaultlibs) && !Args.hasArg(options::OPT__sysroot_EQ) && !Args.hasArg(options::OPT_E) && !Args.hasArg(options::OPT_c) && !Args.hasArg(options::OPT_S) && !Args.hasArg(options::OPT_emit_ast) && !llvm::sys::fs::exists(SDKLibDir)) {\n    D.Diag(clang::diag::warn_drv_unable_to_find_directory_expected) << Twine(Platform, \" system libraries\").str() << SDKLibDir << Whence;"}}
},
},
["warn_drv_unknown_argument_clang_cl"]={
["warn_drv_unknown_argument_clang_cl"]={
[j]={Hd},
[k]={"unknown-argument"},
[i]=Hd,
[j]="unknown-argument",
[c]="unknown argument ignored in clang-cl: \'%0\'",
[c]="warn_drv_unknown_argument_clang_cl",
[d]=g,
[d]="unknown argument ignored in clang-cl: \'%0\'",
[e]="unknown argument ignored in clang\\-cl\\: \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunknown\\-argument[^\\]]*\\]",
[g]="unknown argument ignored in clang\\-cl\\: \'(.*?)\'",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-argument[^\\]]*\\]",
[a]={"d851833c9a76",1453756492,"[MSVC Compat] Only warn for unknown clang-cl arguments","[MSVC Compat] Only warn for unknown clang-cl arguments\n\nSummary:\nMSVC\'s driver accepts all unknown arguments but warns about them.  clang\nby default rejects all unknown arguments.  This causes issues\nspecifically with build systems such as autoconf which liberally pass\nthings such as $LDFLAGS to the compiler and expect everything to work.\nThis patch teaches clang-cl to ignore unknown driver arguments.\n\nReviewers: rnk\n\nSubscribers: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D16511\n\nllvm-svn: 258720"},
[b]=r,
[h]={{Nb,327,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_UNKNOWN)) {\n    // ...\n    if (getOpts().findNearest(ArgString, Nearest, IncludedFlagsBitmask, ExcludedFlagsBitmask) > 1) {\n      if (!IsCLMode() && getOpts().findExact(ArgString, Nearest, options::CC1Option)) {\n      // ...\n      } else {\n        DiagID = IsCLMode() ? diag::warn_drv_unknown_argument_clang_cl : diag::err_drv_unknown_argument;"}}
[f]={"d851833c9a76",1453756492,"[MSVC Compat] Only warn for unknown clang-cl arguments","[MSVC Compat] Only warn for unknown clang-cl arguments\n\nSummary:\nMSVC\'s driver accepts all unknown arguments but warns about them.  clang\nby default rejects all unknown arguments.  This causes issues\nspecifically with build systems such as autoconf which liberally pass\nthings such as $LDFLAGS to the compiler and expect everything to work.\nThis patch teaches clang-cl to ignore unknown driver arguments.\n\nReviewers: rnk\n\nSubscribers: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D16511\n\nllvm-svn: 258720"},
[h]={{Vb,327,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_UNKNOWN)) {\n    // ...\n    if (getOpts().findNearest(ArgString, Nearest, IncludedFlagsBitmask, ExcludedFlagsBitmask) > 1) {\n      if (!IsCLMode() && getOpts().findExact(ArgString, Nearest, options::CC1Option)) {\n      // ...\n      } else {\n        DiagID = IsCLMode() ? diag::warn_drv_unknown_argument_clang_cl : diag::err_drv_unknown_argument;"}}
},
},
["warn_drv_unknown_argument_clang_cl_with_suggestion"]={
["warn_drv_unknown_argument_clang_cl_with_suggestion"]={
[j]={Hd},
[k]={"unknown-argument"},
[i]=Hd,
[j]="unknown-argument",
[c]={{nil,I,"unknown argument ignored in clang-cl \'%0\'; did you mean \'%1\'?"},{ob,eb,"unknown argument ignored in clang-cl \'%0\' (did you mean \'%1\'?)"}},
[c]={{nil,D,"warn_drv_unknown_argument_clang_cl_with_suggestion"}},
[d]=g,
[d]={{nil,x,"unknown argument ignored in clang-cl \'%0\'; did you mean \'%1\'?"},{B,D,"unknown argument ignored in clang-cl \'%0\' (did you mean \'%1\'?)"}},
[e]="unknown argument ignored in clang\\-cl \'(.*?)\'; did you mean \'(.*?)\'\\?",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunknown\\-argument[^\\]]*\\]",
[g]="unknown argument ignored in clang\\-cl \'(.*?)\'; did you mean \'(.*?)\'\\?",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-argument[^\\]]*\\]",
[a]={"24910765e266",1515198340,"[Driver] Suggest correctly spelled driver options","[Driver] Suggest correctly spelled driver options\n\nSummary:\nDepends on https://reviews.llvm.org/D41732.\n\nUtilities such as `opt`, when invoked with arguments that are very\nnearly spelled correctly, suggest the correctly spelled options:\n\n```\nbin/opt -hel\nopt: Unknown command line argument \'-hel\'.  Try: \'bin/opt -help\'\nopt: Did you mean \'-help\'?\n```\n\nClang, on the other hand, prior to this commit, does not:\n\n```\nbin/clang -hel\nclang-6.0: error: unknown argument: \'-hel\'\n```\n\nThis commit makes use of the new libLLVMOption API from\nhttps://reviews.llvm.org/D41732 in order to provide correct suggestions:\n\n```\nbin/clang -hel\nclang-6.0: error: unknown argument: \'-hel\', did you mean \'-help\'?\n```\n\nTest Plan: `check-clang`\n\nReviewers: yamaguchi, v.g.vassilev, teemperor, ruiu, bruno\n\nReviewed By: bruno\n\nSubscribers: bruno, jroelofs, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D41733\n\nllvm-svn: 321917"},
[b]={{nil,D,r}},
[h]={{Nb,333,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_UNKNOWN)) {\n    // ...\n    if (getOpts().findNearest(ArgString, Nearest, IncludedFlagsBitmask, ExcludedFlagsBitmask) > 1) {\n    // ...\n    } else {\n      DiagID = IsCLMode() ? diag::warn_drv_unknown_argument_clang_cl_with_suggestion : diag::err_drv_unknown_argument_with_suggestion;"}}
[f]={"24910765e266",1515198340,"[Driver] Suggest correctly spelled driver options","[Driver] Suggest correctly spelled driver options\n\nSummary:\nDepends on https://reviews.llvm.org/D41732.\n\nUtilities such as `opt`, when invoked with arguments that are very\nnearly spelled correctly, suggest the correctly spelled options:\n\n```\nbin/opt -hel\nopt: Unknown command line argument \'-hel\'.  Try: \'bin/opt -help\'\nopt: Did you mean \'-help\'?\n```\n\nClang, on the other hand, prior to this commit, does not:\n\n```\nbin/clang -hel\nclang-6.0: error: unknown argument: \'-hel\'\n```\n\nThis commit makes use of the new libLLVMOption API from\nhttps://reviews.llvm.org/D41732 in order to provide correct suggestions:\n\n```\nbin/clang -hel\nclang-6.0: error: unknown argument: \'-hel\', did you mean \'-help\'?\n```\n\nTest Plan: `check-clang`\n\nReviewers: yamaguchi, v.g.vassilev, teemperor, ruiu, bruno\n\nReviewed By: bruno\n\nSubscribers: bruno, jroelofs, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D41733\n\nllvm-svn: 321917"},
[h]={{Vb,333,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_UNKNOWN)) {\n    // ...\n    if (getOpts().findNearest(ArgString, Nearest, IncludedFlagsBitmask, ExcludedFlagsBitmask) > 1) {\n    // ...\n    } else {\n      DiagID = IsCLMode() ? diag::warn_drv_unknown_argument_clang_cl_with_suggestion : diag::err_drv_unknown_argument_with_suggestion;"}}
},
},
["warn_drv_unsupported_debug_info_opt_for_target"]={
["warn_drv_unsupported_debug_info_opt_for_target"]={
[j]={"unsupported-target-opt"},
[k]={"unsupported-target-opt"},
[i]="unsupported-target-opt",
[j]="unsupported-target-opt",
[c]={{nil,eb,"debug information option \'%0\' is not supported for target \'%1\'"}},
[c]={{nil,D,"warn_drv_unsupported_debug_info_opt_for_target"}},
[d]=g,
[d]={{nil,D,"debug information option \'%0\' is not supported for target \'%1\'"}},
[e]="debug information option \'(.*?)\' is not supported for target \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-target\\-opt[^\\]]*\\]",
[g]="debug information option \'(.*?)\' is not supported for target \'(.*?)\'",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-target\\-opt[^\\]]*\\]",
[a]={"b83b4e40fe43",1532720714,"[DEBUGINFO] Disable unsupported debug info options for NVPTX target.","[DEBUGINFO] Disable unsupported debug info options for NVPTX target.\n\nSummary:\nSome targets support only default set of the debug options and do not\nsupport additional debug options, like NVPTX target. Patch introduced\nvirtual function supportsDebugInfoOptions() that can be overloaded\nby the toolchain, checks if the target supports some debug\noptions and emits warning when an unsupported debug option is\nfound.\n\nReviewers: echristo\n\nSubscribers: aprantl, JDevlieghere, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D49148\n\nllvm-svn: 338155"},
[b]={{nil,D,r}},
[h]={{T,1012,"static bool checkDebugInfoOption(const Arg *A, const ArgList &Args, const Driver &D, const ToolChain &TC) {\n  // ...\n  D.Diag(diag::warn_drv_unsupported_debug_info_opt_for_target) << A->getAsString(Args) << TC.getTripleString();"}}
[f]={"b83b4e40fe43",1532720714,"[DEBUGINFO] Disable unsupported debug info options for NVPTX target.","[DEBUGINFO] Disable unsupported debug info options for NVPTX target.\n\nSummary:\nSome targets support only default set of the debug options and do not\nsupport additional debug options, like NVPTX target. Patch introduced\nvirtual function supportsDebugInfoOptions() that can be overloaded\nby the toolchain, checks if the target supports some debug\noptions and emits warning when an unsupported debug option is\nfound.\n\nReviewers: echristo\n\nSubscribers: aprantl, JDevlieghere, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D49148\n\nllvm-svn: 338155"},
[h]={{ab,1012,"static bool checkDebugInfoOption(const Arg *A, const ArgList &Args, const Driver &D, const ToolChain &TC) {\n  // ...\n  D.Diag(diag::warn_drv_unsupported_debug_info_opt_for_target) << A->getAsString(Args) << TC.getTripleString();"}}
},
},
["warn_drv_unsupported_diag_option_for_flang"]={
["warn_drv_unsupported_diag_option_for_flang"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]="The warning option \'-%0\' is not supported",
[c]="warn_drv_unsupported_diag_option_for_flang",
[d]=g,
[d]="The warning option \'-%0\' is not supported",
[e]="The warning option \'\\-(.*?)\' is not supported",
[e]=i,
[f]=Vb,
[g]="The warning option \'\\-(.*?)\' is not supported",
[b]=p,
[a]=Xb,
[a]={"ce3a1c59e180",1677017374,"[flang] Handle unsupported warning flags","[flang] Handle unsupported warning flags\n\nThis PR makes flang emit a warning when the user passes an unsupported gfortran warning flag in as a CLI arg.  This PR also checks each `-W` argument instead of just looking at the last one passed in.\n\nReviewed By: awarzynski\n\nDifferential Revision: https://reviews.llvm.org/D143301"},
[b]=r,
[f]={"ce3a1c59e180",1677017374,"[flang] Handle unsupported warning flags","[flang] Handle unsupported warning flags\n\nThis PR makes flang emit a warning when the user passes an unsupported gfortran warning flag in as a CLI arg.  This PR also checks each `-W` argument instead of just looking at the last one passed in.\n\nReviewed By: awarzynski\n\nDifferential Revision: https://reviews.llvm.org/D143301"},
[h]={{"clang/lib/Driver/ToolChains/Flang.cpp",499,"void Flang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  // Remove any unsupported gfortran diagnostic options\n  for (const Arg *A : Args.filtered(options::OPT_flang_ignored_w_Group)) {\n    // ...\n    D.Diag(diag::warn_drv_unsupported_diag_option_for_flang) << A->getOption().getName();"}}
[h]={{"clang/lib/Driver/ToolChains/Flang.cpp",499,"void Flang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  // Remove any unsupported gfortran diagnostic options\n  for (const Arg *A : Args.filtered(options::OPT_flang_ignored_w_Group)) {\n    // ...\n    D.Diag(diag::warn_drv_unsupported_diag_option_for_flang) << A->getOption().getName();"}}
},
},
["warn_drv_unsupported_float_abi_by_lib"]={
["warn_drv_unsupported_float_abi_by_lib"]={
[j]={"unsupported-abi"},
[k]={"unsupported-abi"},
[i]="unsupported-abi",
[j]="unsupported-abi",
[c]={{nil,Q,"float ABI \'%0\' is not supported by current library"}},
[c]={{nil,w,"warn_drv_unsupported_float_abi_by_lib"}},
[d]=g,
[d]={{nil,w,"float ABI \'%0\' is not supported by current library"}},
[e]="float ABI \'(.*?)\' is not supported by current library",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-abi[^\\]]*\\]",
[g]="float ABI \'(.*?)\' is not supported by current library",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-abi[^\\]]*\\]",
[a]={qc,1610286626,rc,sc},
[b]={{nil,w,r}},
[f]={oc,1610286626,vc,sc},
[h]={{"clang/lib/Driver/ToolChains/PPCLinux.cpp",57,"PPCLinuxToolChain::PPCLinuxToolChain(const Driver &D, const llvm::Triple &Triple, const llvm::opt::ArgList &Args) : Linux(D, Triple, Args) {\n  if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ)) {\n    // ...\n    if ((ABIName == \"ieeelongdouble\" && !SupportIEEEFloat128(D, Triple, Args)) || (ABIName == \"ibmlongdouble\" && !supportIBMLongDouble(D, Args)))\n      D.Diag(diag::warn_drv_unsupported_float_abi_by_lib) << ABIName;"}},
[h]={{"clang/lib/Driver/ToolChains/PPCLinux.cpp",57,"PPCLinuxToolChain::PPCLinuxToolChain(const Driver &D, const llvm::Triple &Triple, const llvm::opt::ArgList &Args) : Linux(D, Triple, Args) {\n  if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ)) {\n    // ...\n    if ((ABIName == \"ieeelongdouble\" && !SupportIEEEFloat128(D, Triple, Args)) || (ABIName == \"ibmlongdouble\" && !supportIBMLongDouble(D, Args)))\n      D.Diag(diag::warn_drv_unsupported_float_abi_by_lib) << ABIName;"}},
[k]={
[l]={
["clang/test/CodeGen/PowerPC/ppc64-long-double.cpp"]={"clang: warning: float ABI \'ieeelongdouble\' is not supported by current library [-Wunsupported-abi]"}
["clang/test/CodeGen/PowerPC/ppc64-long-double.cpp"]={"clang: warning: float ABI \'ieeelongdouble\' is not supported by current library [-Wunsupported-abi]"}
}
}
},
},
["warn_drv_unsupported_gpopt"]={
["warn_drv_unsupported_gpopt"]={
[j]={"unsupported-gpopt"},
[k]={"unsupported-gpopt"},
[i]="unsupported-gpopt",
[j]="unsupported-gpopt",
[c]={{nil,lb,"ignoring \'-mgpopt\' option as it cannot be used with %select{|the implicit usage of }0-mabicalls"}},
[c]={{nil,F,"warn_drv_unsupported_gpopt"}},
[d]=g,
[d]={{nil,F,"ignoring \'-mgpopt\' option as it cannot be used with %select{|the implicit usage of }0-mabicalls"}},
[e]="ignoring \'\\-mgpopt\' option as it cannot be used with (?:|the implicit usage of )\\-mabicalls",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-gpopt[^\\]]*\\]",
[g]="ignoring \'\\-mgpopt\' option as it cannot be used with (?:|the implicit usage of )\\-mabicalls",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-gpopt[^\\]]*\\]",
[a]={"e435e41e01b6",1500460683,"[mips] Teach the driver to accept -m(no-)gpopt.","[mips] Teach the driver to accept -m(no-)gpopt.\n\nThis patch teaches the driver to pass -mgpopt by default to the backend when it\nis supported, i.e. we are using -mno-abicalls.\n\nReviewers: atanasyan, slthakur\n\nDifferential Revision: https://reviews.llvm.org/D35548\n\nllvm-svn: 308431"},
[b]={{nil,F,r}},
[h]={{T,1992,"void Clang::AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const {\n  // ...\n  // We quietly ignore -mno-gpopt as the backend defaults to -mno-gpopt.\n  if (NoABICalls && (!GPOpt || WantGPOpt)) {\n  // ...\n  } else if ((!ABICalls || (!NoABICalls && ABICalls)) && WantGPOpt)\n    D.Diag(diag::warn_drv_unsupported_gpopt) << (ABICalls ? 0 : 1);"}}
[f]={"e435e41e01b6",1500460683,"[mips] Teach the driver to accept -m(no-)gpopt.","[mips] Teach the driver to accept -m(no-)gpopt.\n\nThis patch teaches the driver to pass -mgpopt by default to the backend when it\nis supported, i.e. we are using -mno-abicalls.\n\nReviewers: atanasyan, slthakur\n\nDifferential Revision: https://reviews.llvm.org/D35548\n\nllvm-svn: 308431"},
[h]={{ab,1992,"void Clang::AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const {\n  // ...\n  // We quietly ignore -mno-gpopt as the backend defaults to -mno-gpopt.\n  if (NoABICalls && (!GPOpt || WantGPOpt)) {\n  // ...\n  } else if ((!ABICalls || (!NoABICalls && ABICalls)) && WantGPOpt)\n    D.Diag(diag::warn_drv_unsupported_gpopt) << (ABICalls ? 0 : 1);"}}
},
},
["warn_drv_unsupported_longcalls"]={
["warn_drv_unsupported_longcalls"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]={{nil,lb,"ignoring \'-mlong-calls\' option as it is not currently supported with %select{|the implicit usage of }0-mabicalls"}},
[c]={{nil,F,"warn_drv_unsupported_longcalls"}},
[d]=g,
[d]={{nil,F,"ignoring \'-mlong-calls\' option as it is not currently supported with %select{|the implicit usage of }0-mabicalls"}},
[e]="ignoring \'\\-mlong\\-calls\' option as it is not currently supported with (?:|the implicit usage of )\\-mabicalls",
[e]=i,
[f]=Vb,
[g]="ignoring \'\\-mlong\\-calls\' option as it is not currently supported with (?:|the implicit usage of )\\-mabicalls",
[b]=p,
[a]=Xb,
[a]={"c038841e8be7",1502379745,"[mips] Show warning in case of mixing -mlong-calls and -mabicalls options","[mips] Show warning in case of mixing -mlong-calls and -mabicalls options\n\nWhile we do not support `-mshared / -mno-shared` properly, show warning\nand ignore `-mlong-calls` option in case of implicitly or explicitly\nprovided `-mabicalls` option.\n\nDifferential revision: https://reviews.llvm.org/D36551\n\nllvm-svn: 310614"},
[b]={{nil,F,r}},
[f]={"c038841e8be7",1502379745,"[mips] Show warning in case of mixing -mlong-calls and -mabicalls options","[mips] Show warning in case of mixing -mlong-calls and -mabicalls options\n\nWhile we do not support `-mshared / -mno-shared` properly, show warning\nand ignore `-mlong-calls` option in case of implicitly or explicitly\nprovided `-mabicalls` option.\n\nDifferential revision: https://reviews.llvm.org/D36551\n\nllvm-svn: 310614"},
[h]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",268,"void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mlong_calls, options::OPT_mno_long_calls)) {\n    if (A->getOption().matches(options::OPT_mno_long_calls))\n    // ...\n    else if (!UseAbiCalls)\n    // ...\n    else\n      D.Diag(diag::warn_drv_unsupported_longcalls) << (ABICallsArg ? 0 : 1);"}}
[h]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",268,"void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mlong_calls, options::OPT_mno_long_calls)) {\n    if (A->getOption().matches(options::OPT_mno_long_calls))\n    // ...\n    else if (!UseAbiCalls)\n    // ...\n    else\n      D.Diag(diag::warn_drv_unsupported_longcalls) << (ABICallsArg ? 0 : 1);"}}
},
},
["warn_drv_unsupported_opt_for_target"]={
["warn_drv_unsupported_opt_for_target"]={
[j]={"ignored-optimization-argument",Bb},
[k]={"ignored-optimization-argument",Gb},
[i]="ignored-optimization-argument",
[j]="ignored-optimization-argument",
[c]="optimization flag \'%0\' is not supported for target \'%1\'",
[c]="warn_drv_unsupported_opt_for_target",
[d]=g,
[d]="optimization flag \'%0\' is not supported for target \'%1\'",
[e]="optimization flag \'(.*?)\' is not supported for target \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wignored\\-optimization\\-argument[^\\]]*\\]",
[g]="optimization flag \'(.*?)\' is not supported for target \'(.*?)\'",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wignored\\-optimization\\-argument[^\\]]*\\]",
[a]={"c0f6c9b8c16d",1471975978,"ARM-Darwin: ignore and diagnose attempts to omit frame pointer.","ARM-Darwin: ignore and diagnose attempts to omit frame pointer.\n\niOS (and other 32-bit ARM variants) always require a valid frame pointer to\nimprove backtraces. Previously the -fomit-frame-pointer and\n-momit-leaf-frame-pointer options were being silently discarded via hacks in\nthe backend. It\'s better if Clang configures itself to emit the correct IR and\nwarns about (ignored) attempts to override this.\n\nllvm-svn: 279546"},
[b]=r,
[h]={{"clang/lib/Driver/ToolChain.cpp",160,"bool ToolChain::useIntegratedBackend() const {\n  // ...\n  if ((IBackend && !IsIntegratedBackendSupported()) || (!IBackend && !IsNonIntegratedBackendSupported()))\n  // ...\n  else\n    DiagID = clang::diag::warn_drv_unsupported_opt_for_target;"},{od,2964,"DerivedArgList *Darwin::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const {\n  // ...\n  if ((Arch == llvm::Triple::arm || Arch == llvm::Triple::thumb)) {\n    if (Args.hasFlag(options::OPT_fomit_frame_pointer, options::OPT_fno_omit_frame_pointer, false))\n      getDriver().Diag(clang::diag::warn_drv_unsupported_opt_for_target) << \"-fomit-frame-pointer\" << BoundArch;"}}
[f]={"c0f6c9b8c16d",1471975978,"ARM-Darwin: ignore and diagnose attempts to omit frame pointer.","ARM-Darwin: ignore and diagnose attempts to omit frame pointer.\n\niOS (and other 32-bit ARM variants) always require a valid frame pointer to\nimprove backtraces. Previously the -fomit-frame-pointer and\n-momit-leaf-frame-pointer options were being silently discarded via hacks in\nthe backend. It\'s better if Clang configures itself to emit the correct IR and\nwarns about (ignored) attempts to override this.\n\nllvm-svn: 279546"},
[h]={{"clang/lib/Driver/ToolChain.cpp",160,"bool ToolChain::useIntegratedBackend() const {\n  // ...\n  if ((IBackend && !IsIntegratedBackendSupported()) || (!IBackend && !IsNonIntegratedBackendSupported()))\n  // ...\n  else\n    DiagID = clang::diag::warn_drv_unsupported_opt_for_target;"},{qd,2964,"DerivedArgList *Darwin::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const {\n  // ...\n  if ((Arch == llvm::Triple::arm || Arch == llvm::Triple::thumb)) {\n    if (Args.hasFlag(options::OPT_fomit_frame_pointer, options::OPT_fno_omit_frame_pointer, false))\n      getDriver().Diag(clang::diag::warn_drv_unsupported_opt_for_target) << \"-fomit-frame-pointer\" << BoundArch;"}}
},
},
["warn_drv_unsupported_option_for_flang"]={
["warn_drv_unsupported_option_for_flang"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]={{nil,yc,"the argument \'%0\' is not supported for option \'%1\'. Mapping to \'%1%2\'"}},
[c]={{nil,bb,"warn_drv_unsupported_option_for_flang"}},
[d]=g,
[d]={{nil,bb,"the argument \'%0\' is not supported for option \'%1\'. Mapping to \'%1%2\'"}},
[e]="the argument \'(.*?)\' is not supported for option \'(.*?)\'\\. Mapping to \'(.*?)(.*?)\'",
[e]=i,
[f]=Vb,
[g]="the argument \'(.*?)\' is not supported for option \'(.*?)\'\\. Mapping to \'(.*?)(.*?)\'",
[b]=p,
[a]=Xb,
[a]={"1f67dc8b7c22",1666243490,"[Driver] Enable nested configuration files","[Driver] Enable nested configuration files\n\nUsers may partition parameters specified by configuration file and put\ndifferent groups into separate files. These files are inserted into the\nmain file using constructs `@file`. Relative file names in it are\nresolved relative to the including configuration file and this is not\nconvenient in some cases. A configuration file, which resides in system\ndirectory, may need to include a file with user-defined parameters and\nstill provide default definitions if such file is absent.\n\nTo solve such problems, the option `--config=` is allowed inside\nconfiguration files. Like `@file` it results in insertion of\ncommand-line arguments but the algorithm of file search is different and\nallows overriding system definitions with user ones.\n\nDifferential Revision: https://reviews.llvm.org/D136354"},
[b]={{nil,bb,r}},
[f]={"1f67dc8b7c22",1666243490,"[Driver] Enable nested configuration files","[Driver] Enable nested configuration files\n\nUsers may partition parameters specified by configuration file and put\ndifferent groups into separate files. These files are inserted into the\nmain file using constructs `@file`. Relative file names in it are\nresolved relative to the including configuration file and this is not\nconvenient in some cases. A configuration file, which resides in system\ndirectory, may need to include a file with user-defined parameters and\nstill provide default definitions if such file is absent.\n\nTo solve such problems, the option `--config=` is allowed inside\nconfiguration files. Like `@file` it results in insertion of\ncommand-line arguments but the algorithm of file search is different and\nallows overriding system definitions with user ones.\n\nDifferential Revision: https://reviews.llvm.org/D136354"},
[h]={{"clang/lib/Driver/ToolChains/Flang.cpp",279,"static void addFloatingPointOptions(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs) {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_ffp_contract)) {\n    // ...\n    if (Val == \"fast\" || Val == \"off\") {\n    // ...\n    } else if (Val == \"on\") {\n      // ...\n      D.Diag(diag::warn_drv_unsupported_option_for_flang) << Val << A->getOption().getName() << \"off\";"}}
[h]={{"clang/lib/Driver/ToolChains/Flang.cpp",279,"static void addFloatingPointOptions(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs) {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_ffp_contract)) {\n    // ...\n    if (Val == \"fast\" || Val == \"off\") {\n    // ...\n    } else if (Val == \"on\") {\n      // ...\n      D.Diag(diag::warn_drv_unsupported_option_for_flang) << Val << A->getOption().getName() << \"off\";"}}
},
},
["warn_drv_unsupported_option_for_offload_arch_req_feature"]={
["warn_drv_unsupported_option_for_offload_arch_req_feature"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]={{nil,kb,"ignoring \'%0\' option for offload arch \'%1\' as it is not currently supported there. Use it with an offload arch containing \'%2\' instead"},{Q,Q,"ignoring \'%0\' option as it is not currently supported for offload arch \'%1\'. Use it with an offload arch containing \'%2\' instead"}},
[c]={{nil,w,"warn_drv_unsupported_option_for_offload_arch_req_feature"}},
[d]=g,
[d]={{nil,C,"ignoring \'%0\' option for offload arch \'%1\' as it is not currently supported there. Use it with an offload arch containing \'%2\' instead"},{w,w,"ignoring \'%0\' option as it is not currently supported for offload arch \'%1\'. Use it with an offload arch containing \'%2\' instead"}},
[e]="ignoring \'(.*?)\' option for offload arch \'(.*?)\' as it is not currently supported there\\. Use it with an offload arch containing \'(.*?)\' instead",
[e]=i,
[f]=Vb,
[g]="ignoring \'(.*?)\' option for offload arch \'(.*?)\' as it is not currently supported there\\. Use it with an offload arch containing \'(.*?)\' instead",
[b]=p,
[a]=Xb,
[a]={qc,1610286626,rc,sc},
[b]={{nil,w,r}},
[f]={oc,1610286626,vc,sc},
[h]={{"clang/lib/Driver/ToolChains/HIPAMD.cpp",69,"static bool shouldSkipSanitizeOption(const ToolChain &TC, const llvm::opt::ArgList &DriverArgs, StringRef TargetID, const llvm::opt::Arg *A) {\n  // ...\n  if (Loc == FeatureMap.end() || !Loc->second) {\n    Diags.Report(clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature) << A->getAsString(DriverArgs) << TargetID << \"xnack+\";"}}
[h]={{"clang/lib/Driver/ToolChains/HIPAMD.cpp",69,"static bool shouldSkipSanitizeOption(const ToolChain &TC, const llvm::opt::ArgList &DriverArgs, StringRef TargetID, const llvm::opt::Arg *A) {\n  // ...\n  if (Loc == FeatureMap.end() || !Loc->second) {\n    Diags.Report(clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature) << A->getAsString(DriverArgs) << TargetID << \"xnack+\";"}}
},
},
["warn_drv_unsupported_option_for_processor"]={
["warn_drv_unsupported_option_for_processor"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]="ignoring \'%0\' option as it is not currently supported for processor \'%1\'",
[c]="warn_drv_unsupported_option_for_processor",
[d]=g,
[d]="ignoring \'%0\' option as it is not currently supported for processor \'%1\'",
[e]="ignoring \'(.*?)\' option as it is not currently supported for processor \'(.*?)\'",
[e]=i,
[f]=Vb,
[g]="ignoring \'(.*?)\' option as it is not currently supported for processor \'(.*?)\'",
[b]=p,
[a]=Xb,
[a]={"6adb9a0602bc",1678065956,"[AMDGPU] Emit predefined macro `__AMDGCN_CUMODE__`","[AMDGPU] Emit predefined macro `__AMDGCN_CUMODE__`\n\nPredefine __AMDGCN_CUMODE__ as 1 or 0 when compilation assumes CU or WGP modes.\n\nIf WGP mode is not supported, ignore -mno-cumode and emit a warning.\n\nThis is needed for implementing device functions like __smid\n(https://github.com/ROCm-Developer-Tools/hipamd/blob/312dff7b794337aa040be0691acc78e9f968a8d2/include/hip/amd_detail/amd_device_functions.h#L957)\n\nReviewed by: Matt Arsenault, Artem Belevich, Brian Sumner\n\nDifferential Revision: https://reviews.llvm.org/D145343"},
[b]=r,
[f]={"6adb9a0602bc",1678065956,"[AMDGPU] Emit predefined macro `__AMDGCN_CUMODE__`","[AMDGPU] Emit predefined macro `__AMDGCN_CUMODE__`\n\nPredefine __AMDGCN_CUMODE__ as 1 or 0 when compilation assumes CU or WGP modes.\n\nIf WGP mode is not supported, ignore -mno-cumode and emit a warning.\n\nThis is needed for implementing device functions like __smid\n(https://github.com/ROCm-Developer-Tools/hipamd/blob/312dff7b794337aa040be0691acc78e9f968a8d2/include/hip/amd_detail/amd_device_functions.h#L957)\n\nReviewed by: Matt Arsenault, Artem Belevich, Brian Sumner\n\nDifferential Revision: https://reviews.llvm.org/D145343"},
[h]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",174,"void tools::handleTargetFeaturesGroup(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, OptSpecifier Group) {\n  // ...\n  for (const Arg *A : Args.filtered(Group)) {\n    // ...\n    if (shouldIgnoreUnsupportedTargetFeature(*A, Triple, Proc)) {\n      if (Warned.count(Name) == 0) {\n        D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_processor) << A->getAsString(Args) << Proc;"}},
[h]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",174,"void tools::handleTargetFeaturesGroup(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, OptSpecifier Group) {\n  // ...\n  for (const Arg *A : Args.filtered(Group)) {\n    // ...\n    if (shouldIgnoreUnsupportedTargetFeature(*A, Triple, Proc)) {\n      if (Warned.count(Name) == 0) {\n        D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_processor) << A->getAsString(Args) << Proc;"}},
[k]={
[l]={
["clang/test/CodeGenHIP/hip-cumode.hip"]={"clang: warning: ignoring \'-mno-cumode\' option as it is not currently supported for processor \'gfx906\' [-Woption-ignored]"}
["clang/test/CodeGenHIP/hip-cumode.hip"]={"clang: warning: ignoring \'-mno-cumode\' option as it is not currently supported for processor \'gfx906\' [-Woption-ignored]"}
}
}
},
},
["warn_drv_unsupported_option_for_target"]={
["warn_drv_unsupported_option_for_target"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]={{nil,Q,"ignoring \'%0\' option as it is not currently supported for target \'%1\'"}},
[c]={{nil,w,"warn_drv_unsupported_option_for_target"}},
[d]=g,
[d]={{nil,w,"ignoring \'%0\' option as it is not currently supported for target \'%1\'"}},
[e]="ignoring \'(.*?)\' option as it is not currently supported for target \'(.*?)\'",
[e]=i,
[f]=Vb,
[g]="ignoring \'(.*?)\' option as it is not currently supported for target \'(.*?)\'",
[b]=p,
[a]=Xb,
[a]={qc,1610286626,rc,sc},
[b]={{nil,w,r}},
[h]={{T,3348,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_fno_stack_protector, options::OPT_fstack_protector_all, options::OPT_fstack_protector_strong, options::OPT_fstack_protector)) {\n    // ...\n    if (EffectiveTriple.isBPF() && StackProtectorLevel != LangOptions::SSPOff) {\n      D.Diag(diag::warn_drv_unsupported_option_for_target) << A->getSpelling() << EffectiveTriple.getTriple();"},{"clang/lib/Driver/ToolChains/HIPAMD.cpp",232,"HIPAMDToolChain::HIPAMDToolChain(const Driver &D, const llvm::Triple &Triple, const ToolChain &HostTC, const ArgList &Args) : ROCMToolChain(D, Triple, Args), HostTC(HostTC) {\n  // ...\n  for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) {\n    // ...\n    if (K != SanitizerKind::Address)\n      D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target) << A->getAsString(Args) << getTriple().str();"}},
[f]={oc,1610286626,vc,sc},
[k]={
[h]={{ab,3348,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_fno_stack_protector, options::OPT_fstack_protector_all, options::OPT_fstack_protector_strong, options::OPT_fstack_protector)) {\n    // ...\n    if (EffectiveTriple.isBPF() && StackProtectorLevel != LangOptions::SSPOff) {\n      D.Diag(diag::warn_drv_unsupported_option_for_target) << A->getSpelling() << EffectiveTriple.getTriple();"},{"clang/lib/Driver/ToolChains/HIPAMD.cpp",232,"HIPAMDToolChain::HIPAMDToolChain(const Driver &D, const llvm::Triple &Triple, const ToolChain &HostTC, const ArgList &Args) : ROCMToolChain(D, Triple, Args), HostTC(HostTC) {\n  // ...\n  for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) {\n    // ...\n    if (K != SanitizerKind::Address)\n      D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target) << A->getAsString(Args) << getTriple().str();"}},
[l]={
["clang/test/CodeGen/bpf-stack-protector.c"]={"clang: warning: ignoring \'-fstack-protector-strong\' option as it is not currently supported for target \'bpf\' [-Woption-ignored]"}
["clang/test/CodeGen/bpf-stack-protector.c"]={"clang: warning: ignoring \'-fstack-protector-strong\' option as it is not currently supported for target \'bpf\' [-Woption-ignored]"}
}
}
},
},
["warn_drv_unsupported_pic_with_mabicalls"]={
["warn_drv_unsupported_pic_with_mabicalls"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]={{nil,eb,"ignoring \'%0\' option as it cannot be used with %select{implicit usage of|}1 -mabicalls and the N64 ABI"}},
[c]={{nil,D,"warn_drv_unsupported_pic_with_mabicalls"}},
[d]=g,
[d]={{nil,D,"ignoring \'%0\' option as it cannot be used with %select{implicit usage of|}1 -mabicalls and the N64 ABI"}},
[e]="ignoring \'(.*?)\' option as it cannot be used with (?:implicit usage of|) \\-mabicalls and the N64 ABI",
[e]=i,
[f]=Vb,
[g]="ignoring \'(.*?)\' option as it cannot be used with (?:implicit usage of|) \\-mabicalls and the N64 ABI",
[b]=p,
[a]=Xb,
[a]={"f9b3fc5e2bc7",1525702794,"[mips] Improve handling of -fno-[pic/PIC] option","[mips] Improve handling of -fno-[pic/PIC] option\n\nIn order to disable PIC and to match GCC behaviour, -mno-abicalls\noption is neccessary. When -fno-[pic/PIC] is used witout -mno-abicalls,\nwarning is reported. An error is reported when -fno-pic or -fno-PIC is\nused in combination with -mabicalls.\n\nDepends on D44381.\n\nDifferential Revision: https://reviews.llvm.org/D44684\n\nllvm-svn: 331636"},
[b]={{nil,D,r}},
[f]={"f9b3fc5e2bc7",1525702794,"[mips] Improve handling of -fno-[pic/PIC] option","[mips] Improve handling of -fno-[pic/PIC] option\n\nIn order to disable PIC and to match GCC behaviour, -mno-abicalls\noption is neccessary. When -fno-[pic/PIC] is used witout -mno-abicalls,\nwarning is reported. An error is reported when -fno-pic or -fno-PIC is\nused in combination with -mabicalls.\n\nDepends on D44381.\n\nDifferential Revision: https://reviews.llvm.org/D44684\n\nllvm-svn: 331636"},
[h]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",248,"void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (IsN64 && NonPIC && (!ABICallsArg || UseAbiCalls)) {\n    D.Diag(diag::warn_drv_unsupported_pic_with_mabicalls) << LastPICArg->getAsString(Args) << (!ABICallsArg ? 0 : 1);"}}
[h]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",248,"void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (IsN64 && NonPIC && (!ABICallsArg || UseAbiCalls)) {\n    D.Diag(diag::warn_drv_unsupported_pic_with_mabicalls) << LastPICArg->getAsString(Args) << (!ABICallsArg ? 0 : 1);"}}
},
},
["warn_drv_unsupported_sdata"]={
["warn_drv_unsupported_sdata"]={
[j]={W},
[k]={fb},
[i]=W,
[j]=fb,
[c]={{nil,mb,"ignoring \'-msmall-data-limit=\' with -mcmodel=large for -fpic or RV64"}},
[c]={{nil,z,"warn_drv_unsupported_sdata"}},
[d]=g,
[d]={{nil,z,"ignoring \'-msmall-data-limit=\' with -mcmodel=large for -fpic or RV64"}},
[e]="ignoring \'\\-msmall\\-data\\-limit\\=\' with \\-mcmodel\\=large for \\-fpic or RV64",
[e]=i,
[f]=Vb,
[g]="ignoring \'\\-msmall\\-data\\-limit\\=\' with \\-mcmodel\\=large for \\-fpic or RV64",
[b]=p,
[a]=Xb,
[a]={jc,1534346725,ic,dc},
[b]={{nil,z,r}},
[h]={{T,2116,"static void SetRISCVSmallDataLimit(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) {\n  // ...\n  // Get small data limitation.\n  if (Args.getLastArg(options::OPT_shared, options::OPT_fpic, options::OPT_fPIC)) {\n    // ...\n    if (Args.hasArg(options::OPT_G)) {\n      D.Diag(diag::warn_drv_unsupported_sdata);"},{T,2124,"static void SetRISCVSmallDataLimit(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) {\n  // ...\n  // Get small data limitation.\n  if (Args.getLastArg(options::OPT_shared, options::OPT_fpic, options::OPT_fPIC)) {\n  // ...\n  } else if (Args.getLastArgValue(options::OPT_mcmodel_EQ).equals_insensitive(\"large\") && (Triple.getArch() == llvm::Triple::riscv64)) {\n    // ...\n    if (Args.hasArg(options::OPT_G)) {\n      D.Diag(diag::warn_drv_unsupported_sdata);"},{T,2130,"static void SetRISCVSmallDataLimit(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) {\n  // ...\n  // Get small data limitation.\n  if (Args.getLastArg(options::OPT_shared, options::OPT_fpic, options::OPT_fPIC)) {\n  // ...\n  } else if (Args.getLastArgValue(options::OPT_mcmodel_EQ).equals_insensitive(\"large\") && (Triple.getArch() == llvm::Triple::riscv64)) {\n  // ...\n  } else if (Triple.isAndroid()) {\n    // ...\n    if (Args.hasArg(options::OPT_G)) {\n      D.Diag(diag::warn_drv_unsupported_sdata);"}},
[f]={mc,1534346725,ic,hc},
[k]={
[h]={{ab,2116,"static void SetRISCVSmallDataLimit(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) {\n  // ...\n  // Get small data limitation.\n  if (Args.getLastArg(options::OPT_shared, options::OPT_fpic, options::OPT_fPIC)) {\n    // ...\n    if (Args.hasArg(options::OPT_G)) {\n      D.Diag(diag::warn_drv_unsupported_sdata);"},{ab,2124,"static void SetRISCVSmallDataLimit(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) {\n  // ...\n  // Get small data limitation.\n  if (Args.getLastArg(options::OPT_shared, options::OPT_fpic, options::OPT_fPIC)) {\n  // ...\n  } else if (Args.getLastArgValue(options::OPT_mcmodel_EQ).equals_insensitive(\"large\") && (Triple.getArch() == llvm::Triple::riscv64)) {\n    // ...\n    if (Args.hasArg(options::OPT_G)) {\n      D.Diag(diag::warn_drv_unsupported_sdata);"},{ab,2130,"static void SetRISCVSmallDataLimit(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) {\n  // ...\n  // Get small data limitation.\n  if (Args.getLastArg(options::OPT_shared, options::OPT_fpic, options::OPT_fPIC)) {\n  // ...\n  } else if (Args.getLastArgValue(options::OPT_mcmodel_EQ).equals_insensitive(\"large\") && (Triple.getArch() == llvm::Triple::riscv64)) {\n  // ...\n  } else if (Triple.isAndroid()) {\n    // ...\n    if (Args.hasArg(options::OPT_G)) {\n      D.Diag(diag::warn_drv_unsupported_sdata);"}},
[l]={
["clang/test/CodeGen/RISCV/riscv-sdata-module-flag.c"]={"clang: warning: ignoring \'-msmall-data-limit=\' with -mcmodel=large for -fpic or RV64 [-Woption-ignored]"}
["clang/test/CodeGen/RISCV/riscv-sdata-module-flag.c"]={"clang: warning: ignoring \'-msmall-data-limit=\' with -mcmodel=large for -fpic or RV64 [-Woption-ignored]"}
}
}
},
},
["warn_drv_unused_argument"]={
["warn_drv_unused_argument"]={
[j]={qb},
[k]={tb},
[i]=qb,
[j]=tb,
[c]="argument unused during compilation: \'%0\'",
[c]="warn_drv_unused_argument",
[d]=g,
[d]="argument unused during compilation: \'%0\'",
[e]="argument unused during compilation\\: \'(.*?)\'",
[e]=i,
[f]=Ec,
[g]="argument unused during compilation\\: \'(.*?)\'",
[b]=p,
[a]=Cc,
[a]={"1889b6e21958",1237113751,"Keep diagnostic td in sync with r67015.","Keep diagnostic td in sync with r67015.\n\nllvm-svn: 67026"},
[b]=r,
[h]={{Nb,4979,"void Driver::BuildJobs(Compilation &C) const {\n  // ...\n  for (Arg *A : C.getArgs()) {\n    // FIXME: It would be nice to be able to send the argument to the\n    // DiagnosticsEngine, so that extra values, position, and so on could be\n    // printed.\n    if (!A->isClaimed()) {\n      // ...\n      // In clang-cl, don\'t mention unknown arguments here since they have\n      // already been warned about.\n      if (!IsCLMode() || !A->getOption().matches(options::OPT_UNKNOWN)) {\n        if (A->getOption().hasFlag(options::TargetSpecific) && !A->isIgnoredTargetSpecific() && !HasAssembleJob) {\n        // ...\n        } else {\n          Diag(clang::diag::warn_drv_unused_argument) << A->getAsString(C.getArgs());"},{wd,567,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  // Check -mcpu. ClangAs gives preference to -Wa,-mcpu=.\n  if (WaCPU) {\n    if (CPUArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << CPUArg->getAsString(Args);"},{wd,577,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  // Check -march. ClangAs gives preference to -Wa,-march=.\n  if (WaArch) {\n    if (ArchArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << ArchArg->getAsString(Args);"},{wd,619,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  if (WaFPU) {\n    if (FPUArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << FPUArg->getAsString(Args);"},{wd,650,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  if (WaHDiv) {\n    if (HDivArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << HDivArg->getAsString(Args);"},{T,6739,"#endif\n  // ...\n  if (ImplyVCPPCVer) {\n    // ...\n    if (const Arg *StdArg = Args.getLastArg(options::OPT__SLASH_std)) {\n      // ...\n      if (LanguageStandard.empty())\n        D.Diag(clang::diag::warn_drv_unused_argument) << StdArg->getAsString(Args);"},{T,6756,"#endif\n  // ...\n  if (ImplyVCPPCXXVer) {\n    // ...\n    if (const Arg *StdArg = Args.getLastArg(options::OPT__SLASH_std)) {\n      // ...\n      if (LanguageStandard.empty())\n        D.Diag(clang::diag::warn_drv_unused_argument) << StdArg->getAsString(Args);"}},
[f]={"1889b6e21958",1237113751,"Keep diagnostic td in sync with r67015.","Keep diagnostic td in sync with r67015.\n\nllvm-svn: 67026"},
[k]={
[h]={{Vb,4979,"void Driver::BuildJobs(Compilation &C) const {\n  // ...\n  for (Arg *A : C.getArgs()) {\n    // FIXME: It would be nice to be able to send the argument to the\n    // DiagnosticsEngine, so that extra values, position, and so on could be\n    // printed.\n    if (!A->isClaimed()) {\n      // ...\n      // In clang-cl, don\'t mention unknown arguments here since they have\n      // already been warned about.\n      if (!IsCLMode() || !A->getOption().matches(options::OPT_UNKNOWN)) {\n        if (A->getOption().hasFlag(options::TargetSpecific) && !A->isIgnoredTargetSpecific() && !HasAssembleJob) {\n        // ...\n        } else {\n          Diag(clang::diag::warn_drv_unused_argument) << A->getAsString(C.getArgs());"},{wd,567,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  // Check -mcpu. ClangAs gives preference to -Wa,-mcpu=.\n  if (WaCPU) {\n    if (CPUArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << CPUArg->getAsString(Args);"},{wd,577,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  // Check -march. ClangAs gives preference to -Wa,-march=.\n  if (WaArch) {\n    if (ArchArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << ArchArg->getAsString(Args);"},{wd,619,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  if (WaFPU) {\n    if (FPUArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << FPUArg->getAsString(Args);"},{wd,650,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  if (WaHDiv) {\n    if (HDivArg)\n      D.Diag(clang::diag::warn_drv_unused_argument) << HDivArg->getAsString(Args);"},{ab,6739,"#endif\n  // ...\n  if (ImplyVCPPCVer) {\n    // ...\n    if (const Arg *StdArg = Args.getLastArg(options::OPT__SLASH_std)) {\n      // ...\n      if (LanguageStandard.empty())\n        D.Diag(clang::diag::warn_drv_unused_argument) << StdArg->getAsString(Args);"},{ab,6756,"#endif\n  // ...\n  if (ImplyVCPPCXXVer) {\n    // ...\n    if (const Arg *StdArg = Args.getLastArg(options::OPT__SLASH_std)) {\n      // ...\n      if (LanguageStandard.empty())\n        D.Diag(clang::diag::warn_drv_unused_argument) << StdArg->getAsString(Args);"}},
[l]={
["clang/test/OpenMP/driver-openmp-target.c"]={"clang: warning: argument unused during compilation: \'-c\' [-Wunused-command-line-argument]"}
["clang/test/OpenMP/driver-openmp-target.c"]={"clang: warning: argument unused during compilation: \'-c\' [-Wunused-command-line-argument]"}
}
}
},
},
["warn_drv_unused_x"]={
["warn_drv_unused_x"]={
[j]={qb},
[k]={tb},
[i]=qb,
[j]=tb,
[c]={{nil,kb,"\'-x %0\' after last input file has no effect"}},
[c]={{nil,C,"warn_drv_unused_x"}},
[d]=g,
[d]={{nil,C,"\'-x %0\' after last input file has no effect"}},
[e]="\'\\-x (.*?)\' after last input file has no effect",
[e]=i,
[f]=Ec,
[g]="\'\\-x (.*?)\' after last input file has no effect",
[b]=p,
[a]=Cc,
[a]={qc,1610286626,rc,sc},
[b]={{nil,C,r}},
[h]={{Nb,2638,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  // ...\n  // Warn -x after last input file has no effect\n  if (!IsCLMode()) {\n    // ...\n    if (LastXArg && LastInputArg && LastInputArg->getIndex() < LastXArg->getIndex())\n      Diag(clang::diag::warn_drv_unused_x) << LastXArg->getValue();"}},
[f]={oc,1610286626,vc,sc},
[k]={
[h]={{Vb,2638,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  // ...\n  // Warn -x after last input file has no effect\n  if (!IsCLMode()) {\n    // ...\n    if (LastXArg && LastInputArg && LastInputArg->getIndex() < LastXArg->getIndex())\n      Diag(clang::diag::warn_drv_unused_x) << LastXArg->getValue();"}},
[l]={
["clang/test/CodeGenObjC/forward-declare-protocol-gnu.m"]={"clang: warning: \'-x objective-c\' after last input file has no effect [-Wunused-command-line-argument]"}
["clang/test/CodeGenObjC/forward-declare-protocol-gnu.m"]={"clang: warning: \'-x objective-c\' after last input file has no effect [-Wunused-command-line-argument]"}
}
}
},
},
["warn_drv_yc_multiple_inputs_clang_cl"]={
["warn_drv_yc_multiple_inputs_clang_cl"]={
[j]={"clang-cl-pch"},
[k]={"clang-cl-pch"},
[i]="clang-cl-pch",
[j]="clang-cl-pch",
[c]="support for \'/Yc\' with more than one source file not implemented yet; flag ignored",
[c]="warn_drv_yc_multiple_inputs_clang_cl",
[d]=g,
[d]="support for \'/Yc\' with more than one source file not implemented yet; flag ignored",
[e]="support for \'\\/Yc\' with more than one source file not implemented yet; flag ignored",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wclang\\-cl\\-pch[^\\]]*\\]",
[g]="support for \'\\/Yc\' with more than one source file not implemented yet; flag ignored",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wclang\\-cl\\-pch[^\\]]*\\]",
[a]={"2ca4be97de0f",1456874204,"clang-cl: Implement initial limited support for precompiled headers.","clang-cl: Implement initial limited support for precompiled headers.\n\nIn the gcc precompiled header model, one explicitly runs clang with `-x\nc++-header` on a .h file to produce a gch file, and then includes the header\nwith `-include foo.h` and if a .gch file exists for that header it gets used.\nThis is documented at\nhttp://clang.llvm.org/docs/UsersManual.html#precompiled-headers\n\ncl.exe\'s model is fairly different, and controlled by the two flags /Yc and\n/Yu. A pch file is generated as a side effect of a regular compilation when\n/Ycheader.h is passed. While the compilation is running, the compiler keeps\ntrack of #include lines in the main translation unit and writes everything up\nto an `#include \"header.h\"` line into a pch file. Conversely, /Yuheader.h tells\nthe compiler to skip all code in the main TU up to and including `#include\n\"header.h\"` and instead load header.pch. (It\'s also possible to use /Yc and /Yu\nwithout an argument, in that case a `#pragma hrdstop` takes the role of\ncontrolling the point where pch ends and real code begins.)\n\nThis patch implements limited support for this in that it requires the pch\nheader to be passed as a /FI force include flag – with this restriction,\nit can be implemented almost completely in the driver with fairly small amounts\nof code. For /Yu, this is trivial, and for /Yc a separate pch action is added\nthat runs before the actual compilation. After r261774, the first failing\ncommand makes a compilation stop – this means if the pch fails to build the\nmain compilation won\'t run, which is what we want. However, in /fallback builds\nwe need to run the main compilation even if the pch build fails so that the\nmain compilation\'s fallback can run. To achieve this, add a ForceSuccessCommand\nthat pretends that the pch build always succeeded in /fallback builds (the main\ncompilation will then fail to open the pch and run the fallback cl.exe\ninvocation).\n\nIf /Yc /Yu are used in a setup that clang-cl doesn\'t implement yet, clang-cl\nwill now emit a \"not implemented yet; flag ignored\" warning that can be\ndisabled using -Wno-clang-cl-pch.\n\nSince clang-cl doesn\'t yet serialize some important things (most notably\n`pragma comment(lib, ...)`, this feature is disabled by default and only\nenabled by an internal driver flag. Once it\'s more stable, this internal flag\nwill disappear.\n\n(The default stdafx.h setup passes stdafx.h as explicit argument to /Yc but not\nas /FI – instead every single TU has to `#include <stdafx.h>` as first thing it\ndoes. Implementing support for this should be possible with the approach in\nthis patch with minimal frontend changes by passing a --stop-at / --start-at\nflag from the driver to the frontend. This is left for a follow-up. I don\'t\nthink we ever want to support `#pragma hdrstop`, and supporting it with this\napproach isn\'t easy: This approach relies on the driver knowing the pch\nfilename in advance, and `#pragma hdrstop(out.pch)` can set the output\nfilename, so the driver can\'t know about it in advance.)\n\nclang-cl now also honors /Fp and puts pch files in the same spot that cl.exe\nwould put them, but the pch file format is of course incompatible. This has\nramifications on /fallback, so /Yc /Yu aren\'t passed through to cl.exe in\n/fallback builds.\n\nhttp://reviews.llvm.org/D17695\n\nllvm-svn: 262420"},
[b]=r,
[h]={{Nb,3948,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  if (YcArg && Inputs.size() > 1) {\n    Diag(clang::diag::warn_drv_yc_multiple_inputs_clang_cl);"}}
[f]={"2ca4be97de0f",1456874204,"clang-cl: Implement initial limited support for precompiled headers.","clang-cl: Implement initial limited support for precompiled headers.\n\nIn the gcc precompiled header model, one explicitly runs clang with `-x\nc++-header` on a .h file to produce a gch file, and then includes the header\nwith `-include foo.h` and if a .gch file exists for that header it gets used.\nThis is documented at\nhttp://clang.llvm.org/docs/UsersManual.html#precompiled-headers\n\ncl.exe\'s model is fairly different, and controlled by the two flags /Yc and\n/Yu. A pch file is generated as a side effect of a regular compilation when\n/Ycheader.h is passed. While the compilation is running, the compiler keeps\ntrack of #include lines in the main translation unit and writes everything up\nto an `#include \"header.h\"` line into a pch file. Conversely, /Yuheader.h tells\nthe compiler to skip all code in the main TU up to and including `#include\n\"header.h\"` and instead load header.pch. (It\'s also possible to use /Yc and /Yu\nwithout an argument, in that case a `#pragma hrdstop` takes the role of\ncontrolling the point where pch ends and real code begins.)\n\nThis patch implements limited support for this in that it requires the pch\nheader to be passed as a /FI force include flag – with this restriction,\nit can be implemented almost completely in the driver with fairly small amounts\nof code. For /Yu, this is trivial, and for /Yc a separate pch action is added\nthat runs before the actual compilation. After r261774, the first failing\ncommand makes a compilation stop – this means if the pch fails to build the\nmain compilation won\'t run, which is what we want. However, in /fallback builds\nwe need to run the main compilation even if the pch build fails so that the\nmain compilation\'s fallback can run. To achieve this, add a ForceSuccessCommand\nthat pretends that the pch build always succeeded in /fallback builds (the main\ncompilation will then fail to open the pch and run the fallback cl.exe\ninvocation).\n\nIf /Yc /Yu are used in a setup that clang-cl doesn\'t implement yet, clang-cl\nwill now emit a \"not implemented yet; flag ignored\" warning that can be\ndisabled using -Wno-clang-cl-pch.\n\nSince clang-cl doesn\'t yet serialize some important things (most notably\n`pragma comment(lib, ...)`, this feature is disabled by default and only\nenabled by an internal driver flag. Once it\'s more stable, this internal flag\nwill disappear.\n\n(The default stdafx.h setup passes stdafx.h as explicit argument to /Yc but not\nas /FI – instead every single TU has to `#include <stdafx.h>` as first thing it\ndoes. Implementing support for this should be possible with the approach in\nthis patch with minimal frontend changes by passing a --stop-at / --start-at\nflag from the driver to the frontend. This is left for a follow-up. I don\'t\nthink we ever want to support `#pragma hdrstop`, and supporting it with this\napproach isn\'t easy: This approach relies on the driver knowing the pch\nfilename in advance, and `#pragma hdrstop(out.pch)` can set the output\nfilename, so the driver can\'t know about it in advance.)\n\nclang-cl now also honors /Fp and puts pch files in the same spot that cl.exe\nwould put them, but the pch file format is of course incompatible. This has\nramifications on /fallback, so /Yc /Yu aren\'t passed through to cl.exe in\n/fallback builds.\n\nhttp://reviews.llvm.org/D17695\n\nllvm-svn: 262420"},
[h]={{Vb,3948,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  if (YcArg && Inputs.size() > 1) {\n    Diag(clang::diag::warn_drv_yc_multiple_inputs_clang_cl);"}}
},
},
["warn_drv_ycyu_different_arg_clang_cl"]={
["warn_drv_ycyu_different_arg_clang_cl"]={
[j]={"clang-cl-pch"},
[k]={"clang-cl-pch"},
[i]="clang-cl-pch",
[j]="clang-cl-pch",
[c]="support for \'/Yc\' and \'/Yu\' with different filenames not implemented yet; flags ignored",
[c]="warn_drv_ycyu_different_arg_clang_cl",
[d]=g,
[d]="support for \'/Yc\' and \'/Yu\' with different filenames not implemented yet; flags ignored",
[e]="support for \'\\/Yc\' and \'\\/Yu\' with different filenames not implemented yet; flags ignored",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wclang\\-cl\\-pch[^\\]]*\\]",
[g]="support for \'\\/Yc\' and \'\\/Yu\' with different filenames not implemented yet; flags ignored",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wclang\\-cl\\-pch[^\\]]*\\]",
[a]={"2ca4be97de0f",1456874204,"clang-cl: Implement initial limited support for precompiled headers.","clang-cl: Implement initial limited support for precompiled headers.\n\nIn the gcc precompiled header model, one explicitly runs clang with `-x\nc++-header` on a .h file to produce a gch file, and then includes the header\nwith `-include foo.h` and if a .gch file exists for that header it gets used.\nThis is documented at\nhttp://clang.llvm.org/docs/UsersManual.html#precompiled-headers\n\ncl.exe\'s model is fairly different, and controlled by the two flags /Yc and\n/Yu. A pch file is generated as a side effect of a regular compilation when\n/Ycheader.h is passed. While the compilation is running, the compiler keeps\ntrack of #include lines in the main translation unit and writes everything up\nto an `#include \"header.h\"` line into a pch file. Conversely, /Yuheader.h tells\nthe compiler to skip all code in the main TU up to and including `#include\n\"header.h\"` and instead load header.pch. (It\'s also possible to use /Yc and /Yu\nwithout an argument, in that case a `#pragma hrdstop` takes the role of\ncontrolling the point where pch ends and real code begins.)\n\nThis patch implements limited support for this in that it requires the pch\nheader to be passed as a /FI force include flag – with this restriction,\nit can be implemented almost completely in the driver with fairly small amounts\nof code. For /Yu, this is trivial, and for /Yc a separate pch action is added\nthat runs before the actual compilation. After r261774, the first failing\ncommand makes a compilation stop – this means if the pch fails to build the\nmain compilation won\'t run, which is what we want. However, in /fallback builds\nwe need to run the main compilation even if the pch build fails so that the\nmain compilation\'s fallback can run. To achieve this, add a ForceSuccessCommand\nthat pretends that the pch build always succeeded in /fallback builds (the main\ncompilation will then fail to open the pch and run the fallback cl.exe\ninvocation).\n\nIf /Yc /Yu are used in a setup that clang-cl doesn\'t implement yet, clang-cl\nwill now emit a \"not implemented yet; flag ignored\" warning that can be\ndisabled using -Wno-clang-cl-pch.\n\nSince clang-cl doesn\'t yet serialize some important things (most notably\n`pragma comment(lib, ...)`, this feature is disabled by default and only\nenabled by an internal driver flag. Once it\'s more stable, this internal flag\nwill disappear.\n\n(The default stdafx.h setup passes stdafx.h as explicit argument to /Yc but not\nas /FI – instead every single TU has to `#include <stdafx.h>` as first thing it\ndoes. Implementing support for this should be possible with the approach in\nthis patch with minimal frontend changes by passing a --stop-at / --start-at\nflag from the driver to the frontend. This is left for a follow-up. I don\'t\nthink we ever want to support `#pragma hdrstop`, and supporting it with this\napproach isn\'t easy: This approach relies on the driver knowing the pch\nfilename in advance, and `#pragma hdrstop(out.pch)` can set the output\nfilename, so the driver can\'t know about it in advance.)\n\nclang-cl now also honors /Fp and puts pch files in the same spot that cl.exe\nwould put them, but the pch file format is of course incompatible. This has\nramifications on /fallback, so /Yc /Yu aren\'t passed through to cl.exe in\n/fallback builds.\n\nhttp://reviews.llvm.org/D17695\n\nllvm-svn: 262420"},
[b]=r,
[h]={{Nb,3942,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  if (YcArg && YuArg && strcmp(YcArg->getValue(), YuArg->getValue()) != 0) {\n    Diag(clang::diag::warn_drv_ycyu_different_arg_clang_cl);"}}
[f]={"2ca4be97de0f",1456874204,"clang-cl: Implement initial limited support for precompiled headers.","clang-cl: Implement initial limited support for precompiled headers.\n\nIn the gcc precompiled header model, one explicitly runs clang with `-x\nc++-header` on a .h file to produce a gch file, and then includes the header\nwith `-include foo.h` and if a .gch file exists for that header it gets used.\nThis is documented at\nhttp://clang.llvm.org/docs/UsersManual.html#precompiled-headers\n\ncl.exe\'s model is fairly different, and controlled by the two flags /Yc and\n/Yu. A pch file is generated as a side effect of a regular compilation when\n/Ycheader.h is passed. While the compilation is running, the compiler keeps\ntrack of #include lines in the main translation unit and writes everything up\nto an `#include \"header.h\"` line into a pch file. Conversely, /Yuheader.h tells\nthe compiler to skip all code in the main TU up to and including `#include\n\"header.h\"` and instead load header.pch. (It\'s also possible to use /Yc and /Yu\nwithout an argument, in that case a `#pragma hrdstop` takes the role of\ncontrolling the point where pch ends and real code begins.)\n\nThis patch implements limited support for this in that it requires the pch\nheader to be passed as a /FI force include flag – with this restriction,\nit can be implemented almost completely in the driver with fairly small amounts\nof code. For /Yu, this is trivial, and for /Yc a separate pch action is added\nthat runs before the actual compilation. After r261774, the first failing\ncommand makes a compilation stop – this means if the pch fails to build the\nmain compilation won\'t run, which is what we want. However, in /fallback builds\nwe need to run the main compilation even if the pch build fails so that the\nmain compilation\'s fallback can run. To achieve this, add a ForceSuccessCommand\nthat pretends that the pch build always succeeded in /fallback builds (the main\ncompilation will then fail to open the pch and run the fallback cl.exe\ninvocation).\n\nIf /Yc /Yu are used in a setup that clang-cl doesn\'t implement yet, clang-cl\nwill now emit a \"not implemented yet; flag ignored\" warning that can be\ndisabled using -Wno-clang-cl-pch.\n\nSince clang-cl doesn\'t yet serialize some important things (most notably\n`pragma comment(lib, ...)`, this feature is disabled by default and only\nenabled by an internal driver flag. Once it\'s more stable, this internal flag\nwill disappear.\n\n(The default stdafx.h setup passes stdafx.h as explicit argument to /Yc but not\nas /FI – instead every single TU has to `#include <stdafx.h>` as first thing it\ndoes. Implementing support for this should be possible with the approach in\nthis patch with minimal frontend changes by passing a --stop-at / --start-at\nflag from the driver to the frontend. This is left for a follow-up. I don\'t\nthink we ever want to support `#pragma hdrstop`, and supporting it with this\napproach isn\'t easy: This approach relies on the driver knowing the pch\nfilename in advance, and `#pragma hdrstop(out.pch)` can set the output\nfilename, so the driver can\'t know about it in advance.)\n\nclang-cl now also honors /Fp and puts pch files in the same spot that cl.exe\nwould put them, but the pch file format is of course incompatible. This has\nramifications on /fallback, so /Yc /Yu aren\'t passed through to cl.exe in\n/fallback builds.\n\nhttp://reviews.llvm.org/D17695\n\nllvm-svn: 262420"},
[h]={{Vb,3942,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  if (YcArg && YuArg && strcmp(YcArg->getValue(), YuArg->getValue()) != 0) {\n    Diag(clang::diag::warn_drv_ycyu_different_arg_clang_cl);"}}
},
},
["warn_dup_category_def"]={
["warn_dup_category_def"]={
[j]={"objc-duplicate-category-definition"},
[k]={"objc-duplicate-category-definition"},
[i]="objc-duplicate-category-definition",
[j]="objc-duplicate-category-definition",
[c]="duplicate definition of category %1 on interface %0",
[c]="warn_dup_category_def",
[d]=g,
[d]="duplicate definition of category %1 on interface %0",
[e]="duplicate definition of category (.*?) on interface (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wobjc\\-duplicate\\-category\\-definition[^\\]]*\\]",
[g]="duplicate definition of category (.*?) on interface (.*?)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-duplicate\\-category\\-definition[^\\]]*\\]",
[a]={Kd,1236199783,Jd,Ld},
[b]={{nil,B,r},{"7.1",nil,m}},
[h]={{wc,1861,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  // ...\n  if (CategoryName) {\n    /// Check for duplicate interface declaration for this category\n    if (ObjCCategoryDecl *Previous = IDecl->FindCategoryDeclaration(CategoryName)) {\n      // ...\n      Diag(CategoryLoc, diag::warn_dup_category_def) << ClassName << CategoryName;"},{"clang/lib/Serialization/ASTReaderDecl.cpp",4311,"/// Given an ObjC interface, goes through the modules and links to the\n/// interface all the categories for it.\nclass ObjCCategoriesVisitor {\n  // ...\n  void add(ObjCCategoryDecl *Cat) {\n    // ...\n    // Check for duplicate categories.\n    if (Cat->getDeclName()) {\n      // ...\n      if (Existing && Reader.getOwningModuleFile(Existing) != Reader.getOwningModuleFile(Cat)) {\n        // ...\n        if (!Ctx.IsEquivalent(Cat, Existing)) {\n          // ...\n          Reader.Diag(Cat->getLocation(), diag::warn_dup_category_def) << Interface->getDeclName() << Cat->getDeclName();"}},
[f]={Ad,1236199783,Cd,Ed},
[k]={
[h]={{Gc,1861,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  // ...\n  if (CategoryName) {\n    /// Check for duplicate interface declaration for this category\n    if (ObjCCategoryDecl *Previous = IDecl->FindCategoryDeclaration(CategoryName)) {\n      // ...\n      Diag(CategoryLoc, diag::warn_dup_category_def) << ClassName << CategoryName;"},{"clang/lib/Serialization/ASTReaderDecl.cpp",4311,"/// Given an ObjC interface, goes through the modules and links to the\n/// interface all the categories for it.\nclass ObjCCategoriesVisitor {\n  // ...\n  void add(ObjCCategoryDecl *Cat) {\n    // ...\n    // Check for duplicate categories.\n    if (Cat->getDeclName()) {\n      // ...\n      if (Existing && Reader.getOwningModuleFile(Existing) != Reader.getOwningModuleFile(Cat)) {\n        // ...\n        if (!Ctx.IsEquivalent(Cat, Existing)) {\n          // ...\n          Reader.Diag(Cat->getLocation(), diag::warn_dup_category_def) << Interface->getDeclName() << Cat->getDeclName();"}},
[l]={
["clang/test/SemaObjCXX/objc-extern-c.mm"]={"clang/test/SemaObjCXX/objc-extern-c.mm:23:15: warning: duplicate definition of category \'C\' on interface \'I2\' [-Wobjc-duplicate-category-definition]"}
["clang/test/SemaObjCXX/objc-extern-c.mm"]={"clang/test/SemaObjCXX/objc-extern-c.mm:23:15: warning: duplicate definition of category \'C\' on interface \'I2\' [-Wobjc-duplicate-category-definition]"}
}
}
},
},
["warn_duplicate_attribute"]={
["warn_duplicate_attribute"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]={{nil,jb,"attribute %0 is already applied with different arguments"},{Sb,nil,"attribute %0 is already applied with different parameters"}},
[c]="warn_duplicate_attribute",
[d]=g,
[d]={{nil,I,"attribute %0 is already applied with different arguments"},{db,nil,"attribute %0 is already applied with different parameters"}},
[e]="attribute (.*?) is already applied with different arguments",
[e]=i,
[f]=vb,
[g]="attribute (.*?) is already applied with different arguments",
[b]=l,
[a]=Db,
[a]={"bcffcdfd18fd",1341871561,"Patch by Anton Lokhmotov to add OpenCL work group size attributes.","Patch by Anton Lokhmotov to add OpenCL work group size attributes.\n\nllvm-svn: 159965"},
[b]=m,
[h]={{E,3231,"// Handles reqd_work_group_size and work_group_size_hint.\ntemplate <typename WorkGroupAttr> static void handleWorkGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Existing && !(Existing->getXDim() == WGSize[0] && Existing->getYDim() == WGSize[1] && Existing->getZDim() == WGSize[2]))\n    S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{E,3252,"// Handles intel_reqd_sub_group_size.\nstatic void handleSubGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Existing && Existing->getSubGroupSize() != SGSize)\n    S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{E,3277,"static void handleVecTypeHint(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (VecTypeHintAttr *A = D->getAttr<VecTypeHintAttr>()) {\n    if (!S.Context.hasSameType(A->getTypeHint(), ParmType)) {\n      S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{E,3689,"static void handleMinVectorWidthAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Existing && Existing->getVectorWidth() != VecWidth) {\n    S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{E,3906,"ErrorAttr *Sema::mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI, StringRef NewUserDiagnostic) {\n  if (const auto *EA = D->getAttr<ErrorAttr>()) {\n    // ...\n    if (EA->getUserDiagnostic() != NewUserDiagnostic) {\n      Diag(CI.getLoc(), diag::warn_duplicate_attribute) << EA;"},{E,6354,"static void handleSwiftBridge(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Warn about duplicate attributes if they have different arguments, but drop\n  // any duplicate attributes regardless.\n  if (const auto *Other = D->getAttr<SwiftBridgeAttr>()) {\n    if (Other->getSwiftType() != BT)\n      S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"}},
[f]={"bcffcdfd18fd",1341871561,"Patch by Anton Lokhmotov to add OpenCL work group size attributes.","Patch by Anton Lokhmotov to add OpenCL work group size attributes.\n\nllvm-svn: 159965"},
[k]={
[h]={{N,3231,"// Handles reqd_work_group_size and work_group_size_hint.\ntemplate <typename WorkGroupAttr> static void handleWorkGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Existing && !(Existing->getXDim() == WGSize[0] && Existing->getYDim() == WGSize[1] && Existing->getZDim() == WGSize[2]))\n    S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{N,3252,"// Handles intel_reqd_sub_group_size.\nstatic void handleSubGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Existing && Existing->getSubGroupSize() != SGSize)\n    S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{N,3277,"static void handleVecTypeHint(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (VecTypeHintAttr *A = D->getAttr<VecTypeHintAttr>()) {\n    if (!S.Context.hasSameType(A->getTypeHint(), ParmType)) {\n      S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{N,3689,"static void handleMinVectorWidthAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Existing && Existing->getVectorWidth() != VecWidth) {\n    S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"},{N,3906,"ErrorAttr *Sema::mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI, StringRef NewUserDiagnostic) {\n  if (const auto *EA = D->getAttr<ErrorAttr>()) {\n    // ...\n    if (EA->getUserDiagnostic() != NewUserDiagnostic) {\n      Diag(CI.getLoc(), diag::warn_duplicate_attribute) << EA;"},{N,6354,"static void handleSwiftBridge(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Warn about duplicate attributes if they have different arguments, but drop\n  // any duplicate attributes regardless.\n  if (const auto *Other = D->getAttr<SwiftBridgeAttr>()) {\n    if (Other->getSwiftType() != BT)\n      S.Diag(AL.getLoc(), diag::warn_duplicate_attribute) << AL;"}},
[l]={
["clang/test/SemaObjC/attr-swift_bridge.m"]={"clang/test/SemaObjC/attr-swift_bridge.m:38:44: warning: attribute \'swift_bridge\' is already applied with different arguments [-Wignored-attributes]"}
["clang/test/SemaObjC/attr-swift_bridge.m"]={"clang/test/SemaObjC/attr-swift_bridge.m:38:44: warning: attribute \'swift_bridge\' is already applied with different arguments [-Wignored-attributes]"}
}
}
},
},
["warn_duplicate_attribute_exact"]={
["warn_duplicate_attribute_exact"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]="attribute %0 is already applied",
[c]="warn_duplicate_attribute_exact",
[d]=g,
[d]="attribute %0 is already applied",
[e]="attribute (.*?) is already applied",
[e]=i,
[f]=vb,
[g]="attribute (.*?) is already applied",
[b]=l,
[a]=Db,
[a]={"317a77f1c7ab",1369265132,"Adding in parsing and the start of semantic support for __sptr and __uptr pointer type qualifiers.  ...","Adding in parsing and the start of semantic support for __sptr and __uptr pointer type qualifiers.  This patch also fixes the correlated __ptr32 and __ptr64 pointer qualifiers so that they are truly type attributes instead of declaration attributes.\n\nFor more information about __sptr and __uptr, see MSDN: http://msdn.microsoft.com/en-us/library/aa983399.aspx\n\nPatch reviewed by Richard Smith.\n\nllvm-svn: 182535"},
[b]=m,
[h]={{Jb,7355,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // ...\n  if (Attrs[NewAttrKind]) {\n    S.Diag(PAttr.getLoc(), diag::warn_duplicate_attribute_exact) << PAttr;"},{Jb,7428,"static bool HandleWebAssemblyFuncrefAttr(TypeProcessingState &State, QualType &QT, ParsedAttr &PAttr) {\n  // ...\n  // You cannot specify duplicate type attributes, so if the attribute has\n  // already been applied, flag it.\n  if (Attrs[NewAttrKind]) {\n    S.Diag(PAttr.getLoc(), diag::warn_duplicate_attribute_exact) << PAttr;"}},
[f]={"317a77f1c7ab",1369265132,"Adding in parsing and the start of semantic support for __sptr and __uptr pointer type qualifiers.  ...","Adding in parsing and the start of semantic support for __sptr and __uptr pointer type qualifiers.  This patch also fixes the correlated __ptr32 and __ptr64 pointer qualifiers so that they are truly type attributes instead of declaration attributes.\n\nFor more information about __sptr and __uptr, see MSDN: http://msdn.microsoft.com/en-us/library/aa983399.aspx\n\nPatch reviewed by Richard Smith.\n\nllvm-svn: 182535"},
[k]={
[h]={{Nb,7355,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // ...\n  if (Attrs[NewAttrKind]) {\n    S.Diag(PAttr.getLoc(), diag::warn_duplicate_attribute_exact) << PAttr;"},{Nb,7428,"static bool HandleWebAssemblyFuncrefAttr(TypeProcessingState &State, QualType &QT, ParsedAttr &PAttr) {\n  // ...\n  // You cannot specify duplicate type attributes, so if the attribute has\n  // already been applied, flag it.\n  if (Attrs[NewAttrKind]) {\n    S.Diag(PAttr.getLoc(), diag::warn_duplicate_attribute_exact) << PAttr;"}},
[l]={
["clang/test/Sema/MicrosoftExtensions.c"]={"clang/test/Sema/MicrosoftExtensions.c:140:14: warning: attribute \'__sptr\' is already applied [-Wignored-attributes]","clang/test/Sema/MicrosoftExtensions.c:164:22: warning: attribute \'__sptr\' is already applied [-Wignored-attributes]","clang/test/Sema/MicrosoftExtensions.c:172:15: warning: attribute \'__ptr32\' is already applied [-Wignored-attributes]","clang/test/Sema/MicrosoftExtensions.c:189:4: warning: attribute \'__ptr32\' is already applied [-Wignored-attributes]","clang/test/Sema/MicrosoftExtensions.c:194:4: warning: attribute \'__ptr64\' is already applied [-Wignored-attributes]"}
["clang/test/Sema/MicrosoftExtensions.c"]={"clang/test/Sema/MicrosoftExtensions.c:140:14: warning: attribute \'__sptr\' is already applied [-Wignored-attributes]","clang/test/Sema/MicrosoftExtensions.c:164:22: warning: attribute \'__sptr\' is already applied [-Wignored-attributes]","clang/test/Sema/MicrosoftExtensions.c:172:15: warning: attribute \'__ptr32\' is already applied [-Wignored-attributes]","clang/test/Sema/MicrosoftExtensions.c:189:4: warning: attribute \'__ptr32\' is already applied [-Wignored-attributes]","clang/test/Sema/MicrosoftExtensions.c:194:4: warning: attribute \'__ptr64\' is already applied [-Wignored-attributes]"}
}
}
},
},
["warn_duplicate_codeseg_attribute"]={
["warn_duplicate_codeseg_attribute"]={
[j]={"section"},
[k]={"section"},
[i]="section",
[j]="section",
[c]={{nil,eb,"duplicate code segment specifiers"}},
[c]={{nil,D,"warn_duplicate_codeseg_attribute"}},
[d]=g,
[d]={{nil,D,"duplicate code segment specifiers"}},
[e]="duplicate code segment specifiers",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wsection[^\\]]*\\]",
[g]="duplicate code segment specifiers",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wsection[^\\]]*\\]",
[a]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))","Add support for __declspec(code_seg(\"segname\"))\n\nAdd support for __declspec(code_seg(\"segname\"))\n\nThis patch is built on the existing support for #pragma code_seg. The code_seg\ndeclspec is allowed on functions and classes. The attribute enables the\nplacement of code into separate named segments, including compiler-generated\nmembers and template instantiations.\n\nFor more information, please see the following:\nhttps://msdn.microsoft.com/en-us/library/dn636922.aspx\n\nA new CodeSeg attribute is used instead of adding a new spelling to the existing\nSection attribute since they don’t apply to the same Subjects. Section\nattributes are also added for the code_seg declspec since they are used for\n#pragma code_seg. No CodeSeg attributes are added to the AST.\n\nThe patch is written to match with the Microsoft compiler’s behavior even where\nthat behavior is a little complicated (see https://reviews.llvm.org/D22931, the\nMicrosoft feedback page is no longer available since MS has removed the page).\nThat code is in getImplicitSectionAttrFromClass routine.\n\nDiagnostics messages are added to match with the Microsoft compiler for code-seg\nattribute mismatches on base and derived classes and virtual overrides.\n\n\nDifferential Revision: https://reviews.llvm.org/D43352\n\nllvm-svn: 332470"},
[b]={{nil,D,m}},
[h]={{E,3400,"static void handleCodeSegAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    if (!ExistingAttr->isImplicit()) {\n      S.Diag(AL.getLoc(), ExistingAttr->getName() == Str ? diag::warn_duplicate_codeseg_attribute : diag::err_conflicting_codeseg_attribute);"}},
[f]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))","Add support for __declspec(code_seg(\"segname\"))\n\nAdd support for __declspec(code_seg(\"segname\"))\n\nThis patch is built on the existing support for #pragma code_seg. The code_seg\ndeclspec is allowed on functions and classes. The attribute enables the\nplacement of code into separate named segments, including compiler-generated\nmembers and template instantiations.\n\nFor more information, please see the following:\nhttps://msdn.microsoft.com/en-us/library/dn636922.aspx\n\nA new CodeSeg attribute is used instead of adding a new spelling to the existing\nSection attribute since they don’t apply to the same Subjects. Section\nattributes are also added for the code_seg declspec since they are used for\n#pragma code_seg. No CodeSeg attributes are added to the AST.\n\nThe patch is written to match with the Microsoft compiler’s behavior even where\nthat behavior is a little complicated (see https://reviews.llvm.org/D22931, the\nMicrosoft feedback page is no longer available since MS has removed the page).\nThat code is in getImplicitSectionAttrFromClass routine.\n\nDiagnostics messages are added to match with the Microsoft compiler for code-seg\nattribute mismatches on base and derived classes and virtual overrides.\n\n\nDifferential Revision: https://reviews.llvm.org/D43352\n\nllvm-svn: 332470"},
[k]={
[h]={{N,3400,"static void handleCodeSegAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    if (!ExistingAttr->isImplicit()) {\n      S.Diag(AL.getLoc(), ExistingAttr->getName() == Str ? diag::warn_duplicate_codeseg_attribute : diag::err_conflicting_codeseg_attribute);"}},
[l]={
["clang/test/SemaCXX/code-seg.cpp"]={"clang/test/SemaCXX/code-seg.cpp:81:44: warning: duplicate code segment specifiers [-Wsection]","clang/test/SemaCXX/code-seg.cpp:87:47: warning: duplicate code segment specifiers [-Wsection]","clang/test/SemaCXX/code-seg.cpp:98:46: warning: duplicate code segment specifiers [-Wsection]"}
["clang/test/SemaCXX/code-seg.cpp"]={"clang/test/SemaCXX/code-seg.cpp:81:44: warning: duplicate code segment specifiers [-Wsection]","clang/test/SemaCXX/code-seg.cpp:87:47: warning: duplicate code segment specifiers [-Wsection]","clang/test/SemaCXX/code-seg.cpp:98:46: warning: duplicate code segment specifiers [-Wsection]"}
}
}
},
},
["warn_duplicate_declspec"]={
["warn_duplicate_declspec"]={
[j]={"duplicate-decl-specifier"},
[k]={"duplicate-decl-specifier"},
[i]="duplicate-decl-specifier",
[j]="duplicate-decl-specifier",
[c]="duplicate \'%0\' declaration specifier",
[c]="warn_duplicate_declspec",
[d]=g,
[d]="duplicate \'%0\' declaration specifier",
[e]="duplicate \'(.*?)\' declaration specifier",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-decl\\-specifier[^\\]]*\\]",
[g]="duplicate \'(.*?)\' declaration specifier",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-decl\\-specifier[^\\]]*\\]",
[a]={"3731b3300962",1346187340,"Splitting the duplicated decl spec extension warning into two: one is an ExtWarn and the other a van...","Splitting the duplicated decl spec extension warning into two: one is an ExtWarn and the other a vanilla warning.  This addresses PR13705, where const char const * wouldn\'t warn unless -pedantic was specified under the right conditions.\n\nllvm-svn: 162793"},
[b]={{nil,B,r},{"7.1",nil,m}},
[h]={{oc,483,"template <class T> static bool BadSpecifier(T TNew, T TPrev, const char *&PrevSpec, unsigned &DiagID, bool IsExtension = true) {\n  // ...\n  if (TNew != TPrev)\n  // ...\n  else\n    DiagID = IsExtension ? diag::ext_warn_duplicate_declspec : diag::warn_duplicate_declspec;"},{oc,861,"bool DeclSpec::SetTypeSpecSat(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // Cannot set twice\n  if (TypeSpecSat) {\n    DiagID = diag::warn_duplicate_declspec;"},{oc,1001,"bool DeclSpec::setFunctionSpecInline(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // \'inline inline\' is ok.  However, since this is likely not what the user\n  // intended, we will always warn, similar to duplicates of type qualifiers.\n  if (FS_inline_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{oc,1013,"bool DeclSpec::setFunctionSpecForceInline(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  if (FS_forceinline_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{oc,1028,"bool DeclSpec::setFunctionSpecVirtual(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // \'virtual virtual\' is ok, but warn as this is likely not what the user\n  // intended.\n  if (FS_virtual_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{oc,1062,"bool DeclSpec::setFunctionSpecNoreturn(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // \'_Noreturn _Noreturn\' is ok, but warn as this is likely not what the user\n  // intended.\n  if (FS_noreturn_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{oc,1080,"bool DeclSpec::SetFriendSpec(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  if (Friend_specified) {\n    // ...\n    DiagID = diag::warn_duplicate_declspec;"},{E,8296,"static void handleOpenCLAccessAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Check if there is only one access qualifier.\n  if (D->hasAttr<OpenCLAccessAttr>()) {\n    if (D->getAttr<OpenCLAccessAttr>()->getSemanticSpelling() == AL.getSemanticSpelling()) {\n      S.Diag(AL.getLoc(), diag::warn_duplicate_declspec) << AL.getAttrName()->getName() << AL.getRange();"},{Jb,8435,"#include \"clang/Basic/OpenCLImageTypes.def\"\n    // ...\n    if (PrevAccessQual == AttrName.ltrim(\"_\")) {\n      // ...\n      S.Diag(Attr.getLoc(), diag::warn_duplicate_declspec) << AttrName << Attr.getRange();"}}
[f]={"3731b3300962",1346187340,"Splitting the duplicated decl spec extension warning into two: one is an ExtWarn and the other a van...","Splitting the duplicated decl spec extension warning into two: one is an ExtWarn and the other a vanilla warning.  This addresses PR13705, where const char const * wouldn\'t warn unless -pedantic was specified under the right conditions.\n\nllvm-svn: 162793"},
[h]={{uc,483,"template <class T> static bool BadSpecifier(T TNew, T TPrev, const char *&PrevSpec, unsigned &DiagID, bool IsExtension = true) {\n  // ...\n  if (TNew != TPrev)\n  // ...\n  else\n    DiagID = IsExtension ? diag::ext_warn_duplicate_declspec : diag::warn_duplicate_declspec;"},{uc,861,"bool DeclSpec::SetTypeSpecSat(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // Cannot set twice\n  if (TypeSpecSat) {\n    DiagID = diag::warn_duplicate_declspec;"},{uc,1001,"bool DeclSpec::setFunctionSpecInline(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // \'inline inline\' is ok.  However, since this is likely not what the user\n  // intended, we will always warn, similar to duplicates of type qualifiers.\n  if (FS_inline_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{uc,1013,"bool DeclSpec::setFunctionSpecForceInline(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  if (FS_forceinline_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{uc,1028,"bool DeclSpec::setFunctionSpecVirtual(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // \'virtual virtual\' is ok, but warn as this is likely not what the user\n  // intended.\n  if (FS_virtual_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{uc,1062,"bool DeclSpec::setFunctionSpecNoreturn(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  // \'_Noreturn _Noreturn\' is ok, but warn as this is likely not what the user\n  // intended.\n  if (FS_noreturn_specified) {\n    DiagID = diag::warn_duplicate_declspec;"},{uc,1080,"bool DeclSpec::SetFriendSpec(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n  if (Friend_specified) {\n    // ...\n    DiagID = diag::warn_duplicate_declspec;"},{N,8296,"static void handleOpenCLAccessAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Check if there is only one access qualifier.\n  if (D->hasAttr<OpenCLAccessAttr>()) {\n    if (D->getAttr<OpenCLAccessAttr>()->getSemanticSpelling() == AL.getSemanticSpelling()) {\n      S.Diag(AL.getLoc(), diag::warn_duplicate_declspec) << AL.getAttrName()->getName() << AL.getRange();"},{Nb,8435,"#include \"clang/Basic/OpenCLImageTypes.def\"\n    // ...\n    if (PrevAccessQual == AttrName.ltrim(\"_\")) {\n      // ...\n      S.Diag(Attr.getLoc(), diag::warn_duplicate_declspec) << AttrName << Attr.getRange();"}}
},
},
["warn_duplicate_enum_values"]={
["warn_duplicate_enum_values"]={
[j]={"duplicate-enum"},
[k]={"duplicate-enum"},
[i]="duplicate-enum",
[j]="duplicate-enum",
[c]="element %0 has been implicitly assigned %1 which another element has been assigned",
[c]="warn_duplicate_enum_values",
[d]=g,
[d]="element %0 has been implicitly assigned %1 which another element has been assigned",
[e]="element (.*?) has been implicitly assigned (.*?) which another element has been assigned",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-enum[^\\]]*\\]",
[g]="element (.*?) has been implicitly assigned (.*?) which another element has been assigned",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-enum[^\\]]*\\]",
[a]={"73e306e548cd",1346358744,"Add -Wduplicate-enum warning.  Clang will emit this warning when an implicitly","Add -Wduplicate-enum warning.  Clang will emit this warning when an implicitly\ninitiated enum constant has the same value as another enum constant.\n\nFor instance:\nenum test { A, B, C = -1, D, E = 1 };\nClang will warn that:\n A and D both have value 0\n B and E both have value 1\n\nA few exceptions are made to keep the noise down.  Enum constants which are\ninitialized to another enum constant, or an enum constant plus or minus 1 will\nnot trigger this warning.  Also, anonymous enums are not checked.\n\nllvm-svn: 162938"},
[b]=m,
[h]={{D,19575,"// Emits a warning when an element is implicitly set a value that\n// a previous element has already been set to.\nstatic void CheckForDuplicateEnumValues(Sema &S, ArrayRef<Decl *> Elements, EnumDecl *Enum, QualType EnumType) {\n  // ...\n  if (S.Diags.isIgnored(diag::warn_duplicate_enum_values, Enum->getLocation()))"},{D,19662,"// Emits a warning when an element is implicitly set a value that\n// a previous element has already been set to.\nstatic void CheckForDuplicateEnumValues(Sema &S, ArrayRef<Decl *> Elements, EnumDecl *Enum, QualType EnumType) {\n  // ...\n  // Emit diagnostics.\n  for (const auto &Vec : DupVector) {\n    // ...\n    S.Diag(FirstECD->getLocation(), diag::warn_duplicate_enum_values) << FirstECD << toString(FirstECD->getInitVal(), 10) << FirstECD->getSourceRange();"}},
[f]={"73e306e548cd",1346358744,"Add -Wduplicate-enum warning.  Clang will emit this warning when an implicitly","Add -Wduplicate-enum warning.  Clang will emit this warning when an implicitly\ninitiated enum constant has the same value as another enum constant.\n\nFor instance:\nenum test { A, B, C = -1, D, E = 1 };\nClang will warn that:\n A and D both have value 0\n B and E both have value 1\n\nA few exceptions are made to keep the noise down.  Enum constants which are\ninitialized to another enum constant, or an enum constant plus or minus 1 will\nnot trigger this warning.  Also, anonymous enums are not checked.\n\nllvm-svn: 162938"},
[k]={
[h]={{M,19575,"// Emits a warning when an element is implicitly set a value that\n// a previous element has already been set to.\nstatic void CheckForDuplicateEnumValues(Sema &S, ArrayRef<Decl *> Elements, EnumDecl *Enum, QualType EnumType) {\n  // ...\n  if (S.Diags.isIgnored(diag::warn_duplicate_enum_values, Enum->getLocation()))"},{M,19662,"// Emits a warning when an element is implicitly set a value that\n// a previous element has already been set to.\nstatic void CheckForDuplicateEnumValues(Sema &S, ArrayRef<Decl *> Elements, EnumDecl *Enum, QualType EnumType) {\n  // ...\n  // Emit diagnostics.\n  for (const auto &Vec : DupVector) {\n    // ...\n    S.Diag(FirstECD->getLocation(), diag::warn_duplicate_enum_values) << FirstECD << toString(FirstECD->getInitVal(), 10) << FirstECD->getSourceRange();"}},
[l]={
["clang/test/Sema/warn-duplicate-enum.c"]={"clang/test/Sema/warn-duplicate-enum.c:6:3: warning: element \'A3\' has been implicitly assigned 0 which another element has been assigned [-Wduplicate-enum]","clang/test/Sema/warn-duplicate-enum.c:14:3: warning: element \'B5\' has been implicitly assigned -1 which another element has been assigned [-Wduplicate-enum]","clang/test/Sema/warn-duplicate-enum.c:11:3: warning: element \'B2\' has been implicitly assigned 0 which another element has been assigned [-Wduplicate-enum]","clang/test/Sema/warn-duplicate-enum.c:18:10: warning: element \'C1\' has been implicitly assigned 0 which another element has been assigned [-Wduplicate-enum]","clang/test/Sema/warn-duplicate-enum.c:24:3: warning: element \'D3\' has been implicitly assigned 2 which another element has been assigned [-Wduplicate-enum]"}
["clang/test/Sema/warn-duplicate-enum.c"]={"clang/test/Sema/warn-duplicate-enum.c:6:3: warning: element \'A3\' has been implicitly assigned 0 which another element has been assigned [-Wduplicate-enum]","clang/test/Sema/warn-duplicate-enum.c:14:3: warning: element \'B5\' has been implicitly assigned -1 which another element has been assigned [-Wduplicate-enum]","clang/test/Sema/warn-duplicate-enum.c:11:3: warning: element \'B2\' has been implicitly assigned 0 which another element has been assigned [-Wduplicate-enum]","clang/test/Sema/warn-duplicate-enum.c:18:10: warning: element \'C1\' has been implicitly assigned 0 which another element has been assigned [-Wduplicate-enum]","clang/test/Sema/warn-duplicate-enum.c:24:3: warning: element \'D3\' has been implicitly assigned 2 which another element has been assigned [-Wduplicate-enum]"}
}
}
},
},
["warn_duplicate_method_decl"]={
["warn_duplicate_method_decl"]={
[j]={"duplicate-method-match"},
[k]={"duplicate-method-match"},
[i]="duplicate-method-match",
[j]="duplicate-method-match",
[c]="multiple declarations of method %0 found and ignored",
[c]="warn_duplicate_method_decl",
[d]=g,
[d]="multiple declarations of method %0 found and ignored",
[e]="multiple declarations of method (.*?) found and ignored",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-method\\-match[^\\]]*\\]",
[g]="multiple declarations of method (.*?) found and ignored",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-method\\-match[^\\]]*\\]",
[a]={"c17c86b56ca6",1323805234,"objc: diagnose duplicate declaration of methods","objc: diagnose duplicate declaration of methods\nin classes. // rdar://10535349\n\nllvm-svn: 146504"},
[b]=m,
[h]={{wc,4037,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  for (unsigned i = 0, e = allMethods.size(); i != e; i++) {\n    // ...\n    if (Method->isInstanceMethod()) {\n      // ...\n      if ((isInterfaceDeclKind && PrevMethod && !match) || (checkIdenticalMethods && match)) {\n      // ...\n      } else {\n        if (PrevMethod) {\n          // ...\n          if (!Context.getSourceManager().isInSystemHeader(Method->getLocation()))\n            Diag(Method->getLocation(), diag::warn_duplicate_method_decl) << Method->getDeclName();"},{wc,4061,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  for (unsigned i = 0, e = allMethods.size(); i != e; i++) {\n    // ...\n    if (Method->isInstanceMethod()) {\n    // ...\n    } else {\n      // ...\n      if ((isInterfaceDeclKind && PrevMethod && !match) || (checkIdenticalMethods && match)) {\n      // ...\n      } else {\n        if (PrevMethod) {\n          // ...\n          if (!Context.getSourceManager().isInSystemHeader(Method->getLocation()))\n            Diag(Method->getLocation(), diag::warn_duplicate_method_decl) << Method->getDeclName();"}},
[f]={"c17c86b56ca6",1323805234,"objc: diagnose duplicate declaration of methods","objc: diagnose duplicate declaration of methods\nin classes. // rdar://10535349\n\nllvm-svn: 146504"},
[k]={
[h]={{Gc,4037,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  for (unsigned i = 0, e = allMethods.size(); i != e; i++) {\n    // ...\n    if (Method->isInstanceMethod()) {\n      // ...\n      if ((isInterfaceDeclKind && PrevMethod && !match) || (checkIdenticalMethods && match)) {\n      // ...\n      } else {\n        if (PrevMethod) {\n          // ...\n          if (!Context.getSourceManager().isInSystemHeader(Method->getLocation()))\n            Diag(Method->getLocation(), diag::warn_duplicate_method_decl) << Method->getDeclName();"},{Gc,4061,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  for (unsigned i = 0, e = allMethods.size(); i != e; i++) {\n    // ...\n    if (Method->isInstanceMethod()) {\n    // ...\n    } else {\n      // ...\n      if ((isInterfaceDeclKind && PrevMethod && !match) || (checkIdenticalMethods && match)) {\n      // ...\n      } else {\n        if (PrevMethod) {\n          // ...\n          if (!Context.getSourceManager().isInSystemHeader(Method->getLocation()))\n            Diag(Method->getLocation(), diag::warn_duplicate_method_decl) << Method->getDeclName();"}},
[l]={
["clang/test/SemaObjC/class-conforming-protocol-1.m"]={"clang/test/SemaObjC/class-conforming-protocol-1.m:15:1: warning: multiple declarations of method \'METH3\' found and ignored [-Wduplicate-method-match]"}
["clang/test/SemaObjC/class-conforming-protocol-1.m"]={"clang/test/SemaObjC/class-conforming-protocol-1.m:15:1: warning: multiple declarations of method \'METH3\' found and ignored [-Wduplicate-method-match]"}
}
}
},
},
["warn_duplicate_module_file_extension"]={
["warn_duplicate_module_file_extension"]={
[j]={"module-file-extension"},
[k]={"module-file-extension"},
[i]="module-file-extension",
[j]="module-file-extension",
[c]="duplicate module file extension block name \'%0\'",
[c]="warn_duplicate_module_file_extension",
[d]=g,
[d]="duplicate module file extension block name \'%0\'",
[e]="duplicate module file extension block name \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmodule\\-file\\-extension[^\\]]*\\]",
[g]="duplicate module file extension block name \'(.*?)\'",
[a]=" \\[(?:\\-Werror,)?\\-Wmodule\\-file\\-extension[^\\]]*\\]",
[b]="AST Deserialization Issue",
[b]="AST Deserialization Issue",
[a]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files.","Introduce module file extensions to piggy-back data onto module files.\n\nIntroduce the notion of a module file extension, which introduces\nadditional information into a module file at the time it is built that\ncan then be queried when the module file is read. Module file\nextensions are identified by a block name (which must be unique to the\nextension) and can write any bitstream records into their own\nextension block within the module file. When a module file is loaded,\nany extension blocks are matched up with module file extension\nreaders, that are per-module-file and are given access to the input\nbitstream.\n\nNote that module file extensions can only be introduced by\nprogrammatic clients that have access to the CompilerInvocation. There\nis only one such extension at the moment, which is used for testing\nthe module file extension harness. As a future direction, one could\nimagine allowing the plugin mechanism to introduce new module file\nextensions.\n\nllvm-svn: 251955"},
[f]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files.","Introduce module file extensions to piggy-back data onto module files.\n\nIntroduce the notion of a module file extension, which introduces\nadditional information into a module file at the time it is built that\ncan then be queried when the module file is read. Module file\nextensions are identified by a block name (which must be unique to the\nextension) and can write any bitstream records into their own\nextension block within the module file. When a module file is loaded,\nany extension blocks are matched up with module file extension\nreaders, that are per-module-file and are given access to the input\nbitstream.\n\nNote that module file extensions can only be introduced by\nprogrammatic clients that have access to the CompilerInvocation. There\nis only one such extension at the moment, which is used for testing\nthe module file extension harness. As a future direction, one could\nimagine allowing the plugin mechanism to introduce new module file\nextensions.\n\nllvm-svn: 251955"},
[h]={{"clang/lib/Serialization/ASTReader.cpp",10007,"ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache, ASTContext *Context, const PCHContainerReader &PCHContainerRdr, ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions, StringRef isysroot, DisableValidationForModuleKind DisableValidationKind, bool AllowASTWithCompilerErrors, bool AllowConfigurationMismatch, bool ValidateSystemInputs, bool ValidateASTInputFilesContent, bool UseGlobalIndex, std::unique_ptr<llvm::Timer> ReadTimer) : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH) ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP)) : cast<ASTReaderListener>(new PCHValidator(PP, *this))), SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()), PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP), ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache, PCHContainerRdr, PP.getHeaderSearchInfo()), DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot), DisableValidationKind(DisableValidationKind), AllowASTWithCompilerErrors(AllowASTWithCompilerErrors), AllowConfigurationMismatch(AllowConfigurationMismatch), ValidateSystemInputs(ValidateSystemInputs), ValidateASTInputFilesContent(ValidateASTInputFilesContent), UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {\n  // ...\n  for (const auto &Ext : Extensions) {\n    // ...\n    if (Known != ModuleFileExtensions.end()) {\n      Diags.Report(diag::warn_duplicate_module_file_extension) << BlockName;"}},
[h]={{"clang/lib/Serialization/ASTReader.cpp",10007,"ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache, ASTContext *Context, const PCHContainerReader &PCHContainerRdr, ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions, StringRef isysroot, DisableValidationForModuleKind DisableValidationKind, bool AllowASTWithCompilerErrors, bool AllowConfigurationMismatch, bool ValidateSystemInputs, bool ValidateASTInputFilesContent, bool UseGlobalIndex, std::unique_ptr<llvm::Timer> ReadTimer) : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH) ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP)) : cast<ASTReaderListener>(new PCHValidator(PP, *this))), SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()), PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP), ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache, PCHContainerRdr, PP.getHeaderSearchInfo()), DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot), DisableValidationKind(DisableValidationKind), AllowASTWithCompilerErrors(AllowASTWithCompilerErrors), AllowConfigurationMismatch(AllowConfigurationMismatch), ValidateSystemInputs(ValidateSystemInputs), ValidateASTInputFilesContent(ValidateASTInputFilesContent), UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {\n  // ...\n  for (const auto &Ext : Extensions) {\n    // ...\n    if (Known != ModuleFileExtensions.end()) {\n      Diags.Report(diag::warn_duplicate_module_file_extension) << BlockName;"}},
[k]={
[l]={
["clang/test/Modules/extensions.c"]={"warning: duplicate module file extension block name \'clang.testA\' [-Wmodule-file-extension]"}
["clang/test/Modules/extensions.c"]={"warning: duplicate module file extension block name \'clang.testA\' [-Wmodule-file-extension]"}
}
}
},
},
["warn_duplicate_protocol_def"]={
["warn_duplicate_protocol_def"]={
[j]={"duplicate-protocol"},
[k]={"duplicate-protocol"},
[i]="duplicate-protocol",
[j]="duplicate-protocol",
[c]="duplicate protocol definition of %0 is ignored",
[c]="warn_duplicate_protocol_def",
[d]=g,
[d]="duplicate protocol definition of %0 is ignored",
[e]="duplicate protocol definition of (.*?) is ignored",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-protocol[^\\]]*\\]",
[g]="duplicate protocol definition of (.*?) is ignored",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-protocol[^\\]]*\\]",
[a]={"54d569c51d23",1239061412,"Warn instead of error on duplicate protocol definitions.","Warn instead of error on duplicate protocol definitions.\nBe kind to so many projects which are doing this (and be\nlike gcc).\n\nllvm-svn: 68474"},
[b]=m,
[h]={{wc,1247,"ObjCProtocolDecl *Sema::ActOnStartProtocolInterface(SourceLocation AtProtoInterfaceLoc, IdentifierInfo *ProtocolName, SourceLocation ProtocolLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  // ...\n  if (ObjCProtocolDecl *Def = PrevDecl ? PrevDecl->getDefinition() : nullptr) {\n    // ...\n    if (SkipBody && !hasVisibleDefinition(Def)) {\n    // ...\n    } else {\n      // ...\n      Diag(ProtocolLoc, diag::warn_duplicate_protocol_def) << ProtocolName;"}},
[f]={"54d569c51d23",1239061412,"Warn instead of error on duplicate protocol definitions.","Warn instead of error on duplicate protocol definitions.\nBe kind to so many projects which are doing this (and be\nlike gcc).\n\nllvm-svn: 68474"},
[k]={
[h]={{Gc,1247,"ObjCProtocolDecl *Sema::ActOnStartProtocolInterface(SourceLocation AtProtoInterfaceLoc, IdentifierInfo *ProtocolName, SourceLocation ProtocolLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  // ...\n  if (ObjCProtocolDecl *Def = PrevDecl ? PrevDecl->getDefinition() : nullptr) {\n    // ...\n    if (SkipBody && !hasVisibleDefinition(Def)) {\n    // ...\n    } else {\n      // ...\n      Diag(ProtocolLoc, diag::warn_duplicate_protocol_def) << ProtocolName;"}},
[l]={
["clang/test/SemaObjC/protocols.m"]={"clang/test/SemaObjC/protocols.m:35:11: warning: duplicate protocol definition of \'PROTO\' is ignored [-Wduplicate-protocol]"}
["clang/test/SemaObjC/protocols.m"]={"clang/test/SemaObjC/protocols.m:35:11: warning: duplicate protocol definition of \'PROTO\' is ignored [-Wduplicate-protocol]"}
}
}
},
},
["warn_dyn_class_memaccess"]={
["warn_dyn_class_memaccess"]={
[j]={"dynamic-class-memaccess","suspicious-memaccess"},
[k]={"dynamic-class-memaccess","suspicious-memaccess"},
[i]="dynamic-class-memaccess",
[j]="dynamic-class-memaccess",
[c]="%select{destination for|source of|first operand of|second operand of}0 this %1 call is a pointer to %select{|class containing a }2dynamic class %3; vtable pointer will be %select{overwritten|copied|moved|compared}4",
[c]="warn_dyn_class_memaccess",
[d]=g,
[d]="%select{destination for|source of|first operand of|second operand of}0 this %1 call is a pointer to %select{|class containing a }2dynamic class %3; vtable pointer will be %select{overwritten|copied|moved|compared}4",
[e]="(?:destination for|source of|first operand of|second operand of) this (.*?) call is a pointer to (?:|class containing a )dynamic class (.*?); vtable pointer will be (?:overwritten|copied|moved|compared)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdynamic\\-class\\-memaccess[^\\]]*\\]",
[g]="(?:destination for|source of|first operand of|second operand of) this (.*?) call is a pointer to (?:|class containing a )dynamic class (.*?); vtable pointer will be (?:overwritten|copied|moved|compared)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdynamic\\-class\\-memaccess[^\\]]*\\]",
[a]={"3bb2a8153910",1304455053,"Extend -Wnon-pod-memset to also encompass memcpy() and memmove(),","Extend -Wnon-pod-memset to also encompass memcpy() and memmove(),\nchecking both the source and the destination operands, renaming the\nwarning group to -Wnon-pod-memaccess and tweaking the diagnostic text\nin the process.\n\nllvm-svn: 130786"},
[b]=m,
[h]={{r,12572,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  // ...\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    // ...\n    if (const CXXRecordDecl *ContainedRD = getContainedDynamicClass(PointeeTy, IsContained)) {\n      // ...\n      DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_dyn_class_memaccess) << (IsCmp ? ArgIdx + 2 : ArgIdx) << FnName << IsContained << ContainedRD << OperationType << Call->getCallee()->getSourceRange());"}},
[f]={"3bb2a8153910",1304455053,"Extend -Wnon-pod-memset to also encompass memcpy() and memmove(),","Extend -Wnon-pod-memset to also encompass memcpy() and memmove(),\nchecking both the source and the destination operands, renaming the\nwarning group to -Wnon-pod-memaccess and tweaking the diagnostic text\nin the process.\n\nllvm-svn: 130786"},
[k]={
[h]={{t,12572,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  // ...\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    // ...\n    if (const CXXRecordDecl *ContainedRD = getContainedDynamicClass(PointeeTy, IsContained)) {\n      // ...\n      DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::warn_dyn_class_memaccess) << (IsCmp ? ArgIdx + 2 : ArgIdx) << FnName << IsContained << ContainedRD << OperationType << Call->getCallee()->getSourceRange());"}},
[l]={
["clang/test/SemaCXX/warn-bad-memaccess.cpp"]={"clang/test/SemaCXX/warn-bad-memaccess.cpp:34:10: warning: destination for this \'memset\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:37:10: warning: destination for this \'memset\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:41:10: warning: destination for this \'memset\' call is a pointer to dynamic class \'X2\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:45:11: warning: destination for this \'memmove\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:48:14: warning: source of this \'memmove\' call is a pointer to dynamic class \'X1\'; vtable pointer will be moved [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:51:10: warning: destination for this \'memcpy\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:54:13: warning: source of this \'memcpy\' call is a pointer to dynamic class \'X1\'; vtable pointer will be copied [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:57:10: warning: first operand of this \'memcmp\' call is a pointer to dynamic class \'X1\'; vtable pointer will be compared [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:60:13: warning: second operand of this \'memcmp\' call is a pointer to dynamic class \'X1\'; vtable pointer will be compared [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:63:8: warning: first operand of this \'bcmp\' call is a pointer to dynamic class \'X1\'; vtable pointer will be compared [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:66:11: warning: second operand of this \'bcmp\' call is a pointer to dynamic class \'X1\'; vtable pointer will be compared [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:70:20: warning: destination for this \'__builtin_memset\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:73:20: warning: destination for this \'__builtin_memset\' call is a pointer to dynamic class \'X2\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:77:21: warning: destination for this \'__builtin_memmove\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:80:24: warning: source of this \'__builtin_memmove\' call is a pointer to dynamic class \'X1\'; vtable pointer will be moved [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:83:20: warning: destination for this \'__builtin_memcpy\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:86:23: warning: source of this \'__builtin_memcpy\' call is a pointer to dynamic class \'X1\'; vtable pointer will be copied [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:90:26: warning: destination for this \'__builtin___memset_chk\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:93:26: warning: destination for this \'__builtin___memset_chk\' call is a pointer to dynamic class \'X2\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:97:27: warning: destination for this \'__builtin___memmove_chk\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:100:30: warning: source of this \'__builtin___memmove_chk\' call is a pointer to dynamic class \'X1\'; vtable pointer will be moved [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:103:26: warning: destination for this \'__builtin___memcpy_chk\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:106:29: warning: source of this \'__builtin___memcpy_chk\' call is a pointer to dynamic class \'X1\'; vtable pointer will be copied [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:112:10: warning: destination for this \'memset\' call is a pointer to class containing a dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:115:10: warning: destination for this \'memset\' call is a pointer to class containing a dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:118:10: warning: destination for this \'memset\' call is a pointer to class containing a dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]"}
["clang/test/SemaCXX/warn-bad-memaccess.cpp"]={"clang/test/SemaCXX/warn-bad-memaccess.cpp:34:10: warning: destination for this \'memset\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:37:10: warning: destination for this \'memset\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:41:10: warning: destination for this \'memset\' call is a pointer to dynamic class \'X2\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:45:11: warning: destination for this \'memmove\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:48:14: warning: source of this \'memmove\' call is a pointer to dynamic class \'X1\'; vtable pointer will be moved [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:51:10: warning: destination for this \'memcpy\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:54:13: warning: source of this \'memcpy\' call is a pointer to dynamic class \'X1\'; vtable pointer will be copied [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:57:10: warning: first operand of this \'memcmp\' call is a pointer to dynamic class \'X1\'; vtable pointer will be compared [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:60:13: warning: second operand of this \'memcmp\' call is a pointer to dynamic class \'X1\'; vtable pointer will be compared [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:63:8: warning: first operand of this \'bcmp\' call is a pointer to dynamic class \'X1\'; vtable pointer will be compared [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:66:11: warning: second operand of this \'bcmp\' call is a pointer to dynamic class \'X1\'; vtable pointer will be compared [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:70:20: warning: destination for this \'__builtin_memset\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:73:20: warning: destination for this \'__builtin_memset\' call is a pointer to dynamic class \'X2\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:77:21: warning: destination for this \'__builtin_memmove\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:80:24: warning: source of this \'__builtin_memmove\' call is a pointer to dynamic class \'X1\'; vtable pointer will be moved [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:83:20: warning: destination for this \'__builtin_memcpy\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:86:23: warning: source of this \'__builtin_memcpy\' call is a pointer to dynamic class \'X1\'; vtable pointer will be copied [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:90:26: warning: destination for this \'__builtin___memset_chk\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:93:26: warning: destination for this \'__builtin___memset_chk\' call is a pointer to dynamic class \'X2\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:97:27: warning: destination for this \'__builtin___memmove_chk\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:100:30: warning: source of this \'__builtin___memmove_chk\' call is a pointer to dynamic class \'X1\'; vtable pointer will be moved [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:103:26: warning: destination for this \'__builtin___memcpy_chk\' call is a pointer to dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:106:29: warning: source of this \'__builtin___memcpy_chk\' call is a pointer to dynamic class \'X1\'; vtable pointer will be copied [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:112:10: warning: destination for this \'memset\' call is a pointer to class containing a dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:115:10: warning: destination for this \'memset\' call is a pointer to class containing a dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]","clang/test/SemaCXX/warn-bad-memaccess.cpp:118:10: warning: destination for this \'memset\' call is a pointer to class containing a dynamic class \'X1\'; vtable pointer will be overwritten [-Wdynamic-class-memaccess]"}
}
}
},
},
["warn_eagerly_load_for_standard_cplusplus_modules"]={
["warn_eagerly_load_for_standard_cplusplus_modules"]={
[j]={"eager-load-cxx-named-modules"},
[k]={"eager-load-cxx-named-modules"},
[i]="eager-load-cxx-named-modules",
[j]="eager-load-cxx-named-modules",
[c]="the form \'-fmodule-file=<BMI-path>\' is deprecated for standard C++ named modules;consider to use \'-fmodule-file=<module-name>=<BMI-path>\' instead",
[c]="warn_eagerly_load_for_standard_cplusplus_modules",
[d]=g,
[d]="the form \'-fmodule-file=<BMI-path>\' is deprecated for standard C++ named modules;consider to use \'-fmodule-file=<module-name>=<BMI-path>\' instead",
[e]="the form \'\\-fmodule\\-file\\=\\<BMI\\-path\\>\' is deprecated for standard C\\+\\+ named modules;consider to use \'\\-fmodule\\-file\\=\\<module\\-name\\>\\=\\<BMI\\-path\\>\' instead",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Weager\\-load\\-cxx\\-named\\-modules[^\\]]*\\]",
[g]="the form \'\\-fmodule\\-file\\=\\<BMI\\-path\\>\' is deprecated for standard C\\+\\+ named modules;consider to use \'\\-fmodule\\-file\\=\\<module\\-name\\>\\=\\<BMI\\-path\\>\' instead",
[a]=" \\[(?:\\-Werror,)?\\-Weager\\-load\\-cxx\\-named\\-modules[^\\]]*\\]",
[b]="AST Deserialization Issue",
[b]="AST Deserialization Issue",
[a]={"ba6e747f9b05",1670524276,"[clang] Set ShowInSystemHeader for module-build and module-import remarks","[clang] Set ShowInSystemHeader for module-build and module-import remarks\n\nWithout this change, the use of `-Rmodule-build` and `-Rmodule-import` only\nproduces diagnostics for modules built or imported by non-system code.\n\nFor example, if a project source file requires the Foundation module to be\nbuilt, then `-Rmodule-build` will show a single diagnostic for Foundation, but\nnot in turn for any of Foundation\'s (direct or indirect) dependencies. This is\nbecause the locations of those transitive module builds are initiated from\nsystem headers, which are ignored by default. When wanting to observe module\nbuilding/importing, the system modules can represent a significant amount of\nmodule diagnostics, and I think should be shown by default when\n`-Rmodule-build` and `-Rmodule-import` are specified.\n\nI noticed some other remarks use `ShowInSystemHeader`.\n\nDifferential Revision: https://reviews.llvm.org/D139653"},
[f]={"ba6e747f9b05",1670524276,"[clang] Set ShowInSystemHeader for module-build and module-import remarks","[clang] Set ShowInSystemHeader for module-build and module-import remarks\n\nWithout this change, the use of `-Rmodule-build` and `-Rmodule-import` only\nproduces diagnostics for modules built or imported by non-system code.\n\nFor example, if a project source file requires the Foundation module to be\nbuilt, then `-Rmodule-build` will show a single diagnostic for Foundation, but\nnot in turn for any of Foundation\'s (direct or indirect) dependencies. This is\nbecause the locations of those transitive module builds are initiated from\nsystem headers, which are ignored by default. When wanting to observe module\nbuilding/importing, the system modules can represent a significant amount of\nmodule diagnostics, and I think should be shown by default when\n`-Rmodule-build` and `-Rmodule-import` are specified.\n\nI noticed some other remarks use `ShowInSystemHeader`.\n\nDifferential Revision: https://reviews.llvm.org/D139653"},
[h]={{"clang/lib/Serialization/ASTReader.cpp",5689,"llvm::Error ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case SUBMODULE_DEFINITION: {\n      // ...\n      // If we\'re loading a module before we initialize the sema, it implies\n      // we\'re performing eagerly loading.\n      if (!getSema() && CurrentModule->isModulePurview() && !getContext().getLangOpts().isCompilingModule())\n        Diag(clang::diag::warn_eagerly_load_for_standard_cplusplus_modules);"}},
[h]={{"clang/lib/Serialization/ASTReader.cpp",5689,"llvm::Error ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case SUBMODULE_DEFINITION: {\n      // ...\n      // If we\'re loading a module before we initialize the sema, it implies\n      // we\'re performing eagerly loading.\n      if (!getSema() && CurrentModule->isModulePurview() && !getContext().getLangOpts().isCompilingModule())\n        Diag(clang::diag::warn_eagerly_load_for_standard_cplusplus_modules);"}},
[k]={
[l]={
["clang/test/CodeGenCXX/cxx20-module-std-subst-2c.cpp"]={"warning: the form \'-fmodule-file=<BMI-path>\' is deprecated for standard C++ named modules;consider to use \'-fmodule-file=<module-name>=<BMI-path>\' instead [-Weager-load-cxx-named-modules]"}
["clang/test/CodeGenCXX/cxx20-module-std-subst-2c.cpp"]={"warning: the form \'-fmodule-file=<BMI-path>\' is deprecated for standard C++ named modules;consider to use \'-fmodule-file=<module-name>=<BMI-path>\' instead [-Weager-load-cxx-named-modules]"}
}
}
},
},
["warn_empty_for_body"]={
["warn_empty_for_body"]={
[j]={zc},
[k]={Dc},
[i]=zc,
[j]=Dc,
[c]="for loop has empty body",
[c]="warn_empty_for_body",
[d]=g,
[d]="for loop has empty body",
[e]="for loop has empty body",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]",
[g]="for loop has empty body",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]",
[a]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)","Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)\n\n* if, switch, range-based for: warn if semicolon is on the same line.\n* for, while: warn if semicolon is on the same line and either next\nstatement is compound statement or next statement has more\nindentation.\n\nReplacing the semicolon with {} or moving the semicolon to the next\nline will always silence the warning.\n\nTests from SemaCXX/if-empty-body.cpp merged into SemaCXX/warn-empty-body.cpp.\n\nllvm-svn: 150515"},
[b]=m,
[h]={{r,17904,"void Sema::DiagnoseEmptyLoopBody(const Stmt *S, const Stmt *PossibleBody) {\n  // ...\n  if (const ForStmt *FS = dyn_cast<ForStmt>(S)) {\n    // ...\n    DiagID = diag::warn_empty_for_body;"}},
[f]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)","Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)\n\n* if, switch, range-based for: warn if semicolon is on the same line.\n* for, while: warn if semicolon is on the same line and either next\nstatement is compound statement or next statement has more\nindentation.\n\nReplacing the semicolon with {} or moving the semicolon to the next\nline will always silence the warning.\n\nTests from SemaCXX/if-empty-body.cpp merged into SemaCXX/warn-empty-body.cpp.\n\nllvm-svn: 150515"},
[k]={
[h]={{t,17904,"void Sema::DiagnoseEmptyLoopBody(const Stmt *S, const Stmt *PossibleBody) {\n  // ...\n  if (const ForStmt *FS = dyn_cast<ForStmt>(S)) {\n    // ...\n    DiagID = diag::warn_empty_for_body;"}},
[l]={
["clang/test/SemaCXX/warn-empty-body.cpp"]={"clang/test/SemaCXX/warn-empty-body.cpp:31:28: warning: for loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:36:28: warning: for loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:43:14: warning: for loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:176:26: warning: for loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:184:12: warning: for loop has empty body [-Wempty-body]"}
["clang/test/SemaCXX/warn-empty-body.cpp"]={"clang/test/SemaCXX/warn-empty-body.cpp:31:28: warning: for loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:36:28: warning: for loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:43:14: warning: for loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:176:26: warning: for loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:184:12: warning: for loop has empty body [-Wempty-body]"}
}
}
},
},
["warn_empty_format_string"]={
["warn_empty_format_string"]={
[j]={B,H,nb,"format-zero-length",N},
[k]={K,O,rb,"format-zero-length",V},
[i]="format-zero-length",
[j]="format-zero-length",
[c]="format string is empty",
[c]="warn_empty_format_string",
[d]=g,
[d]="format string is empty",
[e]="format string is empty",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wformat\\-zero\\-length[^\\]]*\\]",
[g]="format string is empty",
[b]=ac,
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-zero\\-length[^\\]]*\\]",
[a]={dd,1279246282,bd,ad},
[b]=dc,
[h]={{r,11657,"static void CheckFormatString(Sema &S, const FormatStringLiteral *FExpr, const Expr *OrigFormatExpr, ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, Sema::FormatStringType Type, bool inFunctionCall, Sema::VariadicCallType CallType, llvm::SmallBitVector &CheckedVarArgs, UncoveredArgHandler &UncoveredArg, bool IgnoreStringsWithoutSpecifiers) {\n  // ...\n  // CHECK: empty format string?\n  if (StrLen == 0 && numDataArgs > 0) {\n    CheckFormatHandler::EmitFormatDiagnostic(S, inFunctionCall, Args[format_idx], S.PDiag(diag::warn_empty_format_string), FExpr->getBeginLoc(),"}},
[f]={Qc,1279246282,Vc,cd},
[k]={
[h]={{t,11657,"static void CheckFormatString(Sema &S, const FormatStringLiteral *FExpr, const Expr *OrigFormatExpr, ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, Sema::FormatStringType Type, bool inFunctionCall, Sema::VariadicCallType CallType, llvm::SmallBitVector &CheckedVarArgs, UncoveredArgHandler &UncoveredArg, bool IgnoreStringsWithoutSpecifiers) {\n  // ...\n  // CHECK: empty format string?\n  if (StrLen == 0 && numDataArgs > 0) {\n    CheckFormatHandler::EmitFormatDiagnostic(S, inFunctionCall, Args[format_idx], S.PDiag(diag::warn_empty_format_string), FExpr->getBeginLoc(),"}},
[l]={
["clang/test/Sema/attr-format_arg.c"]={"clang/test/Sema/attr-format_arg.c:18:5: warning: format string is empty [-Wformat-zero-length]","clang/test/Sema/attr-format_arg.c:19:5: warning: format string is empty [-Wformat-zero-length]","clang/test/Sema/attr-format_arg.c:23:5: warning: format string is empty [-Wformat-zero-length]","clang/test/Sema/attr-format_arg.c:26:5: warning: format string is empty [-Wformat-zero-length]"}
["clang/test/Sema/attr-format_arg.c"]={"clang/test/Sema/attr-format_arg.c:18:5: warning: format string is empty [-Wformat-zero-length]","clang/test/Sema/attr-format_arg.c:19:5: warning: format string is empty [-Wformat-zero-length]","clang/test/Sema/attr-format_arg.c:23:5: warning: format string is empty [-Wformat-zero-length]","clang/test/Sema/attr-format_arg.c:26:5: warning: format string is empty [-Wformat-zero-length]"}
}
}
},
},
["warn_empty_if_body"]={
["warn_empty_if_body"]={
[j]={zc},
[k]={Dc},
[i]=zc,
[j]=Dc,
[c]="if statement has empty body",
[c]="warn_empty_if_body",
[d]=g,
[d]="if statement has empty body",
[e]="if statement has empty body",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]",
[g]="if statement has empty body",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]",
[a]={Ub,1237025389,Xb,Wb},
[b]=m,
[h]={{Cb,902,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  // ...\n  if (!ConstevalOrNegatedConsteval && !elseStmt)\n    DiagnoseEmptyStmtBody(RParenLoc, thenStmt, diag::warn_empty_if_body);"}},
[f]={Yb,1237025389,Zb,ac},
[k]={
[h]={{Hb,902,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  // ...\n  if (!ConstevalOrNegatedConsteval && !elseStmt)\n    DiagnoseEmptyStmtBody(RParenLoc, thenStmt, diag::warn_empty_if_body);"}},
[l]={
["clang/test/SemaCXX/warn-empty-body.cpp"]={"clang/test/SemaCXX/warn-empty-body.cpp:13:11: warning: if statement has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:17:22: warning: if statement has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:18:22: warning: if statement has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:23:18: warning: if statement has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:273:9: warning: if statement has empty body [-Wempty-body]"}
["clang/test/SemaCXX/warn-empty-body.cpp"]={"clang/test/SemaCXX/warn-empty-body.cpp:13:11: warning: if statement has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:17:22: warning: if statement has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:18:22: warning: if statement has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:23:18: warning: if statement has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:273:9: warning: if statement has empty body [-Wempty-body]"}
}
}
},
},
["warn_empty_init_statement"]={
["warn_empty_init_statement"]={
[j]={p,B,"empty-init-stmt",Fc,"extra-semi-stmt"},
[k]={r,K,"empty-init-stmt",Ic,"extra-semi-stmt"},
[i]="empty-init-stmt",
[j]="empty-init-stmt",
[c]={{nil,ob,"empty initialization statement of \'%select{if|switch|range-based for}0\' has no effect"}},
[c]={{nil,B,"warn_empty_init_statement"}},
[d]=g,
[d]={{nil,B,"empty initialization statement of \'%select{if|switch|range-based for}0\' has no effect"}},
[e]="empty initialization statement of \'(?:if|switch|range\\-based for)\' has no effect",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wempty\\-init\\-stmt[^\\]]*\\]",
[g]="empty initialization statement of \'(?:if|switch|range\\-based for)\' has no effect",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wempty\\-init\\-stmt[^\\]]*\\]",
[a]={"377748fd7bbf",1542740345,"[clang][Parse] Diagnose useless null statements / empty init-statements","[clang][Parse] Diagnose useless null statements / empty init-statements\n\nSummary:\nclang has `-Wextra-semi` (D43162), which is not dictated by the currently selected standard.\nWhile that is great, there is at least one more source of need-less semis - \'null statements\'.\nSometimes, they are needed:\n```\nfor(int x = 0; continueToDoWork(x); x++)\n  ; // Ugly code, but the semi is needed here.\n```\n\nBut sometimes they are just there for no reason:\n```\nswitch(X) {\ncase 0:\n  return -2345;\ncase 5:\n  return 0;\ndefault:\n  return 42;\n}; // <- oops\n\n;;;;;;;;;;; <- OOOOPS, still not diagnosed. Clearly this is junk.\n```\n\nAdditionally:\n```\nif(; // <- empty init-statement\n  true)\n  ;\n\nswitch (; // empty init-statement\n        x) {\n  ...\n}\n\nfor (; // <- empty init-statement\n    int y : S())\n  ;\n}\n\nAs usual, things may or may not go sideways in the presence of macros.\nWhile evaluating this diag on my codebase of interest, it was unsurprisingly\ndiscovered that Google Test macros are *very* prone to this.\nAnd it seems many issues are deep within the GTest itself, not\nin the snippets passed from the codebase that uses GTest.\n\nSo after some thought, i decided not do issue a diagnostic if the semi\nis within *any* macro, be it either from the normal header, or system header.\n\nFixes [[ https://bugs.llvm.org/show_bug.cgi?id=39111 | PR39111 ]]\n\nReviewers: rsmith, aaron.ballman, efriedma\n\nReviewed By: aaron.ballman\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D52695\n\nllvm-svn: 347339"},
[b]={{nil,B,A}},
[h]={{cc,2093,"/// ParseCXXCondition - if/switch/while condition expression.\n///\n///      condition:\n///        expression\n///        type-specifier-seq declarator \'=\' assignment-expression\n/// [C++11] type-specifier-seq declarator \'=\' initializer-clause\n/// [C++11] type-specifier-seq declarator braced-init-list\n/// [Clang] type-specifier-seq ref-qualifier[opt] \'[\' identifier-list \']\'\n///            brace-or-equal-initializer\n/// [GNU]  type-specifier-seq declarator simple-asm-expr[opt] attributes[opt]\n///            \'=\' assignment-expression\n///\n/// In C++1z, a condition may in some contexts be preceded by an\n/// optional init-statement. This function will parse that too.\n///\n/// \\param InitStmt If non-null, an init-statement is permitted, and if present\n/// will be parsed and stored here.\n///\n/// \\param Loc The location of the start of the statement that requires this\n/// condition, e.g., the \"for\" in a for loop.\n///\n/// \\param MissingOK Whether an empty condition is acceptable here. Otherwise\n/// it is considered an error to be recovered from.\n///\n/// \\param FRI If non-null, a for range declaration is permitted, and if\n/// present will be parsed and stored here, and a null result will be returned.\n///\n/// \\param EnterForConditionScope If true, enter a continue/break scope at the\n/// appropriate moment for a \'for\' loop.\n///\n/// \\returns The parsed condition.\nSema::ConditionResult Parser::ParseCXXCondition(StmtResult *InitStmt, SourceLocation Loc, Sema::ConditionKind CK, bool MissingOK, ForRangeInfo *FRI, bool EnterForConditionScope) {\n  // ...\n  case ConditionOrInitStatement::Expression: {\n    // ...\n    // We can have an empty expression here.\n    //  if (; true);\n    if (InitStmt && Tok.is(tok::semi)) {\n      // ...\n      if (!Tok.hasLeadingEmptyMacro() && !SemiLoc.isMacroID()) {\n        Diag(SemiLoc, diag::warn_empty_init_statement) << (CK == Sema::ConditionKind::Switch) << FixItHint::CreateRemoval(SemiLoc);"},{nc,2176,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  // Parse the second part of the for specifier.\n  if (!ForEach && !ForRangeInfo.ParsedForRangeDecl() && !SecondPart.isInvalid()) {\n    // Parse the second part of the for specifier.\n    if (Tok.is(tok::semi)) { // for (...;;\n    // ...\n    } else if (Tok.is(tok::r_paren)) {\n    // ...\n    } else {\n      if (getLangOpts().CPlusPlus) {\n        // ...\n        if (ForRangeInfo.ParsedForRangeDecl()) {\n          // ...\n          if (EmptyInitStmtSemiLoc.isValid()) {\n            Diag(EmptyInitStmtSemiLoc, diag::warn_empty_init_statement) << /*for-loop*/ 2 << FixItHint::CreateRemoval(EmptyInitStmtSemiLoc);"}},
[f]={"377748fd7bbf",1542740345,"[clang][Parse] Diagnose useless null statements / empty init-statements","[clang][Parse] Diagnose useless null statements / empty init-statements\n\nSummary:\nclang has `-Wextra-semi` (D43162), which is not dictated by the currently selected standard.\nWhile that is great, there is at least one more source of need-less semis - \'null statements\'.\nSometimes, they are needed:\n```\nfor(int x = 0; continueToDoWork(x); x++)\n  ; // Ugly code, but the semi is needed here.\n```\n\nBut sometimes they are just there for no reason:\n```\nswitch(X) {\ncase 0:\n  return -2345;\ncase 5:\n  return 0;\ndefault:\n  return 42;\n}; // <- oops\n\n;;;;;;;;;;; <- OOOOPS, still not diagnosed. Clearly this is junk.\n```\n\nAdditionally:\n```\nif(; // <- empty init-statement\n  true)\n  ;\n\nswitch (; // empty init-statement\n        x) {\n  ...\n}\n\nfor (; // <- empty init-statement\n    int y : S())\n  ;\n}\n\nAs usual, things may or may not go sideways in the presence of macros.\nWhile evaluating this diag on my codebase of interest, it was unsurprisingly\ndiscovered that Google Test macros are *very* prone to this.\nAnd it seems many issues are deep within the GTest itself, not\nin the snippets passed from the codebase that uses GTest.\n\nSo after some thought, i decided not do issue a diagnostic if the semi\nis within *any* macro, be it either from the normal header, or system header.\n\nFixes [[ https://bugs.llvm.org/show_bug.cgi?id=39111 | PR39111 ]]\n\nReviewers: rsmith, aaron.ballman, efriedma\n\nReviewed By: aaron.ballman\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D52695\n\nllvm-svn: 347339"},
[k]={
[h]={{fc,2093,"/// ParseCXXCondition - if/switch/while condition expression.\n///\n///      condition:\n///        expression\n///        type-specifier-seq declarator \'=\' assignment-expression\n/// [C++11] type-specifier-seq declarator \'=\' initializer-clause\n/// [C++11] type-specifier-seq declarator braced-init-list\n/// [Clang] type-specifier-seq ref-qualifier[opt] \'[\' identifier-list \']\'\n///            brace-or-equal-initializer\n/// [GNU]  type-specifier-seq declarator simple-asm-expr[opt] attributes[opt]\n///            \'=\' assignment-expression\n///\n/// In C++1z, a condition may in some contexts be preceded by an\n/// optional init-statement. This function will parse that too.\n///\n/// \\param InitStmt If non-null, an init-statement is permitted, and if present\n/// will be parsed and stored here.\n///\n/// \\param Loc The location of the start of the statement that requires this\n/// condition, e.g., the \"for\" in a for loop.\n///\n/// \\param MissingOK Whether an empty condition is acceptable here. Otherwise\n/// it is considered an error to be recovered from.\n///\n/// \\param FRI If non-null, a for range declaration is permitted, and if\n/// present will be parsed and stored here, and a null result will be returned.\n///\n/// \\param EnterForConditionScope If true, enter a continue/break scope at the\n/// appropriate moment for a \'for\' loop.\n///\n/// \\returns The parsed condition.\nSema::ConditionResult Parser::ParseCXXCondition(StmtResult *InitStmt, SourceLocation Loc, Sema::ConditionKind CK, bool MissingOK, ForRangeInfo *FRI, bool EnterForConditionScope) {\n  // ...\n  case ConditionOrInitStatement::Expression: {\n    // ...\n    // We can have an empty expression here.\n    //  if (; true);\n    if (InitStmt && Tok.is(tok::semi)) {\n      // ...\n      if (!Tok.hasLeadingEmptyMacro() && !SemiLoc.isMacroID()) {\n        Diag(SemiLoc, diag::warn_empty_init_statement) << (CK == Sema::ConditionKind::Switch) << FixItHint::CreateRemoval(SemiLoc);"},{nc,2176,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  // Parse the second part of the for specifier.\n  if (!ForEach && !ForRangeInfo.ParsedForRangeDecl() && !SecondPart.isInvalid()) {\n    // Parse the second part of the for specifier.\n    if (Tok.is(tok::semi)) { // for (...;;\n    // ...\n    } else if (Tok.is(tok::r_paren)) {\n    // ...\n    } else {\n      if (getLangOpts().CPlusPlus) {\n        // ...\n        if (ForRangeInfo.ParsedForRangeDecl()) {\n          // ...\n          if (EmptyInitStmtSemiLoc.isValid()) {\n            Diag(EmptyInitStmtSemiLoc, diag::warn_empty_init_statement) << /*for-loop*/ 2 << FixItHint::CreateRemoval(EmptyInitStmtSemiLoc);"}},
[l]={
["clang/test/Parser/extra-semi-resulting-in-nullstmt-in-init-statement.cpp"]={"clang/test/Parser/extra-semi-resulting-in-nullstmt-in-init-statement.cpp:14:7: warning: empty initialization statement of \'if\' has no effect [-Wempty-init-stmt]","clang/test/Parser/extra-semi-resulting-in-nullstmt-in-init-statement.cpp:17:11: warning: empty initialization statement of \'switch\' has no effect [-Wempty-init-stmt]","clang/test/Parser/extra-semi-resulting-in-nullstmt-in-init-statement.cpp:20:8: warning: empty initialization statement of \'range-based for\' has no effect [-Wempty-init-stmt]"}
["clang/test/Parser/extra-semi-resulting-in-nullstmt-in-init-statement.cpp"]={"clang/test/Parser/extra-semi-resulting-in-nullstmt-in-init-statement.cpp:14:7: warning: empty initialization statement of \'if\' has no effect [-Wempty-init-stmt]","clang/test/Parser/extra-semi-resulting-in-nullstmt-in-init-statement.cpp:17:11: warning: empty initialization statement of \'switch\' has no effect [-Wempty-init-stmt]","clang/test/Parser/extra-semi-resulting-in-nullstmt-in-init-statement.cpp:20:8: warning: empty initialization statement of \'range-based for\' has no effect [-Wempty-init-stmt]"}
}
}
},
},
["warn_empty_parens_are_function_decl"]={
["warn_empty_parens_are_function_decl"]={
[j]={"vexing-parse"},
[k]={"vexing-parse"},
[i]="vexing-parse",
[j]="vexing-parse",
[c]="empty parentheses interpreted as a function declaration",
[c]="warn_empty_parens_are_function_decl",
[d]=g,
[d]="empty parentheses interpreted as a function declaration",
[e]="empty parentheses interpreted as a function declaration",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wvexing\\-parse[^\\]]*\\]",
[g]="empty parentheses interpreted as a function declaration",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wvexing\\-parse[^\\]]*\\]",
[a]={"69f90dce4912",1325736741,"PR10828: Produce a warning when a no-arguments function is declared in block","PR10828: Produce a warning when a no-arguments function is declared in block\nscope, when no other indication is provided that the user intended to declare a\nfunction rather than a variable.\n\nRemove some false positives from the existing \'parentheses disambiguated as a\nfunction\' warning by suppressing it when the declaration is marked as \'typedef\'\nor \'extern\'.\n\nAdd a new warning group -Wvexing-parse containing both of these warnings.\n\nThe new warning is enabled by default; despite a number of false positives (and\none bug) in clang\'s test-suite, I have only found genuine bugs with it when\nrunning it over a significant quantity of real C++ code.\n\nllvm-svn: 147599"},
[b]=m,
[h]={{Jb,3861,"/// Produce an appropriate diagnostic for an ambiguity between a function\n/// declarator and a C++ direct-initializer.\nstatic void warnAboutAmbiguousFunction(Sema &S, Declarator &D, DeclaratorChunk &DeclType, QualType RT) {\n  // ...\n  S.Diag(DeclType.Loc, FTI.NumParams ? diag::warn_parens_disambiguated_as_function_declaration : diag::warn_empty_parens_are_function_decl) << ParenRange;"}},
[f]={"69f90dce4912",1325736741,"PR10828: Produce a warning when a no-arguments function is declared in block","PR10828: Produce a warning when a no-arguments function is declared in block\nscope, when no other indication is provided that the user intended to declare a\nfunction rather than a variable.\n\nRemove some false positives from the existing \'parentheses disambiguated as a\nfunction\' warning by suppressing it when the declaration is marked as \'typedef\'\nor \'extern\'.\n\nAdd a new warning group -Wvexing-parse containing both of these warnings.\n\nThe new warning is enabled by default; despite a number of false positives (and\none bug) in clang\'s test-suite, I have only found genuine bugs with it when\nrunning it over a significant quantity of real C++ code.\n\nllvm-svn: 147599"},
[k]={
[h]={{Nb,3861,"/// Produce an appropriate diagnostic for an ambiguity between a function\n/// declarator and a C++ direct-initializer.\nstatic void warnAboutAmbiguousFunction(Sema &S, Declarator &D, DeclaratorChunk &DeclType, QualType RT) {\n  // ...\n  S.Diag(DeclType.Loc, FTI.NumParams ? diag::warn_parens_disambiguated_as_function_declaration : diag::warn_empty_parens_are_function_decl) << ParenRange;"}},
[l]={
["clang/test/CXX/basic/basic.link/p9.cpp"]={"clang/test/CXX/basic/basic.link/p9.cpp:9:8: warning: empty parentheses interpreted as a function declaration [-Wvexing-parse]"}
["clang/test/CXX/basic/basic.link/p9.cpp"]={"clang/test/CXX/basic/basic.link/p9.cpp:9:8: warning: empty parentheses interpreted as a function declaration [-Wvexing-parse]"}
}
}
},
},
["warn_empty_range_based_for_body"]={
["warn_empty_range_based_for_body"]={
[j]={zc},
[k]={Dc},
[i]=zc,
[j]=Dc,
[c]="range-based for loop has empty body",
[c]="warn_empty_range_based_for_body",
[d]=g,
[d]="range-based for loop has empty body",
[e]="range\\-based for loop has empty body",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]",
[g]="range\\-based for loop has empty body",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]",
[a]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)","Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)\n\n* if, switch, range-based for: warn if semicolon is on the same line.\n* for, while: warn if semicolon is on the same line and either next\nstatement is compound statement or next statement has more\nindentation.\n\nReplacing the semicolon with {} or moving the semicolon to the next\nline will always silence the warning.\n\nTests from SemaCXX/if-empty-body.cpp merged into SemaCXX/warn-empty-body.cpp.\n\nllvm-svn: 150515"},
[b]=m,
[h]={{Cb,3276,"/// FinishCXXForRangeStmt - Attach the body to a C++0x for-range statement.\n/// This is a separate step from ActOnCXXForRangeStmt because analysis of the\n/// body cannot be performed until after the type of the range variable is\n/// determined.\nStmtResult Sema::FinishCXXForRangeStmt(Stmt *S, Stmt *B) {\n  // ...\n  DiagnoseEmptyStmtBody(ForStmt->getRParenLoc(), B, diag::warn_empty_range_based_for_body);"}},
[f]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)","Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)\n\n* if, switch, range-based for: warn if semicolon is on the same line.\n* for, while: warn if semicolon is on the same line and either next\nstatement is compound statement or next statement has more\nindentation.\n\nReplacing the semicolon with {} or moving the semicolon to the next\nline will always silence the warning.\n\nTests from SemaCXX/if-empty-body.cpp merged into SemaCXX/warn-empty-body.cpp.\n\nllvm-svn: 150515"},
[k]={
[h]={{Hb,3276,"/// FinishCXXForRangeStmt - Attach the body to a C++0x for-range statement.\n/// This is a separate step from ActOnCXXForRangeStmt because analysis of the\n/// body cannot be performed until after the type of the range variable is\n/// determined.\nStmtResult Sema::FinishCXXForRangeStmt(Stmt *S, Stmt *B) {\n  // ...\n  DiagnoseEmptyStmtBody(ForStmt->getRParenLoc(), B, diag::warn_empty_range_based_for_body);"}},
[l]={
["clang/test/SemaCXX/warn-empty-body.cpp"]={"clang/test/SemaCXX/warn-empty-body.cpp:49:22: warning: range-based for loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:53:14: warning: range-based for loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:279:20: warning: range-based for loop has empty body [-Wempty-body]"}
["clang/test/SemaCXX/warn-empty-body.cpp"]={"clang/test/SemaCXX/warn-empty-body.cpp:49:22: warning: range-based for loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:53:14: warning: range-based for loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:279:20: warning: range-based for loop has empty body [-Wempty-body]"}
}
}
},
},
["warn_empty_switch_body"]={
["warn_empty_switch_body"]={
[j]={zc},
[k]={Dc},
[i]=zc,
[j]=Dc,
[c]="switch statement has empty body",
[c]="warn_empty_switch_body",
[d]=g,
[d]="switch statement has empty body",
[e]="switch statement has empty body",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]",
[g]="switch statement has empty body",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]",
[a]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)","Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)\n\n* if, switch, range-based for: warn if semicolon is on the same line.\n* for, while: warn if semicolon is on the same line and either next\nstatement is compound statement or next statement has more\nindentation.\n\nReplacing the semicolon with {} or moving the semicolon to the next\nline will always silence the warning.\n\nTests from SemaCXX/if-empty-body.cpp merged into SemaCXX/warn-empty-body.cpp.\n\nllvm-svn: 150515"},
[b]=m,
[h]={{Cb,1620,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  // ...\n  if (BodyStmt)\n    DiagnoseEmptyStmtBody(CondExpr->getEndLoc(), BodyStmt, diag::warn_empty_switch_body);"}},
[f]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)","Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)\n\n* if, switch, range-based for: warn if semicolon is on the same line.\n* for, while: warn if semicolon is on the same line and either next\nstatement is compound statement or next statement has more\nindentation.\n\nReplacing the semicolon with {} or moving the semicolon to the next\nline will always silence the warning.\n\nTests from SemaCXX/if-empty-body.cpp merged into SemaCXX/warn-empty-body.cpp.\n\nllvm-svn: 150515"},
[k]={
[h]={{Hb,1620,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  // ...\n  if (BodyStmt)\n    DiagnoseEmptyStmtBody(CondExpr->getEndLoc(), BodyStmt, diag::warn_empty_switch_body);"}},
[l]={
["clang/test/SemaCXX/warn-empty-body.cpp"]={"clang/test/SemaCXX/warn-empty-body.cpp:86:16: warning: switch statement has empty body [-Wempty-body]"}
["clang/test/SemaCXX/warn-empty-body.cpp"]={"clang/test/SemaCXX/warn-empty-body.cpp:86:16: warning: switch statement has empty body [-Wempty-body]"}
}
}
},
},
["warn_empty_while_body"]={
["warn_empty_while_body"]={
[j]={zc},
[k]={Dc},
[i]=zc,
[j]=Dc,
[c]="while loop has empty body",
[c]="warn_empty_while_body",
[d]=g,
[d]="while loop has empty body",
[e]="while loop has empty body",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]",
[g]="while loop has empty body",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]",
[a]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)","Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)\n\n* if, switch, range-based for: warn if semicolon is on the same line.\n* for, while: warn if semicolon is on the same line and either next\nstatement is compound statement or next statement has more\nindentation.\n\nReplacing the semicolon with {} or moving the semicolon to the next\nline will always silence the warning.\n\nTests from SemaCXX/if-empty-body.cpp merged into SemaCXX/warn-empty-body.cpp.\n\nllvm-svn: 150515"},
[b]=m,
[h]={{r,17908,"void Sema::DiagnoseEmptyLoopBody(const Stmt *S, const Stmt *PossibleBody) {\n  // ...\n  if (const ForStmt *FS = dyn_cast<ForStmt>(S)) {\n  // ...\n  } else if (const WhileStmt *WS = dyn_cast<WhileStmt>(S)) {\n    // ...\n    DiagID = diag::warn_empty_while_body;"}},
[f]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)","Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)\n\n* if, switch, range-based for: warn if semicolon is on the same line.\n* for, while: warn if semicolon is on the same line and either next\nstatement is compound statement or next statement has more\nindentation.\n\nReplacing the semicolon with {} or moving the semicolon to the next\nline will always silence the warning.\n\nTests from SemaCXX/if-empty-body.cpp merged into SemaCXX/warn-empty-body.cpp.\n\nllvm-svn: 150515"},
[k]={
[h]={{t,17908,"void Sema::DiagnoseEmptyLoopBody(const Stmt *S, const Stmt *PossibleBody) {\n  // ...\n  if (const ForStmt *FS = dyn_cast<ForStmt>(S)) {\n  // ...\n  } else if (const WhileStmt *WS = dyn_cast<WhileStmt>(S)) {\n    // ...\n    DiagID = diag::warn_empty_while_body;"}},
[l]={
["clang/test/SemaCXX/warn-empty-body.cpp"]={"clang/test/SemaCXX/warn-empty-body.cpp:26:21: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:56:21: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:59:21: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:63:21: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:69:21: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:81:16: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:192:19: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:199:19: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:281:19: warning: while loop has empty body [-Wempty-body]"}
["clang/test/SemaCXX/warn-empty-body.cpp"]={"clang/test/SemaCXX/warn-empty-body.cpp:26:21: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:56:21: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:59:21: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:63:21: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:69:21: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:81:16: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:192:19: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:199:19: warning: while loop has empty body [-Wempty-body]","clang/test/SemaCXX/warn-empty-body.cpp:281:19: warning: while loop has empty body [-Wempty-body]"}
}
}
},
},
["warn_enum_constant_in_bool_context"]={
["warn_enum_constant_in_bool_context"]={
[j]={B,H,"int-in-bool-context",N},
[k]={K,O,"int-in-bool-context",V},
[i]="int-in-bool-context",
[j]="int-in-bool-context",
[c]={{nil,z,"converting the enum constant to a boolean"}},
[c]={{nil,q,"warn_enum_constant_in_bool_context"}},
[d]=g,
[d]={{nil,q,"converting the enum constant to a boolean"}},
[e]="converting the enum constant to a boolean",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wint\\-in\\-bool\\-context[^\\]]*\\]",
[g]="converting the enum constant to a boolean",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wint\\-in\\-bool\\-context[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,m}},
[h]={{K,13933,"// C99 6.5.[13,14]\ninline QualType Sema::CheckLogicalOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n  if (EnumConstantInBoolContext)\n    Diag(Loc, diag::warn_enum_constant_in_bool_context);"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{S,13933,"// C99 6.5.[13,14]\ninline QualType Sema::CheckLogicalOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n  if (EnumConstantInBoolContext)\n    Diag(Loc, diag::warn_enum_constant_in_bool_context);"}},
[l]={
["clang/test/Sema/warn-int-in-bool-context.c"]={"clang/test/Sema/warn-int-in-bool-context.c:52:9: warning: converting the enum constant to a boolean [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:56:16: warning: converting the enum constant to a boolean [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:60:9: warning: converting the enum constant to a boolean [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:64:11: warning: converting the enum constant to a boolean [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:68:16: warning: converting the enum constant to a boolean [-Wint-in-bool-context]"}
["clang/test/Sema/warn-int-in-bool-context.c"]={"clang/test/Sema/warn-int-in-bool-context.c:52:9: warning: converting the enum constant to a boolean [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:56:16: warning: converting the enum constant to a boolean [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:60:9: warning: converting the enum constant to a boolean [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:64:11: warning: converting the enum constant to a boolean [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:68:16: warning: converting the enum constant to a boolean [-Wint-in-bool-context]"}
}
}
},
},
["warn_enum_value_overflow"]={
["warn_enum_value_overflow"]={
[c]="overflow in enumeration value",
[c]="warn_enum_value_overflow",
[d]=g,
[d]="overflow in enumeration value",
[e]="overflow in enumeration value",
[e]=i,
[f]=Gb,
[g]="overflow in enumeration value",
[b]=l,
[a]=Ib,
[a]={Kd,1236199783,Jd,Ld},
[b]=m,
[h]={{D,19403,"EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum, EnumConstantDecl *LastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, Expr *Val) {\n  // ...\n  if (!Val) {\n    if (Enum->isDependentType())\n    // ...\n    else if (!LastEnumConst) {\n    // ...\n    } else {\n      // ...\n      // Check for overflow on increment.\n      if (EnumVal < LastEnumConst->getInitVal()) {\n        // ...\n        // If we\'re not in C++, diagnose the overflow of enumerator values,\n        // which in C99 means that the enumerator value is not representable in\n        // an int (C99 6.7.2.2p2). However, we support GCC\'s extension that\n        // permits enumerator values that are representable in some larger\n        // integral type.\n        if (!getLangOpts().CPlusPlus && !T.isNull())\n          Diag(IdLoc, diag::warn_enum_value_overflow);"}}
[f]={Ad,1236199783,Cd,Ed},
[h]={{M,19403,"EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum, EnumConstantDecl *LastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, Expr *Val) {\n  // ...\n  if (!Val) {\n    if (Enum->isDependentType())\n    // ...\n    else if (!LastEnumConst) {\n    // ...\n    } else {\n      // ...\n      // Check for overflow on increment.\n      if (EnumVal < LastEnumConst->getInitVal()) {\n        // ...\n        // If we\'re not in C++, diagnose the overflow of enumerator values,\n        // which in C99 means that the enumerator value is not representable in\n        // an int (C99 6.7.2.2p2). However, we support GCC\'s extension that\n        // permits enumerator values that are representable in some larger\n        // integral type.\n        if (!getLangOpts().CPlusPlus && !T.isNull())\n          Diag(IdLoc, diag::warn_enum_value_overflow);"}}
},
},
["warn_equality_with_extra_parens"]={
["warn_equality_with_extra_parens"]={
[j]={B,H,"parentheses","parentheses-equality"},
[k]={K,O,"parentheses","parentheses-equality"},
[i]="parentheses-equality",
[j]="parentheses-equality",
[c]="equality comparison with extraneous parentheses",
[c]="warn_equality_with_extra_parens",
[d]=g,
[d]="equality comparison with extraneous parentheses",
[e]="equality comparison with extraneous parentheses",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wparentheses\\-equality[^\\]]*\\]",
[g]="equality comparison with extraneous parentheses",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wparentheses\\-equality[^\\]]*\\]",
[a]={"8b6ec6870f65",1296584662,"Warn for \"if ((a == b))\" where the equality expression is needlessly wrapped inside parentheses.","Warn for \"if ((a == b))\" where the equality expression is needlessly wrapped inside parentheses.\nIt\'s highly likely that the user intended an assignment used as condition.\n\nAddresses rdar://8848646.\n\nllvm-svn: 124668"},
[b]=m,
[h]={{K,20911,"/// Redundant parentheses over an equality comparison can indicate\n/// that the user intended an assignment used as condition.\nvoid Sema::DiagnoseEqualityWithExtraParens(ParenExpr *ParenE) {\n  // ...\n  if (BinaryOperator *opE = dyn_cast<BinaryOperator>(E))\n    if (opE->getOpcode() == BO_EQ && opE->getLHS()->IgnoreParenImpCasts()->isModifiableLvalue(Context) == Expr::MLV_Valid) {\n      // ...\n      Diag(Loc, diag::warn_equality_with_extra_parens) << E->getSourceRange();"}},
[f]={"8b6ec6870f65",1296584662,"Warn for \"if ((a == b))\" where the equality expression is needlessly wrapped inside parentheses.","Warn for \"if ((a == b))\" where the equality expression is needlessly wrapped inside parentheses.\nIt\'s highly likely that the user intended an assignment used as condition.\n\nAddresses rdar://8848646.\n\nllvm-svn: 124668"},
[k]={
[h]={{S,20911,"/// Redundant parentheses over an equality comparison can indicate\n/// that the user intended an assignment used as condition.\nvoid Sema::DiagnoseEqualityWithExtraParens(ParenExpr *ParenE) {\n  // ...\n  if (BinaryOperator *opE = dyn_cast<BinaryOperator>(E))\n    if (opE->getOpcode() == BO_EQ && opE->getLHS()->IgnoreParenImpCasts()->isModifiableLvalue(Context) == Expr::MLV_Valid) {\n      // ...\n      Diag(Loc, diag::warn_equality_with_extra_parens) << E->getSourceRange();"}},
[l]={
["clang/test/SemaCXX/warn-assignment-condition.cpp"]={"clang/test/SemaCXX/warn-assignment-condition.cpp:109:10: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]","clang/test/SemaCXX/warn-assignment-condition.cpp:128:13: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]","clang/test/SemaCXX/warn-assignment-condition.cpp:137:14: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]"}
["clang/test/SemaCXX/warn-assignment-condition.cpp"]={"clang/test/SemaCXX/warn-assignment-condition.cpp:109:10: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]","clang/test/SemaCXX/warn-assignment-condition.cpp:128:13: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]","clang/test/SemaCXX/warn-assignment-condition.cpp:137:14: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]"}
}
}
},
},
["warn_exception_caught_by_earlier_handler"]={
["warn_exception_caught_by_earlier_handler"]={
[j]={"exceptions"},
[k]={"exceptions"},
[i]="exceptions",
[j]="exceptions",
[c]="exception of type %0 will be caught by earlier handler",
[c]="warn_exception_caught_by_earlier_handler",
[d]=g,
[d]="exception of type %0 will be caught by earlier handler",
[e]="exception of type (.*?) will be caught by earlier handler",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wexceptions[^\\]]*\\]",
[g]="exception of type (.*?) will be caught by earlier handler",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wexceptions[^\\]]*\\]",
[a]={"63c4da01c819",1248887745,"Check for identical types in C++ catch expression. Patch by Erik Verbruggen.","Check for identical types in C++ catch expression. Patch by Erik Verbruggen.\n\nllvm-svn: 77475"},
[b]=m,
[h]={{Cb,4543,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  // ...\n  for (unsigned i = 0; i < NumHandlers; ++i) {\n    // ...\n    if (auto *RD = Underlying->getAsCXXRecordDecl()) {\n      // ...\n      if (RD->lookupInBases(CTPB, Paths)) {\n        // ...\n        if (!Paths.isAmbiguous(CanQualType::CreateUnsafe(CTPB.getFoundHandlerType()))) {\n          Diag(H->getExceptionDecl()->getTypeSpecStartLoc(), diag::warn_exception_caught_by_earlier_handler) << H->getCaughtType();"},{Cb,4563,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  // ...\n  for (unsigned i = 0; i < NumHandlers; ++i) {\n    // ...\n    if (!R.second) {\n      // ...\n      Diag(H->getExceptionDecl()->getTypeSpecStartLoc(), diag::warn_exception_caught_by_earlier_handler) << H->getCaughtType();"}},
[f]={"63c4da01c819",1248887745,"Check for identical types in C++ catch expression. Patch by Erik Verbruggen.","Check for identical types in C++ catch expression. Patch by Erik Verbruggen.\n\nllvm-svn: 77475"},
[k]={
[h]={{Hb,4543,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  // ...\n  for (unsigned i = 0; i < NumHandlers; ++i) {\n    // ...\n    if (auto *RD = Underlying->getAsCXXRecordDecl()) {\n      // ...\n      if (RD->lookupInBases(CTPB, Paths)) {\n        // ...\n        if (!Paths.isAmbiguous(CanQualType::CreateUnsafe(CTPB.getFoundHandlerType()))) {\n          Diag(H->getExceptionDecl()->getTypeSpecStartLoc(), diag::warn_exception_caught_by_earlier_handler) << H->getCaughtType();"},{Hb,4563,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  // ...\n  for (unsigned i = 0; i < NumHandlers; ++i) {\n    // ...\n    if (!R.second) {\n      // ...\n      Diag(H->getExceptionDecl()->getTypeSpecStartLoc(), diag::warn_exception_caught_by_earlier_handler) << H->getCaughtType();"}},
[l]={
["clang/test/SemaCXX/unreachable-catch-clauses.cpp"]={"clang/test/SemaCXX/unreachable-catch-clauses.cpp:12:8: warning: exception of type \'Ex1 &\' will be caught by earlier handler [-Wexceptions]","clang/test/SemaCXX/unreachable-catch-clauses.cpp:19:8: warning: exception of type \'Ex2 &\' (aka \'Ex1 &\') will be caught by earlier handler [-Wexceptions]","clang/test/SemaCXX/unreachable-catch-clauses.cpp:19:8: warning: exception of type \'Ex2 &\' (aka \'Ex1 &\') will be caught by earlier handler [-Wexceptions]"}
["clang/test/SemaCXX/unreachable-catch-clauses.cpp"]={"clang/test/SemaCXX/unreachable-catch-clauses.cpp:12:8: warning: exception of type \'Ex1 &\' will be caught by earlier handler [-Wexceptions]","clang/test/SemaCXX/unreachable-catch-clauses.cpp:19:8: warning: exception of type \'Ex2 &\' (aka \'Ex1 &\') will be caught by earlier handler [-Wexceptions]","clang/test/SemaCXX/unreachable-catch-clauses.cpp:19:8: warning: exception of type \'Ex2 &\' (aka \'Ex1 &\') will be caught by earlier handler [-Wexceptions]"}
}
}
},
},
["warn_exception_spec_deprecated"]={
["warn_exception_spec_deprecated"]={
[j]={ab,"deprecated-dynamic-exception-spec","dynamic-exception-spec"},
[k]={jb,"deprecated-dynamic-exception-spec","dynamic-exception-spec"},
[i]="deprecated-dynamic-exception-spec",
[j]="deprecated-dynamic-exception-spec",
[c]="dynamic exception specifications are deprecated",
[c]="warn_exception_spec_deprecated",
[d]=g,
[d]="dynamic exception specifications are deprecated",
[e]="dynamic exception specifications are deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-dynamic\\-exception\\-spec[^\\]]*\\]",
[g]="dynamic exception specifications are deprecated",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-dynamic\\-exception\\-spec[^\\]]*\\]",
[a]={"8ca78a16f4a5",1371088971,"Add -Wdeprecated warnings and fixits for things deprecated in C++11:","Add -Wdeprecated warnings and fixits for things deprecated in C++11:\n - \'register\' storage class\n - dynamic exception specifications\n\nOnly the former check is enabled by default for now (the latter might be quite noisy).\n\nllvm-svn: 183881"},
[b]=ob,
[h]={{bb,4011,"static void diagnoseDynamicExceptionSpecification(Parser &P, SourceRange Range, bool IsNoexcept) {\n  if (P.getLangOpts().CPlusPlus11) {\n    // ...\n    P.Diag(Range.getBegin(), P.getLangOpts().CPlusPlus17 && !IsNoexcept ? diag::ext_dynamic_exception_spec : diag::warn_exception_spec_deprecated) << Range;"}},
[f]={"8ca78a16f4a5",1371088971,"Add -Wdeprecated warnings and fixits for things deprecated in C++11:","Add -Wdeprecated warnings and fixits for things deprecated in C++11:\n - \'register\' storage class\n - dynamic exception specifications\n\nOnly the former check is enabled by default for now (the latter might be quite noisy).\n\nllvm-svn: 183881"},
[k]={
[h]={{kb,4011,"static void diagnoseDynamicExceptionSpecification(Parser &P, SourceRange Range, bool IsNoexcept) {\n  if (P.getLangOpts().CPlusPlus11) {\n    // ...\n    P.Diag(Range.getBegin(), P.getLangOpts().CPlusPlus17 && !IsNoexcept ? diag::ext_dynamic_exception_spec : diag::warn_exception_spec_deprecated) << Range;"}},
[l]={
["clang/test/SemaCXX/deprecated.cpp"]={"clang/test/SemaCXX/deprecated.cpp:21:10: warning: dynamic exception specifications are deprecated [-Wdeprecated-dynamic-exception-spec]","clang/test/SemaCXX/deprecated.cpp:22:10: warning: dynamic exception specifications are deprecated [-Wdeprecated-dynamic-exception-spec]","clang/test/SemaCXX/deprecated.cpp:23:10: warning: dynamic exception specifications are deprecated [-Wdeprecated-dynamic-exception-spec]"}
["clang/test/SemaCXX/deprecated.cpp"]={"clang/test/SemaCXX/deprecated.cpp:21:10: warning: dynamic exception specifications are deprecated [-Wdeprecated-dynamic-exception-spec]","clang/test/SemaCXX/deprecated.cpp:22:10: warning: dynamic exception specifications are deprecated [-Wdeprecated-dynamic-exception-spec]","clang/test/SemaCXX/deprecated.cpp:23:10: warning: dynamic exception specifications are deprecated [-Wdeprecated-dynamic-exception-spec]"}
}
}
},
},
["warn_exit_time_destructor"]={
["warn_exit_time_destructor"]={
[j]={"exit-time-destructors"},
[k]={"exit-time-destructors"},
[i]="exit-time-destructors",
[j]="exit-time-destructors",
[c]="declaration requires an exit-time destructor",
[c]="warn_exit_time_destructor",
[d]=g,
[d]="declaration requires an exit-time destructor",
[e]="declaration requires an exit\\-time destructor",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wexit\\-time\\-destructors[^\\]]*\\]",
[g]="declaration requires an exit\\-time destructor",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wexit\\-time\\-destructors[^\\]]*\\]",
[a]={"98766db78583",1300928501,"Add a new warning for exit-time destructors.","Add a new warning for exit-time destructors.\n\nllvm-svn: 128188"},
[b]=m,
[h]={{C,15897,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // ...\n  Diag(VD->getLocation(), diag::warn_exit_time_destructor);"}},
[f]={"98766db78583",1300928501,"Add a new warning for exit-time destructors.","Add a new warning for exit-time destructors.\n\nllvm-svn: 128188"},
[k]={
[h]={{L,15897,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // ...\n  Diag(VD->getLocation(), diag::warn_exit_time_destructor);"}},
[l]={
["clang/test/SemaCXX/warn-exit-time-destructors.cpp"]={"clang/test/SemaCXX/warn-exit-time-destructors.cpp:6:5: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]","clang/test/SemaCXX/warn-exit-time-destructors.cpp:7:5: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]","clang/test/SemaCXX/warn-exit-time-destructors.cpp:8:5: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]","clang/test/SemaCXX/warn-exit-time-destructors.cpp:19:12: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]","clang/test/SemaCXX/warn-exit-time-destructors.cpp:20:12: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]","clang/test/SemaCXX/warn-exit-time-destructors.cpp:21:12: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]","clang/test/SemaCXX/warn-exit-time-destructors.cpp:35:5: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]","clang/test/SemaCXX/warn-exit-time-destructors.cpp:68:5: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]"}
["clang/test/SemaCXX/warn-exit-time-destructors.cpp"]={"clang/test/SemaCXX/warn-exit-time-destructors.cpp:6:5: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]","clang/test/SemaCXX/warn-exit-time-destructors.cpp:7:5: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]","clang/test/SemaCXX/warn-exit-time-destructors.cpp:8:5: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]","clang/test/SemaCXX/warn-exit-time-destructors.cpp:19:12: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]","clang/test/SemaCXX/warn-exit-time-destructors.cpp:20:12: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]","clang/test/SemaCXX/warn-exit-time-destructors.cpp:21:12: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]","clang/test/SemaCXX/warn-exit-time-destructors.cpp:35:5: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]","clang/test/SemaCXX/warn-exit-time-destructors.cpp:68:5: warning: declaration requires an exit-time destructor [-Wexit-time-destructors]"}
}
}
},
},
["warn_expected_consistent_version_separator"]={
["warn_expected_consistent_version_separator"]={
[j]={Zc},
[k]={Zc},
[i]=Zc,
[j]=Zc,
[c]="use same version number separators \'_\' or \'.\'; as in \'major[.minor[.subminor]]\'",
[c]="warn_expected_consistent_version_separator",
[d]=g,
[d]="use same version number separators \'_\' or \'.\'; as in \'major[.minor[.subminor]]\'",
[e]="use same version number separators \'_\' or \'\\.\'; as in \'major\\[\\.minor\\[\\.subminor\\]\\]\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]",
[g]="use same version number separators \'_\' or \'\\.\'; as in \'major\\[\\.minor\\[\\.subminor\\]\\]\'",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]",
[a]={"ce72e63d1156",1412272646,"Diagnose mixed use of \'_\' and \'.\' as version","Diagnose mixed use of \'_\' and \'.\' as version\nseparators in my previous patch. \n\nllvm-svn: 218895"},
[b]=A,
[h]={{Tb,1084,"/// Parse a version number.\n///\n/// version:\n///  simple-integer\n///  simple-integer \'.\' simple-integer\n///  simple-integer \'_\' simple-integer\n///  simple-integer \'.\' simple-integer \'.\' simple-integer\n///  simple-integer \'_\' simple-integer \'_\' simple-integer\nVersionTuple Parser::ParseVersionTuple(SourceRange &Range) {\n  // ...\n  // Warn if separators, be it \'.\' or \'_\', do not match.\n  if (AfterMajorSeparator != AfterMinorSeparator)\n    Diag(Tok, diag::warn_expected_consistent_version_separator);"}},
[f]={"ce72e63d1156",1412272646,"Diagnose mixed use of \'_\' and \'.\' as version","Diagnose mixed use of \'_\' and \'.\' as version\nseparators in my previous patch. \n\nllvm-svn: 218895"},
[k]={
[h]={{Wb,1084,"/// Parse a version number.\n///\n/// version:\n///  simple-integer\n///  simple-integer \'.\' simple-integer\n///  simple-integer \'_\' simple-integer\n///  simple-integer \'.\' simple-integer \'.\' simple-integer\n///  simple-integer \'_\' simple-integer \'_\' simple-integer\nVersionTuple Parser::ParseVersionTuple(SourceRange &Range) {\n  // ...\n  // Warn if separators, be it \'.\' or \'_\', do not match.\n  if (AfterMajorSeparator != AfterMinorSeparator)\n    Diag(Tok, diag::warn_expected_consistent_version_separator);"}},
[l]={
["clang/test/SemaObjC/attr-availability-1.m"]={"clang/test/SemaObjC/attr-availability-1.m:99:61: warning: use same version number separators \'_\' or \'.\'; as in \'major[.minor[.subminor]]\' [-Wavailability]","clang/test/SemaObjC/attr-availability-1.m:100:61: warning: use same version number separators \'_\' or \'.\'; as in \'major[.minor[.subminor]]\' [-Wavailability]"}
["clang/test/SemaObjC/attr-availability-1.m"]={"clang/test/SemaObjC/attr-availability-1.m:99:61: warning: use same version number separators \'_\' or \'.\'; as in \'major[.minor[.subminor]]\' [-Wavailability]","clang/test/SemaObjC/attr-availability-1.m:100:61: warning: use same version number separators \'_\' or \'.\'; as in \'major[.minor[.subminor]]\' [-Wavailability]"}
}
}
},
},
["warn_expected_qualified_after_typename"]={
["warn_expected_qualified_after_typename"]={
[c]="expected a qualified name after \'typename\'",
[c]="warn_expected_qualified_after_typename",
[d]=g,
[d]="expected a qualified name after \'typename\'",
[e]="expected a qualified name after \'typename\'",
[e]=i,
[f]=Gb,
[g]="expected a qualified name after \'typename\'",
[b]=v,
[a]=Ib,
[a]={"dd876125df22",1303644253,"Downgrade unnecessary \"typename\" from error to warning in Microsoft mode. ","Downgrade unnecessary \"typename\" from error to warning in Microsoft mode. \nThis fixes 1 error when parsing MSVC 2008 headers with clang. \n\nMust \"return true;\" even if it is a warning because the rest of the code path assumes that SS is set to something. The parser will get back on its feet and continue parsing the rest of the declaration correctly so it is not a problem.\n\nllvm-svn: 130088"},
[b]=A,
[h]={{Lc,1968,"/// TryAnnotateTypeOrScopeToken - If the current token position is on a\n/// typename (possibly qualified in C++) or a C++ scope specifier not followed\n/// by a typename, TryAnnotateTypeOrScopeToken will replace one or more tokens\n/// with a single annotation token representing the typename or C++ scope\n/// respectively.\n/// This simplifies handling of C++ scope specifiers and allows efficient\n/// backtracking without the need to re-parse and resolve nested-names and\n/// typenames.\n/// It will mainly be called when we expect to treat identifiers as typenames\n/// (if they are typenames). For example, in C we do not expect identifiers\n/// inside expressions to be treated as typenames so it will not be called\n/// for expressions in C.\n/// The benefit for C/ObjC is that a typename will be annotated and\n/// Actions.getTypeName will not be needed to be called again (e.g. getTypeName\n/// will not be called twice, once to check whether we have a declaration\n/// specifier, and another one to get the actual type inside\n/// ParseDeclarationSpecifiers).\n///\n/// This returns true if an error occurred.\n///\n/// Note that this routine emits an error if you call it with ::new or ::delete\n/// as the current tokens, so only call it in contexts where these are invalid.\nbool Parser::TryAnnotateTypeOrScopeToken(ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  if (Tok.is(tok::kw_typename)) {\n    // MSVC lets you do stuff like:\n    //  typename typedef T_::D D;\n    //\n    // We will consume the typedef token here and put it back after we have\n    // parsed the first identifier, transforming it into something more like:\n    //  typename T_::D typedef D;\n    if (getLangOpts().MSVCCompat && NextToken().is(tok::kw_typedef)) {\n      // ...\n      if (!Result)\n        Diag(Tok.getLocation(), diag::warn_expected_qualified_after_typename);"},{Lc,1996,"/// TryAnnotateTypeOrScopeToken - If the current token position is on a\n/// typename (possibly qualified in C++) or a C++ scope specifier not followed\n/// by a typename, TryAnnotateTypeOrScopeToken will replace one or more tokens\n/// with a single annotation token representing the typename or C++ scope\n/// respectively.\n/// This simplifies handling of C++ scope specifiers and allows efficient\n/// backtracking without the need to re-parse and resolve nested-names and\n/// typenames.\n/// It will mainly be called when we expect to treat identifiers as typenames\n/// (if they are typenames). For example, in C we do not expect identifiers\n/// inside expressions to be treated as typenames so it will not be called\n/// for expressions in C.\n/// The benefit for C/ObjC is that a typename will be annotated and\n/// Actions.getTypeName will not be needed to be called again (e.g. getTypeName\n/// will not be called twice, once to check whether we have a declaration\n/// specifier, and another one to get the actual type inside\n/// ParseDeclarationSpecifiers).\n///\n/// This returns true if an error occurred.\n///\n/// Note that this routine emits an error if you call it with ::new or ::delete\n/// as the current tokens, so only call it in contexts where these are invalid.\nbool Parser::TryAnnotateTypeOrScopeToken(ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  if (Tok.is(tok::kw_typename)) {\n    // ...\n    if (SS.isEmpty()) {\n      if (Tok.is(tok::identifier) || Tok.is(tok::annot_template_id) || Tok.is(tok::annot_decltype)) {\n        // Attempt to recover by skipping the invalid \'typename\'\n        if (Tok.is(tok::annot_decltype) || (!TryAnnotateTypeOrScopeToken(AllowImplicitTypename) && Tok.isAnnotation())) {\n          // ...\n          // MS compatibility: MSVC permits using known types with typename.\n          // e.g. \"typedef typename T* pointer_type\"\n          if (getLangOpts().MicrosoftExt)\n            DiagID = diag::warn_expected_qualified_after_typename;"}},
[f]={"dd876125df22",1303644253,"Downgrade unnecessary \"typename\" from error to warning in Microsoft mode. ","Downgrade unnecessary \"typename\" from error to warning in Microsoft mode. \nThis fixes 1 error when parsing MSVC 2008 headers with clang. \n\nMust \"return true;\" even if it is a warning because the rest of the code path assumes that SS is set to something. The parser will get back on its feet and continue parsing the rest of the declaration correctly so it is not a problem.\n\nllvm-svn: 130088"},
[k]={
[h]={{Hc,1968,"/// TryAnnotateTypeOrScopeToken - If the current token position is on a\n/// typename (possibly qualified in C++) or a C++ scope specifier not followed\n/// by a typename, TryAnnotateTypeOrScopeToken will replace one or more tokens\n/// with a single annotation token representing the typename or C++ scope\n/// respectively.\n/// This simplifies handling of C++ scope specifiers and allows efficient\n/// backtracking without the need to re-parse and resolve nested-names and\n/// typenames.\n/// It will mainly be called when we expect to treat identifiers as typenames\n/// (if they are typenames). For example, in C we do not expect identifiers\n/// inside expressions to be treated as typenames so it will not be called\n/// for expressions in C.\n/// The benefit for C/ObjC is that a typename will be annotated and\n/// Actions.getTypeName will not be needed to be called again (e.g. getTypeName\n/// will not be called twice, once to check whether we have a declaration\n/// specifier, and another one to get the actual type inside\n/// ParseDeclarationSpecifiers).\n///\n/// This returns true if an error occurred.\n///\n/// Note that this routine emits an error if you call it with ::new or ::delete\n/// as the current tokens, so only call it in contexts where these are invalid.\nbool Parser::TryAnnotateTypeOrScopeToken(ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  if (Tok.is(tok::kw_typename)) {\n    // MSVC lets you do stuff like:\n    //  typename typedef T_::D D;\n    //\n    // We will consume the typedef token here and put it back after we have\n    // parsed the first identifier, transforming it into something more like:\n    //  typename T_::D typedef D;\n    if (getLangOpts().MSVCCompat && NextToken().is(tok::kw_typedef)) {\n      // ...\n      if (!Result)\n        Diag(Tok.getLocation(), diag::warn_expected_qualified_after_typename);"},{Hc,1996,"/// TryAnnotateTypeOrScopeToken - If the current token position is on a\n/// typename (possibly qualified in C++) or a C++ scope specifier not followed\n/// by a typename, TryAnnotateTypeOrScopeToken will replace one or more tokens\n/// with a single annotation token representing the typename or C++ scope\n/// respectively.\n/// This simplifies handling of C++ scope specifiers and allows efficient\n/// backtracking without the need to re-parse and resolve nested-names and\n/// typenames.\n/// It will mainly be called when we expect to treat identifiers as typenames\n/// (if they are typenames). For example, in C we do not expect identifiers\n/// inside expressions to be treated as typenames so it will not be called\n/// for expressions in C.\n/// The benefit for C/ObjC is that a typename will be annotated and\n/// Actions.getTypeName will not be needed to be called again (e.g. getTypeName\n/// will not be called twice, once to check whether we have a declaration\n/// specifier, and another one to get the actual type inside\n/// ParseDeclarationSpecifiers).\n///\n/// This returns true if an error occurred.\n///\n/// Note that this routine emits an error if you call it with ::new or ::delete\n/// as the current tokens, so only call it in contexts where these are invalid.\nbool Parser::TryAnnotateTypeOrScopeToken(ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  if (Tok.is(tok::kw_typename)) {\n    // ...\n    if (SS.isEmpty()) {\n      if (Tok.is(tok::identifier) || Tok.is(tok::annot_template_id) || Tok.is(tok::annot_decltype)) {\n        // Attempt to recover by skipping the invalid \'typename\'\n        if (Tok.is(tok::annot_decltype) || (!TryAnnotateTypeOrScopeToken(AllowImplicitTypename) && Tok.isAnnotation())) {\n          // ...\n          // MS compatibility: MSVC permits using known types with typename.\n          // e.g. \"typedef typename T* pointer_type\"\n          if (getLangOpts().MicrosoftExt)\n            DiagID = diag::warn_expected_qualified_after_typename;"}},
[l]={
["clang/test/Parser/MicrosoftExtensions.cpp"]={"clang/test/Parser/MicrosoftExtensions.cpp:231:12: warning: expected a qualified name after \'typename\'","clang/test/Parser/MicrosoftExtensions.cpp:214:13: warning: expected a qualified name after \'typename\'","clang/test/Parser/MicrosoftExtensions.cpp:215:13: warning: expected a qualified name after \'typename\'","clang/test/Parser/MicrosoftExtensions.cpp:219:21: warning: expected a qualified name after \'typename\'","clang/test/Parser/MicrosoftExtensions.cpp:220:21: warning: expected a qualified name after \'typename\'"}
["clang/test/Parser/MicrosoftExtensions.cpp"]={"clang/test/Parser/MicrosoftExtensions.cpp:231:12: warning: expected a qualified name after \'typename\'","clang/test/Parser/MicrosoftExtensions.cpp:214:13: warning: expected a qualified name after \'typename\'","clang/test/Parser/MicrosoftExtensions.cpp:215:13: warning: expected a qualified name after \'typename\'","clang/test/Parser/MicrosoftExtensions.cpp:219:21: warning: expected a qualified name after \'typename\'","clang/test/Parser/MicrosoftExtensions.cpp:220:21: warning: expected a qualified name after \'typename\'"}
}
}
},
},
["warn_expecting_lock_held_on_loop"]={
["warn_expecting_lock_held_on_loop"]={
[j]={Ac,Qb},
[k]={Fc,Ub},
[i]=Qb,
[j]=Ub,
[c]="expecting %0 \'%1\' to be held at start of each loop",
[c]="warn_expecting_lock_held_on_loop",
[d]=g,
[d]="expecting %0 \'%1\' to be held at start of each loop",
[e]="expecting (.*?) \'(.*?)\' to be held at start of each loop",
[e]=i,
[f]=Vc,
[g]="expecting (.*?) \'(.*?)\' to be held at start of each loop",
[b]=l,
[a]=Yc,
[a]={"afbbd8e5adac",1314125194,"Thread-safety analysis: adding in a basic lockset tracking system. This","Thread-safety analysis: adding in a basic lockset tracking system. This\nsystem flags an error when unlocking a lock which was not held, locking\nthe same lock twice, having a different lockset on each iteration of a\nloop, or going out of scope while still holding a lock. In order to\nsuccessfully use the lockset, this patch also makes sure that attribute\narguments are attached correctly for later parsing.\n\nThis patch was also worked on by DeLesley Hutchins.\n\nNote: This patch has been reviewed by Chandler Carruth and Jeffrey\nYasskin. Feel free to provide post-commit review comments for a\nsubsequent patch.\n\nllvm-svn: 138350"},
[b]=m,
[h]={{gb,1912,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexHeldEndOfScope(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) override {\n    // ...\n    case LEK_LockedSomeLoopIterations:\n      DiagID = diag::warn_expecting_lock_held_on_loop;"}},
[f]={"afbbd8e5adac",1314125194,"Thread-safety analysis: adding in a basic lockset tracking system. This","Thread-safety analysis: adding in a basic lockset tracking system. This\nsystem flags an error when unlocking a lock which was not held, locking\nthe same lock twice, having a different lockset on each iteration of a\nloop, or going out of scope while still holding a lock. In order to\nsuccessfully use the lockset, this patch also makes sure that attribute\narguments are attached correctly for later parsing.\n\nThis patch was also worked on by DeLesley Hutchins.\n\nNote: This patch has been reviewed by Chandler Carruth and Jeffrey\nYasskin. Feel free to provide post-commit review comments for a\nsubsequent patch.\n\nllvm-svn: 138350"},
[k]={
[h]={{qb,1912,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexHeldEndOfScope(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) override {\n    // ...\n    case LEK_LockedSomeLoopIterations:\n      DiagID = diag::warn_expecting_lock_held_on_loop;"}},
[l]={
["clang/test/PCH/thread-safety-attrs.cpp"]={"clang/test/PCH/thread-safety-attrs.cpp:257:10: warning: expecting mutex \'sls_mu\' to be held at start of each loop [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:274:5: warning: expecting mutex \'sls_mu\' to be held at start of each loop [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:280:5: warning: expecting mutex \'sls_mu\' to be held at start of each loop [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:289:9: warning: expecting mutex \'sls_mu\' to be held at start of each loop [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:295:10: warning: expecting mutex \'sls_mu\' to be held at start of each loop [-Wthread-safety-analysis]"}
["clang/test/PCH/thread-safety-attrs.cpp"]={"clang/test/PCH/thread-safety-attrs.cpp:257:10: warning: expecting mutex \'sls_mu\' to be held at start of each loop [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:274:5: warning: expecting mutex \'sls_mu\' to be held at start of each loop [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:280:5: warning: expecting mutex \'sls_mu\' to be held at start of each loop [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:289:9: warning: expecting mutex \'sls_mu\' to be held at start of each loop [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:295:10: warning: expecting mutex \'sls_mu\' to be held at start of each loop [-Wthread-safety-analysis]"}
}
}
},
},
["warn_expecting_locked"]={
["warn_expecting_locked"]={
[j]={Ac,Qb},
[k]={Fc,Ub},
[i]=Qb,
[j]=Ub,
[c]="expecting %0 \'%1\' to be held at the end of function",
[c]="warn_expecting_locked",
[d]=g,
[d]="expecting %0 \'%1\' to be held at the end of function",
[e]="expecting (.*?) \'(.*?)\' to be held at the end of function",
[e]=i,
[f]=Vc,
[g]="expecting (.*?) \'(.*?)\' to be held at the end of function",
[b]=l,
[a]=Yc,
[a]={"6e6dbb76180b",1341267414,"Thread safety analysis: fixed incorrect error message at the end of a locks_required function.","Thread safety analysis: fixed incorrect error message at the end of a locks_required function.\n\nllvm-svn: 159607"},
[b]=m,
[h]={{gb,1918,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexHeldEndOfScope(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) override {\n    // ...\n    case LEK_NotLockedAtEndOfFunction:\n      DiagID = diag::warn_expecting_locked;"}},
[f]={"6e6dbb76180b",1341267414,"Thread safety analysis: fixed incorrect error message at the end of a locks_required function.","Thread safety analysis: fixed incorrect error message at the end of a locks_required function.\n\nllvm-svn: 159607"},
[k]={
[h]={{qb,1918,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexHeldEndOfScope(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) override {\n    // ...\n    case LEK_NotLockedAtEndOfFunction:\n      DiagID = diag::warn_expecting_locked;"}},
[l]={
["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={"clang/test/SemaCXX/warn-thread-safety-analysis.cpp:3199:3: warning: expecting mutex \'mutex_\' to be held at the end of function [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:3204:3: warning: expecting mutex \'mutex_\' to be held at the end of function [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4671:3: warning: expecting mutex \'mu_\' to be held at the end of function [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4676:3: warning: expecting mutex \'mu_\' to be held at the end of function [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4686:3: warning: expecting mutex \'mu_\' to be held at the end of function [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4692:3: warning: expecting mutex \'mu_\' to be held at the end of function [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5816:3: warning: expecting mutex \'mu\' to be held at the end of function [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5821:3: warning: expecting mutex \'mu\' to be held at the end of function [-Wthread-safety-analysis]"}
["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={"clang/test/SemaCXX/warn-thread-safety-analysis.cpp:3199:3: warning: expecting mutex \'mutex_\' to be held at the end of function [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:3204:3: warning: expecting mutex \'mutex_\' to be held at the end of function [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4671:3: warning: expecting mutex \'mu_\' to be held at the end of function [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4676:3: warning: expecting mutex \'mu_\' to be held at the end of function [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4686:3: warning: expecting mutex \'mu_\' to be held at the end of function [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4692:3: warning: expecting mutex \'mu_\' to be held at the end of function [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5816:3: warning: expecting mutex \'mu\' to be held at the end of function [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5821:3: warning: expecting mutex \'mu\' to be held at the end of function [-Wthread-safety-analysis]"}
}
}
},
},
["warn_experimental_header_unit"]={
["warn_experimental_header_unit"]={
[j]={"experimental-header-units"},
[k]={"experimental-header-units"},
[i]="experimental-header-units",
[j]="experimental-header-units",
[c]="the implementation of header units is in an experimental phase",
[c]="warn_experimental_header_unit",
[d]=g,
[d]="the implementation of header units is in an experimental phase",
[e]="the implementation of header units is in an experimental phase",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wexperimental\\-header\\-units[^\\]]*\\]",
[g]="the implementation of header units is in an experimental phase",
[a]=" \\[(?:\\-Werror,)?\\-Wexperimental\\-header\\-units[^\\]]*\\]",
[b]="Modules Issue",
[b]="Modules Issue",
[a]={Eb,1625925174,Fb,Hb},
[f]={Lb,1625925174,Kb,Jb},
[h]={{"clang/lib/Sema/SemaModule.cpp",551,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, Module *Mod, ModuleIdPath Path) {\n  if (Mod->isHeaderUnit())\n    Diag(ImportLoc, diag::warn_experimental_header_unit);"}}
[h]={{"clang/lib/Sema/SemaModule.cpp",551,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, Module *Mod, ModuleIdPath Path) {\n  if (Mod->isHeaderUnit())\n    Diag(ImportLoc, diag::warn_experimental_header_unit);"}}
},
},
["warn_explicit_instantiation_after_specialization"]={
["warn_explicit_instantiation_after_specialization"]={
[j]={"instantiation-after-specialization"},
[k]={"instantiation-after-specialization"},
[i]="instantiation-after-specialization",
[j]="instantiation-after-specialization",
[c]="explicit instantiation of %0 that occurs after an explicit specialization has no effect",
[c]="warn_explicit_instantiation_after_specialization",
[d]=g,
[d]="explicit instantiation of %0 that occurs after an explicit specialization has no effect",
[e]="explicit instantiation of (.*?) that occurs after an explicit specialization has no effect",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winstantiation\\-after\\-specialization[^\\]]*\\]",
[g]="explicit instantiation of (.*?) that occurs after an explicit specialization has no effect",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Winstantiation\\-after\\-specialization[^\\]]*\\]",
[a]={"e4caa48dbb74",1472685805,"DR259: Demote the pedantic error for an explicit instantiation after an","DR259: Demote the pedantic error for an explicit instantiation after an\nexplicit specialization to a warning for C++98 mode (this is a defect report\nresolution, so per our informal policy it should apply in C++98), and turn\nthe warning on by default for C++11 and later. In all cases where it fires, the\nright thing to do is to remove the pointless explicit instantiation.\n\nllvm-svn: 280308"},
[b]=m,
[h]={{Db,9263,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  // ...\n  case TSK_ExplicitInstantiationDefinition:\n    // ...\n    case TSK_ExplicitSpecialization:\n      // ...\n      Diag(NewLoc, diag::warn_explicit_instantiation_after_specialization) << PrevDecl;"}},
[f]={"e4caa48dbb74",1472685805,"DR259: Demote the pedantic error for an explicit instantiation after an","DR259: Demote the pedantic error for an explicit instantiation after an\nexplicit specialization to a warning for C++98 mode (this is a defect report\nresolution, so per our informal policy it should apply in C++98), and turn\nthe warning on by default for C++11 and later. In all cases where it fires, the\nright thing to do is to remove the pointless explicit instantiation.\n\nllvm-svn: 280308"},
[k]={
[h]={{Eb,9263,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  // ...\n  case TSK_ExplicitInstantiationDefinition:\n    // ...\n    case TSK_ExplicitSpecialization:\n      // ...\n      Diag(NewLoc, diag::warn_explicit_instantiation_after_specialization) << PrevDecl;"}},
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:227:20: warning: explicit instantiation of \'BasicStringPiece<int>\' that occurs after an explicit specialization has no effect [-Winstantiation-after-specialization]","clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:256:20: warning: explicit instantiation of \'BasicStringPiece<int>\' that occurs after an explicit specialization has no effect [-Winstantiation-after-specialization]","clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:271:20: warning: explicit instantiation of \'BasicStringPiece<int>\' that occurs after an explicit specialization has no effect [-Winstantiation-after-specialization]","clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:308:20: warning: explicit instantiation of \'BasicStringPiece<int>\' that occurs after an explicit specialization has no effect [-Winstantiation-after-specialization]","clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:315:20: warning: explicit instantiation of \'BasicStringPiece<int>\' that occurs after an explicit specialization has no effect [-Winstantiation-after-specialization]"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:227:20: warning: explicit instantiation of \'BasicStringPiece<int>\' that occurs after an explicit specialization has no effect [-Winstantiation-after-specialization]","clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:256:20: warning: explicit instantiation of \'BasicStringPiece<int>\' that occurs after an explicit specialization has no effect [-Winstantiation-after-specialization]","clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:271:20: warning: explicit instantiation of \'BasicStringPiece<int>\' that occurs after an explicit specialization has no effect [-Winstantiation-after-specialization]","clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:308:20: warning: explicit instantiation of \'BasicStringPiece<int>\' that occurs after an explicit specialization has no effect [-Winstantiation-after-specialization]","clang/test/CXX/temp/temp.spec/temp.expl.spec/examples.cpp:315:20: warning: explicit instantiation of \'BasicStringPiece<int>\' that occurs after an explicit specialization has no effect [-Winstantiation-after-specialization]"}
}
}
},
},
["warn_explicit_instantiation_inline_0x"]={
["warn_explicit_instantiation_inline_0x"]={
[j]={u,s,o},
[k]={y,u,p},
[i]=s,
[j]=u,
[c]="explicit instantiation cannot be \'inline\'",
[c]="warn_explicit_instantiation_inline_0x",
[d]=g,
[d]="explicit instantiation cannot be \'inline\'",
[e]="explicit instantiation cannot be \'inline\'",
[e]=i,
[f]=qd,
[g]="explicit instantiation cannot be \'inline\'",
[b]=l,
[a]=md,
[a]={"83c19296ff37",1318909443,"Add -Wc++11-compat warning for an inline specifier on an explicit instantiation.","Add -Wc++11-compat warning for an inline specifier on an explicit instantiation.\n\nllvm-svn: 142333"},
[b]=m,
[h]={{Db,10411,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // ...\n  // C++0x [temp.explicit]p1:\n  //  [...] An explicit instantiation of a function template shall not use the\n  //  inline or constexpr specifiers.\n  // Presumably, this also applies to member functions of class templates as\n  // well.\n  if (D.getDeclSpec().isInlineSpecified())\n    Diag(D.getDeclSpec().getInlineSpecLoc(), getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_inline : diag::warn_explicit_instantiation_inline_0x) << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());"}},
[f]={"83c19296ff37",1318909443,"Add -Wc++11-compat warning for an inline specifier on an explicit instantiation.","Add -Wc++11-compat warning for an inline specifier on an explicit instantiation.\n\nllvm-svn: 142333"},
[k]={
[h]={{Eb,10411,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // ...\n  // C++0x [temp.explicit]p1:\n  //  [...] An explicit instantiation of a function template shall not use the\n  //  inline or constexpr specifiers.\n  // Presumably, this also applies to member functions of class templates as\n  // well.\n  if (D.getDeclSpec().isInlineSpecified())\n    Diag(D.getDeclSpec().getInlineSpecLoc(), getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_inline : diag::warn_explicit_instantiation_inline_0x) << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());"}},
[Gc]={"clang/test/SemaCXX/cxx11-compat.cpp:21:10: warning: explicit instantiation cannot be \'inline\' [-Wc++11-compat]"}
[l]={
[Nc]={"clang/test/SemaCXX/cxx11-compat.cpp:21:10: warning: explicit instantiation cannot be \'inline\' [-Wc++11-compat]"}
}
}
},
},
["warn_explicit_instantiation_must_be_global_0x"]={
["warn_explicit_instantiation_must_be_global_0x"]={
[j]={u,s,o},
[k]={y,u,p},
[i]=s,
[j]=u,
[c]="explicit instantiation of %0 must occur at global scope",
[c]="warn_explicit_instantiation_must_be_global_0x",
[d]=g,
[d]="explicit instantiation of %0 must occur at global scope",
[e]="explicit instantiation of (.*?) must occur at global scope",
[e]=i,
[f]=qd,
[g]="explicit instantiation of (.*?) must occur at global scope",
[b]=l,
[a]=md,
[a]={"c97d7a2c6a3a",1273599574,"The C++98/03 standard is disturbingly silent about out-of-scope","The C++98/03 standard is disturbingly silent about out-of-scope\nexplicit instantiations of template. C++0x clarifies the intent\n(they\'re ill-formed in some cases; see [temp.explicit] for\ndetails). However, one could squint at the C++98/03 standard and\nconclude they are permitted, so reduce the error to a warning\n(controlled by -Wc++0x-compat) in C++98/03 mode.\n\nllvm-svn: 103482"},
[b]=m,
[h]={{Db,9869,"/// Check the scope of an explicit instantiation.\n///\n/// \\returns true if a serious error occurs, false otherwise.\nstatic bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName) {\n  // ...\n  if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(OrigContext)) {\n  // ...\n  } else\n    S.Diag(InstLoc, S.getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_must_be_global : diag::warn_explicit_instantiation_must_be_global_0x) << D;"}},
[f]={"c97d7a2c6a3a",1273599574,"The C++98/03 standard is disturbingly silent about out-of-scope","The C++98/03 standard is disturbingly silent about out-of-scope\nexplicit instantiations of template. C++0x clarifies the intent\n(they\'re ill-formed in some cases; see [temp.explicit] for\ndetails). However, one could squint at the C++98/03 standard and\nconclude they are permitted, so reduce the error to a warning\n(controlled by -Wc++0x-compat) in C++98/03 mode.\n\nllvm-svn: 103482"},
[k]={
[h]={{Eb,9869,"/// Check the scope of an explicit instantiation.\n///\n/// \\returns true if a serious error occurs, false otherwise.\nstatic bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName) {\n  // ...\n  if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(OrigContext)) {\n  // ...\n  } else\n    S.Diag(InstLoc, S.getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_must_be_global : diag::warn_explicit_instantiation_must_be_global_0x) << D;"}},
[Gc]={"clang/test/SemaCXX/cxx11-compat.cpp:17:17: warning: explicit instantiation of \'g\' must occur at global scope [-Wc++11-compat]","clang/test/SemaCXX/cxx11-compat.cpp:18:19: warning: explicit instantiation of \'g\' must occur at global scope [-Wc++11-compat]"}
[l]={
[Nc]={"clang/test/SemaCXX/cxx11-compat.cpp:17:17: warning: explicit instantiation of \'g\' must occur at global scope [-Wc++11-compat]","clang/test/SemaCXX/cxx11-compat.cpp:18:19: warning: explicit instantiation of \'g\' must occur at global scope [-Wc++11-compat]"}
}
}
},
},
["warn_explicit_instantiation_out_of_scope_0x"]={
["warn_explicit_instantiation_out_of_scope_0x"]={
[j]={u,s,o},
[k]={y,u,p},
[i]=s,
[j]=u,
[c]="explicit instantiation of %0 not in a namespace enclosing %1",
[c]="warn_explicit_instantiation_out_of_scope_0x",
[d]=g,
[d]="explicit instantiation of %0 not in a namespace enclosing %1",
[e]="explicit instantiation of (.*?) not in a namespace enclosing (.*?)",
[e]=i,
[f]=qd,
[g]="explicit instantiation of (.*?) not in a namespace enclosing (.*?)",
[b]=l,
[a]=md,
[a]={"c97d7a2c6a3a",1273599574,"The C++98/03 standard is disturbingly silent about out-of-scope","The C++98/03 standard is disturbingly silent about out-of-scope\nexplicit instantiations of template. C++0x clarifies the intent\n(they\'re ill-formed in some cases; see [temp.explicit] for\ndetails). However, one could squint at the C++98/03 standard and\nconclude they are permitted, so reduce the error to a warning\n(controlled by -Wc++0x-compat) in C++98/03 mode.\n\nllvm-svn: 103482"},
[b]=m,
[h]={{Db,9857,"/// Check the scope of an explicit instantiation.\n///\n/// \\returns true if a serious error occurs, false otherwise.\nstatic bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName) {\n  // ...\n  if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(OrigContext)) {\n    if (WasQualifiedName)\n      S.Diag(InstLoc, S.getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_out_of_scope : diag::warn_explicit_instantiation_out_of_scope_0x) << D << NS;"}},
[f]={"c97d7a2c6a3a",1273599574,"The C++98/03 standard is disturbingly silent about out-of-scope","The C++98/03 standard is disturbingly silent about out-of-scope\nexplicit instantiations of template. C++0x clarifies the intent\n(they\'re ill-formed in some cases; see [temp.explicit] for\ndetails). However, one could squint at the C++98/03 standard and\nconclude they are permitted, so reduce the error to a warning\n(controlled by -Wc++0x-compat) in C++98/03 mode.\n\nllvm-svn: 103482"},
[k]={
[h]={{Eb,9857,"/// Check the scope of an explicit instantiation.\n///\n/// \\returns true if a serious error occurs, false otherwise.\nstatic bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName) {\n  // ...\n  if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(OrigContext)) {\n    if (WasQualifiedName)\n      S.Diag(InstLoc, S.getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_out_of_scope : diag::warn_explicit_instantiation_out_of_scope_0x) << D << NS;"}},
[Gc]={"clang/test/SemaCXX/cxx11-compat.cpp:9:24: warning: explicit instantiation of \'f\' not in a namespace enclosing \'N\' [-Wc++11-compat]"}
[l]={
[Nc]={"clang/test/SemaCXX/cxx11-compat.cpp:9:24: warning: explicit instantiation of \'f\' not in a namespace enclosing \'N\' [-Wc++11-compat]"}
}
}
},
},
["warn_explicit_instantiation_unqualified_wrong_namespace_0x"]={
["warn_explicit_instantiation_unqualified_wrong_namespace_0x"]={
[j]={u,s,o},
[k]={y,u,p},
[i]=s,
[j]=u,
[c]="explicit instantiation of %q0 must occur in namespace %1",
[c]="warn_explicit_instantiation_unqualified_wrong_namespace_0x",
[d]=g,
[d]="explicit instantiation of %q0 must occur in namespace %1",
[e]="explicit instantiation of (.*?) must occur in namespace (.*?)",
[e]=i,
[f]=qd,
[g]="explicit instantiation of (.*?) must occur in namespace (.*?)",
[b]=l,
[a]=md,
[a]={"c97d7a2c6a3a",1273599574,"The C++98/03 standard is disturbingly silent about out-of-scope","The C++98/03 standard is disturbingly silent about out-of-scope\nexplicit instantiations of template. C++0x clarifies the intent\n(they\'re ill-formed in some cases; see [temp.explicit] for\ndetails). However, one could squint at the C++98/03 standard and\nconclude they are permitted, so reduce the error to a warning\n(controlled by -Wc++0x-compat) in C++98/03 mode.\n\nllvm-svn: 103482"},
[b]=m,
[h]={{Db,9863,"/// Check the scope of an explicit instantiation.\n///\n/// \\returns true if a serious error occurs, false otherwise.\nstatic bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName) {\n  // ...\n  if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(OrigContext)) {\n    if (WasQualifiedName)\n    // ...\n    else\n      S.Diag(InstLoc, S.getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_unqualified_wrong_namespace : diag::warn_explicit_instantiation_unqualified_wrong_namespace_0x) << D << NS;"}},
[f]={"c97d7a2c6a3a",1273599574,"The C++98/03 standard is disturbingly silent about out-of-scope","The C++98/03 standard is disturbingly silent about out-of-scope\nexplicit instantiations of template. C++0x clarifies the intent\n(they\'re ill-formed in some cases; see [temp.explicit] for\ndetails). However, one could squint at the C++98/03 standard and\nconclude they are permitted, so reduce the error to a warning\n(controlled by -Wc++0x-compat) in C++98/03 mode.\n\nllvm-svn: 103482"},
[k]={
[h]={{Eb,9863,"/// Check the scope of an explicit instantiation.\n///\n/// \\returns true if a serious error occurs, false otherwise.\nstatic bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName) {\n  // ...\n  if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(OrigContext)) {\n    if (WasQualifiedName)\n    // ...\n    else\n      S.Diag(InstLoc, S.getLangOpts().CPlusPlus11 ? diag::err_explicit_instantiation_unqualified_wrong_namespace : diag::warn_explicit_instantiation_unqualified_wrong_namespace_0x) << D << NS;"}},
[Gc]={"clang/test/SemaCXX/cxx11-compat.cpp:13:15: warning: explicit instantiation of \'N::f\' must occur in namespace \'N\' [-Wc++11-compat]"}
[l]={
[Nc]={"clang/test/SemaCXX/cxx11-compat.cpp:13:15: warning: explicit instantiation of \'N::f\' must occur in namespace \'N\' [-Wc++11-compat]"}
}
}
},
},
["warn_ext_c2x_attributes"]={
["warn_ext_c2x_attributes"]={
[j]={"c2x-extensions",id},
[k]={"c2x-extensions",hd},
[i]="c2x-extensions",
[j]="c2x-extensions",
[c]="[[]] attributes are a C2x extension",
[c]="warn_ext_c2x_attributes",
[d]=g,
[d]="[[]] attributes are a C2x extension",
[e]="\\[\\[\\]\\] attributes are a C2x extension",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wc2x\\-extensions[^\\]]*\\]",
[g]="\\[\\[\\]\\] attributes are a C2x extension",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wc2x\\-extensions[^\\]]*\\]",
[a]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives\n\nCUDA and HIP have kernel attributes to tune the code generation (in the\nbackend). To reuse this functionality for OpenMP target regions we\nintroduce the `ompx_attribute` clause that takes these kernel\nattributes and emits code as if they had been attached to the kernel\nfuction (which is implicitly generated).\n\nTo limit the impact, we only support three kernel attributes:\n`amdgpu_waves_per_eu`, for AMDGPU\n`amdgpu_flat_work_group_size`, for AMDGPU\n`launch_bounds`, for NVPTX\n\nThe existing implementations of those attributes are used for error\nchecking and code generation. `ompx_attribute` can be attached to any\nexecutable target region and it can hold more than one kernel attribute.\n\nDifferential Revision: https://reviews.llvm.org/D156184"},
[b]=A,
[h]={{bb,4528,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    Diag(OpenLoc, getLangOpts().C2x ? diag::warn_pre_c2x_compat_attributes : diag::warn_ext_c2x_attributes);"}},
[f]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives\n\nCUDA and HIP have kernel attributes to tune the code generation (in the\nbackend). To reuse this functionality for OpenMP target regions we\nintroduce the `ompx_attribute` clause that takes these kernel\nattributes and emits code as if they had been attached to the kernel\nfuction (which is implicitly generated).\n\nTo limit the impact, we only support three kernel attributes:\n`amdgpu_waves_per_eu`, for AMDGPU\n`amdgpu_flat_work_group_size`, for AMDGPU\n`launch_bounds`, for NVPTX\n\nThe existing implementations of those attributes are used for error\nchecking and code generation. `ompx_attribute` can be attached to any\nexecutable target region and it can hold more than one kernel attribute.\n\nDifferential Revision: https://reviews.llvm.org/D156184"},
[k]={
[h]={{kb,4528,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    Diag(OpenLoc, getLangOpts().C2x ? diag::warn_pre_c2x_compat_attributes : diag::warn_ext_c2x_attributes);"}},
[l]={
["clang/test/Sema/matrix-type-builtins.c"]={"clang/test/Sema/matrix-type-builtins.c:11:15: warning: [[]] attributes are a C2x extension [-Wc2x-extensions]","clang/test/Sema/matrix-type-builtins.c:12:13: warning: [[]] attributes are a C2x extension [-Wc2x-extensions]","clang/test/Sema/matrix-type-builtins.c:13:1: warning: [[]] attributes are a C2x extension [-Wc2x-extensions]","clang/test/Sema/matrix-type-builtins.c:15:1: warning: [[]] attributes are a C2x extension [-Wc2x-extensions]","clang/test/Sema/matrix-type-builtins.c:19:1: warning: [[]] attributes are a C2x extension [-Wc2x-extensions]","clang/test/Sema/matrix-type-builtins.c:21:5: warning: [[]] attributes are a C2x extension [-Wc2x-extensions]"}
["clang/test/Sema/matrix-type-builtins.c"]={"clang/test/Sema/matrix-type-builtins.c:11:15: warning: [[]] attributes are a C2x extension [-Wc2x-extensions]","clang/test/Sema/matrix-type-builtins.c:12:13: warning: [[]] attributes are a C2x extension [-Wc2x-extensions]","clang/test/Sema/matrix-type-builtins.c:13:1: warning: [[]] attributes are a C2x extension [-Wc2x-extensions]","clang/test/Sema/matrix-type-builtins.c:15:1: warning: [[]] attributes are a C2x extension [-Wc2x-extensions]","clang/test/Sema/matrix-type-builtins.c:19:1: warning: [[]] attributes are a C2x extension [-Wc2x-extensions]","clang/test/Sema/matrix-type-builtins.c:21:5: warning: [[]] attributes are a C2x extension [-Wc2x-extensions]"}
}
}
},
},
["warn_ext_cxx11_attributes"]={
["warn_ext_cxx11_attributes"]={
[j]={"c++0x-extensions","c++11-extensions",id},
[k]={"c++0x-extensions","c++11-extensions",hd},
[i]="c++11-extensions",
[j]="c++11-extensions",
[c]="[[]] attributes are a C++11 extension",
[c]="warn_ext_cxx11_attributes",
[d]=g,
[d]="[[]] attributes are a C++11 extension",
[e]="\\[\\[\\]\\] attributes are a C\\+\\+11 extension",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-extensions[^\\]]*\\]",
[g]="\\[\\[\\]\\] attributes are a C\\+\\+11 extension",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-extensions[^\\]]*\\]",
[a]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives\n\nCUDA and HIP have kernel attributes to tune the code generation (in the\nbackend). To reuse this functionality for OpenMP target regions we\nintroduce the `ompx_attribute` clause that takes these kernel\nattributes and emits code as if they had been attached to the kernel\nfuction (which is implicitly generated).\n\nTo limit the impact, we only support three kernel attributes:\n`amdgpu_waves_per_eu`, for AMDGPU\n`amdgpu_flat_work_group_size`, for AMDGPU\n`launch_bounds`, for NVPTX\n\nThe existing implementations of those attributes are used for error\nchecking and code generation. `ompx_attribute` can be attached to any\nexecutable target region and it can hold more than one kernel attribute.\n\nDifferential Revision: https://reviews.llvm.org/D156184"},
[b]=A,
[h]={{bb,4525,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    Diag(OpenLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_attribute : diag::warn_ext_cxx11_attributes);"}},
[f]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives\n\nCUDA and HIP have kernel attributes to tune the code generation (in the\nbackend). To reuse this functionality for OpenMP target regions we\nintroduce the `ompx_attribute` clause that takes these kernel\nattributes and emits code as if they had been attached to the kernel\nfuction (which is implicitly generated).\n\nTo limit the impact, we only support three kernel attributes:\n`amdgpu_waves_per_eu`, for AMDGPU\n`amdgpu_flat_work_group_size`, for AMDGPU\n`launch_bounds`, for NVPTX\n\nThe existing implementations of those attributes are used for error\nchecking and code generation. `ompx_attribute` can be attached to any\nexecutable target region and it can hold more than one kernel attribute.\n\nDifferential Revision: https://reviews.llvm.org/D156184"},
[k]={
[h]={{kb,4525,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///        \'[\' \'[\' attribute-list \']\' \']\'\n///        alignment-specifier\n///\n/// [C++11] attribute-list:\n///        attribute[opt]\n///        attribute-list \',\' attribute[opt]\n///        attribute \'...\'\n///        attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///        attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///        identifier\n///        attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///        attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///        identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    Diag(OpenLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_attribute : diag::warn_ext_cxx11_attributes);"}},
[l]={
["clang/test/SemaCXX/warn-c++11-extensions.cpp"]={"clang/test/SemaCXX/warn-c++11-extensions.cpp:11:1: warning: [[]] attributes are a C++11 extension [-Wc++11-extensions]"}
["clang/test/SemaCXX/warn-c++11-extensions.cpp"]={"clang/test/SemaCXX/warn-c++11-extensions.cpp:11:1: warning: [[]] attributes are a C++11 extension [-Wc++11-extensions]"}
}
}
},
},
["warn_ext_int_deprecated"]={
["warn_ext_int_deprecated"]={
[j]={ab,"deprecated-type"},
[k]={jb,"deprecated-type"},
[i]="deprecated-type",
[j]="deprecated-type",
[c]={{nil,Q,"\'_ExtInt\' is deprecated; use \'_BitInt\' instead"}},
[c]={{nil,w,"warn_ext_int_deprecated"}},
[d]=g,
[d]={{nil,w,"\'_ExtInt\' is deprecated; use \'_BitInt\' instead"}},
[e]="\'_ExtInt\' is deprecated; use \'_BitInt\' instead",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-type[^\\]]*\\]",
[g]="\'_ExtInt\' is deprecated; use \'_BitInt\' instead",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-type[^\\]]*\\]",
[a]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions.\n\nThis implements the parsing and recognition of module partition CMIs\nand removes the FIXMEs in the parser.\n\nModule partitions are recognised in the base computation of visibility,\nhowever additional amendments to visibility follow in subsequent patches.\n\nDifferential Revision: https://reviews.llvm.org/D118586"},
[b]={{nil,w,ob}},
[h]={{Tb,7954,"void Parser::DiagnoseBitIntUse(const Token &Tok) {\n  // ...\n  if (Tok.is(tok::kw__ExtInt)) {\n    Diag(Loc, diag::warn_ext_int_deprecated) << FixItHint::CreateReplacement(Loc, \"_BitInt\");"}}
[f]={Md,1612659633,Jd,yd},
[h]={{Wb,7954,"void Parser::DiagnoseBitIntUse(const Token &Tok) {\n  // ...\n  if (Tok.is(tok::kw__ExtInt)) {\n    Diag(Loc, diag::warn_ext_int_deprecated) << FixItHint::CreateReplacement(Loc, \"_BitInt\");"}}
},
},
["warn_extern_init"]={
["warn_extern_init"]={
[j]={"extern-initializer"},
[k]={"extern-initializer"},
[i]="extern-initializer",
[j]="extern-initializer",
[c]="\'extern\' variable has an initializer",
[c]="warn_extern_init",
[d]=g,
[d]="\'extern\' variable has an initializer",
[e]="\'extern\' variable has an initializer",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wextern\\-initializer[^\\]]*\\]",
[g]="\'extern\' variable has an initializer",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wextern\\-initializer[^\\]]*\\]",
[a]={Ub,1237025389,Xb,Wb},
[b]=m,
[h]={{D,13556,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  // ...\n  if (VDecl->isLocalVarDecl()) {\n  // ...\n  } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n  // ...\n  } else if (VDecl->isFileVarDecl()) {\n    // In C, extern is typically used to avoid tentative definitions when\n    // declaring variables in headers, but adding an intializer makes it a\n    // definition. This is somewhat confusing, so GCC and Clang both warn on it.\n    // In C++, extern is often used to give implictly static const variables\n    // external linkage, so don\'t warn in that case. If selectany is present,\n    // this might be header code intended for C and C++ inclusion, so apply the\n    // C++ rules.\n    if (VDecl->getStorageClass() == SC_Extern && ((!getLangOpts().CPlusPlus && !VDecl->hasAttr<SelectAnyAttr>()) || !Context.getBaseElementType(VDecl->getType()).isConstQualified()) && !(getLangOpts().CPlusPlus && VDecl->isExternC()) && !isTemplateInstantiation(VDecl->getTemplateSpecializationKind()))\n      Diag(VDecl->getLocation(), diag::warn_extern_init);"}},
[f]={Yb,1237025389,Zb,ac},
[k]={
[h]={{M,13556,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  // ...\n  if (VDecl->isLocalVarDecl()) {\n  // ...\n  } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n  // ...\n  } else if (VDecl->isFileVarDecl()) {\n    // In C, extern is typically used to avoid tentative definitions when\n    // declaring variables in headers, but adding an intializer makes it a\n    // definition. This is somewhat confusing, so GCC and Clang both warn on it.\n    // In C++, extern is often used to give implictly static const variables\n    // external linkage, so don\'t warn in that case. If selectany is present,\n    // this might be header code intended for C and C++ inclusion, so apply the\n    // C++ rules.\n    if (VDecl->getStorageClass() == SC_Extern && ((!getLangOpts().CPlusPlus && !VDecl->hasAttr<SelectAnyAttr>()) || !Context.getBaseElementType(VDecl->getType()).isConstQualified()) && !(getLangOpts().CPlusPlus && VDecl->isExternC()) && !isTemplateInstantiation(VDecl->getTemplateSpecializationKind()))\n      Diag(VDecl->getLocation(), diag::warn_extern_init);"}},
[l]={
["clang/test/Analysis/redecl.c"]={"clang/test/Analysis/redecl.c:13:18: warning: \'extern\' variable has an initializer [-Wextern-initializer]"}
["clang/test/Analysis/redecl.c"]={"clang/test/Analysis/redecl.c:13:18: warning: \'extern\' variable has an initializer [-Wextern-initializer]"}
}
}
},
},
["warn_extra_semi_after_mem_fn_def"]={
["warn_extra_semi_after_mem_fn_def"]={
[j]={"extra-semi"},
[k]={"extra-semi"},
[i]="extra-semi",
[j]="extra-semi",
[c]="extra \';\' after member function definition",
[c]="warn_extra_semi_after_mem_fn_def",
[d]=g,
[d]="extra \';\' after member function definition",
[e]="extra \';\' after member function definition",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wextra\\-semi[^\\]]*\\]",
[g]="extra \';\' after member function definition",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wextra\\-semi[^\\]]*\\]",
[a]={"87f5dc53b23e",1343022325,"Add diagnostics for comma at end of enum and for extra semicolon at namespace","Add diagnostics for comma at end of enum and for extra semicolon at namespace\nscope to -Wc++11-extensions. Move extra semicolon after member function\ndefinition diagnostic out of -pedantic, since C++ allows a single semicolon\nthere. Keep it in -Wextra-semi, though, since it\'s still questionable.\n\nllvm-svn: 160618"},
[b]=A,
[h]={{Lc,213,"void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) {\n  // ...\n  if (Kind != AfterMemberFunctionDefinition || HadMultipleSemis)\n  // ...\n  else\n    // ...\n    Diag(StartLoc, diag::warn_extra_semi_after_mem_fn_def) << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));"}}
[f]={"87f5dc53b23e",1343022325,"Add diagnostics for comma at end of enum and for extra semicolon at namespace","Add diagnostics for comma at end of enum and for extra semicolon at namespace\nscope to -Wc++11-extensions. Move extra semicolon after member function\ndefinition diagnostic out of -pedantic, since C++ allows a single semicolon\nthere. Keep it in -Wextra-semi, though, since it\'s still questionable.\n\nllvm-svn: 160618"},
[h]={{Hc,213,"void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) {\n  // ...\n  if (Kind != AfterMemberFunctionDefinition || HadMultipleSemis)\n  // ...\n  else\n    // ...\n    Diag(StartLoc, diag::warn_extra_semi_after_mem_fn_def) << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));"}}
},
},
["warn_falloff_nonvoid_coroutine"]={
["warn_falloff_nonvoid_coroutine"]={
[j]={B,H,N,lc},
[k]={K,O,V,rc},
[i]=lc,
[j]=rc,
[c]="control reaches end of non-void coroutine",
[c]="warn_falloff_nonvoid_coroutine",
[d]=g,
[d]="control reaches end of non-void coroutine",
[e]="non\\-void coroutine does not return a value",
[e]=i,
[f]=Cd,
[g]="non\\-void coroutine does not return a value",
[b]=l,
[a]=vd,
[a]={"709d1b30ab9e",1477553431,"[coroutines] Build fallthrough and set_exception statements.","[coroutines] Build fallthrough and set_exception statements.\n\nSummary:\nThis patch adds semantic checking and building of the fall-through `co_return;` statement as well as the `p.set_exception(std::current_exception())` call for handling uncaught exceptions.\n\nThe fall-through statement is built and checked according to:\n> [dcl.fct.def.coroutine]/4\n> The unqualified-ids return_void and return_value are looked up in the scope of class P. If\n> both are found, the program is ill-formed. If the unqualified-id return_void is found, flowing\n> off the end of a coroutine is equivalent to a co_return with no operand. Otherwise, flowing off\n> the end of a coroutine results in undefined behavior.\n\nSimilarly the `set_exception` call is only built when that unqualified-id is found in the scope of class P.\n\nAdditionally this patch adds fall-through warnings for non-void returning coroutines. Since it\'s surprising undefined behavior I thought it would be important to add the warning right away. \n\n\nReviewers: majnemer, GorNishanov, rsmith\n\nSubscribers: mehdi_amini, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D25349\n\nllvm-svn: 285271"},
[b]=m,
[h]={{gb,588,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForCoroutine(const Decl *Func) {\n    // ...\n    D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_coroutine;"}},
[f]={"709d1b30ab9e",1477553431,"[coroutines] Build fallthrough and set_exception statements.","[coroutines] Build fallthrough and set_exception statements.\n\nSummary:\nThis patch adds semantic checking and building of the fall-through `co_return;` statement as well as the `p.set_exception(std::current_exception())` call for handling uncaught exceptions.\n\nThe fall-through statement is built and checked according to:\n> [dcl.fct.def.coroutine]/4\n> The unqualified-ids return_void and return_value are looked up in the scope of class P. If\n> both are found, the program is ill-formed. If the unqualified-id return_void is found, flowing\n> off the end of a coroutine is equivalent to a co_return with no operand. Otherwise, flowing off\n> the end of a coroutine results in undefined behavior.\n\nSimilarly the `set_exception` call is only built when that unqualified-id is found in the scope of class P.\n\nAdditionally this patch adds fall-through warnings for non-void returning coroutines. Since it\'s surprising undefined behavior I thought it would be important to add the warning right away. \n\n\nReviewers: majnemer, GorNishanov, rsmith\n\nSubscribers: mehdi_amini, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D25349\n\nllvm-svn: 285271"},
[k]={
[h]={{qb,588,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForCoroutine(const Decl *Func) {\n    // ...\n    D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_coroutine;"}},
[l]={
["clang/test/SemaCXX/coreturn.cpp"]={"clang/test/SemaCXX/coreturn.cpp:91:1: warning: non-void coroutine does not return a value [-Wreturn-type]","clang/test/SemaCXX/coreturn.cpp:110:1: warning: non-void coroutine does not return a value [-Wreturn-type]","clang/test/SemaCXX/coreturn.cpp:135:1: warning: non-void coroutine does not return a value [-Wreturn-type]"}
["clang/test/SemaCXX/coreturn.cpp"]={"clang/test/SemaCXX/coreturn.cpp:91:1: warning: non-void coroutine does not return a value [-Wreturn-type]","clang/test/SemaCXX/coreturn.cpp:110:1: warning: non-void coroutine does not return a value [-Wreturn-type]","clang/test/SemaCXX/coreturn.cpp:135:1: warning: non-void coroutine does not return a value [-Wreturn-type]"}
}
}
},
},
["warn_falloff_nonvoid_function"]={
["warn_falloff_nonvoid_function"]={
[j]={B,H,N,lc},
[k]={K,O,V,rc},
[i]=lc,
[j]=rc,
[c]={{nil,z,"non-void function does not return a value"},{I,nil,"control reaches end of non-void function"}},
[c]="warn_falloff_nonvoid_function",
[d]=g,
[d]={{nil,q,"non-void function does not return a value"},{x,nil,"control reaches end of non-void function"}},
[e]="non\\-void function does not return a value",
[e]=i,
[f]=Cd,
[g]="non\\-void function does not return a value",
[b]=l,
[a]=vd,
[a]={"33979f75a0fd",1248307017,"Add warning for falling off the end of a function that should return a","Add warning for falling off the end of a function that should return a\nvalue.  This is on by default, and controlled by -Wreturn-type (-Wmost\n-Wall).  I believe there should be very few false positives, though\nthe most interesting case would be:\n\n  int() { bar(); }\n\nwhen bar does:\n\n  bar() { while (1) ; }\n\nHere, we assume functions return, unless they are marked with the\nnoreturn attribute.  I can envision a fixit note for functions that\nnever return normally that don\'t have a noreturn attribute to add a\nnoreturn attribute.\n\nIf anyone spots other false positives, let me know!\n\nllvm-svn: 76821"},
[b]=m,
[h]={{gb,557,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    // ...\n    D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_function;"}},
[f]={"33979f75a0fd",1248307017,"Add warning for falling off the end of a function that should return a","Add warning for falling off the end of a function that should return a\nvalue.  This is on by default, and controlled by -Wreturn-type (-Wmost\n-Wall).  I believe there should be very few false positives, though\nthe most interesting case would be:\n\n  int() { bar(); }\n\nwhen bar does:\n\n  bar() { while (1) ; }\n\nHere, we assume functions return, unless they are marked with the\nnoreturn attribute.  I can envision a fixit note for functions that\nnever return normally that don\'t have a noreturn attribute to add a\nnoreturn attribute.\n\nIf anyone spots other false positives, let me know!\n\nllvm-svn: 76821"},
[k]={
[h]={{qb,557,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    // ...\n    D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_function;"}},
[l]={
["clang/test/SemaObjC/try-catch.m"]={"clang/test/SemaObjC/try-catch.m:37:1: warning: non-void function does not return a value [-Wreturn-type]"}
["clang/test/SemaObjC/try-catch.m"]={"clang/test/SemaObjC/try-catch.m:37:1: warning: non-void function does not return a value [-Wreturn-type]"}
}
}
},
},
["warn_falloff_nonvoid_lambda"]={
["warn_falloff_nonvoid_lambda"]={
[j]={B,H,N,lc},
[k]={K,O,V,rc},
[i]=lc,
[j]=rc,
[c]={{nil,z,"non-void lambda does not return a value"},{I,nil,"control reaches end of non-void lambda"}},
[c]="warn_falloff_nonvoid_lambda",
[d]=g,
[d]={{nil,q,"non-void lambda does not return a value"},{x,nil,"control reaches end of non-void lambda"}},
[e]="non\\-void lambda does not return a value",
[e]=i,
[f]=Cd,
[g]="non\\-void lambda does not return a value",
[b]=Wc,
[a]=vd,
[a]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions.","Specialize noreturn diagnostics for lambda expressions.\n\nllvm-svn: 150586"},
[b]=gd,
[h]={{gb,618,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForLambda() {\n    // ...\n    D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_lambda;"}},
[f]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions.","Specialize noreturn diagnostics for lambda expressions.\n\nllvm-svn: 150586"},
[k]={
[h]={{qb,618,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForLambda() {\n    // ...\n    D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_lambda;"}},
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p7.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p7.cpp:5:23: warning: non-void lambda does not return a value [-Wreturn-type]"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p7.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p7.cpp:5:23: warning: non-void lambda does not return a value [-Wreturn-type]"}
}
}
},
},
["warn_falloff_noreturn_function"]={
["warn_falloff_noreturn_function"]={
[j]={"invalid-noreturn"},
[k]={"invalid-noreturn"},
[i]="invalid-noreturn",
[j]="invalid-noreturn",
[c]="function declared \'noreturn\' should not return",
[c]="warn_falloff_noreturn_function",
[d]=g,
[d]="function declared \'noreturn\' should not return",
[e]="function declared \'noreturn\' should not return",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winvalid\\-noreturn[^\\]]*\\]",
[g]="function declared \'noreturn\' should not return",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-noreturn[^\\]]*\\]",
[a]={"8e79f99b1638",1248403741,"Implement new warning for functions declared \'noreturn\' when they fall off the end.","Implement new warning for functions declared \'noreturn\' when they fall off the end.\n\nllvm-svn: 76932"},
[b]=m,
[h]={{gb,551,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    // ...\n    D.diag_MaybeFallThrough_HasNoReturn = diag::warn_falloff_noreturn_function;"},{gb,555,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    // ...\n    D.diag_AlwaysFallThrough_HasNoReturn = diag::warn_falloff_noreturn_function;"}},
[f]={"8e79f99b1638",1248403741,"Implement new warning for functions declared \'noreturn\' when they fall off the end.","Implement new warning for functions declared \'noreturn\' when they fall off the end.\n\nllvm-svn: 76932"},
[k]={
[h]={{qb,551,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    // ...\n    D.diag_MaybeFallThrough_HasNoReturn = diag::warn_falloff_noreturn_function;"},{qb,555,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    // ...\n    D.diag_AlwaysFallThrough_HasNoReturn = diag::warn_falloff_noreturn_function;"}},
[l]={
["clang/test/Sema/attr-noreturn.c"]={"clang/test/Sema/attr-noreturn.c:9:1: warning: function declared \'noreturn\' should not return [-Winvalid-noreturn]"}
["clang/test/Sema/attr-noreturn.c"]={"clang/test/Sema/attr-noreturn.c:9:1: warning: function declared \'noreturn\' should not return [-Winvalid-noreturn]"}
}
}
},
},
["warn_fe_backend_frame_larger_than"]={
["warn_fe_backend_frame_larger_than"]={
[j]={"frame-larger-than","frame-larger-than="},
[k]={"frame-larger-than","frame-larger-than="},
[i]="frame-larger-than",
[j]="frame-larger-than",
[c]="%0",
[c]="warn_fe_backend_frame_larger_than",
[d]=g,
[d]=Gd,
[e]="(.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wframe\\-larger\\-than[^\\]]*\\]",
[g]="(.*?)",
[b]=Id,
[a]=" \\[(?:\\-Werror,)?\\-Wframe\\-larger\\-than[^\\]]*\\]",
[a]={"728c5540eef2",1391711443,"Wired-up the new LLVM diagnostic system into clang diagnostic system.","Wired-up the new LLVM diagnostic system into clang diagnostic system.\nThe approach is similar to the existing inline-asm reporting, just more\ngeneral.\n\n<rdar://problem/15886278>\n\nllvm-svn: 200931"},
[b]=Hd,
[f]={"728c5540eef2",1391711443,"Wired-up the new LLVM diagnostic system into clang diagnostic system.","Wired-up the new LLVM diagnostic system into clang diagnostic system.\nThe approach is similar to the existing inline-asm reporting, just more\ngeneral.\n\n<rdar://problem/15886278>\n\nllvm-svn: 200931"},
[h]={{"clang/lib/CodeGen/CodeGenFunction.cpp",1104,"#include \"clang/Basic/Sanitizers.def\"\n  // ...\n  if (CGM.getCodeGenOpts().WarnStackSize != UINT_MAX && !CGM.getDiags().isIgnored(diag::warn_fe_backend_frame_larger_than, Loc))"}},
[h]={{"clang/lib/CodeGen/CodeGenFunction.cpp",1104,"#include \"clang/Basic/Sanitizers.def\"\n  // ...\n  if (CGM.getCodeGenOpts().WarnStackSize != UINT_MAX && !CGM.getDiags().isIgnored(diag::warn_fe_backend_frame_larger_than, Loc))"}},
[k]={
[l]={
["clang/test/Misc/backend-stack-frame-diagnostics-fallback.cpp"]={"warning: <unknown>:0:0: stack frame size (12) exceeds limit (0) in function \'_ZTv0_n12_N21frameSizeThunkWarning1B1fEv\' [-Wframe-larger-than]"}
["clang/test/Misc/backend-stack-frame-diagnostics-fallback.cpp"]={"warning: <unknown>:0:0: stack frame size (12) exceeds limit (0) in function \'_ZTv0_n12_N21frameSizeThunkWarning1B1fEv\' [-Wframe-larger-than]"}
}
}
},
},
["warn_fe_backend_invalid_feature_flag"]={
["warn_fe_backend_invalid_feature_flag"]={
[j]={Bb},
[k]={Gb},
[i]=Bb,
[j]=Gb,
[c]={{nil,yc,"feature flag \'%0\' must start with either \'+\' to enable the feature or \'-\' to disable it; flag ignored"}},
[c]={{nil,bb,"warn_fe_backend_invalid_feature_flag"}},
[d]=g,
[d]={{nil,bb,"feature flag \'%0\' must start with either \'+\' to enable the feature or \'-\' to disable it; flag ignored"}},
[e]="feature flag \'(.*?)\' must start with either \'\\+\' to enable the feature or \'\\-\' to disable it; flag ignored",
[e]=i,
[f]=Rc,
[g]="feature flag \'(.*?)\' must start with either \'\\+\' to enable the feature or \'\\-\' to disable it; flag ignored",
[b]=p,
[a]=Tc,
[a]={"910ad36e1a25",1664072190,"[Clang] Improve diagnostics about the invalid target feature.","[Clang] Improve diagnostics about the invalid target feature.\n\nClang with debug builds will crash when run with empty target feature input.\nAnd the warning message is a little bit confusing. This patch adds an empty\ncheck and a new diagnostic to illustrate where goes wrong.\n\nReviewed By: MaskRay, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D133563"},
[b]={{nil,bb,r}},
[f]={"910ad36e1a25",1664072190,"[Clang] Improve diagnostics about the invalid target feature.","[Clang] Improve diagnostics about the invalid target feature.\n\nClang with debug builds will crash when run with empty target feature input.\nAnd the warning message is a little bit confusing. This patch adds an empty\ncheck and a new diagnostic to illustrate where goes wrong.\n\nReviewed By: MaskRay, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D133563"},
[h]={{"clang/lib/Basic/TargetInfo.cpp",531,"bool TargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeatureVec) const {\n  for (const auto &F : FeatureVec) {\n    // ...\n    // Apply the feature via the target.\n    if (Name[0] != \'+\' && Name[0] != \'-\')\n      Diags.Report(diag::warn_fe_backend_invalid_feature_flag) << Name;"}},
[h]={{"clang/lib/Basic/TargetInfo.cpp",531,"bool TargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeatureVec) const {\n  for (const auto &F : FeatureVec) {\n    // ...\n    // Apply the feature via the target.\n    if (Name[0] != \'+\' && Name[0] != \'-\')\n      Diags.Report(diag::warn_fe_backend_invalid_feature_flag) << Name;"}},
[k]={
[l]={
["clang/test/Frontend/invalid-target-feature.c"]={"warning: feature flag \' n\' must start with either \'+\' to enable the feature or \'-\' to disable it; flag ignored [-Winvalid-command-line-argument]"}
["clang/test/Frontend/invalid-target-feature.c"]={"warning: feature flag \' n\' must start with either \'+\' to enable the feature or \'-\' to disable it; flag ignored [-Winvalid-command-line-argument]"}
}
}
},
},
["warn_fe_backend_optimization_failure"]={
["warn_fe_backend_optimization_failure"]={
[j]={"pass-failed"},
[k]={"pass-failed"},
[i]="pass-failed",
[j]="pass-failed",
[c]="%0",
[c]="warn_fe_backend_optimization_failure",
[d]=g,
[d]=Gd,
[e]="(.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wpass\\-failed[^\\]]*\\]",
[g]="(.*?)",
[b]=Id,
[a]=" \\[(?:\\-Werror,)?\\-Wpass\\-failed[^\\]]*\\]",
[a]={"f8a767df67f3",1405712419,"Recommit: Handle diagnostic warnings in Frontend diagnostic handler.","Recommit: Handle diagnostic warnings in Frontend diagnostic handler.\n\nClang uses a diagnostic handler to grab diagnostic messages so it can print them\nwith the line of source code they refer to. This patch extends this to handle\noptimization failures that were added to llvm to produce a warning when\nloop vectorization is explicitly specified (using a pragma clang loop directive)\nbut fails.\n\nUpdate renames warning flag name to avoid indicating the flag\'s severity and\nadds a test.\n\nReviewed by Alp Toker\n\nllvm-svn: 213400"},
[b]=Hd,
[f]={"f8a767df67f3",1405712419,"Recommit: Handle diagnostic warnings in Frontend diagnostic handler.","Recommit: Handle diagnostic warnings in Frontend diagnostic handler.\n\nClang uses a diagnostic handler to grab diagnostic messages so it can print them\nwith the line of source code they refer to. This patch extends this to handle\noptimization failures that were added to llvm to produce a warning when\nloop vectorization is explicitly specified (using a pragma clang loop directive)\nbut fails.\n\nUpdate renames warning flag name to avoid indicating the flag\'s severity and\nadds a test.\n\nReviewed by Alp Toker\n\nllvm-svn: 213400"},
[h]={{"clang/lib/CodeGen/CodeGenAction.cpp",844,"void BackendConsumer::OptimizationFailureHandler(const llvm::DiagnosticInfoOptimizationFailure &D) { EmitOptimizationMessage(D, diag::warn_fe_backend_optimization_failure); }"}},
[h]={{"clang/lib/CodeGen/CodeGenAction.cpp",844,"void BackendConsumer::OptimizationFailureHandler(const llvm::DiagnosticInfoOptimizationFailure &D) { EmitOptimizationMessage(D, diag::warn_fe_backend_optimization_failure); }"}},
[k]={
[l]={
["clang/test/Frontend/optimization-remark-analysis.c"]={"clang/test/Frontend/optimization-remark-analysis.c:7:8: warning: loop not vectorized: the optimizer was unable to perform the requested transformation; the transformation might be disabled or specified as part of an unsupported transformation ordering [-Wpass-failed=transform-warning]"}
["clang/test/Frontend/optimization-remark-analysis.c"]={"clang/test/Frontend/optimization-remark-analysis.c:7:8: warning: loop not vectorized: the optimizer was unable to perform the requested transformation; the transformation might be disabled or specified as part of an unsupported transformation ordering [-Wpass-failed=transform-warning]"}
}
}
},
},
["warn_fe_backend_plugin"]={
["warn_fe_backend_plugin"]={
[j]={"backend-plugin"},
[k]={"backend-plugin"},
[i]="backend-plugin",
[j]="backend-plugin",
[c]="%0",
[c]="warn_fe_backend_plugin",
[d]=g,
[d]=Gd,
[e]="(.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wbackend\\-plugin[^\\]]*\\]",
[g]="(.*?)",
[b]=Id,
[a]=" \\[(?:\\-Werror,)?\\-Wbackend\\-plugin[^\\]]*\\]",
[a]={"728c5540eef2",1391711443,"Wired-up the new LLVM diagnostic system into clang diagnostic system.","Wired-up the new LLVM diagnostic system into clang diagnostic system.\nThe approach is similar to the existing inline-asm reporting, just more\ngeneral.\n\n<rdar://problem/15886278>\n\nllvm-svn: 200931"}
[b]=Hd,
[f]={"728c5540eef2",1391711443,"Wired-up the new LLVM diagnostic system into clang diagnostic system.","Wired-up the new LLVM diagnostic system into clang diagnostic system.\nThe approach is similar to the existing inline-asm reporting, just more\ngeneral.\n\n<rdar://problem/15886278>\n\nllvm-svn: 200931"}
},
},
["warn_fe_backend_readonly_feature_flag"]={
["warn_fe_backend_readonly_feature_flag"]={
[j]={Bb},
[k]={Gb},
[i]=Bb,
[j]=Gb,
[c]="feature flag \'%0\' is ignored since the feature is read only",
[c]="warn_fe_backend_readonly_feature_flag",
[d]=g,
[d]="feature flag \'%0\' is ignored since the feature is read only",
[e]="feature flag \'(.*?)\' is ignored since the feature is read only",
[e]=i,
[f]=Rc,
[g]="feature flag \'(.*?)\' is ignored since the feature is read only",
[b]=p,
[a]=Tc,
[a]={"c0f0d50653e1",1684947541,"[HIP] emit macro `__HIP_NO_IMAGE_SUPPORT`","[HIP] emit macro `__HIP_NO_IMAGE_SUPPORT`\n\nHIP texture/image support is optional as some devices\ndo not have image instructions. A macro __HIP_NO_IMAGE_SUPPORT\nis defined for device not supporting images (https://github.com/ROCm-Developer-Tools/HIP/blob/d0448aa4c4dd0f4b29ccf6a663b7f5ad9f5183e0/docs/reference/kernel_language.md?plain=1#L426 )\n\nCurrently the macro is defined by HIP header based on predefined macros\nfor GPU, e.g __gfx*__ , which is error prone. This patch let clang\nemit the predefined macro.\n\nReviewed by: Matt Arsenault, Artem Belevich\n\nDifferential Revision: https://reviews.llvm.org/D151349"},
[b]=r,
[f]={"c0f0d50653e1",1684947541,"[HIP] emit macro `__HIP_NO_IMAGE_SUPPORT`","[HIP] emit macro `__HIP_NO_IMAGE_SUPPORT`\n\nHIP texture/image support is optional as some devices\ndo not have image instructions. A macro __HIP_NO_IMAGE_SUPPORT\nis defined for device not supporting images (https://github.com/ROCm-Developer-Tools/HIP/blob/d0448aa4c4dd0f4b29ccf6a663b7f5ad9f5183e0/docs/reference/kernel_language.md?plain=1#L426 )\n\nCurrently the macro is defined by HIP header based on predefined macros\nfor GPU, e.g __gfx*__ , which is error prone. This patch let clang\nemit the predefined macro.\n\nReviewed by: Matt Arsenault, Artem Belevich\n\nDifferential Revision: https://reviews.llvm.org/D151349"},
[h]={{"clang/lib/Basic/Targets.cpp",823,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // ...\n  // Compute the default target features, we need the target to handle this\n  // because features may have dependencies on one another.\n  llvm::erase_if(Opts->FeaturesAsWritten, [&](StringRef Name) {\n    if (Target->isReadOnlyFeature(Name.substr(1))) {\n      Diags.Report(diag::warn_fe_backend_readonly_feature_flag) << Name;"}},
[h]={{"clang/lib/Basic/Targets.cpp",823,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // ...\n  // Compute the default target features, we need the target to handle this\n  // because features may have dependencies on one another.\n  llvm::erase_if(Opts->FeaturesAsWritten, [&](StringRef Name) {\n    if (Target->isReadOnlyFeature(Name.substr(1))) {\n      Diags.Report(diag::warn_fe_backend_readonly_feature_flag) << Name;"}},
[k]={
[l]={
["clang/test/OpenMP/openmp-read-only-feature.c"]={"warning: feature flag \'-image-insts\' is ignored since the feature is read only [-Winvalid-command-line-argument]"}
["clang/test/OpenMP/openmp-read-only-feature.c"]={"warning: feature flag \'-image-insts\' is ignored since the feature is read only [-Winvalid-command-line-argument]"}
}
}
},
},
["warn_fe_backend_resource_limit"]={
["warn_fe_backend_resource_limit"]={
[j]={"backend-plugin"},
[k]={"backend-plugin"},
[i]="backend-plugin",
[j]="backend-plugin",
[c]={{nil,yc,"%0 (%1) exceeds limit (%2) in \'%3\'"}},
[c]={{nil,bb,"warn_fe_backend_resource_limit"}},
[d]=g,
[d]={{nil,bb,"%0 (%1) exceeds limit (%2) in \'%3\'"}},
[e]="(.*?) \\((.*?)\\) exceeds limit \\((.*?)\\) in \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wbackend\\-plugin[^\\]]*\\]",
[g]="(.*?) \\((.*?)\\) exceeds limit \\((.*?)\\) in \'(.*?)\'",
[b]=Id,
[a]=" \\[(?:\\-Werror,)?\\-Wbackend\\-plugin[^\\]]*\\]",
[a]={"a033dbbe5c43",1666225776,"[Clang] Give Clang the ability to use a shared stat cache","[Clang] Give Clang the ability to use a shared stat cache\n\nEvery Clang instance uses an internal FileSystemStatCache to avoid\nstating the same content multiple times. However, different instances\nof Clang will contend for filesystem access for their initial stats\nduring HeaderSearch or module validation.\n\nOn some workloads, the time spent in the kernel in these concurrent\nstat calls has been measured to be over 20% of the overall compilation\ntime. This is extremly wassteful when most of the stat calls target\nmostly immutable content like a SDK.\n\nThis commit introduces a new tool `clang-stat-cache` able to generate\nan OnDiskHashmap containing the stat data for a given filesystem\nhierarchy.\n\nThe driver part of this has been modeled after -ivfsoverlay given\nthe similarities with what it influences. It introduces a new\n-ivfsstatcache driver option to instruct Clang to use a stat cache\ngenerated by `clang-stat-cache`. These stat caches are inserted at\nthe bottom of the VFS stack (right above the real filesystem).\n\nDifferential Revision: https://reviews.llvm.org/D136651"}
[b]={{nil,bb,Hd}},
[f]={"a033dbbe5c43",1666225776,"[Clang] Give Clang the ability to use a shared stat cache","[Clang] Give Clang the ability to use a shared stat cache\n\nEvery Clang instance uses an internal FileSystemStatCache to avoid\nstating the same content multiple times. However, different instances\nof Clang will contend for filesystem access for their initial stats\nduring HeaderSearch or module validation.\n\nOn some workloads, the time spent in the kernel in these concurrent\nstat calls has been measured to be over 20% of the overall compilation\ntime. This is extremly wassteful when most of the stat calls target\nmostly immutable content like a SDK.\n\nThis commit introduces a new tool `clang-stat-cache` able to generate\nan OnDiskHashmap containing the stat data for a given filesystem\nhierarchy.\n\nThe driver part of this has been modeled after -ivfsoverlay given\nthe similarities with what it influences. It introduces a new\n-ivfsstatcache driver option to instruct Clang to use a stat cache\ngenerated by `clang-stat-cache`. These stat caches are inserted at\nthe bottom of the VFS stack (right above the real filesystem).\n\nDifferential Revision: https://reviews.llvm.org/D136651"}
},
},
["warn_fe_backend_unsupported_fp_exceptions"]={
["warn_fe_backend_unsupported_fp_exceptions"]={
[j]={"unsupported-floating-point-opt"},
[k]={"unsupported-floating-point-opt"},
[i]="unsupported-floating-point-opt",
[j]="unsupported-floating-point-opt",
[c]={{nil,mb,"overriding currently unsupported use of floating point exceptions on this target"}},
[c]={{nil,z,"warn_fe_backend_unsupported_fp_exceptions"}},
[d]=g,
[d]={{nil,z,"overriding currently unsupported use of floating point exceptions on this target"}},
[e]="overriding currently unsupported use of floating point exceptions on this target",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-floating\\-point\\-opt[^\\]]*\\]",
[g]="overriding currently unsupported use of floating point exceptions on this target",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-floating\\-point\\-opt[^\\]]*\\]",
[a]={"39d2ae0afb23",1594050762,"[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support.","[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support.\n\nWe currently have strict floating point/constrained floating point enabled\nfor all targets. Constrained SDAG nodes get converted to the regular ones\nbefore reaching the target layer. In theory this should be fine.\n\nHowever, the changes are exposed to users through multiple clang options\nalready in use in the field, and the changes are _completely_ _untested_\non almost all of our targets. Bugs have already been found, like\n\"https://bugs.llvm.org/show_bug.cgi?id=45274\".\n\nThis patch disables constrained floating point options in clang everywhere\nexcept X86 and SystemZ. A warning will be printed when this happens.\n\nDifferential Revision: https://reviews.llvm.org/D80952"},
[b]={{nil,z,r}},
[h]={{Xc,137,"bool CompilerInstance::createTarget() {\n  // ...\n  if (!getTarget().hasStrictFP() && !getLangOpts().ExpStrictFP) {\n    // ...\n    if (FPExc != LangOptions::FPE_Default && FPExc != LangOptions::FPE_Ignore) {\n      getDiagnostics().Report(diag::warn_fe_backend_unsupported_fp_exceptions);"}},
[f]={"39d2ae0afb23",1594050762,"[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support.","[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support.\n\nWe currently have strict floating point/constrained floating point enabled\nfor all targets. Constrained SDAG nodes get converted to the regular ones\nbefore reaching the target layer. In theory this should be fine.\n\nHowever, the changes are exposed to users through multiple clang options\nalready in use in the field, and the changes are _completely_ _untested_\non almost all of our targets. Bugs have already been found, like\n\"https://bugs.llvm.org/show_bug.cgi?id=45274\".\n\nThis patch disables constrained floating point options in clang everywhere\nexcept X86 and SystemZ. A warning will be printed when this happens.\n\nDifferential Revision: https://reviews.llvm.org/D80952"},
[k]={
[h]={{Rc,137,"bool CompilerInstance::createTarget() {\n  // ...\n  if (!getTarget().hasStrictFP() && !getLangOpts().ExpStrictFP) {\n    // ...\n    if (FPExc != LangOptions::FPE_Default && FPExc != LangOptions::FPE_Ignore) {\n      getDiagnostics().Report(diag::warn_fe_backend_unsupported_fp_exceptions);"}},
[l]={
["clang/test/CodeGenHIP/printf_nonhostcall.cpp"]={"warning: overriding currently unsupported use of floating point exceptions on this target [-Wunsupported-floating-point-opt]"}
["clang/test/CodeGenHIP/printf_nonhostcall.cpp"]={"warning: overriding currently unsupported use of floating point exceptions on this target [-Wunsupported-floating-point-opt]"}
}
}
},
},
["warn_fe_backend_unsupported_fp_rounding"]={
["warn_fe_backend_unsupported_fp_rounding"]={
[j]={"unsupported-floating-point-opt"},
[k]={"unsupported-floating-point-opt"},
[i]="unsupported-floating-point-opt",
[j]="unsupported-floating-point-opt",
[c]={{nil,mb,"overriding currently unsupported rounding mode on this target"}},
[c]={{nil,z,"warn_fe_backend_unsupported_fp_rounding"}},
[d]=g,
[d]={{nil,z,"overriding currently unsupported rounding mode on this target"}},
[e]="overriding currently unsupported rounding mode on this target",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-floating\\-point\\-opt[^\\]]*\\]",
[g]="overriding currently unsupported rounding mode on this target",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-floating\\-point\\-opt[^\\]]*\\]",
[a]={"39d2ae0afb23",1594050762,"[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support.","[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support.\n\nWe currently have strict floating point/constrained floating point enabled\nfor all targets. Constrained SDAG nodes get converted to the regular ones\nbefore reaching the target layer. In theory this should be fine.\n\nHowever, the changes are exposed to users through multiple clang options\nalready in use in the field, and the changes are _completely_ _untested_\non almost all of our targets. Bugs have already been found, like\n\"https://bugs.llvm.org/show_bug.cgi?id=45274\".\n\nThis patch disables constrained floating point options in clang everywhere\nexcept X86 and SystemZ. A warning will be printed when this happens.\n\nDifferential Revision: https://reviews.llvm.org/D80952"},
[b]={{nil,z,r}},
[h]={{Xc,132,"bool CompilerInstance::createTarget() {\n  // ...\n  if (!getTarget().hasStrictFP() && !getLangOpts().ExpStrictFP) {\n    if (getLangOpts().RoundingMath) {\n      getDiagnostics().Report(diag::warn_fe_backend_unsupported_fp_rounding);"}},
[f]={"39d2ae0afb23",1594050762,"[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support.","[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support.\n\nWe currently have strict floating point/constrained floating point enabled\nfor all targets. Constrained SDAG nodes get converted to the regular ones\nbefore reaching the target layer. In theory this should be fine.\n\nHowever, the changes are exposed to users through multiple clang options\nalready in use in the field, and the changes are _completely_ _untested_\non almost all of our targets. Bugs have already been found, like\n\"https://bugs.llvm.org/show_bug.cgi?id=45274\".\n\nThis patch disables constrained floating point options in clang everywhere\nexcept X86 and SystemZ. A warning will be printed when this happens.\n\nDifferential Revision: https://reviews.llvm.org/D80952"},
[k]={
[h]={{Rc,132,"bool CompilerInstance::createTarget() {\n  // ...\n  if (!getTarget().hasStrictFP() && !getLangOpts().ExpStrictFP) {\n    if (getLangOpts().RoundingMath) {\n      getDiagnostics().Report(diag::warn_fe_backend_unsupported_fp_rounding);"}},
[l]={
["clang/test/CodeGen/fp-strictfp.cpp"]={"warning: overriding currently unsupported rounding mode on this target [-Wunsupported-floating-point-opt]"}
["clang/test/CodeGen/fp-strictfp.cpp"]={"warning: overriding currently unsupported rounding mode on this target [-Wunsupported-floating-point-opt]"}
}
}
},
},
["warn_fe_backend_warning_attr"]={
["warn_fe_backend_warning_attr"]={
[j]={"attribute-warning"},
[k]={"attribute-warning"},
[i]="attribute-warning",
[j]="attribute-warning",
[c]={{nil,yc,"call to \'%0\' declared with \'warning\' attribute: %1"},{kb,Q,"call to %0 declared with \'warning\' attribute: %1"}},
[c]={{nil,w,"warn_fe_backend_warning_attr"}},
[d]=g,
[d]={{nil,bb,"call to \'%0\' declared with \'warning\' attribute: %1"},{C,w,"call to %0 declared with \'warning\' attribute: %1"}},
[e]="call to \'(.*?)\' declared with \'warning\' attribute\\: (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wattribute\\-warning[^\\]]*\\]",
[g]="call to \'(.*?)\' declared with \'warning\' attribute\\: (.*?)",
[b]=Id,
[a]=" \\[(?:\\-Werror,)?\\-Wattribute\\-warning[^\\]]*\\]",
[a]={"846e562dcc6a",1629911893,"[Clang] add support for error+warning fn attrs","[Clang] add support for error+warning fn attrs\n\nAdd support for the GNU C style __attribute__((error(\"\"))) and\n__attribute__((warning(\"\"))). These attributes are meant to be put on\ndeclarations of functions whom should not be called.\n\nThey are frequently used to provide compile time diagnostics similar to\n_Static_assert, but which may rely on non-ICE conditions (ie. relying on\ncompiler optimizations). This is also similar to diagnose_if function\nattribute, but can diagnose after optimizations have been run.\n\nWhile users may instead simply call undefined functions in such cases to\nget a linkage failure from the linker, these provide a much more\nergonomic and actionable diagnostic to users and do so at compile time\nrather than at link time. Users instead may be able use inline asm .err\ndirectives.\n\nThese are used throughout the Linux kernel in its implementation of\nBUILD_BUG and BUILD_BUG_ON macros. These macros generally cannot be\nconverted to use _Static_assert because many of the parameters are not\nICEs. The Linux kernel still needs to be modified to make use of these\nwhen building with Clang; I have a patch that does so I will send once\nthis feature is landed.\n\nTo do so, we create a new IR level Function attribute, \"dontcall\" (both\nerror and warning boil down to one IR Fn Attr).  Then, similar to calls\nto inline asm, we attach a !srcloc Metadata node to call sites of such\nattributed callees.\n\nThe backend diagnoses these during instruction selection, while we still\nknow that a call is a call (vs say a JMP that\'s a tail call) in an arch\nagnostic manner.\n\nThe frontend then reconstructs the SourceLocation from that Metadata,\nand determines whether to emit an error or warning based on the callee\'s\nattribute.\n\nLink: https://bugs.llvm.org/show_bug.cgi?id=16428\nLink: https://github.com/ClangBuiltLinux/linux/issues/1173\n\nReviewed By: aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D106030"},
[b]={{nil,w,Hd}},
[f]={"846e562dcc6a",1629911893,"[Clang] add support for error+warning fn attrs","[Clang] add support for error+warning fn attrs\n\nAdd support for the GNU C style __attribute__((error(\"\"))) and\n__attribute__((warning(\"\"))). These attributes are meant to be put on\ndeclarations of functions whom should not be called.\n\nThey are frequently used to provide compile time diagnostics similar to\n_Static_assert, but which may rely on non-ICE conditions (ie. relying on\ncompiler optimizations). This is also similar to diagnose_if function\nattribute, but can diagnose after optimizations have been run.\n\nWhile users may instead simply call undefined functions in such cases to\nget a linkage failure from the linker, these provide a much more\nergonomic and actionable diagnostic to users and do so at compile time\nrather than at link time. Users instead may be able use inline asm .err\ndirectives.\n\nThese are used throughout the Linux kernel in its implementation of\nBUILD_BUG and BUILD_BUG_ON macros. These macros generally cannot be\nconverted to use _Static_assert because many of the parameters are not\nICEs. The Linux kernel still needs to be modified to make use of these\nwhen building with Clang; I have a patch that does so I will send once\nthis feature is landed.\n\nTo do so, we create a new IR level Function attribute, \"dontcall\" (both\nerror and warning boil down to one IR Fn Attr).  Then, similar to calls\nto inline asm, we attach a !srcloc Metadata node to call sites of such\nattributed callees.\n\nThe backend diagnoses these during instruction selection, while we still\nknow that a call is a call (vs say a JMP that\'s a tail call) in an arch\nagnostic manner.\n\nThe frontend then reconstructs the SourceLocation from that Metadata,\nand determines whether to emit an error or warning based on the callee\'s\nattribute.\n\nLink: https://bugs.llvm.org/show_bug.cgi?id=16428\nLink: https://github.com/ClangBuiltLinux/linux/issues/1173\n\nReviewed By: aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D106030"},
[h]={{"clang/lib/CodeGen/CodeGenAction.cpp",858,"void BackendConsumer::DontCallDiagHandler(const DiagnosticInfoDontCall &D) {\n  // ...\n  Diags.Report(LocCookie, D.getSeverity() == DiagnosticSeverity::DS_Error ? diag::err_fe_backend_error_attr : diag::warn_fe_backend_warning_attr) << llvm::demangle(D.getFunctionName()) << D.getNote();"}},
[h]={{"clang/lib/CodeGen/CodeGenAction.cpp",858,"void BackendConsumer::DontCallDiagHandler(const DiagnosticInfoDontCall &D) {\n  // ...\n  Diags.Report(LocCookie, D.getSeverity() == DiagnosticSeverity::DS_Error ? diag::err_fe_backend_error_attr : diag::warn_fe_backend_warning_attr) << llvm::demangle(D.getFunctionName()) << D.getNote();"}},
[k]={
[l]={
["clang/test/Frontend/backend-attribute-error-warning.c"]={"clang/test/Frontend/backend-attribute-error-warning.c:32:3: warning: call to \'duplicate_warnings\' declared with \'warning\' attribute: two [-Wattribute-warning]","clang/test/Frontend/backend-attribute-error-warning.c:29:3: warning: call to \'quux\' declared with \'warning\' attribute: oh no quux [-Wattribute-warning]"}
["clang/test/Frontend/backend-attribute-error-warning.c"]={"clang/test/Frontend/backend-attribute-error-warning.c:32:3: warning: call to \'duplicate_warnings\' declared with \'warning\' attribute: two [-Wattribute-warning]","clang/test/Frontend/backend-attribute-error-warning.c:29:3: warning: call to \'quux\' declared with \'warning\' attribute: oh no quux [-Wattribute-warning]"}
}
}
},
},
["warn_fe_cc_log_diagnostics_failure"]={
["warn_fe_cc_log_diagnostics_failure"]={
[c]="unable to open CC_LOG_DIAGNOSTICS file: %0 (using stderr)",
[c]="warn_fe_cc_log_diagnostics_failure",
[d]=g,
[d]="unable to open CC_LOG_DIAGNOSTICS file: %0 (using stderr)",
[e]="unable to open CC_LOG_DIAGNOSTICS file\\: (.*?) \\(using stderr\\)",
[e]=i,
[f]=Gb,
[g]="unable to open CC_LOG_DIAGNOSTICS file\\: (.*?) \\(using stderr\\)",
[b]=p,
[a]=Ib,
[a]={"6b58486466dc",1302199874,"Frontend: Sketch support for -diagnostic-log-file, which still doesn\'t do anything.","Frontend: Sketch support for -diagnostic-log-file, which still doesn\'t do anything.\n\nllvm-svn: 129086"},
[b]=r,
[h]={{Xc,298,"// Diagnostics\nstatic void SetUpDiagnosticLog(DiagnosticOptions *DiagOpts, const CodeGenOptions *CodeGenOpts, DiagnosticsEngine &Diags) {\n  // ...\n  if (DiagOpts->DiagnosticLogFile != \"-\") {\n    // ...\n    if (EC) {\n      Diags.Report(diag::warn_fe_cc_log_diagnostics_failure) << DiagOpts->DiagnosticLogFile << EC.message();"}}
[f]={"6b58486466dc",1302199874,"Frontend: Sketch support for -diagnostic-log-file, which still doesn\'t do anything.","Frontend: Sketch support for -diagnostic-log-file, which still doesn\'t do anything.\n\nllvm-svn: 129086"},
[h]={{Rc,298,"// Diagnostics\nstatic void SetUpDiagnosticLog(DiagnosticOptions *DiagOpts, const CodeGenOptions *CodeGenOpts, DiagnosticsEngine &Diags) {\n  // ...\n  if (DiagOpts->DiagnosticLogFile != \"-\") {\n    // ...\n    if (EC) {\n      Diags.Report(diag::warn_fe_cc_log_diagnostics_failure) << DiagOpts->DiagnosticLogFile << EC.message();"}}
},
},
["warn_fe_cc_print_header_failure"]={
["warn_fe_cc_print_header_failure"]={
[c]="unable to open CC_PRINT_HEADERS file: %0 (using stderr)",
[c]="warn_fe_cc_print_header_failure",
[d]=g,
[d]="unable to open CC_PRINT_HEADERS file: %0 (using stderr)",
[e]="unable to open CC_PRINT_HEADERS file\\: (.*?) \\(using stderr\\)",
[e]=i,
[f]=Gb,
[g]="unable to open CC_PRINT_HEADERS file\\: (.*?) \\(using stderr\\)",
[b]=p,
[a]=Ib,
[a]={"9aa47fcb55a5",1296704700,"Frontend: Switch -header-include-file output to use unbuffered raw_ostreams with","Frontend: Switch -header-include-file output to use unbuffered raw_ostreams with\nthe atomic writes option, since the intent is that this option be set for an\nentire build, which may have any number of compiler instances writing to the\nsame output file.\n\nllvm-svn: 124772"},
[b]=r,
[f]={"9aa47fcb55a5",1296704700,"Frontend: Switch -header-include-file output to use unbuffered raw_ostreams with","Frontend: Switch -header-include-file output to use unbuffered raw_ostreams with\nthe atomic writes option, since the intent is that this option be set for an\nentire build, which may have any number of compiler instances writing to the\nsame output file.\n\nllvm-svn: 124772"},
[h]={{"clang/lib/Frontend/HeaderIncludeGen.cpp",167,"void clang::AttachHeaderIncludeGen(Preprocessor &PP, const DependencyOutputOptions &DepOpts, bool ShowAllHeaders, StringRef OutputPath, bool ShowDepth, bool MSStyle) {\n  // ...\n  // Open the output file, if used.\n  if (!OutputPath.empty()) {\n    // ...\n    if (EC) {\n      PP.getDiagnostics().Report(clang::diag::warn_fe_cc_print_header_failure) << EC.message();"}}
[h]={{"clang/lib/Frontend/HeaderIncludeGen.cpp",167,"void clang::AttachHeaderIncludeGen(Preprocessor &PP, const DependencyOutputOptions &DepOpts, bool ShowAllHeaders, StringRef OutputPath, bool ShowDepth, bool MSStyle) {\n  // ...\n  // Open the output file, if used.\n  if (!OutputPath.empty()) {\n    // ...\n    if (EC) {\n      PP.getDiagnostics().Report(clang::diag::warn_fe_cc_print_header_failure) << EC.message();"}}
},
},
["warn_fe_frame_larger_than"]={
["warn_fe_frame_larger_than"]={
[j]={"frame-larger-than","frame-larger-than="},
[k]={"frame-larger-than","frame-larger-than="},
[i]="frame-larger-than",
[j]="frame-larger-than",
[c]={{nil,Q,"stack frame size (%0) exceeds limit (%1) in \'%2\'"},{jb,jb,"stack frame size (%0) exceeds limit (%1) in %q2"},{Sb,nil,"stack frame size of %0 bytes in %q1"}},
[c]="warn_fe_frame_larger_than",
[d]=g,
[d]={{nil,w,"stack frame size (%0) exceeds limit (%1) in \'%2\'"},{I,I,"stack frame size (%0) exceeds limit (%1) in %q2"},{db,nil,"stack frame size of %0 bytes in %q1"}},
[e]="stack frame size \\((.*?)\\) exceeds limit \\((.*?)\\) in \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wframe\\-larger\\-than[^\\]]*\\]",
[g]="stack frame size \\((.*?)\\) exceeds limit \\((.*?)\\) in \'(.*?)\'",
[b]=Id,
[a]=" \\[(?:\\-Werror,)?\\-Wframe\\-larger\\-than[^\\]]*\\]",
[a]={"fb8d02b17973",1402006259,"Implement -Wframe-larger-than backend diagnostic","Implement -Wframe-larger-than backend diagnostic\n\nAdd driver and frontend support for the GCC -Wframe-larger-than=bytes warning.\nThis is the first GCC-compatible backend diagnostic built around LLVM\'s\nreporting feature.\n\nThis commit adds infrastructure to perform reverse lookup from mangled names\nemitted after LLVM IR generation. We use that to resolve precise locations and\noriginating AST functions, lambdas or block declarations to produce seamless\ncodegen-guided diagnostics.\n\nAn associated change, StringMap now maintains unique mangled name strings\ninstead of allocating copies. This is a net memory saving in C++ and a small\nhit for C where we no longer reuse IdentifierInfo storage, pending further\noptimisation.\n\nllvm-svn: 210293"},
[b]=Hd,
[f]={"fb8d02b17973",1402006259,"Implement -Wframe-larger-than backend diagnostic","Implement -Wframe-larger-than backend diagnostic\n\nAdd driver and frontend support for the GCC -Wframe-larger-than=bytes warning.\nThis is the first GCC-compatible backend diagnostic built around LLVM\'s\nreporting feature.\n\nThis commit adds infrastructure to perform reverse lookup from mangled names\nemitted after LLVM IR generation. We use that to resolve precise locations and\noriginating AST functions, lambdas or block declarations to produce seamless\ncodegen-guided diagnostics.\n\nAn associated change, StringMap now maintains unique mangled name strings\ninstead of allocating copies. This is a net memory saving in C++ and a small\nhit for C where we no longer reuse IdentifierInfo storage, pending further\noptimisation.\n\nllvm-svn: 210293"},
[h]={{"clang/lib/CodeGen/CodeGenAction.cpp",638,"bool BackendConsumer::StackSizeDiagHandler(const llvm::DiagnosticInfoStackSize &D) {\n  // ...\n  Diags.Report(*Loc, diag::warn_fe_frame_larger_than) << D.getStackSize() << D.getStackLimit() << llvm::demangle(D.getFunction().getName());"}},
[h]={{"clang/lib/CodeGen/CodeGenAction.cpp",638,"bool BackendConsumer::StackSizeDiagHandler(const llvm::DiagnosticInfoStackSize &D) {\n  // ...\n  Diags.Report(*Loc, diag::warn_fe_frame_larger_than) << D.getStackSize() << D.getStackLimit() << llvm::demangle(D.getFunction().getName());"}},
[k]={
[l]={
["clang/test/Misc/backend-stack-frame-diagnostics-fallback.cpp"]={"clang/test/Misc/backend-stack-frame-diagnostics-fallback.cpp:17:11: warning: stack frame size (4) exceeds limit (0) in \'frameSizeThunkWarning::B::f()\' [-Wframe-larger-than]"}
["clang/test/Misc/backend-stack-frame-diagnostics-fallback.cpp"]={"clang/test/Misc/backend-stack-frame-diagnostics-fallback.cpp:17:11: warning: stack frame size (4) exceeds limit (0) in \'frameSizeThunkWarning::B::f()\' [-Wframe-larger-than]"}
}
}
},
},
["warn_fe_inline_asm"]={
["warn_fe_inline_asm"]={
[j]={"inline-asm"},
[k]={"inline-asm"},
[i]="inline-asm",
[j]="inline-asm",
[c]="%0",
[c]="warn_fe_inline_asm",
[d]=g,
[d]=Gd,
[e]="(.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winline\\-asm[^\\]]*\\]",
[g]="(.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Winline\\-asm[^\\]]*\\]",
[b]="Inline Assembly Issue",
[b]="Inline Assembly Issue",
[a]={"728c5540eef2",1391711443,"Wired-up the new LLVM diagnostic system into clang diagnostic system.","Wired-up the new LLVM diagnostic system into clang diagnostic system.\nThe approach is similar to the existing inline-asm reporting, just more\ngeneral.\n\n<rdar://problem/15886278>\n\nllvm-svn: 200931"},
[f]={"728c5540eef2",1391711443,"Wired-up the new LLVM diagnostic system into clang diagnostic system.","Wired-up the new LLVM diagnostic system into clang diagnostic system.\nThe approach is similar to the existing inline-asm reporting, just more\ngeneral.\n\n<rdar://problem/15886278>\n\nllvm-svn: 200931"},
[k]={
[l]={
["clang/test/Misc/inline-asm-clobber-warning.c"]={"clang/test/Misc/inline-asm-clobber-warning.c:12:24: warning: inline asm clobber list contains reserved registers: SP [-Winline-asm]"}
["clang/test/Misc/inline-asm-clobber-warning.c"]={"clang/test/Misc/inline-asm-clobber-warning.c:12:24: warning: inline asm clobber list contains reserved registers: SP [-Winline-asm]"}
}
}
},
},
["warn_fe_linking_module"]={
["warn_fe_linking_module"]={
[j]={"linker-warnings"},
[k]={"linker-warnings"},
[i]="linker-warnings",
[j]="linker-warnings",
[c]={{nil,Q,"linking module \'%0\': %1"}},
[c]={{nil,w,"warn_fe_linking_module"}},
[d]=g,
[d]={{nil,w,"linking module \'%0\': %1"}},
[e]="linking module \'(.*?)\'\\: (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wlinker\\-warnings[^\\]]*\\]",
[g]="linking module \'(.*?)\'\\: (.*?)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wlinker\\-warnings[^\\]]*\\]",
[a]={"1c829ce1e362",1629504872,"[clang][codegen] Set CurLinkModule in CodeGenAction::ExecuteAction","[clang][codegen] Set CurLinkModule in CodeGenAction::ExecuteAction\n\nCodeGenAction::ExecuteAction creates a BackendConsumer for the\npurpose of handling diagnostics. The BackendConsumer\'s\nDiagnosticHandlerImpl method expects CurLinkModule to be set,\nbut this did not happen on the code path that goes through\nExecuteAction. This change makes it so that the BackendConsumer\nconstructor used by ExecuteAction requires the Module to be\nspecified and passes the appropriate module in ExecuteAction.\n\nThe change also adds a test that fails without this change\nand passes with it. To make the test work, the FIXME in the\nhandling of DK_Linker diagnostics was addressed so that warnings\nand notes are no longer silently discarded. Since this introduces\na new warning diagnostic, a flag to control it (-Wlinker-warnings)\nhas also been added.\n\nReviewed By: xur\n\nDifferential Revision: https://reviews.llvm.org/D108603"}
[b]={{nil,w,r}},
[f]={"1c829ce1e362",1629504872,"[clang][codegen] Set CurLinkModule in CodeGenAction::ExecuteAction","[clang][codegen] Set CurLinkModule in CodeGenAction::ExecuteAction\n\nCodeGenAction::ExecuteAction creates a BackendConsumer for the\npurpose of handling diagnostics. The BackendConsumer\'s\nDiagnosticHandlerImpl method expects CurLinkModule to be set,\nbut this did not happen on the code path that goes through\nExecuteAction. This change makes it so that the BackendConsumer\nconstructor used by ExecuteAction requires the Module to be\nspecified and passes the appropriate module in ExecuteAction.\n\nThe change also adds a test that fails without this change\nand passes with it. To make the test work, the FIXME in the\nhandling of DK_Linker diagnostics was addressed so that warnings\nand notes are no longer silently discarded. Since this introduces\na new warning diagnostic, a flag to control it (-Wlinker-warnings)\nhas also been added.\n\nReviewed By: xur\n\nDifferential Revision: https://reviews.llvm.org/D108603"}
},
},
["warn_fe_macro_contains_embedded_newline"]={
["warn_fe_macro_contains_embedded_newline"]={
[c]="macro \'%0\' contains embedded newline; text after the newline is ignored",
[c]="warn_fe_macro_contains_embedded_newline",
[d]=g,
[d]="macro \'%0\' contains embedded newline; text after the newline is ignored",
[e]="macro \'(.*?)\' contains embedded newline; text after the newline is ignored",
[e]=i,
[f]=Gb,
[g]="macro \'(.*?)\' contains embedded newline; text after the newline is ignored",
[b]=p,
[a]=Ib,
[a]={"6dac935b1f58",1259831652,"Fix two more diagnostic-on-stderr instances that thought they could hide from me -- they thought wro...","Fix two more diagnostic-on-stderr instances that thought they could hide from me -- they thought wrong.\n\nllvm-svn: 90442"},
[b]=r,
[f]={"6dac935b1f58",1259831652,"Fix two more diagnostic-on-stderr instances that thought they could hide from me -- they thought wro...","Fix two more diagnostic-on-stderr instances that thought they could hide from me -- they thought wrong.\n\nllvm-svn: 90442"},
[h]={{"clang/lib/Frontend/InitPreprocessor.cpp",51,"// Append a #define line to Buf for Macro.  Macro should be of the form XXX,\n// in which case we emit \"#define XXX 1\" or \"XXX=Y z W\" in which case we emit\n// \"#define XXX Y z W\".  To get a #define with no value, use \"XXX=\".\nstatic void DefineBuiltinMacro(MacroBuilder &Builder, StringRef Macro, DiagnosticsEngine &Diags) {\n  // ...\n  if (MacroName.size() != Macro.size()) {\n    // ...\n    if (End != StringRef::npos)\n      Diags.Report(diag::warn_fe_macro_contains_embedded_newline) << MacroName;"}},
[h]={{"clang/lib/Frontend/InitPreprocessor.cpp",51,"// Append a #define line to Buf for Macro.  Macro should be of the form XXX,\n// in which case we emit \"#define XXX 1\" or \"XXX=Y z W\" in which case we emit\n// \"#define XXX Y z W\".  To get a #define with no value, use \"XXX=\".\nstatic void DefineBuiltinMacro(MacroBuilder &Builder, StringRef Macro, DiagnosticsEngine &Diags) {\n  // ...\n  if (MacroName.size() != Macro.size()) {\n    // ...\n    if (End != StringRef::npos)\n      Diags.Report(diag::warn_fe_macro_contains_embedded_newline) << MacroName;"}},
[k]={
[l]={
["clang/test/Driver/at_file.c"]={"warning: macro \'foo12\' contains embedded newline; text after the newline is ignored"}
["clang/test/Driver/at_file.c"]={"warning: macro \'foo12\' contains embedded newline; text after the newline is ignored"}
}
}
},
},
["warn_fe_override_module"]={
["warn_fe_override_module"]={
[j]={"override-module"},
[k]={"override-module"},
[i]="override-module",
[j]="override-module",
[c]="overriding the module target triple with %0",
[c]="warn_fe_override_module",
[d]=g,
[d]="overriding the module target triple with %0",
[e]="overriding the module target triple with (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Woverride\\-module[^\\]]*\\]",
[g]="overriding the module target triple with (.*?)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Woverride\\-module[^\\]]*\\]",
[a]={"6cf2df29e702",1422512759,"Make a codegen warning a real warning instead of a getCustomDiagID().","Make a codegen warning a real warning instead of a getCustomDiagID().\n\nWarnings shouldn\'t use getCustomDiagID(), since then they can\'t be disabled\nvia a flag, can\'t be remapped, etc.\n\nllvm-svn: 227420"},
[b]=r,
[f]={"6cf2df29e702",1422512759,"Make a codegen warning a real warning instead of a getCustomDiagID().","Make a codegen warning a real warning instead of a getCustomDiagID().\n\nWarnings shouldn\'t use getCustomDiagID(), since then they can\'t be disabled\nvia a flag, can\'t be remapped, etc.\n\nllvm-svn: 227420"},
[h]={{"clang/lib/CodeGen/CodeGenAction.cpp",1234,"void CodeGenAction::ExecuteAction() {\n  // ...\n  if (TheModule->getTargetTriple() != TargetOpts.Triple) {\n    Diagnostics.Report(SourceLocation(), diag::warn_fe_override_module) << TargetOpts.Triple;"}}
[h]={{"clang/lib/CodeGen/CodeGenAction.cpp",1234,"void CodeGenAction::ExecuteAction() {\n  // ...\n  if (TheModule->getTargetTriple() != TargetOpts.Triple) {\n    Diagnostics.Report(SourceLocation(), diag::warn_fe_override_module) << TargetOpts.Triple;"}}
},
},
["warn_fe_serialized_diag_failure"]={
["warn_fe_serialized_diag_failure"]={
[j]={"serialized-diagnostics"},
[k]={"serialized-diagnostics"},
[i]="serialized-diagnostics",
[j]="serialized-diagnostics",
[c]="unable to open file %0 for serializing diagnostics (%1)",
[c]="warn_fe_serialized_diag_failure",
[d]=g,
[d]="unable to open file %0 for serializing diagnostics (%1)",
[e]="unable to open file (.*?) for serializing diagnostics \\((.*?)\\)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wserialized\\-diagnostics[^\\]]*\\]",
[g]="unable to open file (.*?) for serializing diagnostics \\((.*?)\\)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wserialized\\-diagnostics[^\\]]*\\]",
[a]={"4610ea2bcf1d",1319847159,"Start work on SerializedDiagnosticPrinter, a new DiagnosticConsumer that serializes out the diagnost...","Start work on SerializedDiagnosticPrinter, a new DiagnosticConsumer that serializes out the diagnostics for a given translation unit to a bit code file.  This is a WIP.\n\nThe motivation for this new DiagnosticConsumer is to provide a way for tools invoking the compiler\nto get its diagnostics via a libclang interface, rather than textually parsing the compiler output.\nThis gives us flexibility to change the compiler\'s textual output, but have a structured data format\nfor clients to use to get the diagnostics via a stable API.\n\nI have no tests for this, but llvm-bcanalyzer so far shows that the emitted file is well-formed.\n\nMore work to follow.\n\nllvm-svn: 143259"},
[b]=r,
[f]={"4610ea2bcf1d",1319847159,"Start work on SerializedDiagnosticPrinter, a new DiagnosticConsumer that serializes out the diagnost...","Start work on SerializedDiagnosticPrinter, a new DiagnosticConsumer that serializes out the diagnostics for a given translation unit to a bit code file.  This is a WIP.\n\nThe motivation for this new DiagnosticConsumer is to provide a way for tools invoking the compiler\nto get its diagnostics via a libclang interface, rather than textually parsing the compiler output.\nThis gives us flexibility to change the compiler\'s textual output, but have a structured data format\nfor clients to use to get the diagnostics via a stable API.\n\nI have no tests for this, but llvm-bcanalyzer so far shows that the emitted file is well-formed.\n\nMore work to follow.\n\nllvm-svn: 143259"},
[h]={{"clang/lib/Frontend/SerializedDiagnosticPrinter.cpp",802,"void SDiagsWriter::finish() {\n  // ...\n  if (EC) {\n    getMetaDiags()->Report(diag::warn_fe_serialized_diag_failure) << State->OutputFile << EC.message();"},{"clang/lib/Frontend/SerializedDiagnosticPrinter.cpp",814,"void SDiagsWriter::finish() {\n  // ...\n  if (OS->has_error()) {\n    getMetaDiags()->Report(diag::warn_fe_serialized_diag_failure) << State->OutputFile << OS->error().message();"}}
[h]={{"clang/lib/Frontend/SerializedDiagnosticPrinter.cpp",802,"void SDiagsWriter::finish() {\n  // ...\n  if (EC) {\n    getMetaDiags()->Report(diag::warn_fe_serialized_diag_failure) << State->OutputFile << EC.message();"},{"clang/lib/Frontend/SerializedDiagnosticPrinter.cpp",814,"void SDiagsWriter::finish() {\n  // ...\n  if (OS->has_error()) {\n    getMetaDiags()->Report(diag::warn_fe_serialized_diag_failure) << State->OutputFile << OS->error().message();"}}
},
},
["warn_fe_serialized_diag_failure_during_finalisation"]={
["warn_fe_serialized_diag_failure_during_finalisation"]={
[j]={"serialized-diagnostics"},
[k]={"serialized-diagnostics"},
[i]="serialized-diagnostics",
[j]="serialized-diagnostics",
[c]={{nil,mb,"Received warning after diagnostic serialization teardown was underway: %0"}},
[c]={{nil,z,"warn_fe_serialized_diag_failure_during_finalisation"}},
[d]=g,
[d]={{nil,z,"Received warning after diagnostic serialization teardown was underway: %0"}},
[e]="Received warning after diagnostic serialization teardown was underway\\: (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wserialized\\-diagnostics[^\\]]*\\]",
[g]="Received warning after diagnostic serialization teardown was underway\\: (.*?)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wserialized\\-diagnostics[^\\]]*\\]",
[a]={"00c9a504aeed",1594351623,"CrashTracer: clang at clang: llvm::BitstreamWriter::ExitBlock","CrashTracer: clang at clang: llvm::BitstreamWriter::ExitBlock\n\nAdd a guard for re-entering an SDiagsWriter\'s HandleDiagnostics\nmethod after we\'ve started finalizing. This is a generic catch\nall for unexpected fatal errors so we don\'t recursive crash inside\nthe generic llvm error handler.\n\nWe also add logic to handle the actual error case in\nllvm::~raw_fd_ostream caused by failing to clear errors before\nit is destroyed.\n\n<rdar://problem/63335596>"},
[b]={{nil,z,r}},
[f]={"00c9a504aeed",1594351623,"CrashTracer: clang at clang: llvm::BitstreamWriter::ExitBlock","CrashTracer: clang at clang: llvm::BitstreamWriter::ExitBlock\n\nAdd a guard for re-entering an SDiagsWriter\'s HandleDiagnostics\nmethod after we\'ve started finalizing. This is a generic catch\nall for unexpected fatal errors so we don\'t recursive crash inside\nthe generic llvm error handler.\n\nWe also add logic to handle the actual error case in\nllvm::~raw_fd_ostream caused by failing to clear errors before\nit is destroyed.\n\n<rdar://problem/63335596>"},
[h]={{"clang/lib/Frontend/SerializedDiagnosticPrinter.cpp",578,"void SDiagsWriter::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) {\n  // ...\n  if (IsFinishing) {\n    // ...\n    getMetaDiags()->Report(diag::warn_fe_serialized_diag_failure_during_finalisation) << diagnostic;"}}
[h]={{"clang/lib/Frontend/SerializedDiagnosticPrinter.cpp",578,"void SDiagsWriter::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) {\n  // ...\n  if (IsFinishing) {\n    // ...\n    getMetaDiags()->Report(diag::warn_fe_serialized_diag_failure_during_finalisation) << diagnostic;"}}
},
},
["warn_fe_serialized_diag_merge_failure"]={
["warn_fe_serialized_diag_merge_failure"]={
[j]={"serialized-diagnostics"},
[k]={"serialized-diagnostics"},
[i]="serialized-diagnostics",
[j]="serialized-diagnostics",
[c]="unable to merge a subprocess\'s serialized diagnostics",
[c]="warn_fe_serialized_diag_merge_failure",
[d]=g,
[d]="unable to merge a subprocess\'s serialized diagnostics",
[e]="unable to merge a subprocess\'s serialized diagnostics",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wserialized\\-diagnostics[^\\]]*\\]",
[g]="unable to merge a subprocess\'s serialized diagnostics",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wserialized\\-diagnostics[^\\]]*\\]",
[a]={"5a6a2fcdeef3",1414102811,"Driver: Include driver diagnostics when we --serialize-diagnostics","Driver: Include driver diagnostics when we --serialize-diagnostics\n\nCurrently, when --serialize-diagnostics is passed this only includes\nthe diagnostics from clang -cc1, and driver diagnostics are\ndropped. This causes issues for tools that use the serialized\ndiagnostics, since stderr is lost and these diagnostics aren\'t seen at\nall.\n\nWe handle this by merging the diagnostics from the CC1 process and the\ndriver diagnostics into a single file when the driver invokes CC1.\n\nFixes rdar://problem/10585062\n\nllvm-svn: 220525"},
[b]=r,
[f]={"5a6a2fcdeef3",1414102811,"Driver: Include driver diagnostics when we --serialize-diagnostics","Driver: Include driver diagnostics when we --serialize-diagnostics\n\nCurrently, when --serialize-diagnostics is passed this only includes\nthe diagnostics from clang -cc1, and driver diagnostics are\ndropped. This causes issues for tools that use the serialized\ndiagnostics, since stderr is lost and these diagnostics aren\'t seen at\nall.\n\nWe handle this by merging the diagnostics from the CC1 process and the\ndriver diagnostics into a single file when the driver invokes CC1.\n\nFixes rdar://problem/10585062\n\nllvm-svn: 220525"},
[h]={{"clang/lib/Frontend/SerializedDiagnosticPrinter.cpp",769,"void SDiagsWriter::RemoveOldDiagnostics() {\n  // ...\n  getMetaDiags()->Report(diag::warn_fe_serialized_diag_merge_failure);"},{"clang/lib/Frontend/SerializedDiagnosticPrinter.cpp",795,"void SDiagsWriter::finish() {\n  // ...\n  if (MergeChildRecords) {\n    // ...\n    if (llvm::sys::fs::exists(State->OutputFile))\n      if (SDiagsMerger(*this).mergeRecordsFromFile(State->OutputFile.c_str()))\n        getMetaDiags()->Report(diag::warn_fe_serialized_diag_merge_failure);"}}
[h]={{"clang/lib/Frontend/SerializedDiagnosticPrinter.cpp",769,"void SDiagsWriter::RemoveOldDiagnostics() {\n  // ...\n  getMetaDiags()->Report(diag::warn_fe_serialized_diag_merge_failure);"},{"clang/lib/Frontend/SerializedDiagnosticPrinter.cpp",795,"void SDiagsWriter::finish() {\n  // ...\n  if (MergeChildRecords) {\n    // ...\n    if (llvm::sys::fs::exists(State->OutputFile))\n      if (SDiagsMerger(*this).mergeRecordsFromFile(State->OutputFile.c_str()))\n        getMetaDiags()->Report(diag::warn_fe_serialized_diag_merge_failure);"}}
},
},
["warn_fe_source_mgr"]={
["warn_fe_source_mgr"]={
[j]={"source-mgr"},
[k]={"source-mgr"},
[i]="source-mgr",
[j]="source-mgr",
[c]={{nil,jb,"%0"}},
[c]={{nil,I,"warn_fe_source_mgr"}},
[d]=g,
[d]={{nil,I,Gd}},
[e]="(.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wsource\\-mgr[^\\]]*\\]",
[g]="(.*?)",
[b]="SourceMgr Reported Issue",
[a]=" \\[(?:\\-Werror,)?\\-Wsource\\-mgr[^\\]]*\\]",
[a]={"b714f73defc8",1611802254,"Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock","Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock\n\nAdd -cc1 flags `-fmodules-uses-lock` and `-fno-modules-uses-lock` to\nallow the lock manager to be turned off when building implicit modules.\n\nAdd `-Rmodule-lock` so that we can see when it\'s being used.\n\nDifferential Revision: https://reviews.llvm.org/D95583"}
[b]={{nil,I,"SourceMgr Reported Issue"}},
[f]={"b714f73defc8",1611802254,"Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock","Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock\n\nAdd -cc1 flags `-fmodules-uses-lock` and `-fno-modules-uses-lock` to\nallow the lock manager to be turned off when building implicit modules.\n\nAdd `-Rmodule-lock` so that we can see when it\'s being used.\n\nDifferential Revision: https://reviews.llvm.org/D95583"}
},
},
["warn_fe_unable_to_open_stats_file"]={
["warn_fe_unable_to_open_stats_file"]={
[j]={"unable-to-open-stats-file"},
[k]={"unable-to-open-stats-file"},
[i]="unable-to-open-stats-file",
[j]="unable-to-open-stats-file",
[c]="unable to open statistics output file \'%0\': \'%1\'",
[c]="warn_fe_unable_to_open_stats_file",
[d]=g,
[d]="unable to open statistics output file \'%0\': \'%1\'",
[e]="unable to open statistics output file \'(.*?)\'\\: \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunable\\-to\\-open\\-stats\\-file[^\\]]*\\]",
[g]="unable to open statistics output file \'(.*?)\'\\: \'(.*?)\'",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wunable\\-to\\-open\\-stats\\-file[^\\]]*\\]",
[a]={"abb6eea19ce3",1474916014,"CC1: Add -save-stats option","CC1: Add -save-stats option\n\nThis option behaves in a similar spirit as -save-temps and writes\ninternal llvm statistics in json format to a file.\n\nDifferential Revision: https://reviews.llvm.org/D24820\n\nllvm-svn: 282426"},
[b]=r,
[h]={{Xc,1102,"bool CompilerInstance::ExecuteAction(FrontendAction &Act) {\n  // ...\n  if (!StatsFile.empty()) {\n    // ...\n    if (EC) {\n      getDiagnostics().Report(diag::warn_fe_unable_to_open_stats_file) << StatsFile << EC.message();"}},
[f]={"abb6eea19ce3",1474916014,"CC1: Add -save-stats option","CC1: Add -save-stats option\n\nThis option behaves in a similar spirit as -save-temps and writes\ninternal llvm statistics in json format to a file.\n\nDifferential Revision: https://reviews.llvm.org/D24820\n\nllvm-svn: 282426"},
[k]={
[h]={{Rc,1102,"bool CompilerInstance::ExecuteAction(FrontendAction &Act) {\n  // ...\n  if (!StatsFile.empty()) {\n    // ...\n    if (EC) {\n      getDiagnostics().Report(diag::warn_fe_unable_to_open_stats_file) << StatsFile << EC.message();"}},
[l]={
["clang/test/Frontend/stats-file.c"]={"warning: unable to open statistics output file \'build/tools/clang/test/Frontend/Output/stats-file.c.tmp.doesnotexist/bla\': \'No such file or directory\' [-Wunable-to-open-stats-file]"}
["clang/test/Frontend/stats-file.c"]={"warning: unable to open statistics output file \'build/tools/clang/test/Frontend/Output/stats-file.c.tmp.doesnotexist/bla\': \'No such file or directory\' [-Wunable-to-open-stats-file]"}
}
}
},
},
["warn_field_is_uninit"]={
["warn_field_is_uninit"]={
[j]={B,H,N,"uninitialized"},
[k]={K,O,V,"uninitialized"},
[i]="uninitialized",
[j]="uninitialized",
[c]="field %0 is uninitialized when used here",
[c]="warn_field_is_uninit",
[d]=g,
[d]="field %0 is uninitialized when used here",
[e]="field (.*?) is uninitialized when used here",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wuninitialized[^\\]]*\\]",
[g]="field (.*?) is uninitialized when used here",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wuninitialized[^\\]]*\\]",
[a]={"e22a04aba9bc",1257375760,"Diagnose using a field to initialize itself.  Patch by Brandon Pearcy!","Diagnose using a field to initialize itself.  Patch by Brandon Pearcy!\n\nllvm-svn: 86061"},
[b]=m,
[h]={{C,3860,"class UninitializedFieldVisitor : public EvaluatedExprVisitor<UninitializedFieldVisitor> {\n  // ...\n  void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, bool AddressOf) {\n    // ...\n    unsigned diag = IsReference ? diag::warn_reference_field_is_uninit : diag::warn_field_is_uninit;"},{C,4061,"// Diagnose value-uses of fields to initialize themselves, e.g.\n//  foo(foo)\n// where foo is not also a parameter to the constructor.\n// Also diagnose across field uninitialized use such as\n//  x(y), y(x)\n// TODO: implement -Wuninitialized and fold this into that framework.\nstatic void DiagnoseUninitializedFields(Sema &SemaRef, const CXXConstructorDecl *Constructor) {\n  if (SemaRef.getDiagnostics().isIgnored(diag::warn_field_is_uninit, Constructor->getLocation())) {"}},
[f]={"e22a04aba9bc",1257375760,"Diagnose using a field to initialize itself.  Patch by Brandon Pearcy!","Diagnose using a field to initialize itself.  Patch by Brandon Pearcy!\n\nllvm-svn: 86061"},
[k]={
[h]={{L,3860,"class UninitializedFieldVisitor : public EvaluatedExprVisitor<UninitializedFieldVisitor> {\n  // ...\n  void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, bool AddressOf) {\n    // ...\n    unsigned diag = IsReference ? diag::warn_reference_field_is_uninit : diag::warn_field_is_uninit;"},{L,4061,"// Diagnose value-uses of fields to initialize themselves, e.g.\n//  foo(foo)\n// where foo is not also a parameter to the constructor.\n// Also diagnose across field uninitialized use such as\n//  x(y), y(x)\n// TODO: implement -Wuninitialized and fold this into that framework.\nstatic void DiagnoseUninitializedFields(Sema &SemaRef, const CXXConstructorDecl *Constructor) {\n  if (SemaRef.getDiagnostics().isIgnored(diag::warn_field_is_uninit, Constructor->getLocation())) {"}},
[l]={
["clang/test/SemaCXX/defaulted-ctor-loop.cpp"]={"clang/test/SemaCXX/defaulted-ctor-loop.cpp:12:9: warning: field \'b\' is uninitialized when used here [-Wuninitialized]"}
["clang/test/SemaCXX/defaulted-ctor-loop.cpp"]={"clang/test/SemaCXX/defaulted-ctor-loop.cpp:12:9: warning: field \'b\' is uninitialized when used here [-Wuninitialized]"}
}
}
},
},
["warn_final_dtor_non_final_class"]={
["warn_final_dtor_non_final_class"]={
[j]={"final-dtor-non-final-class"},
[k]={"final-dtor-non-final-class"},
[i]="final-dtor-non-final-class",
[j]="final-dtor-non-final-class",
[c]={{nil,z,"class with destructor marked \'%select{final|sealed}0\' cannot be inherited from"}},
[c]={{nil,q,"warn_final_dtor_non_final_class"}},
[d]=g,
[d]={{nil,q,"class with destructor marked \'%select{final|sealed}0\' cannot be inherited from"}},
[e]="class with destructor marked \'(?:final|sealed)\' cannot be inherited from",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfinal\\-dtor\\-non\\-final\\-class[^\\]]*\\]",
[g]="class with destructor marked \'(?:final|sealed)\' cannot be inherited from",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wfinal\\-dtor\\-non\\-final\\-class[^\\]]*\\]",
[a]={"94f3f3e7f46a",1567276544,"[NFC] Fix for rL370594","[NFC] Fix for rL370594\n\nllvm-svn: 370595"},
[b]={{nil,q,m}},
[h]={{C,6984,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  // Warn if the class has a final destructor but is not itself marked final.\n  if (!Record->hasAttr<FinalAttr>()) {\n    if (const CXXDestructorDecl *dtor = Record->getDestructor()) {\n      if (const FinalAttr *FA = dtor->getAttr<FinalAttr>()) {\n        Diag(FA->getLocation(), diag::warn_final_dtor_non_final_class) << FA->isSpelledAsSealed() << FixItHint::CreateInsertion(getLocForEndOfToken(Record->getLocation()), (FA->isSpelledAsSealed() ? \" sealed\" : \" final\"));"}},
[f]={"94f3f3e7f46a",1567276544,"[NFC] Fix for rL370594","[NFC] Fix for rL370594\n\nllvm-svn: 370595"},
[k]={
[h]={{L,6984,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  // Warn if the class has a final destructor but is not itself marked final.\n  if (!Record->hasAttr<FinalAttr>()) {\n    if (const CXXDestructorDecl *dtor = Record->getDestructor()) {\n      if (const FinalAttr *FA = dtor->getAttr<FinalAttr>()) {\n        Diag(FA->getLocation(), diag::warn_final_dtor_non_final_class) << FA->isSpelledAsSealed() << FixItHint::CreateInsertion(getLocForEndOfToken(Record->getLocation()), (FA->isSpelledAsSealed() ? \" sealed\" : \" final\"));"}},
[l]={
["clang/test/CodeGenCXX/devirtualize-dtor-final.cpp"]={"clang/test/CodeGenCXX/devirtualize-dtor-final.cpp:6:31: warning: class with destructor marked \'final\' cannot be inherited from [-Wfinal-dtor-non-final-class]","clang/test/CodeGenCXX/devirtualize-dtor-final.cpp:7:27: warning: class with destructor marked \'final\' cannot be inherited from [-Wfinal-dtor-non-final-class]"}
["clang/test/CodeGenCXX/devirtualize-dtor-final.cpp"]={"clang/test/CodeGenCXX/devirtualize-dtor-final.cpp:6:31: warning: class with destructor marked \'final\' cannot be inherited from [-Wfinal-dtor-non-final-class]","clang/test/CodeGenCXX/devirtualize-dtor-final.cpp:7:27: warning: class with destructor marked \'final\' cannot be inherited from [-Wfinal-dtor-non-final-class]"}
}
}
},
},
["warn_fixedpoint_constant_overflow"]={
["warn_fixedpoint_constant_overflow"]={
[j]={"fixed-point-overflow"},
[k]={"fixed-point-overflow"},
[i]="fixed-point-overflow",
[j]="fixed-point-overflow",
[c]={{nil,mb,"overflow in expression; result is %0 with type %1"}},
[c]={{nil,z,"warn_fixedpoint_constant_overflow"}},
[d]=g,
[d]={{nil,z,"overflow in expression; result is %0 with type %1"}},
[e]="overflow in expression; result is (.*?) with type (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfixed\\-point\\-overflow[^\\]]*\\]",
[g]="overflow in expression; result is (.*?) with type (.*?)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wfixed\\-point\\-overflow[^\\]]*\\]",
[a]={"474177c05381",1579695612,"[AST] Improve overflow diagnostics for fixed-point constant evaluation.","[AST] Improve overflow diagnostics for fixed-point constant evaluation.\n\nSummary:\nDiagnostics for overflow were not being produced for fixed-point\nevaluation. This patch refactors a bit of the evaluator and adds\na proper diagnostic for these cases.\n\nReviewers: rjmccall, leonardchan, bjope\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D73188"},
[b]={{nil,z,r}},
[h]={{gd,13934,"bool FixedPointExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  // ...\n  case CK_FixedPointCast: {\n    // ...\n    if (Overflowed) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << Result.toString() << E->getType();"},{gd,13953,"bool FixedPointExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  // ...\n  case CK_IntegralToFixedPoint: {\n    // ...\n    if (Overflowed) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << IntResult.toString() << E->getType();"},{gd,13973,"bool FixedPointExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  // ...\n  case CK_FloatingToFixedPoint: {\n    // ...\n    if (Overflowed) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << Result.toString() << E->getType();"},{gd,14061,"bool FixedPointExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  // ...\n  if (OpOverflow || ConversionOverflow) {\n    if (Info.checkingForUndefinedBehavior())\n      Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << Result.toString() << E->getType();"}},
[f]={"474177c05381",1579695612,"[AST] Improve overflow diagnostics for fixed-point constant evaluation.","[AST] Improve overflow diagnostics for fixed-point constant evaluation.\n\nSummary:\nDiagnostics for overflow were not being produced for fixed-point\nevaluation. This patch refactors a bit of the evaluator and adds\na proper diagnostic for these cases.\n\nReviewers: rjmccall, leonardchan, bjope\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D73188"},
[k]={
[h]={{rd,13934,"bool FixedPointExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  // ...\n  case CK_FixedPointCast: {\n    // ...\n    if (Overflowed) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << Result.toString() << E->getType();"},{rd,13953,"bool FixedPointExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  // ...\n  case CK_IntegralToFixedPoint: {\n    // ...\n    if (Overflowed) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << IntResult.toString() << E->getType();"},{rd,13973,"bool FixedPointExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  // ...\n  case CK_FloatingToFixedPoint: {\n    // ...\n    if (Overflowed) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << Result.toString() << E->getType();"},{rd,14061,"bool FixedPointExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  // ...\n  if (OpOverflow || ConversionOverflow) {\n    if (Info.checkingForUndefinedBehavior())\n      Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_fixedpoint_constant_overflow) << Result.toString() << E->getType();"}},
[l]={
["clang/test/Frontend/fixed_point_errors.c"]={"clang/test/Frontend/fixed_point_errors.c:254:33: warning: overflow in expression; result is -237.0 with type \'short _Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:255:28: warning: overflow in expression; result is 0.5 with type \'short _Fract\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:256:33: warning: overflow in expression; result is 240.0 with type \'unsigned short _Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:257:34: warning: overflow in expression; result is 237.0 with type \'short _Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:258:34: warning: overflow in expression; result is 208.0 with type \'unsigned short _Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:259:42: warning: overflow in expression; result is -1.0 with type \'short _Fract\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:260:33: warning: overflow in expression; result is -2.0 with type \'short _Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:262:33: warning: overflow in expression; result is -256.0 with type \'short _Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:263:33: warning: overflow in expression; result is 0.0 with type \'short _Fract\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:264:43: warning: overflow in expression; result is 36.0 with type \'unsigned short _Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:265:32: warning: overflow in expression; result is -1.0 with type \'short _Fract\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:267:37: warning: overflow in expression; result is -65536.0 with type \'_Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:269:34: warning: overflow in expression; result is 0.0 with type \'unsigned _Fract\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:274:25: warning: overflow in expression; result is 0.0 with type \'_Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:277:25: warning: overflow in expression; result is 0.0 with type \'_Fract\' [-Wfixed-point-overflow]"}
["clang/test/Frontend/fixed_point_errors.c"]={"clang/test/Frontend/fixed_point_errors.c:254:33: warning: overflow in expression; result is -237.0 with type \'short _Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:255:28: warning: overflow in expression; result is 0.5 with type \'short _Fract\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:256:33: warning: overflow in expression; result is 240.0 with type \'unsigned short _Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:257:34: warning: overflow in expression; result is 237.0 with type \'short _Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:258:34: warning: overflow in expression; result is 208.0 with type \'unsigned short _Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:259:42: warning: overflow in expression; result is -1.0 with type \'short _Fract\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:260:33: warning: overflow in expression; result is -2.0 with type \'short _Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:262:33: warning: overflow in expression; result is -256.0 with type \'short _Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:263:33: warning: overflow in expression; result is 0.0 with type \'short _Fract\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:264:43: warning: overflow in expression; result is 36.0 with type \'unsigned short _Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:265:32: warning: overflow in expression; result is -1.0 with type \'short _Fract\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:267:37: warning: overflow in expression; result is -65536.0 with type \'_Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:269:34: warning: overflow in expression; result is 0.0 with type \'unsigned _Fract\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:274:25: warning: overflow in expression; result is 0.0 with type \'_Accum\' [-Wfixed-point-overflow]","clang/test/Frontend/fixed_point_errors.c:277:25: warning: overflow in expression; result is 0.0 with type \'_Fract\' [-Wfixed-point-overflow]"}
}
}
},
},
["warn_fixit_no_changes"]={
["warn_fixit_no_changes"]={
[c]="FIX-IT detected errors it could not fix; no output will be generated",
[c]="warn_fixit_no_changes",
[d]="note\\: ",
[d]="FIX-IT detected errors it could not fix; no output will be generated",
[e]="FIX\\-IT detected errors it could not fix; no output will be generated",
[e]="note\\: ",
[f]=p,
[g]="FIX\\-IT detected errors it could not fix; no output will be generated",
[b]=p,
[a]=r,
[a]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the","Provide FIX-IT notes to describe what fix-it is doing behind the\nscenes, using the underlying diagnostic client to format the\nmessages.\n\nllvm-svn: 68324"},
[b]=r,
[f]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the","Provide FIX-IT notes to describe what fix-it is doing behind the\nscenes, using the underlying diagnostic client to format the\nmessages.\n\nllvm-svn: 68324"},
[h]={{"clang/lib/Frontend/Rewrite/FixItRewriter.cpp",82,"bool FixItRewriter::WriteFixedFiles(std::vector<std::pair<std::string, std::string>> *RewrittenFiles) {\n  if (NumFailures > 0 && !FixItOpts->FixWhatYouCan) {\n    Diag(FullSourceLoc(), diag::warn_fixit_no_changes);"}}
[h]={{"clang/lib/Frontend/Rewrite/FixItRewriter.cpp",82,"bool FixItRewriter::WriteFixedFiles(std::vector<std::pair<std::string, std::string>> *RewrittenFiles) {\n  if (NumFailures > 0 && !FixItOpts->FixWhatYouCan) {\n    Diag(FullSourceLoc(), diag::warn_fixit_no_changes);"}}
},
},
["warn_flag_enum_constant_out_of_range"]={
["warn_flag_enum_constant_out_of_range"]={
[j]={"flag-enum"},
[k]={"flag-enum"},
[i]="flag-enum",
[j]="flag-enum",
[c]="enumeration value %0 is out of range of flags in enumeration type %1",
[c]="warn_flag_enum_constant_out_of_range",
[d]=g,
[d]="enumeration value %0 is out of range of flags in enumeration type %1",
[e]="enumeration value (.*?) is out of range of flags in enumeration type (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wflag\\-enum[^\\]]*\\]",
[g]="enumeration value (.*?) is out of range of flags in enumeration type (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wflag\\-enum[^\\]]*\\]",
[a]={"724f14e75c50",1417136000,"Create a new \'flag_enum\' attribute.","Create a new \'flag_enum\' attribute.\n\nThis attribute serves as a hint to improve warnings about the ranges of\nenumerators used as flag types. It currently has no working C++ implementation\ndue to different semantics for enums in C++. For more explanation, see the docs\nand testcases.\n\nReviewed by Aaron Ballman.\n\nllvm-svn: 222906"},
[b]=m,
[h]={{D,19931,"void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange, Decl *EnumDeclX, ArrayRef<Decl *> Elements, Scope *S, const ParsedAttributesView &Attrs) {\n  // ...\n  if (Enum->isClosedFlag()) {\n    for (Decl *D : Elements) {\n      // ...\n      if (InitVal != 0 && !InitVal.isPowerOf2() && !IsValueInFlagEnum(Enum, InitVal, true))\n        Diag(ECD->getLocation(), diag::warn_flag_enum_constant_out_of_range) << ECD << Enum;"}},
[f]={"724f14e75c50",1417136000,"Create a new \'flag_enum\' attribute.","Create a new \'flag_enum\' attribute.\n\nThis attribute serves as a hint to improve warnings about the ranges of\nenumerators used as flag types. It currently has no working C++ implementation\ndue to different semantics for enums in C++. For more explanation, see the docs\nand testcases.\n\nReviewed by Aaron Ballman.\n\nllvm-svn: 222906"},
[k]={
[h]={{M,19931,"void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange, Decl *EnumDeclX, ArrayRef<Decl *> Elements, Scope *S, const ParsedAttributesView &Attrs) {\n  // ...\n  if (Enum->isClosedFlag()) {\n    for (Decl *D : Elements) {\n      // ...\n      if (InitVal != 0 && !InitVal.isPowerOf2() && !IsValueInFlagEnum(Enum, InitVal, true))\n        Diag(ECD->getLocation(), diag::warn_flag_enum_constant_out_of_range) << ECD << Enum;"}},
[l]={
["clang/test/Sema/attr-flag-enum.c"]={"clang/test/Sema/attr-flag-enum.c:10:3: warning: enumeration value \'g\' is out of range of flags in enumeration type \'enum (unnamed at clang/test/Sema/attr-flag-enum.c:9:1)\' [-Wflag-enum]","clang/test/Sema/attr-flag-enum.c:18:3: warning: enumeration value \'gd\' is out of range of flags in enumeration type \'flag2\' [-Wflag-enum]","clang/test/Sema/attr-flag-enum.c:19:3: warning: enumeration value \'ge\' is out of range of flags in enumeration type \'flag2\' [-Wflag-enum]","clang/test/Sema/attr-flag-enum.c:23:3: warning: enumeration value \'gi\' is out of range of flags in enumeration type \'flag2\' [-Wflag-enum]","clang/test/Sema/attr-flag-enum.c:40:3: warning: enumeration value \'hc\' is out of range of flags in enumeration type \'flag4\' [-Wflag-enum]"}
["clang/test/Sema/attr-flag-enum.c"]={"clang/test/Sema/attr-flag-enum.c:10:3: warning: enumeration value \'g\' is out of range of flags in enumeration type \'enum (unnamed at clang/test/Sema/attr-flag-enum.c:9:1)\' [-Wflag-enum]","clang/test/Sema/attr-flag-enum.c:18:3: warning: enumeration value \'gd\' is out of range of flags in enumeration type \'flag2\' [-Wflag-enum]","clang/test/Sema/attr-flag-enum.c:19:3: warning: enumeration value \'ge\' is out of range of flags in enumeration type \'flag2\' [-Wflag-enum]","clang/test/Sema/attr-flag-enum.c:23:3: warning: enumeration value \'gi\' is out of range of flags in enumeration type \'flag2\' [-Wflag-enum]","clang/test/Sema/attr-flag-enum.c:40:3: warning: enumeration value \'hc\' is out of range of flags in enumeration type \'flag4\' [-Wflag-enum]"}
}
}
},
},
["warn_float_compare_literal"]={
["warn_float_compare_literal"]={
[j]={zd,R},
[k]={ud,Z},
[i]=zd,
[j]=ud,
[c]={{nil,kb,"floating-point comparison is always %select{true|false}0; constant cannot be represented exactly in type %1"}},
[c]={{nil,C,"warn_float_compare_literal"}},
[d]=g,
[d]={{nil,C,"floating-point comparison is always %select{true|false}0; constant cannot be represented exactly in type %1"}},
[e]="floating\\-point comparison is always (?:true|false); constant cannot be represented exactly in type (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wliteral\\-range[^\\]]*\\]",
[g]="floating\\-point comparison is always (?:true|false); constant cannot be represented exactly in type (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wliteral\\-range[^\\]]*\\]",
[a]={fd,1620118562,ld,kd},
[b]={{nil,C,m}},
[h]={{r,13002,"/// Check for comparisons of floating-point values using == and !=. Issue a\n/// warning if the comparison is not likely to do what the programmer intended.\nvoid Sema::CheckFloatComparison(SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opcode) {\n  // ...\n  if (getCastAndLiteral(LHS, RHS) || getCastAndLiteral(RHS, LHS)) {\n    // ...\n    if (SourceTy && TargetTy && SourceTy->isFloatingPoint() && TargetTy->isFloatingPoint()) {\n      // ...\n      if (Lossy) {\n        // ...\n        Diag(Loc, diag::warn_float_compare_literal) << (Opcode == BO_EQ) << QualType(SourceTy, 0) << LHS->getSourceRange() << RHS->getSourceRange();"}},
[f]={jd,1620118562,td,sd},
[k]={
[h]={{t,13002,"/// Check for comparisons of floating-point values using == and !=. Issue a\n/// warning if the comparison is not likely to do what the programmer intended.\nvoid Sema::CheckFloatComparison(SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opcode) {\n  // ...\n  if (getCastAndLiteral(LHS, RHS) || getCastAndLiteral(RHS, LHS)) {\n    // ...\n    if (SourceTy && TargetTy && SourceTy->isFloatingPoint() && TargetTy->isFloatingPoint()) {\n      // ...\n      if (Lossy) {\n        // ...\n        Diag(Loc, diag::warn_float_compare_literal) << (Opcode == BO_EQ) << QualType(SourceTy, 0) << LHS->getSourceRange() << RHS->getSourceRange();"}},
[l]={
["clang/test/Sema/floating-point-compare.c"]={"clang/test/Sema/floating-point-compare.c:26:12: warning: floating-point comparison is always false; constant cannot be represented exactly in type \'float\' [-Wliteral-range]","clang/test/Sema/floating-point-compare.c:30:12: warning: floating-point comparison is always true; constant cannot be represented exactly in type \'float\' [-Wliteral-range]","clang/test/Sema/floating-point-compare.c:40:14: warning: floating-point comparison is always false; constant cannot be represented exactly in type \'float\' [-Wliteral-range]","clang/test/Sema/floating-point-compare.c:44:14: warning: floating-point comparison is always true; constant cannot be represented exactly in type \'float\' [-Wliteral-range]","clang/test/Sema/floating-point-compare.c:48:14: warning: floating-point comparison is always false; constant cannot be represented exactly in type \'float\' [-Wliteral-range]","clang/test/Sema/floating-point-compare.c:52:14: warning: floating-point comparison is always false; constant cannot be represented exactly in type \'float\' [-Wliteral-range]","clang/test/Sema/floating-point-compare.c:56:12: warning: floating-point comparison is always false; constant cannot be represented exactly in type \'float\' [-Wliteral-range]","clang/test/Sema/floating-point-compare.c:62:12: warning: floating-point comparison is always false; constant cannot be represented exactly in type \'float\' [-Wliteral-range]"}
["clang/test/Sema/floating-point-compare.c"]={"clang/test/Sema/floating-point-compare.c:26:12: warning: floating-point comparison is always false; constant cannot be represented exactly in type \'float\' [-Wliteral-range]","clang/test/Sema/floating-point-compare.c:30:12: warning: floating-point comparison is always true; constant cannot be represented exactly in type \'float\' [-Wliteral-range]","clang/test/Sema/floating-point-compare.c:40:14: warning: floating-point comparison is always false; constant cannot be represented exactly in type \'float\' [-Wliteral-range]","clang/test/Sema/floating-point-compare.c:44:14: warning: floating-point comparison is always true; constant cannot be represented exactly in type \'float\' [-Wliteral-range]","clang/test/Sema/floating-point-compare.c:48:14: warning: floating-point comparison is always false; constant cannot be represented exactly in type \'float\' [-Wliteral-range]","clang/test/Sema/floating-point-compare.c:52:14: warning: floating-point comparison is always false; constant cannot be represented exactly in type \'float\' [-Wliteral-range]","clang/test/Sema/floating-point-compare.c:56:12: warning: floating-point comparison is always false; constant cannot be represented exactly in type \'float\' [-Wliteral-range]","clang/test/Sema/floating-point-compare.c:62:12: warning: floating-point comparison is always false; constant cannot be represented exactly in type \'float\' [-Wliteral-range]"}
}
}
},
},
["warn_float_overflow"]={
["warn_float_overflow"]={
[j]={zd,R},
[k]={ud,Z},
[i]=zd,
[j]=ud,
[c]="magnitude of floating-point constant too large for type %0; maximum is %1",
[c]="warn_float_overflow",
[d]=g,
[d]="magnitude of floating-point constant too large for type %0; maximum is %1",
[e]="magnitude of floating\\-point constant too large for type (.*?); maximum is (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wliteral\\-range[^\\]]*\\]",
[g]="magnitude of floating\\-point constant too large for type (.*?); maximum is (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wliteral\\-range[^\\]]*\\]",
[a]={"62abc944d673",1267227357,"At sabre\'s request, drop the FP bounds diagnostics down to warnings and file","At sabre\'s request, drop the FP bounds diagnostics down to warnings and file\nthem under -Wbad-literal.  They\'re still on by default.\n\nllvm-svn: 97284"},
[b]=m,
[h]={{K,3802,"static Expr *BuildFloatingLiteral(Sema &S, NumericLiteralParser &Literal, QualType Ty, SourceLocation Loc) {\n  // ...\n  // Overflow is always an error, but underflow is only an error if\n  // we underflowed to zero (APFloat reports denormals as underflow).\n  if ((result & APFloat::opOverflow) || ((result & APFloat::opUnderflow) && Val.isZero())) {\n    // ...\n    if (result & APFloat::opOverflow) {\n      diagnostic = diag::warn_float_overflow;"}},
[f]={"62abc944d673",1267227357,"At sabre\'s request, drop the FP bounds diagnostics down to warnings and file","At sabre\'s request, drop the FP bounds diagnostics down to warnings and file\nthem under -Wbad-literal.  They\'re still on by default.\n\nllvm-svn: 97284"},
[k]={
[h]={{S,3802,"static Expr *BuildFloatingLiteral(Sema &S, NumericLiteralParser &Literal, QualType Ty, SourceLocation Loc) {\n  // ...\n  // Overflow is always an error, but underflow is only an error if\n  // we underflowed to zero (APFloat reports denormals as underflow).\n  if ((result & APFloat::opOverflow) || ((result & APFloat::opUnderflow) && Val.isZero())) {\n    // ...\n    if (result & APFloat::opOverflow) {\n      diagnostic = diag::warn_float_overflow;"}},
[l]={
["clang/test/Lexer/constants.c"]={"clang/test/Lexer/constants.c:53:3: warning: magnitude of floating-point constant too large for type \'float\'; maximum is 3.40282347E+38 [-Wliteral-range]","clang/test/Lexer/constants.c:57:4: warning: magnitude of floating-point constant too large for type \'float\'; maximum is 3.40282347E+38 [-Wliteral-range]","clang/test/Lexer/constants.c:63:3: warning: magnitude of floating-point constant too large for type \'double\'; maximum is 1.7976931348623157E+308 [-Wliteral-range]","clang/test/Lexer/constants.c:67:4: warning: magnitude of floating-point constant too large for type \'double\'; maximum is 1.7976931348623157E+308 [-Wliteral-range]","clang/test/Lexer/constants.c:72:12: warning: magnitude of floating-point constant too large for type \'double\'; maximum is 1.7976931348623157E+308 [-Wliteral-range]"}
["clang/test/Lexer/constants.c"]={"clang/test/Lexer/constants.c:53:3: warning: magnitude of floating-point constant too large for type \'float\'; maximum is 3.40282347E+38 [-Wliteral-range]","clang/test/Lexer/constants.c:57:4: warning: magnitude of floating-point constant too large for type \'float\'; maximum is 3.40282347E+38 [-Wliteral-range]","clang/test/Lexer/constants.c:63:3: warning: magnitude of floating-point constant too large for type \'double\'; maximum is 1.7976931348623157E+308 [-Wliteral-range]","clang/test/Lexer/constants.c:67:4: warning: magnitude of floating-point constant too large for type \'double\'; maximum is 1.7976931348623157E+308 [-Wliteral-range]","clang/test/Lexer/constants.c:72:12: warning: magnitude of floating-point constant too large for type \'double\'; maximum is 1.7976931348623157E+308 [-Wliteral-range]"}
}
}
},
},
["warn_float_underflow"]={
["warn_float_underflow"]={
[j]={zd,R},
[k]={ud,Z},
[i]=zd,
[j]=ud,
[c]="magnitude of floating-point constant too small for type %0; minimum is %1",
[c]="warn_float_underflow",
[d]=g,
[d]="magnitude of floating-point constant too small for type %0; minimum is %1",
[e]="magnitude of floating\\-point constant too small for type (.*?); minimum is (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wliteral\\-range[^\\]]*\\]",
[g]="magnitude of floating\\-point constant too small for type (.*?); minimum is (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wliteral\\-range[^\\]]*\\]",
[a]={"62abc944d673",1267227357,"At sabre\'s request, drop the FP bounds diagnostics down to warnings and file","At sabre\'s request, drop the FP bounds diagnostics down to warnings and file\nthem under -Wbad-literal.  They\'re still on by default.\n\nllvm-svn: 97284"},
[b]=m,
[h]={{K,3805,"static Expr *BuildFloatingLiteral(Sema &S, NumericLiteralParser &Literal, QualType Ty, SourceLocation Loc) {\n  // ...\n  // Overflow is always an error, but underflow is only an error if\n  // we underflowed to zero (APFloat reports denormals as underflow).\n  if ((result & APFloat::opOverflow) || ((result & APFloat::opUnderflow) && Val.isZero())) {\n    // ...\n    if (result & APFloat::opOverflow) {\n    // ...\n    } else {\n      diagnostic = diag::warn_float_underflow;"}},
[f]={"62abc944d673",1267227357,"At sabre\'s request, drop the FP bounds diagnostics down to warnings and file","At sabre\'s request, drop the FP bounds diagnostics down to warnings and file\nthem under -Wbad-literal.  They\'re still on by default.\n\nllvm-svn: 97284"},
[k]={
[h]={{S,3805,"static Expr *BuildFloatingLiteral(Sema &S, NumericLiteralParser &Literal, QualType Ty, SourceLocation Loc) {\n  // ...\n  // Overflow is always an error, but underflow is only an error if\n  // we underflowed to zero (APFloat reports denormals as underflow).\n  if ((result & APFloat::opOverflow) || ((result & APFloat::opUnderflow) && Val.isZero())) {\n    // ...\n    if (result & APFloat::opOverflow) {\n    // ...\n    } else {\n      diagnostic = diag::warn_float_underflow;"}},
[l]={
["clang/test/Lexer/constants.c"]={"clang/test/Lexer/constants.c:54:3: warning: magnitude of floating-point constant too small for type \'float\'; minimum is 1.40129846E-45 [-Wliteral-range]","clang/test/Lexer/constants.c:58:4: warning: magnitude of floating-point constant too small for type \'float\'; minimum is 1.40129846E-45 [-Wliteral-range]","clang/test/Lexer/constants.c:64:3: warning: magnitude of floating-point constant too small for type \'double\'; minimum is 4.9406564584124654E-324 [-Wliteral-range]","clang/test/Lexer/constants.c:68:4: warning: magnitude of floating-point constant too small for type \'double\'; minimum is 4.9406564584124654E-324 [-Wliteral-range]"}
["clang/test/Lexer/constants.c"]={"clang/test/Lexer/constants.c:54:3: warning: magnitude of floating-point constant too small for type \'float\'; minimum is 1.40129846E-45 [-Wliteral-range]","clang/test/Lexer/constants.c:58:4: warning: magnitude of floating-point constant too small for type \'float\'; minimum is 1.40129846E-45 [-Wliteral-range]","clang/test/Lexer/constants.c:64:3: warning: magnitude of floating-point constant too small for type \'double\'; minimum is 4.9406564584124654E-324 [-Wliteral-range]","clang/test/Lexer/constants.c:68:4: warning: magnitude of floating-point constant too small for type \'double\'; minimum is 4.9406564584124654E-324 [-Wliteral-range]"}
}
}
},
},
["warn_floatingpoint_eq"]={
["warn_floatingpoint_eq"]={
[j]={"float-equal"},
[k]={"float-equal"},
[i]="float-equal",
[j]="float-equal",
[c]="comparing floating point with == or != is unsafe",
[c]="warn_floatingpoint_eq",
[d]=g,
[d]="comparing floating point with == or != is unsafe",
[e]="comparing floating point with \\=\\= or \\!\\= is unsafe",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfloat\\-equal[^\\]]*\\]",
[g]="comparing floating point with \\=\\= or \\!\\= is unsafe",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wfloat\\-equal[^\\]]*\\]",
[a]={Ub,1237025389,Xb,Wb},
[b]=m,
[h]={{r,13044,"/// Check for comparisons of floating-point values using == and !=. Issue a\n/// warning if the comparison is not likely to do what the programmer intended.\nvoid Sema::CheckFloatComparison(SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opcode) {\n  // ...\n  Diag(Loc, diag::warn_floatingpoint_eq) << LHS->getSourceRange() << RHS->getSourceRange();"}},
[f]={Yb,1237025389,Zb,ac},
[k]={
[h]={{t,13044,"/// Check for comparisons of floating-point values using == and !=. Issue a\n/// warning if the comparison is not likely to do what the programmer intended.\nvoid Sema::CheckFloatComparison(SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opcode) {\n  // ...\n  Diag(Loc, diag::warn_floatingpoint_eq) << LHS->getSourceRange() << RHS->getSourceRange();"}},
[l]={
["clang/test/Sema/vector-gcc-compat.c"]={"clang/test/Sema/vector-gcc-compat.c:163:21: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]","clang/test/Sema/vector-gcc-compat.c:164:21: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]","clang/test/Sema/vector-gcc-compat.c:174:21: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]","clang/test/Sema/vector-gcc-compat.c:175:21: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]"}
["clang/test/Sema/vector-gcc-compat.c"]={"clang/test/Sema/vector-gcc-compat.c:163:21: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]","clang/test/Sema/vector-gcc-compat.c:164:21: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]","clang/test/Sema/vector-gcc-compat.c:174:21: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]","clang/test/Sema/vector-gcc-compat.c:175:21: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]"}
}
}
},
},
["warn_for_range_begin_end_types_differ"]={
["warn_for_range_begin_end_types_differ"]={
[j]={u,s,o,o,x,q,q,Mb,Ib,n,m,m,S,xb},
[k]={y,u,p,p,G,s,s,Ob,Mb,o,n,n,Y,wb},
[i]=S,
[j]=Y,
[c]="\'begin\' and \'end\' returning different types (%0 and %1) is incompatible with C++ standards before C++1z",
[c]="warn_for_range_begin_end_types_differ",
[d]=g,
[d]="\'begin\' and \'end\' returning different types (%0 and %1) is incompatible with C++ standards before C++1z",
[e]="\'begin\' and \'end\' returning different types \\((.*?) and (.*?)\\) is incompatible with C\\+\\+ standards before C\\+\\+17",
[e]=i,
[f]=Kb,
[g]="\'begin\' and \'end\' returning different types \\((.*?) and (.*?)\\) is incompatible with C\\+\\+ standards before C\\+\\+17",
[b]=l,
[a]=Pb,
[a]={"01694c340db8",1458470020,"P0184R0: Allow types of \'begin\' and \'end\' expressions in range-based for loops to differ.","P0184R0: Allow types of \'begin\' and \'end\' expressions in range-based for loops to differ.\n\nllvm-svn: 263895"},
[b]=m,
[h]={{Cb,2968,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  // ...\n  if (RangeVarType->isDependentType()) {\n  // ...\n  } else if (!BeginDeclStmt.get()) {\n    // ...\n    if (!Context.hasSameType(BeginType, EndType)) {\n      Diag(RangeLoc, getLangOpts().CPlusPlus17 ? diag::warn_for_range_begin_end_types_differ : diag::ext_for_range_begin_end_types_differ) << BeginType << EndType;"}}
[f]={"01694c340db8",1458470020,"P0184R0: Allow types of \'begin\' and \'end\' expressions in range-based for loops to differ.","P0184R0: Allow types of \'begin\' and \'end\' expressions in range-based for loops to differ.\n\nllvm-svn: 263895"},
[h]={{Hb,2968,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  // ...\n  if (RangeVarType->isDependentType()) {\n  // ...\n  } else if (!BeginDeclStmt.get()) {\n    // ...\n    if (!Context.hasSameType(BeginType, EndType)) {\n      Diag(RangeLoc, getLangOpts().CPlusPlus17 ? diag::warn_for_range_begin_end_types_differ : diag::ext_for_range_begin_end_types_differ) << BeginType << EndType;"}}
},
},
["warn_for_range_const_ref_binds_temp_built_from_ref"]={
["warn_for_range_const_ref_binds_temp_built_from_ref"]={
[j]={B,H,"loop-analysis",N,"range-loop-analysis","range-loop-construct"},
[k]={K,O,"loop-analysis",V,"range-loop-analysis","range-loop-construct"},
[i]="range-loop-construct",
[j]="range-loop-construct",
[c]={{nil,mb,"loop variable %0 %diff{of type $ binds to a temporary constructed from type $|binds to a temporary constructed from a different type}1,2"}},
[c]={{nil,z,"warn_for_range_const_ref_binds_temp_built_from_ref"}},
[d]=g,
[d]={{nil,z,"loop variable %0 %diff{of type $ binds to a temporary constructed from type $|binds to a temporary constructed from a different type}1,2"}},
[e]="loop variable (.*?) (?:of type (.*?) binds to a temporary constructed from type (.*?)|binds to a temporary constructed from a different type)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wrange\\-loop\\-construct[^\\]]*\\]",
[g]="loop variable (.*?) (?:of type (.*?) binds to a temporary constructed from type (.*?)|binds to a temporary constructed from a different type)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wrange\\-loop\\-construct[^\\]]*\\]",
[a]={Bd,1576908663,ud,Ed},
[b]={{nil,z,m}},
[h]={{Cb,3141,"// Warn when the loop variable is a const reference that creates a copy.\n// Suggest using the non-reference type for copies.  If a copy can be prevented\n// suggest the const reference type that would do so.\n// For instance, given \"for (const &Foo : Range)\", suggest\n// \"for (const Foo : Range)\" to denote a copy is made for the loop.  If\n// possible, also suggest \"for (const &Bar : Range)\" if this type prevents\n// the copy altogether.\nstatic void DiagnoseForRangeReferenceVariableCopies(Sema &SemaRef, const VarDecl *VD, QualType RangeInitType) {\n  // ...\n  if (!ReferenceReturnType.isNull()) {\n    // ...\n    SemaRef.Diag(VD->getLocation(), diag::warn_for_range_const_ref_binds_temp_built_from_ref) << VD << VariableType << ReferenceReturnType;"},{Cb,3228,"/// DiagnoseForRangeVariableCopies - Diagnose three cases and fixes for them.\n/// 1) for (const foo &x : foos) where foos only returns a copy.  Suggest\n///    using \"const foo x\" to show that a copy is made\n/// 2) for (const bar &x : foos) where bar is a temporary initialized by bar.\n///    Suggest either \"const bar x\" to keep the copying or \"const foo& x\" to\n///    prevent the copy.\n/// 3) for (const foo x : foos) where x is constructed from a reference foo.\n///    Suggest \"const foo &x\" to prevent the copy.\nstatic void DiagnoseForRangeVariableCopies(Sema &SemaRef, const CXXForRangeStmt *ForStmt) {\n  // ...\n  if (SemaRef.Diags.isIgnored(diag::warn_for_range_const_ref_binds_temp_built_from_ref, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_ref_binds_ret_temp, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_copy, ForStmt->getBeginLoc())) {"}},
[f]={Ld,1576908663,xd,"[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n  turned out to be ineffective anyway since functions can be defined later\n  in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520"},
[k]={
[h]={{Hb,3141,"// Warn when the loop variable is a const reference that creates a copy.\n// Suggest using the non-reference type for copies.  If a copy can be prevented\n// suggest the const reference type that would do so.\n// For instance, given \"for (const &Foo : Range)\", suggest\n// \"for (const Foo : Range)\" to denote a copy is made for the loop.  If\n// possible, also suggest \"for (const &Bar : Range)\" if this type prevents\n// the copy altogether.\nstatic void DiagnoseForRangeReferenceVariableCopies(Sema &SemaRef, const VarDecl *VD, QualType RangeInitType) {\n  // ...\n  if (!ReferenceReturnType.isNull()) {\n    // ...\n    SemaRef.Diag(VD->getLocation(), diag::warn_for_range_const_ref_binds_temp_built_from_ref) << VD << VariableType << ReferenceReturnType;"},{Hb,3228,"/// DiagnoseForRangeVariableCopies - Diagnose three cases and fixes for them.\n/// 1) for (const foo &x : foos) where foos only returns a copy.  Suggest\n///    using \"const foo x\" to show that a copy is made\n/// 2) for (const bar &x : foos) where bar is a temporary initialized by bar.\n///    Suggest either \"const bar x\" to keep the copying or \"const foo& x\" to\n///    prevent the copy.\n/// 3) for (const foo x : foos) where x is constructed from a reference foo.\n///    Suggest \"const foo &x\" to prevent the copy.\nstatic void DiagnoseForRangeVariableCopies(Sema &SemaRef, const CXXForRangeStmt *ForStmt) {\n  // ...\n  if (SemaRef.Diags.isIgnored(diag::warn_for_range_const_ref_binds_temp_built_from_ref, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_ref_binds_ret_temp, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_copy, ForStmt->getBeginLoc())) {"}},
[l]={
["clang/test/SemaCXX/warn-range-loop-analysis.cpp"]={"clang/test/SemaCXX/warn-range-loop-analysis.cpp:78:22: warning: loop variable \'x\' of type \'const double &\' binds to a temporary constructed from type \'int &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:154:23: warning: loop variable \'x\' of type \'const double &&\' binds to a temporary constructed from type \'int &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:158:22: warning: loop variable \'x\' of type \'const double &\' binds to a temporary constructed from type \'int &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:163:17: warning: loop variable \'x\' of type \'double &&\' binds to a temporary constructed from type \'int &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:172:20: warning: loop variable \'x\' of type \'const Bar &&\' binds to a temporary constructed from type \'int &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:176:19: warning: loop variable \'x\' of type \'const Bar &\' binds to a temporary constructed from type \'int &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:181:14: warning: loop variable \'x\' of type \'Bar &&\' binds to a temporary constructed from type \'int &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:243:20: warning: loop variable \'x\' of type \'const int &&\' binds to a temporary constructed from type \'Bar &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:247:19: warning: loop variable \'x\' of type \'const int &\' binds to a temporary constructed from type \'Bar &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:253:14: warning: loop variable \'x\' of type \'int &&\' binds to a temporary constructed from type \'Bar &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:285:20: warning: loop variable \'x\' of type \'const Bar &&\' binds to a temporary constructed from type \'Foo &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:289:19: warning: loop variable \'x\' of type \'const Bar &\' binds to a temporary constructed from type \'Foo &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:295:14: warning: loop variable \'x\' of type \'Bar &&\' binds to a temporary constructed from type \'Foo &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:321:20: warning: loop variable \'x\' of type \'const int &&\' binds to a temporary constructed from type \'double &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:325:19: warning: loop variable \'x\' of type \'const int &\' binds to a temporary constructed from type \'double &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:331:14: warning: loop variable \'x\' of type \'int &&\' binds to a temporary constructed from type \'double &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:340:20: warning: loop variable \'x\' of type \'const Bar &&\' binds to a temporary constructed from type \'double &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:344:19: warning: loop variable \'x\' of type \'const Bar &\' binds to a temporary constructed from type \'double &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:350:14: warning: loop variable \'x\' of type \'Bar &&\' binds to a temporary constructed from type \'double &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:376:20: warning: loop variable \'x\' of type \'const Bar &&\' binds to a temporary constructed from type \'Foo &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:380:19: warning: loop variable \'x\' of type \'const Bar &\' binds to a temporary constructed from type \'Foo &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:386:14: warning: loop variable \'x\' of type \'Bar &&\' binds to a temporary constructed from type \'Foo &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:414:20: warning: loop variable \'x\' of type \'const int &&\' binds to a temporary constructed from type \'Bar &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:418:19: warning: loop variable \'x\' of type \'const int &\' binds to a temporary constructed from type \'Bar &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:424:14: warning: loop variable \'x\' of type \'int &&\' binds to a temporary constructed from type \'Bar &\' [-Wrange-loop-construct]"}
["clang/test/SemaCXX/warn-range-loop-analysis.cpp"]={"clang/test/SemaCXX/warn-range-loop-analysis.cpp:78:22: warning: loop variable \'x\' of type \'const double &\' binds to a temporary constructed from type \'int &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:154:23: warning: loop variable \'x\' of type \'const double &&\' binds to a temporary constructed from type \'int &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:158:22: warning: loop variable \'x\' of type \'const double &\' binds to a temporary constructed from type \'int &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:163:17: warning: loop variable \'x\' of type \'double &&\' binds to a temporary constructed from type \'int &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:172:20: warning: loop variable \'x\' of type \'const Bar &&\' binds to a temporary constructed from type \'int &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:176:19: warning: loop variable \'x\' of type \'const Bar &\' binds to a temporary constructed from type \'int &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:181:14: warning: loop variable \'x\' of type \'Bar &&\' binds to a temporary constructed from type \'int &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:243:20: warning: loop variable \'x\' of type \'const int &&\' binds to a temporary constructed from type \'Bar &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:247:19: warning: loop variable \'x\' of type \'const int &\' binds to a temporary constructed from type \'Bar &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:253:14: warning: loop variable \'x\' of type \'int &&\' binds to a temporary constructed from type \'Bar &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:285:20: warning: loop variable \'x\' of type \'const Bar &&\' binds to a temporary constructed from type \'Foo &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:289:19: warning: loop variable \'x\' of type \'const Bar &\' binds to a temporary constructed from type \'Foo &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:295:14: warning: loop variable \'x\' of type \'Bar &&\' binds to a temporary constructed from type \'Foo &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:321:20: warning: loop variable \'x\' of type \'const int &&\' binds to a temporary constructed from type \'double &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:325:19: warning: loop variable \'x\' of type \'const int &\' binds to a temporary constructed from type \'double &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:331:14: warning: loop variable \'x\' of type \'int &&\' binds to a temporary constructed from type \'double &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:340:20: warning: loop variable \'x\' of type \'const Bar &&\' binds to a temporary constructed from type \'double &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:344:19: warning: loop variable \'x\' of type \'const Bar &\' binds to a temporary constructed from type \'double &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:350:14: warning: loop variable \'x\' of type \'Bar &&\' binds to a temporary constructed from type \'double &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:376:20: warning: loop variable \'x\' of type \'const Bar &&\' binds to a temporary constructed from type \'Foo &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:380:19: warning: loop variable \'x\' of type \'const Bar &\' binds to a temporary constructed from type \'Foo &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:386:14: warning: loop variable \'x\' of type \'Bar &&\' binds to a temporary constructed from type \'Foo &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:414:20: warning: loop variable \'x\' of type \'const int &&\' binds to a temporary constructed from type \'Bar &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:418:19: warning: loop variable \'x\' of type \'const int &\' binds to a temporary constructed from type \'Bar &\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis.cpp:424:14: warning: loop variable \'x\' of type \'int &&\' binds to a temporary constructed from type \'Bar &\' [-Wrange-loop-construct]"}
}
}
},
},
["warn_for_range_copy"]={
["warn_for_range_copy"]={
[j]={B,H,"loop-analysis",N,"range-loop-analysis","range-loop-construct"},
[k]={K,O,"loop-analysis",V,"range-loop-analysis","range-loop-construct"},
[i]="range-loop-construct",
[j]="range-loop-construct",
[c]={{nil,mb,"loop variable %0 creates a copy from type %1"},{z,nil,"loop variable %0 of type %1 creates a copy from type %2"}},
[c]="warn_for_range_copy",
[d]=g,
[d]={{nil,z,"loop variable %0 creates a copy from type %1"},{q,nil,"loop variable %0 of type %1 creates a copy from type %2"}},
[e]="loop variable (.*?) creates a copy from type (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wrange\\-loop\\-construct[^\\]]*\\]",
[g]="loop variable (.*?) creates a copy from type (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wrange\\-loop\\-construct[^\\]]*\\]",
[a]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops.","Add new warning -Wrange-loop-analysis to warn on copies during loops.\n\n-Wrange-loop-analysis is a subgroup of -Wloop-analysis and will warn when\na range-based for-loop makes copies of the elements in the range.  If possible,\nsuggest the proper type to prevent copies, or the non-reference to help\ndistinguish copy versus non-copy forms.  Existing warnings in -Wloop-analysis\nare moved to -Wfor-loop-analysis, also a subgroup of -Wloop-analysis.\n\nDifferential Revision: http://reviews.llvm.org/D4169\n\nllvm-svn: 234804"},
[b]=m,
[h]={{Cb,3206,"// Warns when the loop variable can be changed to a reference type to\n// prevent a copy.  For instance, if given \"for (const Foo x : Range)\" suggest\n// \"for (const Foo &x : Range)\" if this form does not make a copy.\nstatic void DiagnoseForRangeConstVariableCopies(Sema &SemaRef, const VarDecl *VD) {\n  // ...\n  SemaRef.Diag(VD->getLocation(), diag::warn_for_range_copy) << VD << VariableType;"},{Cb,3232,"/// DiagnoseForRangeVariableCopies - Diagnose three cases and fixes for them.\n/// 1) for (const foo &x : foos) where foos only returns a copy.  Suggest\n///    using \"const foo x\" to show that a copy is made\n/// 2) for (const bar &x : foos) where bar is a temporary initialized by bar.\n///    Suggest either \"const bar x\" to keep the copying or \"const foo& x\" to\n///    prevent the copy.\n/// 3) for (const foo x : foos) where x is constructed from a reference foo.\n///    Suggest \"const foo &x\" to prevent the copy.\nstatic void DiagnoseForRangeVariableCopies(Sema &SemaRef, const CXXForRangeStmt *ForStmt) {\n  // ...\n  if (SemaRef.Diags.isIgnored(diag::warn_for_range_const_ref_binds_temp_built_from_ref, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_ref_binds_ret_temp, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_copy, ForStmt->getBeginLoc())) {"}},
[f]={"3e1d483e0efb",1428962935,"Add new warning -Wrange-loop-analysis to warn on copies during loops.","Add new warning -Wrange-loop-analysis to warn on copies during loops.\n\n-Wrange-loop-analysis is a subgroup of -Wloop-analysis and will warn when\na range-based for-loop makes copies of the elements in the range.  If possible,\nsuggest the proper type to prevent copies, or the non-reference to help\ndistinguish copy versus non-copy forms.  Existing warnings in -Wloop-analysis\nare moved to -Wfor-loop-analysis, also a subgroup of -Wloop-analysis.\n\nDifferential Revision: http://reviews.llvm.org/D4169\n\nllvm-svn: 234804"},
[k]={
[h]={{Hb,3206,"// Warns when the loop variable can be changed to a reference type to\n// prevent a copy.  For instance, if given \"for (const Foo x : Range)\" suggest\n// \"for (const Foo &x : Range)\" if this form does not make a copy.\nstatic void DiagnoseForRangeConstVariableCopies(Sema &SemaRef, const VarDecl *VD) {\n  // ...\n  SemaRef.Diag(VD->getLocation(), diag::warn_for_range_copy) << VD << VariableType;"},{Hb,3232,"/// DiagnoseForRangeVariableCopies - Diagnose three cases and fixes for them.\n/// 1) for (const foo &x : foos) where foos only returns a copy.  Suggest\n///    using \"const foo x\" to show that a copy is made\n/// 2) for (const bar &x : foos) where bar is a temporary initialized by bar.\n///    Suggest either \"const bar x\" to keep the copying or \"const foo& x\" to\n///    prevent the copy.\n/// 3) for (const foo x : foos) where x is constructed from a reference foo.\n///    Suggest \"const foo &x\" to prevent the copy.\nstatic void DiagnoseForRangeVariableCopies(Sema &SemaRef, const CXXForRangeStmt *ForStmt) {\n  // ...\n  if (SemaRef.Diags.isIgnored(diag::warn_for_range_const_ref_binds_temp_built_from_ref, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_ref_binds_ret_temp, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_copy, ForStmt->getBeginLoc())) {"}},
[l]={
["clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp"]={"clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp:22:19: warning: loop variable \'r\' creates a copy from type \'const Record\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp:46:19: warning: loop variable \'r\' creates a copy from type \'const Record\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp:61:19: warning: loop variable \'r\' creates a copy from type \'const Record\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp:87:19: warning: loop variable \'r\' creates a copy from type \'const Record\' [-Wrange-loop-construct]"}
["clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp"]={"clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp:22:19: warning: loop variable \'r\' creates a copy from type \'const Record\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp:46:19: warning: loop variable \'r\' creates a copy from type \'const Record\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp:61:19: warning: loop variable \'r\' creates a copy from type \'const Record\' [-Wrange-loop-construct]","clang/test/SemaCXX/warn-range-loop-analysis-trivially-copyable.cpp:87:19: warning: loop variable \'r\' creates a copy from type \'const Record\' [-Wrange-loop-construct]"}
}
}
},
},
["warn_for_range_ref_binds_ret_temp"]={
["warn_for_range_ref_binds_ret_temp"]={
[j]={"loop-analysis","range-loop-analysis","range-loop-bind-reference"},
[k]={"loop-analysis","range-loop-analysis","range-loop-bind-reference"},
[i]="range-loop-bind-reference",
[j]="range-loop-bind-reference",
[c]={{nil,mb,"loop variable %0 binds to a temporary value produced by a range of type %1"}},
[c]={{nil,z,"warn_for_range_ref_binds_ret_temp"}},
[d]=g,
[d]={{nil,z,"loop variable %0 binds to a temporary value produced by a range of type %1"}},
[e]="loop variable (.*?) binds to a temporary value produced by a range of type (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wrange\\-loop\\-bind\\-reference[^\\]]*\\]",
[g]="loop variable (.*?) binds to a temporary value produced by a range of type (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wrange\\-loop\\-bind\\-reference[^\\]]*\\]",
[a]={Bd,1576908663,ud,Ed},
[b]={{nil,z,m}},
[h]={{Cb,3155,"// Warn when the loop variable is a const reference that creates a copy.\n// Suggest using the non-reference type for copies.  If a copy can be prevented\n// suggest the const reference type that would do so.\n// For instance, given \"for (const &Foo : Range)\", suggest\n// \"for (const Foo : Range)\" to denote a copy is made for the loop.  If\n// possible, also suggest \"for (const &Bar : Range)\" if this type prevents\n// the copy altogether.\nstatic void DiagnoseForRangeReferenceVariableCopies(Sema &SemaRef, const VarDecl *VD, QualType RangeInitType) {\n  // ...\n  if (!ReferenceReturnType.isNull()) {\n  // ...\n  } else if (!VariableType->isRValueReferenceType()) {\n    // ...\n    SemaRef.Diag(VD->getLocation(), diag::warn_for_range_ref_binds_ret_temp) << VD << RangeInitType;"},{Cb,3230,"/// DiagnoseForRangeVariableCopies - Diagnose three cases and fixes for them.\n/// 1) for (const foo &x : foos) where foos only returns a copy.  Suggest\n///    using \"const foo x\" to show that a copy is made\n/// 2) for (const bar &x : foos) where bar is a temporary initialized by bar.\n///    Suggest either \"const bar x\" to keep the copying or \"const foo& x\" to\n///    prevent the copy.\n/// 3) for (const foo x : foos) where x is constructed from a reference foo.\n///    Suggest \"const foo &x\" to prevent the copy.\nstatic void DiagnoseForRangeVariableCopies(Sema &SemaRef, const CXXForRangeStmt *ForStmt) {\n  // ...\n  if (SemaRef.Diags.isIgnored(diag::warn_for_range_const_ref_binds_temp_built_from_ref, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_ref_binds_ret_temp, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_copy, ForStmt->getBeginLoc())) {"}},
[f]={Ld,1576908663,xd,"[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n  turned out to be ineffective anyway since functions can be defined later\n  in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520"},
[k]={
[h]={{Hb,3155,"// Warn when the loop variable is a const reference that creates a copy.\n// Suggest using the non-reference type for copies.  If a copy can be prevented\n// suggest the const reference type that would do so.\n// For instance, given \"for (const &Foo : Range)\", suggest\n// \"for (const Foo : Range)\" to denote a copy is made for the loop.  If\n// possible, also suggest \"for (const &Bar : Range)\" if this type prevents\n// the copy altogether.\nstatic void DiagnoseForRangeReferenceVariableCopies(Sema &SemaRef, const VarDecl *VD, QualType RangeInitType) {\n  // ...\n  if (!ReferenceReturnType.isNull()) {\n  // ...\n  } else if (!VariableType->isRValueReferenceType()) {\n    // ...\n    SemaRef.Diag(VD->getLocation(), diag::warn_for_range_ref_binds_ret_temp) << VD << RangeInitType;"},{Hb,3230,"/// DiagnoseForRangeVariableCopies - Diagnose three cases and fixes for them.\n/// 1) for (const foo &x : foos) where foos only returns a copy.  Suggest\n///    using \"const foo x\" to show that a copy is made\n/// 2) for (const bar &x : foos) where bar is a temporary initialized by bar.\n///    Suggest either \"const bar x\" to keep the copying or \"const foo& x\" to\n///    prevent the copy.\n/// 3) for (const foo x : foos) where x is constructed from a reference foo.\n///    Suggest \"const foo &x\" to prevent the copy.\nstatic void DiagnoseForRangeVariableCopies(Sema &SemaRef, const CXXForRangeStmt *ForStmt) {\n  // ...\n  if (SemaRef.Diags.isIgnored(diag::warn_for_range_const_ref_binds_temp_built_from_ref, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_ref_binds_ret_temp, ForStmt->getBeginLoc()) && SemaRef.Diags.isIgnored(diag::warn_for_range_copy, ForStmt->getBeginLoc())) {"}},
[l]={
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:563:24: warning: loop variable \'x\' binds to a temporary value produced by a range of type \'wrapper<svint8_t>\' (aka \'wrapper<__SVInt8_t>\') [-Wrange-loop-bind-reference]"}
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:563:24: warning: loop variable \'x\' binds to a temporary value produced by a range of type \'wrapper<svint8_t>\' (aka \'wrapper<__SVInt8_t>\') [-Wrange-loop-bind-reference]"}
}
}
},
},
["warn_format_P_no_precision"]={
["warn_format_P_no_precision"]={
[j]={B,H,nb,N},
[k]={K,O,rb,V},
[i]=nb,
[j]=rb,
[c]="using \'%%P\' format specifier without precision",
[c]="warn_format_P_no_precision",
[d]=g,
[d]="using \'%%P\' format specifier without precision",
[e]="using \'%P\' format specifier without precision",
[e]=i,
[f]=vc,
[g]="using \'%P\' format specifier without precision",
[b]=ac,
[a]=yc,
[a]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]","Add support for __builtin_os_log_format[_buffer_size]\n\nThese new builtins support a mechanism for logging OS events, using a\nprintf-like format string to specify the layout of data in a buffer.\nThe _buffer_size version of the builtin can be used to determine the size\nof the buffer to allocate to hold the data, and then __builtin_os_log_format\ncan write data into that buffer. This implements format checking to report\nmismatches between the format string and the data arguments. Most of this\ncode was written by Chris Willmore.\n\nDifferential Revision: https://reviews.llvm.org/D25888\n\nllvm-svn: 284990"},
[b]=dc,
[h]={{r,10897,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // ...\n  // Precision is mandatory for %P specifier.\n  if (CS.getKind() == ConversionSpecifier::PArg && FS.getPrecision().getHowSpecified() == OptionalAmount::NotSpecified) {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_P_no_precision), getLocationOfByte(startSpecifier),"}},
[f]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]","Add support for __builtin_os_log_format[_buffer_size]\n\nThese new builtins support a mechanism for logging OS events, using a\nprintf-like format string to specify the layout of data in a buffer.\nThe _buffer_size version of the builtin can be used to determine the size\nof the buffer to allocate to hold the data, and then __builtin_os_log_format\ncan write data into that buffer. This implements format checking to report\nmismatches between the format string and the data arguments. Most of this\ncode was written by Chris Willmore.\n\nDifferential Revision: https://reviews.llvm.org/D25888\n\nllvm-svn: 284990"},
[k]={
[h]={{t,10897,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // ...\n  // Precision is mandatory for %P specifier.\n  if (CS.getKind() == ConversionSpecifier::PArg && FS.getPrecision().getHowSpecified() == OptionalAmount::NotSpecified) {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_P_no_precision), getLocationOfByte(startSpecifier),"}},
[l]={
["clang/test/SemaObjC/format-strings-oslog.m"]={"clang/test/SemaObjC/format-strings-oslog.m:17:33: warning: using \'%P\' format specifier without precision [-Wformat]","clang/test/SemaObjC/format-strings-oslog.m:53:34: warning: using \'%P\' format specifier without precision [-Wformat]","clang/test/SemaObjC/format-strings-oslog.m:68:12: warning: using \'%P\' format specifier without precision [-Wformat]"}
["clang/test/SemaObjC/format-strings-oslog.m"]={"clang/test/SemaObjC/format-strings-oslog.m:17:33: warning: using \'%P\' format specifier without precision [-Wformat]","clang/test/SemaObjC/format-strings-oslog.m:53:34: warning: using \'%P\' format specifier without precision [-Wformat]","clang/test/SemaObjC/format-strings-oslog.m:68:12: warning: using \'%P\' format specifier without precision [-Wformat]"}
}
}
},
},
["warn_format_argument_needs_cast"]={
["warn_format_argument_needs_cast"]={
[j]={B,H,nb,N},
[k]={K,O,rb,V},
[i]=nb,
[j]=rb,
[c]="%select{values of type|enum values with underlying type}2 \'%0\' should not be used as format arguments; add an explicit cast to %1 instead",
[c]="warn_format_argument_needs_cast",
[d]=g,
[d]="%select{values of type|enum values with underlying type}2 \'%0\' should not be used as format arguments; add an explicit cast to %1 instead",
[e]="(?:values of type|enum values with underlying type) \'(.*?)\' should not be used as format arguments; add an explicit cast to (.*?) instead",
[e]=i,
[f]=vc,
[g]="(?:values of type|enum values with underlying type) \'(.*?)\' should not be used as format arguments; add an explicit cast to (.*?) instead",
[b]=ac,
[a]=yc,
[a]={"aee343819532",1346885786,"Format strings: suggest casts for NS(U)Integer and [SU]Int32 on Darwin.","Format strings: suggest casts for NS(U)Integer and [SU]Int32 on Darwin.\n\nThese types are defined differently on 32-bit and 64-bit platforms, and\ntrying to offer a fixit for one platform would only mess up the format\nstring for the other. The Apple-recommended solution is to cast to a type\nthat is known to be large enough and always use that to print the value.\n\nThis should only have an impact on compile time if the format string is\nincorrect; in cases where the format string matches the definition on the\ncurrent platform, no warning will be emitted.\n\n<rdar://problem/9135072&12164284>\n\nllvm-svn: 163266"},
[b]=dc,
[h]={{r,11330,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n    // ...\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n    // ...\n    } else {\n      // ...\n      if (ShouldNotPrintDirectly && !IsScopedEnum) {\n        // ...\n        unsigned Diag = Match == ArgType::NoMatchPedantic ? diag::warn_format_argument_needs_cast_pedantic : diag::warn_format_argument_needs_cast;"}},
[f]={"aee343819532",1346885786,"Format strings: suggest casts for NS(U)Integer and [SU]Int32 on Darwin.","Format strings: suggest casts for NS(U)Integer and [SU]Int32 on Darwin.\n\nThese types are defined differently on 32-bit and 64-bit platforms, and\ntrying to offer a fixit for one platform would only mess up the format\nstring for the other. The Apple-recommended solution is to cast to a type\nthat is known to be large enough and always use that to print the value.\n\nThis should only have an impact on compile time if the format string is\nincorrect; in cases where the format string matches the definition on the\ncurrent platform, no warning will be emitted.\n\n<rdar://problem/9135072&12164284>\n\nllvm-svn: 163266"},
[k]={
[h]={{t,11330,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n    // ...\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n    // ...\n    } else {\n      // ...\n      if (ShouldNotPrintDirectly && !IsScopedEnum) {\n        // ...\n        unsigned Diag = Match == ArgType::NoMatchPedantic ? diag::warn_format_argument_needs_cast_pedantic : diag::warn_format_argument_needs_cast;"}},
[l]={
["clang/test/SemaObjC/format-strings-objc.m"]={"clang/test/SemaObjC/format-strings-objc.m:271:25: warning: values of type \'NSInteger\' should not be used as format arguments; add an explicit cast to \'long\' instead [-Wformat]","clang/test/SemaObjC/format-strings-objc.m:271:80: warning: values of type \'NSInteger\' should not be used as format arguments; add an explicit cast to \'long\' instead [-Wformat]"}
["clang/test/SemaObjC/format-strings-objc.m"]={"clang/test/SemaObjC/format-strings-objc.m:271:25: warning: values of type \'NSInteger\' should not be used as format arguments; add an explicit cast to \'long\' instead [-Wformat]","clang/test/SemaObjC/format-strings-objc.m:271:80: warning: values of type \'NSInteger\' should not be used as format arguments; add an explicit cast to \'long\' instead [-Wformat]"}
}
}
},
},
["warn_format_argument_needs_cast_pedantic"]={
["warn_format_argument_needs_cast_pedantic"]={
[j]={"format-pedantic"},
[k]={"format-pedantic"},
[i]="format-pedantic",
[j]="format-pedantic",
[c]={{nil,eb,"%select{values of type|enum values with underlying type}2 \'%0\' should not be used as format arguments; add an explicit cast to %1 instead"}},
[c]={{nil,D,"warn_format_argument_needs_cast_pedantic"}},
[d]=g,
[d]={{nil,D,"%select{values of type|enum values with underlying type}2 \'%0\' should not be used as format arguments; add an explicit cast to %1 instead"}},
[e]="(?:values of type|enum values with underlying type) \'(.*?)\' should not be used as format arguments; add an explicit cast to (.*?) instead",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wformat\\-pedantic[^\\]]*\\]",
[g]="(?:values of type|enum values with underlying type) \'(.*?)\' should not be used as format arguments; add an explicit cast to (.*?) instead",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-pedantic[^\\]]*\\]",
[a]={"ec7d7f312e5c",1529704480,"[Sema] -Wformat-pedantic only for NSInteger/NSUInteger %zu/%zi on Darwin","[Sema] -Wformat-pedantic only for NSInteger/NSUInteger %zu/%zi on Darwin\n\nSummary:\nPick D42933 back up, and make NSInteger/NSUInteger with %zu/%zi specifiers on Darwin warn only in pedantic mode. The default -Wformat recently started warning for the following code because of the added support for analysis for the \'%zi\' specifier.\n\n    NSInteger i = NSIntegerMax;\n    NSLog(@\"max NSInteger = %zi\", i);\n\nThe problem is that on armv7 %zi is \'long\', and NSInteger is typedefed to \'int\' in Foundation. We should avoid this warning as it\'s inconvenient to our users: it\'s target specific (happens only on armv7 and not arm64), and breaks their existing code. We should also silence the warning for the \'%zu\' specifier to ensure consistency. This is acceptable because Darwin guarantees that, despite the unfortunate choice of typedef, sizeof(size_t) == sizeof(NS[U]Integer), the warning is therefore noisy for pedantic reasons. Once this is in I\'ll update public documentation.\n\nRelated discussion on cfe-dev:\nhttp://lists.llvm.org/pipermail/cfe-dev/2018-May/058050.html\n\n<rdar://36874921&40501559>\n\nReviewers: ahatanak, vsapsai, alexshap, aaron.ballman, javed.absar, jfb, rjmccall\n\nSubscribers: kristof.beyls, aheejin, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D47290\n\nllvm-svn: 335393"},
[b]={{nil,D,m}},
[h]={{r,11329,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n    // ...\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n    // ...\n    } else {\n      // ...\n      if (ShouldNotPrintDirectly && !IsScopedEnum) {\n        // ...\n        unsigned Diag = Match == ArgType::NoMatchPedantic ? diag::warn_format_argument_needs_cast_pedantic : diag::warn_format_argument_needs_cast;"}}
[f]={"ec7d7f312e5c",1529704480,"[Sema] -Wformat-pedantic only for NSInteger/NSUInteger %zu/%zi on Darwin","[Sema] -Wformat-pedantic only for NSInteger/NSUInteger %zu/%zi on Darwin\n\nSummary:\nPick D42933 back up, and make NSInteger/NSUInteger with %zu/%zi specifiers on Darwin warn only in pedantic mode. The default -Wformat recently started warning for the following code because of the added support for analysis for the \'%zi\' specifier.\n\n    NSInteger i = NSIntegerMax;\n    NSLog(@\"max NSInteger = %zi\", i);\n\nThe problem is that on armv7 %zi is \'long\', and NSInteger is typedefed to \'int\' in Foundation. We should avoid this warning as it\'s inconvenient to our users: it\'s target specific (happens only on armv7 and not arm64), and breaks their existing code. We should also silence the warning for the \'%zu\' specifier to ensure consistency. This is acceptable because Darwin guarantees that, despite the unfortunate choice of typedef, sizeof(size_t) == sizeof(NS[U]Integer), the warning is therefore noisy for pedantic reasons. Once this is in I\'ll update public documentation.\n\nRelated discussion on cfe-dev:\nhttp://lists.llvm.org/pipermail/cfe-dev/2018-May/058050.html\n\n<rdar://36874921&40501559>\n\nReviewers: ahatanak, vsapsai, alexshap, aaron.ballman, javed.absar, jfb, rjmccall\n\nSubscribers: kristof.beyls, aheejin, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D47290\n\nllvm-svn: 335393"},
[h]={{t,11329,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n    // ...\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n    // ...\n    } else {\n      // ...\n      if (ShouldNotPrintDirectly && !IsScopedEnum) {\n        // ...\n        unsigned Diag = Match == ArgType::NoMatchPedantic ? diag::warn_format_argument_needs_cast_pedantic : diag::warn_format_argument_needs_cast;"}}
},
},
["warn_format_bool_as_character"]={
["warn_format_bool_as_character"]={
[j]={B,H,nb,N},
[k]={K,O,rb,V},
[i]=nb,
[j]=rb,
[c]={{nil,z,"using \'%0\' format specifier, but argument has boolean value"}},
[c]={{nil,q,"warn_format_bool_as_character"}},
[d]=g,
[d]={{nil,q,"using \'%0\' format specifier, but argument has boolean value"}},
[e]="using \'(.*?)\' format specifier, but argument has boolean value",
[e]=i,
[f]=vc,
[g]="using \'(.*?)\' format specifier, but argument has boolean value",
[b]=ac,
[a]=yc,
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,dc}},
[h]={{r,11104,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  // Diagnose attempts to print a boolean value as a character. Unlike other\n  // -Wformat diagnostics, this is fine from a type perspective, but it still\n  // doesn\'t make sense.\n  if (FS.getConversionSpecifier().getKind() == ConversionSpecifier::cArg && E->isKnownToHaveBooleanValue()) {\n    // ...\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_bool_as_character) << FSString, E->getExprLoc(), false, CSR);"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{t,11104,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  // Diagnose attempts to print a boolean value as a character. Unlike other\n  // -Wformat diagnostics, this is fine from a type perspective, but it still\n  // doesn\'t make sense.\n  if (FS.getConversionSpecifier().getKind() == ConversionSpecifier::cArg && E->isKnownToHaveBooleanValue()) {\n    // ...\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_bool_as_character) << FSString, E->getExprLoc(), false, CSR);"}},
[l]={
["clang/test/Sema/format-bool.c"]={"clang/test/Sema/format-bool.c:35:11: warning: using \'%c\' format specifier, but argument has boolean value [-Wformat]","clang/test/Sema/format-bool.c:36:12: warning: using \'%lc\' format specifier, but argument has boolean value [-Wformat]","clang/test/Sema/format-bool.c:37:11: warning: using \'%c\' format specifier, but argument has boolean value [-Wformat]"}
["clang/test/Sema/format-bool.c"]={"clang/test/Sema/format-bool.c:35:11: warning: using \'%c\' format specifier, but argument has boolean value [-Wformat]","clang/test/Sema/format-bool.c:36:12: warning: using \'%lc\' format specifier, but argument has boolean value [-Wformat]","clang/test/Sema/format-bool.c:37:11: warning: using \'%c\' format specifier, but argument has boolean value [-Wformat]"}
}
}
},
},
["warn_format_conversion_argument_type_mismatch"]={
["warn_format_conversion_argument_type_mismatch"]={
[j]={B,H,nb,N},
[k]={K,O,rb,V},
[i]=nb,
[j]=rb,
[c]="format specifies type %0 but the argument has %select{type|underlying type}2 %1",
[c]="warn_format_conversion_argument_type_mismatch",
[d]=g,
[d]="format specifies type %0 but the argument has %select{type|underlying type}2 %1",
[e]="format specifies type (.*?) but the argument has (?:type|underlying type) (.*?)",
[e]=i,
[f]=vc,
[g]="format specifies type (.*?) but the argument has (?:type|underlying type) (.*?)",
[b]=ac,
[a]=yc,
[a]={"bc53ed1ee624",1401509534,"Format strings: check against an enum\'s underlying type.","Format strings: check against an enum\'s underlying type.\n\nThis allows us to be more careful when dealing with enums whose fixed\nunderlying type requires special handling in a format string, like\nNSInteger.\n\nA refinement of r163266 from a year and a half ago, which added the\nspecial handling for NSInteger and friends in the first place.\n\n<rdar://problem/16616623>\n\nllvm-svn: 209966"},
[b]=dc,
[h]={{r,10803,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // ...\n  // FreeBSD kernel extensions.\n  if (CS.getKind() == ConversionSpecifier::FreeBSDbArg || CS.getKind() == ConversionSpecifier::FreeBSDDArg) {\n    // ...\n    if (AT.isValid() && !AT.matchesType(S.Context, Ex->getType()))\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT.getRepresentativeTypeName(S.Context) << Ex->getType() << false << Ex->getSourceRange(), Ex->getBeginLoc(), /*IsStringLocation*/ false, getSpecifierRange(startSpecifier, specifierLen));"},{r,10814,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // ...\n  // FreeBSD kernel extensions.\n  if (CS.getKind() == ConversionSpecifier::FreeBSDbArg || CS.getKind() == ConversionSpecifier::FreeBSDDArg) {\n    // ...\n    if (AT2.isValid() && !AT2.matchesType(S.Context, Ex->getType()))\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT2.getRepresentativeTypeName(S.Context) << Ex->getType() << false << Ex->getSourceRange(), Ex->getBeginLoc(), /*IsStringLocation*/ false, getSpecifierRange(startSpecifier, specifierLen));"},{r,11264,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n    // ...\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n      // ...\n      case ArgType::NoMatch:\n        Diag = diag::warn_format_conversion_argument_type_mismatch;"},{r,11340,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n    // ...\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n    // ...\n    } else {\n      // ...\n      if (ShouldNotPrintDirectly && !IsScopedEnum) {\n      // ...\n      } else {\n        // ...\n        EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT.getRepresentativeTypeName(S.Context) << ExprTy << IsEnum << E->getSourceRange(), E->getBeginLoc(), /*IsStringLocation*/ false, SpecRange, Hints);"},{r,11369,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n  // ...\n  } else {\n    // ...\n    case Sema::VAK_Valid:\n    case Sema::VAK_ValidInCXX11: {\n      // ...\n      case ArgType::NoMatch:\n        Diag = diag::warn_format_conversion_argument_type_mismatch;"},{r,11420,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n  // ...\n  } else {\n    // ...\n    if (EmitTypeMismatch) {\n      // ...\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT.getRepresentativeTypeName(S.Context) << ExprTy << false << E->getSourceRange(), E->getBeginLoc(), false, CSR);"},{r,11582,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  unsigned Diag = Pedantic ? diag::warn_format_conversion_argument_type_mismatch_pedantic : diag::warn_format_conversion_argument_type_mismatch;"}},
[f]={"bc53ed1ee624",1401509534,"Format strings: check against an enum\'s underlying type.","Format strings: check against an enum\'s underlying type.\n\nThis allows us to be more careful when dealing with enums whose fixed\nunderlying type requires special handling in a format string, like\nNSInteger.\n\nA refinement of r163266 from a year and a half ago, which added the\nspecial handling for NSInteger and friends in the first place.\n\n<rdar://problem/16616623>\n\nllvm-svn: 209966"},
[k]={
[h]={{t,10803,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // ...\n  // FreeBSD kernel extensions.\n  if (CS.getKind() == ConversionSpecifier::FreeBSDbArg || CS.getKind() == ConversionSpecifier::FreeBSDDArg) {\n    // ...\n    if (AT.isValid() && !AT.matchesType(S.Context, Ex->getType()))\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT.getRepresentativeTypeName(S.Context) << Ex->getType() << false << Ex->getSourceRange(), Ex->getBeginLoc(), /*IsStringLocation*/ false, getSpecifierRange(startSpecifier, specifierLen));"},{t,10814,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // ...\n  // FreeBSD kernel extensions.\n  if (CS.getKind() == ConversionSpecifier::FreeBSDbArg || CS.getKind() == ConversionSpecifier::FreeBSDDArg) {\n    // ...\n    if (AT2.isValid() && !AT2.matchesType(S.Context, Ex->getType()))\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT2.getRepresentativeTypeName(S.Context) << Ex->getType() << false << Ex->getSourceRange(), Ex->getBeginLoc(), /*IsStringLocation*/ false, getSpecifierRange(startSpecifier, specifierLen));"},{t,11264,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n    // ...\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n      // ...\n      case ArgType::NoMatch:\n        Diag = diag::warn_format_conversion_argument_type_mismatch;"},{t,11340,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n    // ...\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n    // ...\n    } else {\n      // ...\n      if (ShouldNotPrintDirectly && !IsScopedEnum) {\n      // ...\n      } else {\n        // ...\n        EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT.getRepresentativeTypeName(S.Context) << ExprTy << IsEnum << E->getSourceRange(), E->getBeginLoc(), /*IsStringLocation*/ false, SpecRange, Hints);"},{t,11369,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n  // ...\n  } else {\n    // ...\n    case Sema::VAK_Valid:\n    case Sema::VAK_ValidInCXX11: {\n      // ...\n      case ArgType::NoMatch:\n        Diag = diag::warn_format_conversion_argument_type_mismatch;"},{t,11420,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n  // ...\n  } else {\n    // ...\n    if (EmitTypeMismatch) {\n      // ...\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_conversion_argument_type_mismatch) << AT.getRepresentativeTypeName(S.Context) << ExprTy << false << E->getSourceRange(), E->getBeginLoc(), false, CSR);"},{t,11582,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  unsigned Diag = Pedantic ? diag::warn_format_conversion_argument_type_mismatch_pedantic : diag::warn_format_conversion_argument_type_mismatch;"}},
[l]={
["clang/test/Sema/no-format-y2k-turnsoff-format.c"]={"clang/test/Sema/no-format-y2k-turnsoff-format.c:7:19: warning: format specifies type \'char *\' but the argument has type \'unsigned int\' [-Wformat]"}
["clang/test/Sema/no-format-y2k-turnsoff-format.c"]={"clang/test/Sema/no-format-y2k-turnsoff-format.c:7:19: warning: format specifies type \'char *\' but the argument has type \'unsigned int\' [-Wformat]"}
}
}
},
},
["warn_format_conversion_argument_type_mismatch_confusion"]={
["warn_format_conversion_argument_type_mismatch_confusion"]={
[j]={"format-type-confusion"},
[k]={"format-type-confusion"},
[i]="format-type-confusion",
[j]="format-type-confusion",
[c]={{nil,z,"format specifies type %0 but the argument has %select{type|underlying type}2 %1"}},
[c]={{nil,q,"warn_format_conversion_argument_type_mismatch_confusion"}},
[d]=g,
[d]={{nil,q,"format specifies type %0 but the argument has %select{type|underlying type}2 %1"}},
[e]="format specifies type (.*?) but the argument has (?:type|underlying type) (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wformat\\-type\\-confusion[^\\]]*\\]",
[g]="format specifies type (.*?) but the argument has (?:type|underlying type) (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-type\\-confusion[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,m}},
[h]={{r,11261,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n    // ...\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n      // ...\n      case ArgType::NoMatchTypeConfusion:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_confusion;"},{r,11366,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n  // ...\n  } else {\n    // ...\n    case Sema::VAK_Valid:\n    case Sema::VAK_ValidInCXX11: {\n      // ...\n      case ArgType::NoMatchTypeConfusion:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_confusion;"}}
[f]={xb,1567434909,yb,Cb},
[h]={{t,11261,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n    // ...\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n      // ...\n      case ArgType::NoMatchTypeConfusion:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_confusion;"},{t,11366,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n  // ...\n  } else {\n    // ...\n    case Sema::VAK_Valid:\n    case Sema::VAK_ValidInCXX11: {\n      // ...\n      case ArgType::NoMatchTypeConfusion:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_confusion;"}}
},
},
["warn_format_conversion_argument_type_mismatch_pedantic"]={
["warn_format_conversion_argument_type_mismatch_pedantic"]={
[j]={"format-pedantic",id},
[k]={"format-pedantic",hd},
[i]="format-pedantic",
[j]="format-pedantic",
[c]="format specifies type %0 but the argument has %select{type|underlying type}2 %1",
[c]="warn_format_conversion_argument_type_mismatch_pedantic",
[d]=g,
[d]="format specifies type %0 but the argument has %select{type|underlying type}2 %1",
[e]="format specifies type (.*?) but the argument has (?:type|underlying type) (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wformat\\-pedantic[^\\]]*\\]",
[g]="format specifies type (.*?) but the argument has (?:type|underlying type) (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-pedantic[^\\]]*\\]",
[a]={"b480296e6cb4",1425438730,"Add a format warning for \"%p\" with non-void* args","Add a format warning for \"%p\" with non-void* args\n\nGCC -pedantic produces a format warning when the \"%p\" specifier is used with\narguments that are not void*. It\'s useful for portability to be able to\ncatch such warnings with clang as well. The warning is off by default in\nboth gcc and with this patch. This patch enables it either when extensions\nare disabled with -pedantic, or with the specific flag -Wformat-pedantic.\n\nThe C99 and C11 specs do appear to require arguments corresponding to \'p\'\nspecifiers to be void*: \"If any argument is not the correct type for the\ncorresponding conversion specification, the behavior is undefined.\"\n[7.19.6.1 p9], and of the \'p\' format specifier \"The argument shall be a\npointer to void.\" [7.19.6.1 p8]\n\nBoth printf and scanf format checking are covered.\n\nllvm-svn: 231211"},
[b]=m,
[h]={{r,11258,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n    // ...\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n      // ...\n      case ArgType::NoMatchPedantic:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_pedantic;"},{r,11363,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n  // ...\n  } else {\n    // ...\n    case Sema::VAK_Valid:\n    case Sema::VAK_ValidInCXX11: {\n      // ...\n      case ArgType::NoMatchPedantic:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_pedantic;"},{r,11581,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  unsigned Diag = Pedantic ? diag::warn_format_conversion_argument_type_mismatch_pedantic : diag::warn_format_conversion_argument_type_mismatch;"}}
[f]={"b480296e6cb4",1425438730,"Add a format warning for \"%p\" with non-void* args","Add a format warning for \"%p\" with non-void* args\n\nGCC -pedantic produces a format warning when the \"%p\" specifier is used with\narguments that are not void*. It\'s useful for portability to be able to\ncatch such warnings with clang as well. The warning is off by default in\nboth gcc and with this patch. This patch enables it either when extensions\nare disabled with -pedantic, or with the specific flag -Wformat-pedantic.\n\nThe C99 and C11 specs do appear to require arguments corresponding to \'p\'\nspecifiers to be void*: \"If any argument is not the correct type for the\ncorresponding conversion specification, the behavior is undefined.\"\n[7.19.6.1 p9], and of the \'p\' format specifier \"The argument shall be a\npointer to void.\" [7.19.6.1 p8]\n\nBoth printf and scanf format checking are covered.\n\nllvm-svn: 231211"},
[h]={{t,11258,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n    // ...\n    if (IntendedTy == ExprTy && !ShouldNotPrintDirectly && !IsScopedEnum) {\n      // ...\n      case ArgType::NoMatchPedantic:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_pedantic;"},{t,11363,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n  // ...\n  } else {\n    // ...\n    case Sema::VAK_Valid:\n    case Sema::VAK_ValidInCXX11: {\n      // ...\n      case ArgType::NoMatchPedantic:\n        Diag = diag::warn_format_conversion_argument_type_mismatch_pedantic;"},{t,11581,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  unsigned Diag = Pedantic ? diag::warn_format_conversion_argument_type_mismatch_pedantic : diag::warn_format_conversion_argument_type_mismatch;"}}
},
},
["warn_format_invalid_annotation"]={
["warn_format_invalid_annotation"]={
[j]={B,H,nb,N},
[k]={K,O,rb,V},
[i]=nb,
[j]=rb,
[c]="using \'%0\' format specifier annotation outside of os_log()/os_trace()",
[c]="warn_format_invalid_annotation",
[d]=g,
[d]="using \'%0\' format specifier annotation outside of os_log()/os_trace()",
[e]="using \'(.*?)\' format specifier annotation outside of os_log\\(\\)\\/os_trace\\(\\)",
[e]=i,
[f]=vc,
[g]="using \'(.*?)\' format specifier annotation outside of os_log\\(\\)\\/os_trace\\(\\)",
[b]=ac,
[a]=yc,
[a]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]","Add support for __builtin_os_log_format[_buffer_size]\n\nThese new builtins support a mechanism for logging OS events, using a\nprintf-like format string to specify the layout of data in a buffer.\nThe _buffer_size version of the builtin can be used to determine the size\nof the buffer to allocate to hold the data, and then __builtin_os_log_format\ncan write data into that buffer. This implements format checking to report\nmismatches between the format string and the data arguments. Most of this\ncode was written by Chris Willmore.\n\nDifferential Revision: https://reviews.llvm.org/D25888\n\nllvm-svn: 284990"},
[b]=dc,
[h]={{r,10858,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // ...\n  // Check for use of public/private annotation outside of os_log().\n  if (FSType != Sema::FST_OSLog) {\n    if (FS.isPublic().isSet()) {\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_annotation) << \"public\", getLocationOfByte(FS.isPublic().getPosition()),"},{r,10865,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // ...\n  // Check for use of public/private annotation outside of os_log().\n  if (FSType != Sema::FST_OSLog) {\n    // ...\n    if (FS.isPrivate().isSet()) {\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_annotation) << \"private\", getLocationOfByte(FS.isPrivate().getPosition()),"}},
[f]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]","Add support for __builtin_os_log_format[_buffer_size]\n\nThese new builtins support a mechanism for logging OS events, using a\nprintf-like format string to specify the layout of data in a buffer.\nThe _buffer_size version of the builtin can be used to determine the size\nof the buffer to allocate to hold the data, and then __builtin_os_log_format\ncan write data into that buffer. This implements format checking to report\nmismatches between the format string and the data arguments. Most of this\ncode was written by Chris Willmore.\n\nDifferential Revision: https://reviews.llvm.org/D25888\n\nllvm-svn: 284990"},
[k]={
[h]={{t,10858,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // ...\n  // Check for use of public/private annotation outside of os_log().\n  if (FSType != Sema::FST_OSLog) {\n    if (FS.isPublic().isSet()) {\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_annotation) << \"public\", getLocationOfByte(FS.isPublic().getPosition()),"},{t,10865,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // ...\n  // Check for use of public/private annotation outside of os_log().\n  if (FSType != Sema::FST_OSLog) {\n    // ...\n    if (FS.isPrivate().isSet()) {\n      EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_annotation) << \"private\", getLocationOfByte(FS.isPrivate().getPosition()),"}},
[l]={
["clang/test/SemaObjC/format-strings-oslog.m"]={"clang/test/SemaObjC/format-strings-oslog.m:25:13: warning: using \'private\' format specifier annotation outside of os_log()/os_trace() [-Wformat]"}
["clang/test/SemaObjC/format-strings-oslog.m"]={"clang/test/SemaObjC/format-strings-oslog.m:25:13: warning: using \'private\' format specifier annotation outside of os_log()/os_trace() [-Wformat]"}
}
}
},
},
["warn_format_invalid_conversion"]={
["warn_format_invalid_conversion"]={
[j]={B,H,nb,"format-invalid-specifier",N},
[k]={K,O,rb,"format-invalid-specifier",V},
[i]="format-invalid-specifier",
[j]="format-invalid-specifier",
[c]="invalid conversion specifier \'%0\'",
[c]="warn_format_invalid_conversion",
[d]=g,
[d]="invalid conversion specifier \'%0\'",
[e]="invalid conversion specifier \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wformat\\-invalid\\-specifier[^\\]]*\\]",
[g]="invalid conversion specifier \'(.*?)\'",
[b]=ac,
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-invalid\\-specifier[^\\]]*\\]",
[a]={"ce81542d6107",1279574757,"Hook up \'invalid conversion\' warning for scanf format strings.","Hook up \'invalid conversion\' warning for scanf format strings.\n\nllvm-svn: 108750"},
[b]=dc,
[h]={{r,10347,"bool CheckFormatHandler::HandleInvalidConversionSpecifier(unsigned argIndex, SourceLocation Loc, const char *startSpec, unsigned specifierLen, const char *csStart, unsigned csLen) {\n  // ...\n  EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_conversion) << Specifier, Loc,"}},
[f]={"ce81542d6107",1279574757,"Hook up \'invalid conversion\' warning for scanf format strings.","Hook up \'invalid conversion\' warning for scanf format strings.\n\nllvm-svn: 108750"},
[k]={
[h]={{t,10347,"bool CheckFormatHandler::HandleInvalidConversionSpecifier(unsigned argIndex, SourceLocation Loc, const char *startSpec, unsigned specifierLen, const char *csStart, unsigned csLen) {\n  // ...\n  EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_conversion) << Specifier, Loc,"}},
[l]={
["clang/test/SemaObjC/format-strings-objc.m"]={"clang/test/SemaObjC/format-strings-objc.m:59:15: warning: invalid conversion specifier \'v\' [-Wformat-invalid-specifier]","clang/test/SemaObjC/format-strings-objc.m:118:31: warning: invalid conversion specifier \'@\' [-Wformat-invalid-specifier]","clang/test/SemaObjC/format-strings-objc.m:263:12: warning: invalid conversion specifier \'!\' [-Wformat-invalid-specifier]"}
["clang/test/SemaObjC/format-strings-objc.m"]={"clang/test/SemaObjC/format-strings-objc.m:59:15: warning: invalid conversion specifier \'v\' [-Wformat-invalid-specifier]","clang/test/SemaObjC/format-strings-objc.m:118:31: warning: invalid conversion specifier \'@\' [-Wformat-invalid-specifier]","clang/test/SemaObjC/format-strings-objc.m:263:12: warning: invalid conversion specifier \'!\' [-Wformat-invalid-specifier]"}
}
}
},
},
["warn_format_invalid_positional_specifier"]={
["warn_format_invalid_positional_specifier"]={
[j]={B,H,nb,N},
[k]={K,O,rb,V},
[i]=nb,
[j]=rb,
[c]="invalid position specified for %select{field width|field precision}0",
[c]="warn_format_invalid_positional_specifier",
[d]=g,
[d]="invalid position specified for %select{field width|field precision}0",
[e]="invalid position specified for (?:field width|field precision)",
[e]=i,
[f]=vc,
[g]="invalid position specified for (?:field width|field precision)",
[b]=ac,
[a]=yc,
[a]={dd,1279246282,bd,ad},
[b]=dc,
[h]={{r,10226,"void CheckFormatHandler::HandleInvalidPosition(const char *startSpecifier, unsigned specifierLen, analyze_format_string::PositionContext p) { EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_positional_specifier) << (unsigned)p, getLocationOfByte(startSpecifier), /*IsStringLocation*/ true, getSpecifierRange(startSpecifier, specifierLen)); }"}}
[f]={Qc,1279246282,Vc,cd},
[h]={{t,10226,"void CheckFormatHandler::HandleInvalidPosition(const char *startSpecifier, unsigned specifierLen, analyze_format_string::PositionContext p) { EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_positional_specifier) << (unsigned)p, getLocationOfByte(startSpecifier), /*IsStringLocation*/ true, getSpecifierRange(startSpecifier, specifierLen)); }"}}
},
},
["warn_format_mix_positional_nonpositional_args"]={
["warn_format_mix_positional_nonpositional_args"]={
[j]={B,H,nb,N},
[k]={K,O,rb,V},
[i]=nb,
[j]=rb,
[c]="cannot mix positional and non-positional arguments in format string",
[c]="warn_format_mix_positional_nonpositional_args",
[d]=g,
[d]="cannot mix positional and non-positional arguments in format string",
[e]="cannot mix positional and non\\-positional arguments in format string",
[e]=i,
[f]=vc,
[g]="cannot mix positional and non\\-positional arguments in format string",
[b]=ac,
[a]=yc,
[a]={dd,1279246282,bd,ad},
[b]=dc,
[h]={{r,10358,"void CheckFormatHandler::HandlePositionalNonpositionalArgs(SourceLocation Loc, const char *startSpec, unsigned specifierLen) { EmitFormatDiagnostic(S.PDiag(diag::warn_format_mix_positional_nonpositional_args), Loc, /*isStringLoc*/ true, getSpecifierRange(startSpec, specifierLen)); }"}},
[f]={Qc,1279246282,Vc,cd},
[k]={
[h]={{t,10358,"void CheckFormatHandler::HandlePositionalNonpositionalArgs(SourceLocation Loc, const char *startSpec, unsigned specifierLen) { EmitFormatDiagnostic(S.PDiag(diag::warn_format_mix_positional_nonpositional_args), Loc, /*isStringLoc*/ true, getSpecifierRange(startSpec, specifierLen)); }"}},
[l]={
["clang/test/Sema/format-strings.c"]={"clang/test/Sema/format-strings.c:593:10: warning: cannot mix positional and non-positional arguments in format string [-Wformat]","clang/test/Sema/format-strings.c:594:17: warning: cannot mix positional and non-positional arguments in format string [-Wformat]"}
["clang/test/Sema/format-strings.c"]={"clang/test/Sema/format-strings.c:593:10: warning: cannot mix positional and non-positional arguments in format string [-Wformat]","clang/test/Sema/format-strings.c:594:17: warning: cannot mix positional and non-positional arguments in format string [-Wformat]"}
}
}
},
},
["warn_format_non_standard"]={
["warn_format_non_standard"]={
[j]={xd},
[k]={"format-non-iso"},
[i]=xd,
[j]="format-non-iso",
[c]="\'%0\' %select{length modifier|conversion specifier}1 is not supported by ISO C",
[c]="warn_format_non_standard",
[d]=g,
[d]="\'%0\' %select{length modifier|conversion specifier}1 is not supported by ISO C",
[e]="\'(.*?)\' (?:length modifier|conversion specifier) is not supported by ISO C",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wformat\\-non\\-iso[^\\]]*\\]",
[g]="\'(.*?)\' (?:length modifier|conversion specifier) is not supported by ISO C",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-non\\-iso[^\\]]*\\]",
[a]={"c9dd94685283",1329905821,"Warn about non-standard format strings (pr12017)","Warn about non-standard format strings (pr12017)\n\nThis adds the -Wformat-non-standard flag (off by default,\nenabled by -pedantic), which warns about non-standard\nthings in format strings (such as the \'q\' length modifier,\nthe \'S\' conversion specifier, etc.)\n\nllvm-svn: 151154"},
[b]=m,
[h]={{r,10168,"void CheckFormatHandler::HandleNonStandardLengthModifier(const analyze_format_string::FormatSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  if (FixedLM) {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << LM.toString() << 0, getLocationOfByte(LM.getStart()),"},{r,10179,"void CheckFormatHandler::HandleNonStandardLengthModifier(const analyze_format_string::FormatSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  if (FixedLM) {\n  // ...\n  } else {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << LM.toString() << 0, getLocationOfByte(LM.getStart()),"},{r,10195,"void CheckFormatHandler::HandleNonStandardConversionSpecifier(const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  if (FixedCS) {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << CS.toString() << /*conversion specifier*/ 1, getLocationOfByte(CS.getStart()),"},{r,10206,"void CheckFormatHandler::HandleNonStandardConversionSpecifier(const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  if (FixedCS) {\n  // ...\n  } else {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << CS.toString() << /*conversion specifier*/ 1, getLocationOfByte(CS.getStart()),"}},
[f]={"c9dd94685283",1329905821,"Warn about non-standard format strings (pr12017)","Warn about non-standard format strings (pr12017)\n\nThis adds the -Wformat-non-standard flag (off by default,\nenabled by -pedantic), which warns about non-standard\nthings in format strings (such as the \'q\' length modifier,\nthe \'S\' conversion specifier, etc.)\n\nllvm-svn: 151154"},
[k]={
[h]={{t,10168,"void CheckFormatHandler::HandleNonStandardLengthModifier(const analyze_format_string::FormatSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  if (FixedLM) {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << LM.toString() << 0, getLocationOfByte(LM.getStart()),"},{t,10179,"void CheckFormatHandler::HandleNonStandardLengthModifier(const analyze_format_string::FormatSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  if (FixedLM) {\n  // ...\n  } else {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << LM.toString() << 0, getLocationOfByte(LM.getStart()),"},{t,10195,"void CheckFormatHandler::HandleNonStandardConversionSpecifier(const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  if (FixedCS) {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << CS.toString() << /*conversion specifier*/ 1, getLocationOfByte(CS.getStart()),"},{t,10206,"void CheckFormatHandler::HandleNonStandardConversionSpecifier(const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  if (FixedCS) {\n  // ...\n  } else {\n    EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard) << CS.toString() << /*conversion specifier*/ 1, getLocationOfByte(CS.getStart()),"}},
[l]={
["clang/test/Sema/format-strings-c90.c"]={"clang/test/Sema/format-strings-c90.c:8:11: warning: \'a\' length modifier is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-c90.c:9:11: warning: \'a\' length modifier is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-c90.c:23:11: warning: \'a\' length modifier is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-c90.c:25:11: warning: \'a\' length modifier is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-c90.c:25:12: warning: \'S\' conversion specifier is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-c90.c:28:11: warning: \'a\' length modifier is not supported by ISO C [-Wformat-non-iso]"}
["clang/test/Sema/format-strings-c90.c"]={"clang/test/Sema/format-strings-c90.c:8:11: warning: \'a\' length modifier is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-c90.c:9:11: warning: \'a\' length modifier is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-c90.c:23:11: warning: \'a\' length modifier is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-c90.c:25:11: warning: \'a\' length modifier is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-c90.c:25:12: warning: \'S\' conversion specifier is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-c90.c:28:11: warning: \'a\' length modifier is not supported by ISO C [-Wformat-non-iso]"}
}
}
},
},
["warn_format_non_standard_conversion_spec"]={
["warn_format_non_standard_conversion_spec"]={
[j]={xd},
[k]={"format-non-iso"},
[i]=xd,
[j]="format-non-iso",
[c]="using length modifier \'%0\' with conversion specifier \'%1\' is not supported by ISO C",
[c]="warn_format_non_standard_conversion_spec",
[d]=g,
[d]="using length modifier \'%0\' with conversion specifier \'%1\' is not supported by ISO C",
[e]="using length modifier \'(.*?)\' with conversion specifier \'(.*?)\' is not supported by ISO C",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wformat\\-non\\-iso[^\\]]*\\]",
[g]="using length modifier \'(.*?)\' with conversion specifier \'(.*?)\' is not supported by ISO C",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-non\\-iso[^\\]]*\\]",
[a]={"c9dd94685283",1329905821,"Warn about non-standard format strings (pr12017)","Warn about non-standard format strings (pr12017)\n\nThis adds the -Wformat-non-standard flag (off by default,\nenabled by -pedantic), which warns about non-standard\nthings in format strings (such as the \'q\' length modifier,\nthe \'S\' conversion specifier, etc.)\n\nllvm-svn: 151154"},
[b]=m,
[h]={{r,10934,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // ...\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n  // ...\n  else if (!FS.hasStandardLengthModifier())\n  // ...\n  else if (!FS.hasStandardLengthConversionCombination())\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_non_standard_conversion_spec);"},{r,11547,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n  // ...\n  else if (!FS.hasStandardLengthModifier())\n  // ...\n  else if (!FS.hasStandardLengthConversionCombination())\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_non_standard_conversion_spec);"}},
[f]={"c9dd94685283",1329905821,"Warn about non-standard format strings (pr12017)","Warn about non-standard format strings (pr12017)\n\nThis adds the -Wformat-non-standard flag (off by default,\nenabled by -pedantic), which warns about non-standard\nthings in format strings (such as the \'q\' length modifier,\nthe \'S\' conversion specifier, etc.)\n\nllvm-svn: 151154"},
[k]={
[h]={{t,10934,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // ...\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n  // ...\n  else if (!FS.hasStandardLengthModifier())\n  // ...\n  else if (!FS.hasStandardLengthConversionCombination())\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_non_standard_conversion_spec);"},{t,11547,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n  // ...\n  else if (!FS.hasStandardLengthModifier())\n  // ...\n  else if (!FS.hasStandardLengthConversionCombination())\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_non_standard_conversion_spec);"}},
[l]={
["clang/test/Sema/format-strings-non-iso.c"]={"clang/test/Sema/format-strings-non-iso.c:21:12: warning: using length modifier \'L\' with conversion specifier \'i\' is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-non-iso.c:22:12: warning: using length modifier \'L\' with conversion specifier \'o\' is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-non-iso.c:23:12: warning: using length modifier \'L\' with conversion specifier \'u\' is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-non-iso.c:24:12: warning: using length modifier \'L\' with conversion specifier \'x\' is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-non-iso.c:25:12: warning: using length modifier \'L\' with conversion specifier \'X\' is not supported by ISO C [-Wformat-non-iso]"}
["clang/test/Sema/format-strings-non-iso.c"]={"clang/test/Sema/format-strings-non-iso.c:21:12: warning: using length modifier \'L\' with conversion specifier \'i\' is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-non-iso.c:22:12: warning: using length modifier \'L\' with conversion specifier \'o\' is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-non-iso.c:23:12: warning: using length modifier \'L\' with conversion specifier \'u\' is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-non-iso.c:24:12: warning: using length modifier \'L\' with conversion specifier \'x\' is not supported by ISO C [-Wformat-non-iso]","clang/test/Sema/format-strings-non-iso.c:25:12: warning: using length modifier \'L\' with conversion specifier \'X\' is not supported by ISO C [-Wformat-non-iso]"}
}
}
},
},
["warn_format_non_standard_positional_arg"]={
["warn_format_non_standard_positional_arg"]={
[j]={xd},
[k]={"format-non-iso"},
[i]=xd,
[j]="format-non-iso",
[c]="positional arguments are not supported by ISO C",
[c]="warn_format_non_standard_positional_arg",
[d]=g,
[d]="positional arguments are not supported by ISO C",
[e]="positional arguments are not supported by ISO C",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wformat\\-non\\-iso[^\\]]*\\]",
[g]="positional arguments are not supported by ISO C",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-non\\-iso[^\\]]*\\]",
[a]={"aa8c61cf94b7",1331287854,"-Wformat-non-iso: warn about positional arguments (pr12017)","-Wformat-non-iso: warn about positional arguments (pr12017)\n\nThis renames the -Wformat-non-standard flag to -Wformat-non-iso,\nrewords the current warnings a bit (pointing out that a format string\nis not supported by ISO C rather than being \"non standard\"),\nand adds a warning about positional arguments.\n\nllvm-svn: 152403"},
[b]=m,
[h]={{r,10216,"void CheckFormatHandler::HandlePosition(const char *startPos, unsigned posLen) {\n  EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard_positional_arg), getLocationOfByte(startPos),"}},
[f]={"aa8c61cf94b7",1331287854,"-Wformat-non-iso: warn about positional arguments (pr12017)","-Wformat-non-iso: warn about positional arguments (pr12017)\n\nThis renames the -Wformat-non-standard flag to -Wformat-non-iso,\nrewords the current warnings a bit (pointing out that a format string\nis not supported by ISO C rather than being \"non standard\"),\nand adds a warning about positional arguments.\n\nllvm-svn: 152403"},
[k]={
[h]={{t,10216,"void CheckFormatHandler::HandlePosition(const char *startPos, unsigned posLen) {\n  EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard_positional_arg), getLocationOfByte(startPos),"}},
[l]={
["clang/test/Sema/format-strings-non-iso.c"]={"clang/test/Sema/format-strings-non-iso.c:28:11: warning: positional arguments are not supported by ISO C [-Wformat-non-iso]"}
["clang/test/Sema/format-strings-non-iso.c"]={"clang/test/Sema/format-strings-non-iso.c:28:11: warning: positional arguments are not supported by ISO C [-Wformat-non-iso]"}
}
}
},
},
["warn_format_nonliteral"]={
["warn_format_nonliteral"]={
[j]={"format-nonliteral","format=2"},
[k]={"format-nonliteral","format=2"},
[i]="format-nonliteral",
[j]="format-nonliteral",
[c]="format string is not a string literal",
[c]="warn_format_nonliteral",
[d]=g,
[d]="format string is not a string literal",
[e]="format string is not a string literal",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wformat\\-nonliteral[^\\]]*\\]",
[g]="format string is not a string literal",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-nonliteral[^\\]]*\\]",
[a]={dd,1279246282,bd,ad},
[b]=m,
[h]={{r,9982,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // ...\n  // If there are no arguments specified, warn with -Wformat-security, otherwise\n  // warn only with -Wformat-nonliteral.\n  if (Args.size() == firstDataArg) {\n  // ...\n  } else {\n    Diag(FormatLoc, diag::warn_format_nonliteral) << OrigFormatExpr->getSourceRange();"}},
[f]={Qc,1279246282,Vc,cd},
[k]={
[h]={{t,9982,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // ...\n  // If there are no arguments specified, warn with -Wformat-security, otherwise\n  // warn only with -Wformat-nonliteral.\n  if (Args.size() == firstDataArg) {\n  // ...\n  } else {\n    Diag(FormatLoc, diag::warn_format_nonliteral) << OrigFormatExpr->getSourceRange();"}},
[l]={
["clang/test/SemaObjC/format-strings-objc.m"]={"clang/test/SemaObjC/format-strings-objc.m:158:22: warning: format string is not a string literal [-Wformat-nonliteral]","clang/test/SemaObjC/format-strings-objc.m:216:10: warning: format string is not a string literal [-Wformat-nonliteral]"}
["clang/test/SemaObjC/format-strings-objc.m"]={"clang/test/SemaObjC/format-strings-objc.m:158:22: warning: format string is not a string literal [-Wformat-nonliteral]","clang/test/SemaObjC/format-strings-objc.m:216:10: warning: format string is not a string literal [-Wformat-nonliteral]"}
}
}
},
},
["warn_format_nonliteral_noargs"]={
["warn_format_nonliteral_noargs"]={
[j]={B,H,nb,"format-security","format=2",N},
[k]={K,O,rb,"format-security","format=2",V},
[i]="format-security",
[j]="format-security",
[c]="format string is not a string literal (potentially insecure)",
[c]="warn_format_nonliteral_noargs",
[d]=g,
[d]="format string is not a string literal (potentially insecure)",
[e]="format string is not a string literal \\(potentially insecure\\)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wformat\\-security[^\\]]*\\]",
[g]="format string is not a string literal \\(potentially insecure\\)",
[b]=ac,
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-security[^\\]]*\\]",
[a]={dd,1279246282,bd,ad},
[b]=dc,
[h]={{r,9965,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // ...\n  // If there are no arguments specified, warn with -Wformat-security, otherwise\n  // warn only with -Wformat-nonliteral.\n  if (Args.size() == firstDataArg) {\n    Diag(FormatLoc, diag::warn_format_nonliteral_noargs) << OrigFormatExpr->getSourceRange();"}},
[f]={Qc,1279246282,Vc,cd},
[k]={
[h]={{t,9965,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // ...\n  // If there are no arguments specified, warn with -Wformat-security, otherwise\n  // warn only with -Wformat-nonliteral.\n  if (Args.size() == firstDataArg) {\n    Diag(FormatLoc, diag::warn_format_nonliteral_noargs) << OrigFormatExpr->getSourceRange();"}},
[l]={
["clang/test/SemaCXX/format-strings-0x.cpp"]={"clang/test/SemaCXX/format-strings-0x.cpp:17:10: warning: format string is not a string literal (potentially insecure) [-Wformat-security]"}
["clang/test/SemaCXX/format-strings-0x.cpp"]={"clang/test/SemaCXX/format-strings-0x.cpp:17:10: warning: format string is not a string literal (potentially insecure) [-Wformat-security]"}
}
}
},
},
["warn_format_nonsensical_length"]={
["warn_format_nonsensical_length"]={
[j]={B,H,nb,N},
[k]={K,O,rb,V},
[i]=nb,
[j]=rb,
[c]="length modifier \'%0\' results in undefined behavior or no effect with \'%1\' conversion specifier",
[c]="warn_format_nonsensical_length",
[d]=g,
[d]="length modifier \'%0\' results in undefined behavior or no effect with \'%1\' conversion specifier",
[e]="length modifier \'(.*?)\' results in undefined behavior or no effect with \'(.*?)\' conversion specifier",
[e]=i,
[f]=vc,
[g]="length modifier \'(.*?)\' results in undefined behavior or no effect with \'(.*?)\' conversion specifier",
[b]=ac,
[a]=yc,
[a]={"b65a9d5a1a0b",1279656223,"Rename diagnostic so that it can be reused with scanf checking.  No functionality change.","Rename diagnostic so that it can be reused with scanf checking.  No functionality change.\n\nllvm-svn: 108896"},
[b]=dc,
[h]={{r,10146,"void CheckFormatHandler::HandleInvalidLengthModifier(const analyze_format_string::FormatSpecifier &FS, const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen, unsigned DiagID) {\n  // ...\n  if (FixedLM) {\n  // ...\n  } else {\n    // ...\n    if (DiagID == diag::warn_format_nonsensical_length)"},{r,10929,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // ...\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_nonsensical_length);"},{r,11542,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_nonsensical_length);"}},
[f]={"b65a9d5a1a0b",1279656223,"Rename diagnostic so that it can be reused with scanf checking.  No functionality change.","Rename diagnostic so that it can be reused with scanf checking.  No functionality change.\n\nllvm-svn: 108896"},
[k]={
[h]={{t,10146,"void CheckFormatHandler::HandleInvalidLengthModifier(const analyze_format_string::FormatSpecifier &FS, const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen, unsigned DiagID) {\n  // ...\n  if (FixedLM) {\n  // ...\n  } else {\n    // ...\n    if (DiagID == diag::warn_format_nonsensical_length)"},{t,10929,"bool CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target) {\n  // ...\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_nonsensical_length);"},{t,11542,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  // Check the length modifier is valid with the given conversion specifier.\n  if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo(), S.getLangOpts()))\n    HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen, diag::warn_format_nonsensical_length);"}},
[l]={
["clang/test/Sema/format-strings-ms.c"]={"clang/test/Sema/format-strings-ms.c:84:12: warning: length modifier \'hh\' results in undefined behavior or no effect with \'Z\' conversion specifier [-Wformat]"}
["clang/test/Sema/format-strings-ms.c"]={"clang/test/Sema/format-strings-ms.c:84:12: warning: length modifier \'hh\' results in undefined behavior or no effect with \'Z\' conversion specifier [-Wformat]"}
}
}
},
},
["warn_format_string_is_wide_literal"]={
["warn_format_string_is_wide_literal"]={
[j]={B,H,nb,N},
[k]={K,O,rb,V},
[i]=nb,
[j]=rb,
[c]="format string should not be a wide string",
[c]="warn_format_string_is_wide_literal",
[d]=g,
[d]="format string should not be a wide string",
[e]="format string should not be a wide string",
[e]=i,
[f]=vc,
[g]="format string should not be a wide string",
[b]=ac,
[a]=yc,
[a]={dd,1279246282,bd,ad},
[b]=dc,
[h]={{r,11621,"static void CheckFormatString(Sema &S, const FormatStringLiteral *FExpr, const Expr *OrigFormatExpr, ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, Sema::FormatStringType Type, bool inFunctionCall, Sema::VariadicCallType CallType, llvm::SmallBitVector &CheckedVarArgs, UncoveredArgHandler &UncoveredArg, bool IgnoreStringsWithoutSpecifiers) {\n  // CHECK: is the format string a wide literal?\n  if (!FExpr->isAscii() && !FExpr->isUTF8()) {\n    CheckFormatHandler::EmitFormatDiagnostic(S, inFunctionCall, Args[format_idx], S.PDiag(diag::warn_format_string_is_wide_literal), FExpr->getBeginLoc(),"}},
[f]={Qc,1279246282,Vc,cd},
[k]={
[h]={{t,11621,"static void CheckFormatString(Sema &S, const FormatStringLiteral *FExpr, const Expr *OrigFormatExpr, ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, Sema::FormatStringType Type, bool inFunctionCall, Sema::VariadicCallType CallType, llvm::SmallBitVector &CheckedVarArgs, UncoveredArgHandler &UncoveredArg, bool IgnoreStringsWithoutSpecifiers) {\n  // CHECK: is the format string a wide literal?\n  if (!FExpr->isAscii() && !FExpr->isUTF8()) {\n    CheckFormatHandler::EmitFormatDiagnostic(S, inFunctionCall, Args[format_idx], S.PDiag(diag::warn_format_string_is_wide_literal), FExpr->getBeginLoc(),"}},
[l]={
["clang/test/Sema/format-strings.c"]={"clang/test/Sema/format-strings.c:233:10: warning: format string should not be a wide string [-Wformat]","clang/test/Sema/format-strings.c:234:14: warning: format string should not be a wide string [-Wformat]"}
["clang/test/Sema/format-strings.c"]={"clang/test/Sema/format-strings.c:233:10: warning: format string should not be a wide string [-Wformat]","clang/test/Sema/format-strings.c:234:14: warning: format string should not be a wide string [-Wformat]"}
}
}
},
},
["warn_format_zero_positional_specifier"]={
["warn_format_zero_positional_specifier"]={
[j]={B,H,nb,N},
[k]={K,O,rb,V},
[i]=nb,
[j]=rb,
[c]="position arguments in format strings start counting at 1 (not 0)",
[c]="warn_format_zero_positional_specifier",
[d]=g,
[d]="position arguments in format strings start counting at 1 (not 0)",
[e]="position arguments in format strings start counting at 1 \\(not 0\\)",
[e]=i,
[f]=vc,
[g]="position arguments in format strings start counting at 1 \\(not 0\\)",
[b]=ac,
[a]=yc,
[a]={dd,1279246282,bd,ad},
[b]=dc,
[h]={{r,10233,"void CheckFormatHandler::HandleZeroPosition(const char *startPos, unsigned posLen) {\n  EmitFormatDiagnostic(S.PDiag(diag::warn_format_zero_positional_specifier), getLocationOfByte(startPos),"}},
[f]={Qc,1279246282,Vc,cd},
[k]={
[h]={{t,10233,"void CheckFormatHandler::HandleZeroPosition(const char *startPos, unsigned posLen) {\n  EmitFormatDiagnostic(S.PDiag(diag::warn_format_zero_positional_specifier), getLocationOfByte(startPos),"}},
[l]={
["clang/test/Sema/format-strings.c"]={"clang/test/Sema/format-strings.c:395:11: warning: position arguments in format strings start counting at 1 (not 0) [-Wformat]","clang/test/Sema/format-strings.c:396:14: warning: position arguments in format strings start counting at 1 (not 0) [-Wformat]","clang/test/Sema/format-strings.c:589:10: warning: position arguments in format strings start counting at 1 (not 0) [-Wformat]","clang/test/Sema/format-strings.c:590:11: warning: position arguments in format strings start counting at 1 (not 0) [-Wformat]"}
["clang/test/Sema/format-strings.c"]={"clang/test/Sema/format-strings.c:395:11: warning: position arguments in format strings start counting at 1 (not 0) [-Wformat]","clang/test/Sema/format-strings.c:396:14: warning: position arguments in format strings start counting at 1 (not 0) [-Wformat]","clang/test/Sema/format-strings.c:589:10: warning: position arguments in format strings start counting at 1 (not 0) [-Wformat]","clang/test/Sema/format-strings.c:590:11: warning: position arguments in format strings start counting at 1 (not 0) [-Wformat]"}
}
}
},
},
["warn_fortify_scanf_overflow"]={
["warn_fortify_scanf_overflow"]={
[j]={xc},
[k]={zc},
[i]=xc,
[j]=zc,
[c]={{nil,Q,"\'%0\' may overflow; destination buffer in argument %1 has size %2, but the corresponding specifier may require size %3"}},
[c]={{nil,w,"warn_fortify_scanf_overflow"}},
[d]=g,
[d]={{nil,w,"\'%0\' may overflow; destination buffer in argument %1 has size %2, but the corresponding specifier may require size %3"}},
[e]="\'(.*?)\' may overflow; destination buffer in argument (.*?) has size (.*?), but the corresponding specifier may require size (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]",
[g]="\'(.*?)\' may overflow; destination buffer in argument (.*?) has size (.*?), but the corresponding specifier may require size (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]",
[a]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
[b]={{nil,w,m}},
[h]={{r,1195,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  // ...\n  case Builtin::BIscanf:\n  case Builtin::BIfscanf:\n  case Builtin::BIsscanf: {\n    // ...\n    auto Diagnose = [&](unsigned ArgIndex, unsigned DestSize, unsigned SourceSize) {\n      DiagID = diag::warn_fortify_scanf_overflow;"}},
[f]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
[k]={
[h]={{t,1195,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  // ...\n  case Builtin::BIscanf:\n  case Builtin::BIfscanf:\n  case Builtin::BIsscanf: {\n    // ...\n    auto Diagnose = [&](unsigned ArgIndex, unsigned DestSize, unsigned SourceSize) {\n      DiagID = diag::warn_fortify_scanf_overflow;"}},
[l]={
["clang/test/Sema/warn-fortify-scanf.c"]={"clang/test/Sema/warn-fortify-scanf.c:12:39: warning: \'scanf\' may overflow; destination buffer in argument 4 has size 10, but the corresponding specifier may require size 11 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:13:39: warning: \'scanf\' may overflow; destination buffer in argument 4 has size 10, but the corresponding specifier may require size 12 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:15:25: warning: \'scanf\' may overflow; destination buffer in argument 2 has size 20, but the corresponding specifier may require size 21 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:16:25: warning: \'scanf\' may overflow; destination buffer in argument 2 has size 20, but the corresponding specifier may require size 22 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:20:29: warning: \'scanf\' may overflow; destination buffer in argument 2 has size 10, but the corresponding specifier may require size 11 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:22:23: warning: \'scanf\' may overflow; destination buffer in argument 2 has size 10, but the corresponding specifier may require size 11 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:25:45: warning: \'scanf\' may overflow; destination buffer in argument 4 has size 10, but the corresponding specifier may require size 11 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:26:45: warning: \'scanf\' may overflow; destination buffer in argument 4 has size 10, but the corresponding specifier may require size 12 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:28:31: warning: \'scanf\' may overflow; destination buffer in argument 2 has size 20, but the corresponding specifier may require size 21 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:29:31: warning: \'scanf\' may overflow; destination buffer in argument 2 has size 20, but the corresponding specifier may require size 22 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:34:39: warning: \'scanf\' may overflow; destination buffer in argument 4 has size 10, but the corresponding specifier may require size 11 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:37:25: warning: \'scanf\' may overflow; destination buffer in argument 2 has size 20, but the corresponding specifier may require size 21 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:48:49: warning: \'sscanf\' may overflow; destination buffer in argument 5 has size 10, but the corresponding specifier may require size 11 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:49:49: warning: \'sscanf\' may overflow; destination buffer in argument 5 has size 10, but the corresponding specifier may require size 12 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:51:35: warning: \'sscanf\' may overflow; destination buffer in argument 3 has size 20, but the corresponding specifier may require size 21 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:52:35: warning: \'sscanf\' may overflow; destination buffer in argument 3 has size 20, but the corresponding specifier may require size 22 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:61:43: warning: \'fscanf\' may overflow; destination buffer in argument 5 has size 10, but the corresponding specifier may require size 11 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:62:43: warning: \'fscanf\' may overflow; destination buffer in argument 5 has size 10, but the corresponding specifier may require size 12 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:64:29: warning: \'fscanf\' may overflow; destination buffer in argument 3 has size 20, but the corresponding specifier may require size 21 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:65:29: warning: \'fscanf\' may overflow; destination buffer in argument 3 has size 20, but the corresponding specifier may require size 22 [-Wfortify-source]"}
["clang/test/Sema/warn-fortify-scanf.c"]={"clang/test/Sema/warn-fortify-scanf.c:12:39: warning: \'scanf\' may overflow; destination buffer in argument 4 has size 10, but the corresponding specifier may require size 11 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:13:39: warning: \'scanf\' may overflow; destination buffer in argument 4 has size 10, but the corresponding specifier may require size 12 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:15:25: warning: \'scanf\' may overflow; destination buffer in argument 2 has size 20, but the corresponding specifier may require size 21 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:16:25: warning: \'scanf\' may overflow; destination buffer in argument 2 has size 20, but the corresponding specifier may require size 22 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:20:29: warning: \'scanf\' may overflow; destination buffer in argument 2 has size 10, but the corresponding specifier may require size 11 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:22:23: warning: \'scanf\' may overflow; destination buffer in argument 2 has size 10, but the corresponding specifier may require size 11 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:25:45: warning: \'scanf\' may overflow; destination buffer in argument 4 has size 10, but the corresponding specifier may require size 11 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:26:45: warning: \'scanf\' may overflow; destination buffer in argument 4 has size 10, but the corresponding specifier may require size 12 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:28:31: warning: \'scanf\' may overflow; destination buffer in argument 2 has size 20, but the corresponding specifier may require size 21 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:29:31: warning: \'scanf\' may overflow; destination buffer in argument 2 has size 20, but the corresponding specifier may require size 22 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:34:39: warning: \'scanf\' may overflow; destination buffer in argument 4 has size 10, but the corresponding specifier may require size 11 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:37:25: warning: \'scanf\' may overflow; destination buffer in argument 2 has size 20, but the corresponding specifier may require size 21 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:48:49: warning: \'sscanf\' may overflow; destination buffer in argument 5 has size 10, but the corresponding specifier may require size 11 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:49:49: warning: \'sscanf\' may overflow; destination buffer in argument 5 has size 10, but the corresponding specifier may require size 12 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:51:35: warning: \'sscanf\' may overflow; destination buffer in argument 3 has size 20, but the corresponding specifier may require size 21 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:52:35: warning: \'sscanf\' may overflow; destination buffer in argument 3 has size 20, but the corresponding specifier may require size 22 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:61:43: warning: \'fscanf\' may overflow; destination buffer in argument 5 has size 10, but the corresponding specifier may require size 11 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:62:43: warning: \'fscanf\' may overflow; destination buffer in argument 5 has size 10, but the corresponding specifier may require size 12 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:64:29: warning: \'fscanf\' may overflow; destination buffer in argument 3 has size 20, but the corresponding specifier may require size 21 [-Wfortify-source]","clang/test/Sema/warn-fortify-scanf.c:65:29: warning: \'fscanf\' may overflow; destination buffer in argument 3 has size 20, but the corresponding specifier may require size 22 [-Wfortify-source]"}
}
}
},
},
["warn_fortify_source_format_overflow"]={
["warn_fortify_source_format_overflow"]={
[j]={xc},
[k]={zc},
[i]=xc,
[j]=zc,
[c]={{nil,mb,"\'%0\' will always overflow; destination buffer has size %1, but format string expands to at least %2"}},
[c]={{nil,z,"warn_fortify_source_format_overflow"}},
[d]=g,
[d]={{nil,z,"\'%0\' will always overflow; destination buffer has size %1, but format string expands to at least %2"}},
[e]="\'(.*?)\' will always overflow; destination buffer has size (.*?), but format string expands to at least (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]",
[g]="\'(.*?)\' will always overflow; destination buffer has size (.*?), but format string expands to at least (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]",
[a]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","Improve static checks for sprintf and __builtin___sprintf_chk\n\nImplement a pessimistic evaluator of the minimal required size for a buffer\nbased on the format string, and couple that with the fortified version to emit a\nwarning when the buffer size is lower than the lower bound computed from the\nformat string.\n\nDifferential Revision: https://reviews.llvm.org/D71566"},
[b]={{nil,z,m}},
[h]={{r,1252,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  // ...\n  case Builtin::BIsprintf:\n  case Builtin::BI__builtin___sprintf_chk: {\n    // ...\n    if (auto *Format = dyn_cast<StringLiteral>(FormatExpr)) {\n      // ...\n      if (!analyze_format_string::ParsePrintfString(H, FormatBytes, FormatBytes + StrLen, getLangOpts(), Context.getTargetInfo(), false)) {\n        DiagID = diag::warn_fortify_source_format_overflow;"}},
[f]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","Improve static checks for sprintf and __builtin___sprintf_chk\n\nImplement a pessimistic evaluator of the minimal required size for a buffer\nbased on the format string, and couple that with the fortified version to emit a\nwarning when the buffer size is lower than the lower bound computed from the\nformat string.\n\nDifferential Revision: https://reviews.llvm.org/D71566"},
[k]={
[h]={{t,1252,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  // ...\n  case Builtin::BIsprintf:\n  case Builtin::BI__builtin___sprintf_chk: {\n    // ...\n    if (auto *Format = dyn_cast<StringLiteral>(FormatExpr)) {\n      // ...\n      if (!analyze_format_string::ParsePrintfString(H, FormatBytes, FormatBytes + StrLen, getLangOpts(), Context.getTargetInfo(), false)) {\n        DiagID = diag::warn_fortify_source_format_overflow;"}},
[l]={
["clang/test/Sema/warn-fortify-source.c"]={"clang/test/Sema/warn-fortify-source.c:101:3: warning: \'sprintf\' will always overflow; destination buffer has size 5, but format string expands to at least 6 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:103:3: warning: \'sprintf\' will always overflow; destination buffer has size 2, but format string expands to at least 5 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:106:3: warning: \'sprintf\' will always overflow; destination buffer has size 5, but format string expands to at least 6 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:108:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:110:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:112:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:114:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:116:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:118:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:120:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:122:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:124:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:126:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:128:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:130:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:132:3: warning: \'sprintf\' will always overflow; destination buffer has size 3, but format string expands to at least 4 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:134:3: warning: \'sprintf\' will always overflow; destination buffer has size 3, but format string expands to at least 4 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:136:3: warning: \'sprintf\' will always overflow; destination buffer has size 2, but format string expands to at least 3 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:138:3: warning: \'sprintf\' will always overflow; destination buffer has size 2, but format string expands to at least 3 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:140:3: warning: \'sprintf\' will always overflow; destination buffer has size 5, but format string expands to at least 6 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:142:3: warning: \'sprintf\' will always overflow; destination buffer has size 8, but format string expands to at least 9 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:144:3: warning: \'sprintf\' will always overflow; destination buffer has size 8, but format string expands to at least 9 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:146:3: warning: \'sprintf\' will always overflow; destination buffer has size 9, but format string expands to at least 10 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:148:3: warning: \'sprintf\' will always overflow; destination buffer has size 11, but format string expands to at least 12 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:154:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 8 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:157:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:159:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:161:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:163:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:165:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:167:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:169:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:171:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:173:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:175:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:177:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:179:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:181:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 8 [-Wfortify-source]"}
["clang/test/Sema/warn-fortify-source.c"]={"clang/test/Sema/warn-fortify-source.c:101:3: warning: \'sprintf\' will always overflow; destination buffer has size 5, but format string expands to at least 6 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:103:3: warning: \'sprintf\' will always overflow; destination buffer has size 2, but format string expands to at least 5 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:106:3: warning: \'sprintf\' will always overflow; destination buffer has size 5, but format string expands to at least 6 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:108:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:110:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:112:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:114:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:116:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:118:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:120:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:122:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:124:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:126:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:128:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:130:3: warning: \'sprintf\' will always overflow; destination buffer has size 1, but format string expands to at least 2 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:132:3: warning: \'sprintf\' will always overflow; destination buffer has size 3, but format string expands to at least 4 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:134:3: warning: \'sprintf\' will always overflow; destination buffer has size 3, but format string expands to at least 4 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:136:3: warning: \'sprintf\' will always overflow; destination buffer has size 2, but format string expands to at least 3 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:138:3: warning: \'sprintf\' will always overflow; destination buffer has size 2, but format string expands to at least 3 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:140:3: warning: \'sprintf\' will always overflow; destination buffer has size 5, but format string expands to at least 6 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:142:3: warning: \'sprintf\' will always overflow; destination buffer has size 8, but format string expands to at least 9 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:144:3: warning: \'sprintf\' will always overflow; destination buffer has size 8, but format string expands to at least 9 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:146:3: warning: \'sprintf\' will always overflow; destination buffer has size 9, but format string expands to at least 10 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:148:3: warning: \'sprintf\' will always overflow; destination buffer has size 11, but format string expands to at least 12 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:154:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 8 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:157:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:159:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:161:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:163:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:165:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:167:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:169:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:171:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:173:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:175:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:177:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:179:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 7 [-Wfortify-source]","clang/test/Sema/warn-fortify-source.c:181:3: warning: \'sprintf\' will always overflow; destination buffer has size 6, but format string expands to at least 8 [-Wfortify-source]"}
}
}
},
},
["warn_fortify_source_overflow"]={
["warn_fortify_source_overflow"]={
[j]={xc},
[k]={zc},
[i]=xc,
[j]=zc,
[c]={{nil,I,"\'%0\' will always overflow; destination buffer has size %1, but size argument is %2"}},
[c]={{nil,x,"warn_fortify_source_overflow"}},
[d]=g,
[d]={{nil,x,"\'%0\' will always overflow; destination buffer has size %1, but size argument is %2"}},
[e]="\'(.*?)\' will always overflow; destination buffer has size (.*?), but size argument is (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]",
[g]="\'(.*?)\' will always overflow; destination buffer has size (.*?), but size argument is (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]",
[a]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics","[Sema] Add some compile time _FORTIFY_SOURCE diagnostics\n\nThese diagnose overflowing calls to subset of fortifiable functions. Some\nfunctions, like sprintf or strcpy aren\'t supported right not, but we should\nprobably support these in the future. We previously supported this kind of\nfunctionality with -Wbuiltin-memcpy-chk-size, but that diagnostic doesn\'t work\nwith _FORTIFY implementations that use wrapper functions. Also unlike that\ndiagnostic, we emit these warnings regardless of whether _FORTIFY_SOURCE is\nactually enabled, which is nice for programs that don\'t enable the runtime\nchecks.\n\nWhy not just use diagnose_if, like Bionic does? We can get better diagnostics in\nthe compiler (i.e. mention the sizes), and we have the potential to diagnose\nsprintf and strcpy which is impossible with diagnose_if (at least, in languages\nthat don\'t support C++14 constexpr). This approach also saves standard libraries\nfrom having to add diagnose_if.\n\nrdar://48006655\n\nDifferential revision: https://reviews.llvm.org/D58797\n\nllvm-svn: 356397"},
[b]={{nil,x,m}},
[h]={{r,1318,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  // ...\n  case Builtin::BImemcpy:\n  case Builtin::BI__builtin_memcpy:\n  case Builtin::BImemmove:\n  case Builtin::BI__builtin_memmove:\n  case Builtin::BImemset:\n  case Builtin::BI__builtin_memset:\n  case Builtin::BImempcpy:\n  case Builtin::BI__builtin_mempcpy: {\n    DiagID = diag::warn_fortify_source_overflow;"}},
[f]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics","[Sema] Add some compile time _FORTIFY_SOURCE diagnostics\n\nThese diagnose overflowing calls to subset of fortifiable functions. Some\nfunctions, like sprintf or strcpy aren\'t supported right not, but we should\nprobably support these in the future. We previously supported this kind of\nfunctionality with -Wbuiltin-memcpy-chk-size, but that diagnostic doesn\'t work\nwith _FORTIFY implementations that use wrapper functions. Also unlike that\ndiagnostic, we emit these warnings regardless of whether _FORTIFY_SOURCE is\nactually enabled, which is nice for programs that don\'t enable the runtime\nchecks.\n\nWhy not just use diagnose_if, like Bionic does? We can get better diagnostics in\nthe compiler (i.e. mention the sizes), and we have the potential to diagnose\nsprintf and strcpy which is impossible with diagnose_if (at least, in languages\nthat don\'t support C++14 constexpr). This approach also saves standard libraries\nfrom having to add diagnose_if.\n\nrdar://48006655\n\nDifferential revision: https://reviews.llvm.org/D58797\n\nllvm-svn: 356397"},
[k]={
[h]={{t,1318,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  // ...\n  case Builtin::BImemcpy:\n  case Builtin::BI__builtin_memcpy:\n  case Builtin::BImemmove:\n  case Builtin::BI__builtin_memmove:\n  case Builtin::BImemset:\n  case Builtin::BI__builtin_memset:\n  case Builtin::BImempcpy:\n  case Builtin::BI__builtin_mempcpy: {\n    DiagID = diag::warn_fortify_source_overflow;"}},
[l]={
["clang/test/Analysis/null-deref-ps-region.c"]={"clang/test/Analysis/null-deref-ps-region.c:58:3: warning: \'memset\' will always overflow; destination buffer has size 1, but size argument is 1024 [-Wfortify-source]"}
["clang/test/Analysis/null-deref-ps-region.c"]={"clang/test/Analysis/null-deref-ps-region.c:58:3: warning: \'memset\' will always overflow; destination buffer has size 1, but size argument is 1024 [-Wfortify-source]"}
}
}
},
},
["warn_fortify_source_size_mismatch"]={
["warn_fortify_source_size_mismatch"]={
[j]={xc},
[k]={zc},
[i]=xc,
[j]=zc,
[c]={{nil,I,"\'%0\' size argument is too large; destination buffer has size %1, but size argument is %2"}},
[c]={{nil,x,"warn_fortify_source_size_mismatch"}},
[d]=g,
[d]={{nil,x,"\'%0\' size argument is too large; destination buffer has size %1, but size argument is %2"}},
[e]="\'(.*?)\' size argument is too large; destination buffer has size (.*?), but size argument is (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]",
[g]="\'(.*?)\' size argument is too large; destination buffer has size (.*?), but size argument is (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]",
[a]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics","[Sema] Add some compile time _FORTIFY_SOURCE diagnostics\n\nThese diagnose overflowing calls to subset of fortifiable functions. Some\nfunctions, like sprintf or strcpy aren\'t supported right not, but we should\nprobably support these in the future. We previously supported this kind of\nfunctionality with -Wbuiltin-memcpy-chk-size, but that diagnostic doesn\'t work\nwith _FORTIFY implementations that use wrapper functions. Also unlike that\ndiagnostic, we emit these warnings regardless of whether _FORTIFY_SOURCE is\nactually enabled, which is nice for programs that don\'t enable the runtime\nchecks.\n\nWhy not just use diagnose_if, like Bionic does? We can get better diagnostics in\nthe compiler (i.e. mention the sizes), and we have the potential to diagnose\nsprintf and strcpy which is impossible with diagnose_if (at least, in languages\nthat don\'t support C++14 constexpr). This approach also saves standard libraries\nfrom having to add diagnose_if.\n\nrdar://48006655\n\nDifferential revision: https://reviews.llvm.org/D58797\n\nllvm-svn: 356397"},
[b]={{nil,x,m}},
[h]={{r,1304,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  // ...\n  case Builtin::BIstrncat:\n  case Builtin::BI__builtin_strncat:\n  case Builtin::BIstrncpy:\n  case Builtin::BI__builtin_strncpy:\n  case Builtin::BIstpncpy:\n  case Builtin::BI__builtin_stpncpy: {\n    // ...\n    DiagID = diag::warn_fortify_source_size_mismatch;"},{r,1327,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  // ...\n  case Builtin::BIsnprintf:\n  case Builtin::BI__builtin_snprintf:\n  case Builtin::BIvsnprintf:\n  case Builtin::BI__builtin_vsnprintf: {\n    DiagID = diag::warn_fortify_source_size_mismatch;"}},
[f]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics","[Sema] Add some compile time _FORTIFY_SOURCE diagnostics\n\nThese diagnose overflowing calls to subset of fortifiable functions. Some\nfunctions, like sprintf or strcpy aren\'t supported right not, but we should\nprobably support these in the future. We previously supported this kind of\nfunctionality with -Wbuiltin-memcpy-chk-size, but that diagnostic doesn\'t work\nwith _FORTIFY implementations that use wrapper functions. Also unlike that\ndiagnostic, we emit these warnings regardless of whether _FORTIFY_SOURCE is\nactually enabled, which is nice for programs that don\'t enable the runtime\nchecks.\n\nWhy not just use diagnose_if, like Bionic does? We can get better diagnostics in\nthe compiler (i.e. mention the sizes), and we have the potential to diagnose\nsprintf and strcpy which is impossible with diagnose_if (at least, in languages\nthat don\'t support C++14 constexpr). This approach also saves standard libraries\nfrom having to add diagnose_if.\n\nrdar://48006655\n\nDifferential revision: https://reviews.llvm.org/D58797\n\nllvm-svn: 356397"},
[k]={
[h]={{t,1304,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  // ...\n  case Builtin::BIstrncat:\n  case Builtin::BI__builtin_strncat:\n  case Builtin::BIstrncpy:\n  case Builtin::BI__builtin_strncpy:\n  case Builtin::BIstpncpy:\n  case Builtin::BI__builtin_stpncpy: {\n    // ...\n    DiagID = diag::warn_fortify_source_size_mismatch;"},{t,1327,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  // ...\n  case Builtin::BIsnprintf:\n  case Builtin::BI__builtin_snprintf:\n  case Builtin::BIvsnprintf:\n  case Builtin::BI__builtin_vsnprintf: {\n    DiagID = diag::warn_fortify_source_size_mismatch;"}},
[l]={
["clang/test/Sema/warn-strncat-size.c"]={"clang/test/Sema/warn-strncat-size.c:42:3: warning: \'strncat\' size argument is too large; destination buffer has size 97, but size argument is 200 [-Wfortify-source]"}
["clang/test/Sema/warn-strncat-size.c"]={"clang/test/Sema/warn-strncat-size.c:42:3: warning: \'strncat\' size argument is too large; destination buffer has size 97, but size argument is 200 [-Wfortify-source]"}
}
}
},
},
["warn_fortify_strlen_overflow"]={
["warn_fortify_strlen_overflow"]={
[j]={xc},
[k]={zc},
[i]=xc,
[j]=zc,
[c]={{nil,Q,"\'%0\' will always overflow; destination buffer has size %1, but the source string has length %2 (including NUL byte)"}},
[c]={{nil,w,"warn_fortify_strlen_overflow"}},
[d]=g,
[d]={{nil,w,"\'%0\' will always overflow; destination buffer has size %1, but the source string has length %2 (including NUL byte)"}},
[e]="\'(.*?)\' will always overflow; destination buffer has size (.*?), but the source string has length (.*?) \\(including NUL byte\\)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]",
[g]="\'(.*?)\' will always overflow; destination buffer has size (.*?), but the source string has length (.*?) \\(including NUL byte\\)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]",
[a]={Tc,1615397021,Yc,Mc},
[b]={{nil,w,m}},
[h]={{r,1159,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  // ...\n  case Builtin::BI__builtin_strcpy:\n  case Builtin::BIstrcpy: {\n    DiagID = diag::warn_fortify_strlen_overflow;"},{r,1166,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  // ...\n  case Builtin::BI__builtin___strcpy_chk: {\n    DiagID = diag::warn_fortify_strlen_overflow;"}},
[f]={dd,1615397021,bd,ad},
[k]={
[h]={{t,1159,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  // ...\n  case Builtin::BI__builtin_strcpy:\n  case Builtin::BIstrcpy: {\n    DiagID = diag::warn_fortify_strlen_overflow;"},{t,1166,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n  // ...\n  case Builtin::BI__builtin___strcpy_chk: {\n    DiagID = diag::warn_fortify_strlen_overflow;"}},
[l]={
["clang/test/CodeGen/object-size.c"]={"clang/test/CodeGen/object-size.c:38:3: warning: \'strcpy\' will always overflow; destination buffer has size 0, but the source string has length 9 (including NUL byte) [-Wfortify-source]","clang/test/CodeGen/object-size.c:44:3: warning: \'strcpy\' will always overflow; destination buffer has size 0, but the source string has length 9 (including NUL byte) [-Wfortify-source]"}
["clang/test/CodeGen/object-size.c"]={"clang/test/CodeGen/object-size.c:38:3: warning: \'strcpy\' will always overflow; destination buffer has size 0, but the source string has length 9 (including NUL byte) [-Wfortify-source]","clang/test/CodeGen/object-size.c:44:3: warning: \'strcpy\' will always overflow; destination buffer has size 0, but the source string has length 9 (including NUL byte) [-Wfortify-source]"}
}
}
},
},
["warn_forward_class_redefinition"]={
["warn_forward_class_redefinition"]={
[j]={"objc-forward-class-redefinition"},
[k]={"objc-forward-class-redefinition"},
[i]="objc-forward-class-redefinition",
[j]="objc-forward-class-redefinition",
[c]="redefinition of forward class %0 of a typedef name of an object type is ignored",
[c]="warn_forward_class_redefinition",
[d]=g,
[d]="redefinition of forward class %0 of a typedef name of an object type is ignored",
[e]="redefinition of forward class (.*?) of a typedef name of an object type is ignored",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wobjc\\-forward\\-class\\-redefinition[^\\]]*\\]",
[g]="redefinition of forward class (.*?) of a typedef name of an object type is ignored",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-forward\\-class\\-redefinition[^\\]]*\\]",
[a]={"04c4455dd443",1327365615,"objective-c: Ignore with warning forward class declaration whose name","objective-c: Ignore with warning forward class declaration whose name\nmatches a typedef declaring an object type. // rdar://10733000\n\nllvm-svn: 148760"},
[b]=m,
[h]={{wc,3090,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  // ...\n  for (unsigned i = 0; i != NumElts; ++i) {\n    // ...\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      // ...\n      if (!TDD || !TDD->getUnderlyingType()->isObjCObjectType()) {\n      // ...\n      } else {\n        // a forward class declaration matching a typedef name of a class refers\n        // to the underlying class. Just ignore the forward class with a warning\n        // as this will force the intended behavior which is to lookup the\n        // typedef name.\n        if (isa<ObjCObjectType>(TDD->getUnderlyingType())) {\n          Diag(AtClassLoc, diag::warn_forward_class_redefinition) << IdentList[i];"}},
[f]={"04c4455dd443",1327365615,"objective-c: Ignore with warning forward class declaration whose name","objective-c: Ignore with warning forward class declaration whose name\nmatches a typedef declaring an object type. // rdar://10733000\n\nllvm-svn: 148760"},
[k]={
[h]={{Gc,3090,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  // ...\n  for (unsigned i = 0; i != NumElts; ++i) {\n    // ...\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      // ...\n      if (!TDD || !TDD->getUnderlyingType()->isObjCObjectType()) {\n      // ...\n      } else {\n        // a forward class declaration matching a typedef name of a class refers\n        // to the underlying class. Just ignore the forward class with a warning\n        // as this will force the intended behavior which is to lookup the\n        // typedef name.\n        if (isa<ObjCObjectType>(TDD->getUnderlyingType())) {\n          Diag(AtClassLoc, diag::warn_forward_class_redefinition) << IdentList[i];"}},
[l]={
["clang/test/SemaObjC/forward-class-redeclare.m"]={"clang/test/SemaObjC/forward-class-redeclare.m:13:1: warning: redefinition of forward class \'PLAlbum\' of a typedef name of an object type is ignored [-Wobjc-forward-class-redefinition]"}
["clang/test/SemaObjC/forward-class-redeclare.m"]={"clang/test/SemaObjC/forward-class-redeclare.m:13:1: warning: redefinition of forward class \'PLAlbum\' of a typedef name of an object type is ignored [-Wobjc-forward-class-redefinition]"}
}
}
},
},
["warn_four_char_character_literal"]={
["warn_four_char_character_literal"]={
[j]={"four-char-constants"},
[k]={"four-char-constants"},
[i]="four-char-constants",
[j]="four-char-constants",
[c]={{nil,Sb,"multi-character character constant"}},
[c]={{nil,db,"warn_four_char_character_literal"}},
[d]=g,
[d]={{nil,db,"multi-character character constant"}},
[e]="multi\\-character character constant",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfour\\-char\\-constants[^\\]]*\\]",
[g]="multi\\-character character constant",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wfour\\-char\\-constants[^\\]]*\\]",
[a]={"8fa45e1fd527",1601988326,"Convert diagnostics about multi-character literals from extension to warning","Convert diagnostics about multi-character literals from extension to warning\n\nThis addresses PR46797."},
[b]={{nil,db,T}},
[h]={{jd,1796,"/// \\verbatim\n///      user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///        u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///        one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///        \\U hex-quad hex-quad\n///      hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  // ...\n  if (NumCharsSoFar > 1) {\n    if (isOrdinary() && NumCharsSoFar == 4)\n      PP.Diag(Loc, diag::warn_four_char_character_literal);"}},
[f]={"8fa45e1fd527",1601988326,"Convert diagnostics about multi-character literals from extension to warning","Convert diagnostics about multi-character literals from extension to warning\n\nThis addresses PR46797."},
[k]={
[h]={{id,1796,"/// \\verbatim\n///      user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///        u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///        one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///        \\U hex-quad hex-quad\n///      hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  // ...\n  if (NumCharsSoFar > 1) {\n    if (isOrdinary() && NumCharsSoFar == 4)\n      PP.Diag(Loc, diag::warn_four_char_character_literal);"}},
[l]={
["clang/test/Lexer/multi-char-constants.c"]={"clang/test/Lexer/multi-char-constants.c:4:9: warning: multi-character character constant [-Wfour-char-constants]"}
["clang/test/Lexer/multi-char-constants.c"]={"clang/test/Lexer/multi-char-constants.c:4:9: warning: multi-character character constant [-Wfour-char-constants]"}
}
}
},
},
["warn_frame_address"]={
["warn_frame_address"]={
[j]={B,H,"frame-address",N},
[k]={K,O,"frame-address",V},
[i]="frame-address",
[j]="frame-address",
[c]={{nil,mb,"calling \'%0\' with a nonzero argument is unsafe"}},
[c]={{nil,z,"warn_frame_address"}},
[d]=g,
[d]={{nil,z,"calling \'%0\' with a nonzero argument is unsafe"}},
[e]="calling \'(.*?)\' with a nonzero argument is unsafe",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wframe\\-address[^\\]]*\\]",
[g]="calling \'(.*?)\' with a nonzero argument is unsafe",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wframe\\-address[^\\]]*\\]",
[a]={Bd,1576908663,ud,Ed},
[b]={{nil,z,m}},
[h]={{r,2596,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_frame_address:\n  case Builtin::BI__builtin_return_address: {\n    // ...\n    if (!TheCall->getArg(0)->isValueDependent() && TheCall->getArg(0)->EvaluateAsInt(Result, getASTContext()) && Result.Val.getInt() != 0)\n      Diag(TheCall->getBeginLoc(), diag::warn_frame_address) << ((BuiltinID == Builtin::BI__builtin_return_address) ? \"__builtin_return_address\" : \"__builtin_frame_address\") << TheCall->getSourceRange();"}},
[f]={Ld,1576908663,xd,"[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n  turned out to be ineffective anyway since functions can be defined later\n  in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520"},
[k]={
[h]={{t,2596,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_frame_address:\n  case Builtin::BI__builtin_return_address: {\n    // ...\n    if (!TheCall->getArg(0)->isValueDependent() && TheCall->getArg(0)->EvaluateAsInt(Result, getASTContext()) && Result.Val.getInt() != 0)\n      Diag(TheCall->getBeginLoc(), diag::warn_frame_address) << ((BuiltinID == Builtin::BI__builtin_return_address) ? \"__builtin_return_address\" : \"__builtin_frame_address\") << TheCall->getSourceRange();"}},
[l]={
["clang/test/Sema/builtin-returnaddress.c"]={"clang/test/Sema/builtin-returnaddress.c:10:8: warning: calling \'__builtin_return_address\' with a nonzero argument is unsafe [-Wframe-address]","clang/test/Sema/builtin-returnaddress.c:18:8: warning: calling \'__builtin_frame_address\' with a nonzero argument is unsafe [-Wframe-address]","clang/test/Sema/builtin-returnaddress.c:24:10: warning: calling \'__builtin_return_address\' with a nonzero argument is unsafe [-Wframe-address]"}
["clang/test/Sema/builtin-returnaddress.c"]={"clang/test/Sema/builtin-returnaddress.c:10:8: warning: calling \'__builtin_return_address\' with a nonzero argument is unsafe [-Wframe-address]","clang/test/Sema/builtin-returnaddress.c:18:8: warning: calling \'__builtin_frame_address\' with a nonzero argument is unsafe [-Wframe-address]","clang/test/Sema/builtin-returnaddress.c:24:10: warning: calling \'__builtin_return_address\' with a nonzero argument is unsafe [-Wframe-address]"}
}
}
},
},
["warn_framework_include_private_from_public"]={
["warn_framework_include_private_from_public"]={
[j]={"framework-include-private-from-public"},
[k]={"framework-include-private-from-public"},
[i]="framework-include-private-from-public",
[j]="framework-include-private-from-public",
[c]={{nil,eb,"public framework header includes private framework header \'%0\'"}},
[c]={{nil,D,"warn_framework_include_private_from_public"}},
[d]=g,
[d]={{nil,D,"public framework header includes private framework header \'%0\'"}},
[e]="public framework header includes private framework header \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wframework\\-include\\-private\\-from\\-public[^\\]]*\\]",
[g]="public framework header includes private framework header \'(.*?)\'",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wframework\\-include\\-private\\-from\\-public[^\\]]*\\]",
[a]={"1b3b69fbda70",1529965457,"Warning for framework include violation from Headers to PrivateHeaders","Warning for framework include violation from Headers to PrivateHeaders\n\nFramework vendors usually layout their framework headers in the\nfollowing way:\n\nFoo.framework/Headers -> \"public\" headers\nFoo.framework/PrivateHeader -> \"private\" headers\n\nSince both headers in both directories can be found with #import\n<Foo/some-header.h>, it\'s easy to make mistakes and include headers in\nFoo.framework/PrivateHeader from headers in Foo.framework/Headers, which\nusually configures a layering violation on Darwin ecosystems. One of the\nproblem this causes is dep cycles when modules are used, since it\'s very\ncommon for \"private\" modules to include from the \"public\" ones; adding\nan edge the other way around will trigger cycles.\n\nAdd a warning to catch those cases such that:\n\n./A.framework/Headers/A.h:1:10: warning: public framework header includes private framework header \'A/APriv.h\'\n#include <A/APriv.h>\n        ^\n\nrdar://problem/38712182\n\nllvm-svn: 335542"},
[b]={{nil,D,T}},
[f]={"1b3b69fbda70",1529965457,"Warning for framework include violation from Headers to PrivateHeaders","Warning for framework include violation from Headers to PrivateHeaders\n\nFramework vendors usually layout their framework headers in the\nfollowing way:\n\nFoo.framework/Headers -> \"public\" headers\nFoo.framework/PrivateHeader -> \"private\" headers\n\nSince both headers in both directories can be found with #import\n<Foo/some-header.h>, it\'s easy to make mistakes and include headers in\nFoo.framework/PrivateHeader from headers in Foo.framework/Headers, which\nusually configures a layering violation on Darwin ecosystems. One of the\nproblem this causes is dep cycles when modules are used, since it\'s very\ncommon for \"private\" modules to include from the \"public\" ones; adding\nan edge the other way around will trigger cycles.\n\nAdd a warning to catch those cases such that:\n\n./A.framework/Headers/A.h:1:10: warning: public framework header includes private framework header \'A/APriv.h\'\n#include <A/APriv.h>\n        ^\n\nrdar://problem/38712182\n\nllvm-svn: 335542"},
[h]={{"clang/lib/Lex/HeaderSearch.cpp",853,"static void diagnoseFrameworkInclude(DiagnosticsEngine &Diags, SourceLocation IncludeLoc, StringRef Includer, StringRef IncludeFilename, const FileEntry *IncludeFE, bool isAngled = false, bool FoundByHeaderMap = false) {\n  // ...\n  // Headers in Foo.framework/Headers should not include headers\n  // from Foo.framework/PrivateHeaders, since this violates public/private\n  // API boundaries and can cause modular dependency cycles.\n  if (!IsIncluderPrivateHeader && IsIncludeeInFramework && IsIncludeePrivateHeader && FromFramework == ToFramework)\n    Diags.Report(IncludeLoc, diag::warn_framework_include_private_from_public) << IncludeFilename;"}},
[h]={{"clang/lib/Lex/HeaderSearch.cpp",853,"static void diagnoseFrameworkInclude(DiagnosticsEngine &Diags, SourceLocation IncludeLoc, StringRef Includer, StringRef IncludeFilename, const FileEntry *IncludeFE, bool isAngled = false, bool FoundByHeaderMap = false) {\n  // ...\n  // Headers in Foo.framework/Headers should not include headers\n  // from Foo.framework/PrivateHeaders, since this violates public/private\n  // API boundaries and can cause modular dependency cycles.\n  if (!IsIncluderPrivateHeader && IsIncludeeInFramework && IsIncludeePrivateHeader && FromFramework == ToFramework)\n    Diags.Report(IncludeLoc, diag::warn_framework_include_private_from_public) << IncludeFilename;"}},
[k]={
[l]={
["clang/test/Modules/framework-public-includes-private.m"]={"clang/test/Modules/Inputs/framework-public-includes-private/A.framework/Headers/A.h:1:10: warning: public framework header includes private framework header \'A/APriv.h\' [-Wframework-include-private-from-public]","clang/test/Modules/Inputs/framework-public-includes-private/A.framework/Headers/A.h:2:10: warning: public framework header includes private framework header \'A/APriv2.h\' [-Wframework-include-private-from-public]","clang/test/Modules/Inputs/framework-public-includes-private/Z.framework/Headers/Z.h:2:9: warning: public framework header includes private framework header \'Z/ZPriv.h\' [-Wframework-include-private-from-public]"}
["clang/test/Modules/framework-public-includes-private.m"]={"clang/test/Modules/Inputs/framework-public-includes-private/A.framework/Headers/A.h:1:10: warning: public framework header includes private framework header \'A/APriv.h\' [-Wframework-include-private-from-public]","clang/test/Modules/Inputs/framework-public-includes-private/A.framework/Headers/A.h:2:10: warning: public framework header includes private framework header \'A/APriv2.h\' [-Wframework-include-private-from-public]","clang/test/Modules/Inputs/framework-public-includes-private/Z.framework/Headers/Z.h:2:9: warning: public framework header includes private framework header \'Z/ZPriv.h\' [-Wframework-include-private-from-public]"}
}
}
},
},
["warn_free_nonheap_object"]={
["warn_free_nonheap_object"]={
[j]={"free-nonheap-object"},
[k]={"free-nonheap-object"},
[i]="free-nonheap-object",
[j]="free-nonheap-object",
[c]={{nil,jb,"attempt to call %0 on non-heap %select{object %2|object: block expression|object: lambda-to-function-pointer conversion}1"},{Sb,Sb,"attempt to call %0 on non-heap object %1"}},
[c]={{nil,db,"warn_free_nonheap_object"}},
[d]=g,
[d]={{nil,I,"attempt to call %0 on non-heap %select{object %2|object: block expression|object: lambda-to-function-pointer conversion}1"},{db,db,"attempt to call %0 on non-heap object %1"}},
[e]="attempt to call (.*?) on non\\-heap (?:object (.*?)|object\\: block expression|object\\: lambda\\-to\\-function\\-pointer conversion)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfree\\-nonheap\\-object[^\\]]*\\]",
[g]="attempt to call (.*?) on non\\-heap (?:object (.*?)|object\\: block expression|object\\: lambda\\-to\\-function\\-pointer conversion)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wfree\\-nonheap\\-object[^\\]]*\\]",
[a]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
[b]={{nil,db,m}},
[h]={{r,12824,"void CheckFreeArgumentsOnLvalue(Sema &S, const std::string &CalleeName, const UnaryOperator *UnaryExpr, const Decl *D) {\n  if (isa<FieldDecl, FunctionDecl, VarDecl>(D)) {\n    S.Diag(UnaryExpr->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << cast<NamedDecl>(D);"},{r,12851,"void CheckFreeArgumentsPlus(Sema &S, const std::string &CalleeName, const UnaryOperator *UnaryExpr) {\n  // ...\n  S.Diag(Lambda->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 2 /*object: lambda expression*/;"},{r,12861,"void CheckFreeArgumentsStackArray(Sema &S, const std::string &CalleeName, const DeclRefExpr *Lvalue) {\n  // ...\n  S.Diag(Lvalue->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << Var;"},{r,12891,"void CheckFreeArgumentsCast(Sema &S, const std::string &CalleeName, const CastExpr *Cast) {\n  // ...\n  S.Diag(Cast->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << OS.str();"},{r,12918,"/// Alerts the user that they are attempting to free a non-malloc\'d object.\nvoid Sema::CheckFreeArguments(const CallExpr *E) {\n  // ...\n  { // Prefer something that doesn\'t involve a cast to make things simpler.\n    // ...\n    if (const auto *Label = dyn_cast<AddrLabelExpr>(Arg)) {\n      Diag(Label->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << Label->getLabel()->getIdentifier();"},{r,12924,"/// Alerts the user that they are attempting to free a non-malloc\'d object.\nvoid Sema::CheckFreeArguments(const CallExpr *E) {\n  // ...\n  { // Prefer something that doesn\'t involve a cast to make things simpler.\n    // ...\n    if (isa<BlockExpr>(Arg)) {\n      Diag(Arg->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 1 /*object: block*/;"}},
[f]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
[k]={
[h]={{t,12824,"void CheckFreeArgumentsOnLvalue(Sema &S, const std::string &CalleeName, const UnaryOperator *UnaryExpr, const Decl *D) {\n  if (isa<FieldDecl, FunctionDecl, VarDecl>(D)) {\n    S.Diag(UnaryExpr->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << cast<NamedDecl>(D);"},{t,12851,"void CheckFreeArgumentsPlus(Sema &S, const std::string &CalleeName, const UnaryOperator *UnaryExpr) {\n  // ...\n  S.Diag(Lambda->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 2 /*object: lambda expression*/;"},{t,12861,"void CheckFreeArgumentsStackArray(Sema &S, const std::string &CalleeName, const DeclRefExpr *Lvalue) {\n  // ...\n  S.Diag(Lvalue->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << Var;"},{t,12891,"void CheckFreeArgumentsCast(Sema &S, const std::string &CalleeName, const CastExpr *Cast) {\n  // ...\n  S.Diag(Cast->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << OS.str();"},{t,12918,"/// Alerts the user that they are attempting to free a non-malloc\'d object.\nvoid Sema::CheckFreeArguments(const CallExpr *E) {\n  // ...\n  { // Prefer something that doesn\'t involve a cast to make things simpler.\n    // ...\n    if (const auto *Label = dyn_cast<AddrLabelExpr>(Arg)) {\n      Diag(Label->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 0 /*object: */ << Label->getLabel()->getIdentifier();"},{t,12924,"/// Alerts the user that they are attempting to free a non-malloc\'d object.\nvoid Sema::CheckFreeArguments(const CallExpr *E) {\n  // ...\n  { // Prefer something that doesn\'t involve a cast to make things simpler.\n    // ...\n    if (isa<BlockExpr>(Arg)) {\n      Diag(Arg->getBeginLoc(), diag::warn_free_nonheap_object) << CalleeName << 1 /*object: block*/;"}},
[l]={
["clang/test/Sema/warn-free-nonheap-object.c"]={"clang/test/Sema/warn-free-nonheap-object.c:15:10: warning: attempt to call free on non-heap object \'GI\' [-Wfree-nonheap-object]","clang/test/Sema/warn-free-nonheap-object.c:19:10: warning: attempt to call free on non-heap object \'SI\' [-Wfree-nonheap-object]","clang/test/Sema/warn-free-nonheap-object.c:23:10: warning: attempt to call free on non-heap object \'I\' [-Wfree-nonheap-object]","clang/test/Sema/warn-free-nonheap-object.c:36:10: warning: attempt to call free on non-heap object \'A\' [-Wfree-nonheap-object]","clang/test/Sema/warn-free-nonheap-object.c:37:10: warning: attempt to call free on non-heap object \'A\' [-Wfree-nonheap-object]","clang/test/Sema/warn-free-nonheap-object.c:41:10: warning: attempt to call free on non-heap object \'I\' [-Wfree-nonheap-object]"}
["clang/test/Sema/warn-free-nonheap-object.c"]={"clang/test/Sema/warn-free-nonheap-object.c:15:10: warning: attempt to call free on non-heap object \'GI\' [-Wfree-nonheap-object]","clang/test/Sema/warn-free-nonheap-object.c:19:10: warning: attempt to call free on non-heap object \'SI\' [-Wfree-nonheap-object]","clang/test/Sema/warn-free-nonheap-object.c:23:10: warning: attempt to call free on non-heap object \'I\' [-Wfree-nonheap-object]","clang/test/Sema/warn-free-nonheap-object.c:36:10: warning: attempt to call free on non-heap object \'A\' [-Wfree-nonheap-object]","clang/test/Sema/warn-free-nonheap-object.c:37:10: warning: attempt to call free on non-heap object \'A\' [-Wfree-nonheap-object]","clang/test/Sema/warn-free-nonheap-object.c:41:10: warning: attempt to call free on non-heap object \'I\' [-Wfree-nonheap-object]"}
}
}
},
},
["warn_fun_excludes_mutex"]={
["warn_fun_excludes_mutex"]={
[j]={Ac,Qb},
[k]={Fc,Ub},
[i]=Qb,
[j]=Ub,
[c]="cannot call function \'%1\' while %0 \'%2\' is held",
[c]="warn_fun_excludes_mutex",
[d]=g,
[d]="cannot call function \'%1\' while %0 \'%2\' is held",
[e]="cannot call function \'(.*?)\' while (.*?) \'(.*?)\' is held",
[e]=i,
[f]=Vc,
[g]="cannot call function \'(.*?)\' while (.*?) \'(.*?)\' is held",
[b]=l,
[a]=Yc,
[a]={"ee5db8b5c4ab",1315518770,"Thread Safety:  In C++0x Mutexes are the objects that control access to shared variables, while Lock...","Thread Safety:  In C++0x Mutexes are the objects that control access to shared variables, while Locks are the objects that acquire and release Mutexes. We switch to this new terminology.\n\nllvm-svn: 139321"},
[b]=m,
[h]={{gb,2035,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleFunExcludesLock(StringRef Kind, Name FunName, Name LockName, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_fun_excludes_mutex) << Kind << FunName << LockName);"}},
[f]={"ee5db8b5c4ab",1315518770,"Thread Safety:  In C++0x Mutexes are the objects that control access to shared variables, while Lock...","Thread Safety:  In C++0x Mutexes are the objects that control access to shared variables, while Locks are the objects that acquire and release Mutexes. We switch to this new terminology.\n\nllvm-svn: 139321"},
[k]={
[h]={{qb,2035,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleFunExcludesLock(StringRef Kind, Name FunName, Name LockName, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_fun_excludes_mutex) << Kind << FunName << LockName);"}},
[l]={
["clang/test/Sema/warn-thread-safety-analysis.c"]={"clang/test/Sema/warn-thread-safety-analysis.c:99:3: warning: cannot call function \'Foo_func3\' while mutex \'mu1\' is held [-Wthread-safety-analysis]"}
["clang/test/Sema/warn-thread-safety-analysis.c"]={"clang/test/Sema/warn-thread-safety-analysis.c:99:3: warning: cannot call function \'Foo_func3\' while mutex \'mu1\' is held [-Wthread-safety-analysis]"}
}
}
},
},
["warn_fun_requires_lock"]={
["warn_fun_requires_lock"]={
[j]={Ac,Qb},
[k]={Fc,Ub},
[i]=Qb,
[j]=Ub,
[c]={{nil,eb,"calling function %1 requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"},{lb,nil,"calling function \'%1\' requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"}},
[c]="warn_fun_requires_lock",
[d]=g,
[d]={{nil,D,"calling function %1 requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"},{F,nil,"calling function \'%1\' requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"}},
[e]="calling function (.*?) requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)",
[e]=i,
[f]=Vc,
[g]="calling function (.*?) requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)",
[b]=l,
[a]=Yc,
[a]={"69b367af17e0",1315506451,"Thread safety: Adding basic support for locks required and excluded attributes","Thread safety: Adding basic support for locks required and excluded attributes\n\nllvm-svn: 139308"},
[b]=m,
[h]={{gb,1997,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    // ...\n    if (PossibleMatch) {\n    // ...\n    } else {\n      // ...\n      case POK_FunctionCall:\n        DiagID = diag::warn_fun_requires_lock;"}},
[f]={"69b367af17e0",1315506451,"Thread safety: Adding basic support for locks required and excluded attributes","Thread safety: Adding basic support for locks required and excluded attributes\n\nllvm-svn: 139308"},
[k]={
[h]={{qb,1997,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    // ...\n    if (PossibleMatch) {\n    // ...\n    } else {\n      // ...\n      case POK_FunctionCall:\n        DiagID = diag::warn_fun_requires_lock;"}},
[l]={
["clang/test/SemaObjC/warn-thread-safety-analysis.m"]={"clang/test/SemaObjC/warn-thread-safety-analysis.m:16:3: warning: calling function \'Foo_fun1\' requires holding mutex \'mu1\' exclusively [-Wthread-safety-analysis]"}
["clang/test/SemaObjC/warn-thread-safety-analysis.m"]={"clang/test/SemaObjC/warn-thread-safety-analysis.m:16:3: warning: calling function \'Foo_fun1\' requires holding mutex \'mu1\' exclusively [-Wthread-safety-analysis]"}
}
}
},
},
["warn_fun_requires_lock_precise"]={
["warn_fun_requires_lock_precise"]={
[j]={Ac,"thread-safety-precise"},
[k]={Fc,"thread-safety-precise"},
[i]="thread-safety-precise",
[j]="thread-safety-precise",
[c]={{nil,eb,"calling function %1 requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"},{lb,nil,"calling function \'%1\' requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"}},
[c]="warn_fun_requires_lock_precise",
[d]=g,
[d]={{nil,D,"calling function %1 requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"},{F,nil,"calling function \'%1\' requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"}},
[e]="calling function (.*?) requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-precise[^\\]]*\\]",
[g]="calling function (.*?) requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-precise[^\\]]*\\]",
[a]={"5ff1644e624e",1347307103,"Thread-safety analysis: differentiate between two forms of analysis; a precise","Thread-safety analysis: differentiate between two forms of analysis; a precise\nanalysis that may give false positives because it is confused by aliasing, and\na less precise analysis that has fewer false positives, but may have false\nnegatives.  The more precise warnings are enabled by -Wthread-safety-precise.\nAn additional note clarify the warnings in the precise case.\n\nllvm-svn: 163537"},
[b]=m,
[h]={{gb,1967,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    // ...\n    if (PossibleMatch) {\n      // ...\n      case POK_FunctionCall:\n        DiagID = diag::warn_fun_requires_lock_precise;"}},
[f]={"5ff1644e624e",1347307103,"Thread-safety analysis: differentiate between two forms of analysis; a precise","Thread-safety analysis: differentiate between two forms of analysis; a precise\nanalysis that may give false positives because it is confused by aliasing, and\na less precise analysis that has fewer false positives, but may have false\nnegatives.  The more precise warnings are enabled by -Wthread-safety-precise.\nAn additional note clarify the warnings in the precise case.\n\nllvm-svn: 163537"},
[k]={
[h]={{qb,1967,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    // ...\n    if (PossibleMatch) {\n      // ...\n      case POK_FunctionCall:\n        DiagID = diag::warn_fun_requires_lock_precise;"}},
[l]={
["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={"clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1401:13: warning: calling function \'bar\' requires holding mutex \'child->lock_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1603:7: warning: calling function \'foo\' requires holding mutex \'d2->mu\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2040:6: warning: calling function \'barTD<TestTemplateAttributeInstantiation::Foo1>\' requires holding mutex \'f1.mu_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2546:7: warning: calling function \'foo2\' requires holding mutex \'f2->mu_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2588:7: warning: calling function \'bar2\' requires holding mutex \'b2->mu_\' exclusively [-Wthread-safety-precise]"}
["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={"clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1401:13: warning: calling function \'bar\' requires holding mutex \'child->lock_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1603:7: warning: calling function \'foo\' requires holding mutex \'d2->mu\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2040:6: warning: calling function \'barTD<TestTemplateAttributeInstantiation::Foo1>\' requires holding mutex \'f1.mu_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2546:7: warning: calling function \'foo2\' requires holding mutex \'f2->mu_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2588:7: warning: calling function \'bar2\' requires holding mutex \'b2->mu_\' exclusively [-Wthread-safety-precise]"}
}
}
},
},
["warn_fun_requires_negative_cap"]={
["warn_fun_requires_negative_cap"]={
[j]={Ac,Qb},
[k]={Fc,Ub},
[i]=Qb,
[j]=Ub,
[c]={{nil,Sb,"calling function %0 requires negative capability \'%1\'"}},
[c]={{nil,db,"warn_fun_requires_negative_cap"}},
[d]=g,
[d]={{nil,db,"calling function %0 requires negative capability \'%1\'"}},
[e]="calling function (.*?) requires negative capability \'(.*?)\'",
[e]=i,
[f]=Vc,
[g]="calling function (.*?) requires negative capability \'(.*?)\'",
[b]=l,
[a]=Yc,
[a]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574"},
[b]={{nil,db,m}},
[h]={{gb,2029,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleNegativeNotHeld(const NamedDecl *D, Name LockName, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_fun_requires_negative_cap) << D << LockName);"}},
[f]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574"},
[k]={
[h]={{qb,2029,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleNegativeNotHeld(const NamedDecl *D, Name LockName, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_fun_requires_negative_cap) << D << LockName);"}},
[l]={
["clang/test/SemaCXX/warn-thread-safety-negative.cpp"]={"clang/test/SemaCXX/warn-thread-safety-negative.cpp:59:5: warning: calling function \'baz\' requires negative capability \'!mu\' [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-negative.cpp:108:3: warning: calling function \'f\' requires negative capability \'!globalMutex\' [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-negative.cpp:109:3: warning: calling function \'fq\' requires negative capability \'!globalMutex\' [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-negative.cpp:117:3: warning: calling function \'f\' requires negative capability \'!globalMutex\' [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-negative.cpp:118:3: warning: calling function \'fq\' requires negative capability \'!globalMutex\' [-Wthread-safety-analysis]"}
["clang/test/SemaCXX/warn-thread-safety-negative.cpp"]={"clang/test/SemaCXX/warn-thread-safety-negative.cpp:59:5: warning: calling function \'baz\' requires negative capability \'!mu\' [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-negative.cpp:108:3: warning: calling function \'f\' requires negative capability \'!globalMutex\' [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-negative.cpp:109:3: warning: calling function \'fq\' requires negative capability \'!globalMutex\' [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-negative.cpp:117:3: warning: calling function \'f\' requires negative capability \'!globalMutex\' [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-negative.cpp:118:3: warning: calling function \'fq\' requires negative capability \'!globalMutex\' [-Wthread-safety-analysis]"}
}
}
},
},
["warn_func_template_missing"]={
["warn_func_template_missing"]={
[j]={"undefined-func-template"},
[k]={"undefined-func-template"},
[i]="undefined-func-template",
[j]="undefined-func-template",
[c]="instantiation of function %q0 required here, but no definition is available",
[c]="warn_func_template_missing",
[d]=g,
[d]="instantiation of function %q0 required here, but no definition is available",
[e]="instantiation of function (.*?) required here, but no definition is available",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wundefined\\-func\\-template[^\\]]*\\]",
[g]="instantiation of function (.*?) required here, but no definition is available",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wundefined\\-func\\-template[^\\]]*\\]",
[a]={"7dcc97e7ac0a",1461046792,"Warn if function or variable cannot be implicitly instantiated","Warn if function or variable cannot be implicitly instantiated\n\nWith this patch compiler emits warning if it tries to make implicit instantiation\nof a template but cannot find the template definition. The warning can be suppressed\nby explicit instantiation declaration or by command line options\n-Wundefined-var-template and -Wundefined-func-template. The implementation follows\nthe discussion of http://reviews.llvm.org/D12326.\n\nDifferential Revision: http://reviews.llvm.org/D16396\n\nllvm-svn: 266719"},
[b]=m,
[f]={"7dcc97e7ac0a",1461046792,"Warn if function or variable cannot be implicitly instantiated","Warn if function or variable cannot be implicitly instantiated\n\nWith this patch compiler emits warning if it tries to make implicit instantiation\nof a template but cannot find the template definition. The warning can be suppressed\nby explicit instantiation declaration or by command line options\n-Wundefined-var-template and -Wundefined-func-template. The implementation follows\nthe discussion of http://reviews.llvm.org/D12326.\n\nDifferential Revision: http://reviews.llvm.org/D16396\n\nllvm-svn: 266719"},
[h]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",4901,"/// Instantiate the definition of the given function from its\n/// template.\n///\n/// \\param PointOfInstantiation the point at which the instantiation was\n/// required. Note that this is not precisely a \"point of instantiation\"\n/// for the function, but it\'s close.\n///\n/// \\param Function the already-instantiated declaration of a\n/// function template specialization or member function of a class template\n/// specialization.\n///\n/// \\param Recursive if true, recursively instantiates any functions that\n/// are required by this instantiation.\n///\n/// \\param DefinitionRequired if true, then we are performing an explicit\n/// instantiation where the body of the function is required. Complain if\n/// there is no such body.\nvoid Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, FunctionDecl *Function, bool Recursive, bool DefinitionRequired, bool AtEndOfTU) {\n  // ...\n  // FIXME: We need to track the instantiation stack in order to know which\n  // definitions should be visible within this instantiation.\n  if (DiagnoseUninstantiableTemplate(PointOfInstantiation, Function, Function->getInstantiatedFromMemberFunction(), PatternDecl, PatternDef, TSK,\n    // ...\n    if (DefinitionRequired)\n    // ...\n    else if (TSK == TSK_ExplicitInstantiationDefinition || (Function->isConstexpr() && !Recursive)) {\n    // ...\n    } else if (TSK == TSK_ImplicitInstantiation) {\n      if (AtEndOfTU && !getDiagnostics().hasErrorOccurred() && !getSourceManager().isInSystemHeader(PatternDecl->getBeginLoc())) {\n        Diag(PointOfInstantiation, diag::warn_func_template_missing) << Function;"}},
[h]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",4901,"/// Instantiate the definition of the given function from its\n/// template.\n///\n/// \\param PointOfInstantiation the point at which the instantiation was\n/// required. Note that this is not precisely a \"point of instantiation\"\n/// for the function, but it\'s close.\n///\n/// \\param Function the already-instantiated declaration of a\n/// function template specialization or member function of a class template\n/// specialization.\n///\n/// \\param Recursive if true, recursively instantiates any functions that\n/// are required by this instantiation.\n///\n/// \\param DefinitionRequired if true, then we are performing an explicit\n/// instantiation where the body of the function is required. Complain if\n/// there is no such body.\nvoid Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, FunctionDecl *Function, bool Recursive, bool DefinitionRequired, bool AtEndOfTU) {\n  // ...\n  // FIXME: We need to track the instantiation stack in order to know which\n  // definitions should be visible within this instantiation.\n  if (DiagnoseUninstantiableTemplate(PointOfInstantiation, Function, Function->getInstantiatedFromMemberFunction(), PatternDecl, PatternDef, TSK,\n    // ...\n    if (DefinitionRequired)\n    // ...\n    else if (TSK == TSK_ExplicitInstantiationDefinition || (Function->isConstexpr() && !Recursive)) {\n    // ...\n    } else if (TSK == TSK_ImplicitInstantiation) {\n      if (AtEndOfTU && !getDiagnostics().hasErrorOccurred() && !getSourceManager().isInSystemHeader(PatternDecl->getBeginLoc())) {\n        Diag(PointOfInstantiation, diag::warn_func_template_missing) << Function;"}},
[k]={
[l]={
["clang/test/SemaTemplate/undefined-template.cpp"]={"clang/test/SemaTemplate/undefined-template.cpp:48:12: warning: instantiation of function \'C1<int>::s_func_1\' required here, but no definition is available [-Wundefined-func-template]","clang/test/SemaTemplate/undefined-template.cpp:57:13: warning: instantiation of function \'C1<char>::s_func_2\' required here, but no definition is available [-Wundefined-func-template]","clang/test/SemaTemplate/undefined-template.cpp:62:6: warning: instantiation of function \'C1<int>::meth_1\' required here, but no definition is available [-Wundefined-func-template]","clang/test/SemaTemplate/undefined-template.cpp:71:6: warning: instantiation of function \'C1<char>::meth_1\' required here, but no definition is available [-Wundefined-func-template]","clang/test/SemaTemplate/undefined-template.cpp:89:12: warning: instantiation of function \'C1<int>::s_tfunc_2<long>\' required here, but no definition is available [-Wundefined-func-template]","clang/test/SemaTemplate/undefined-template.cpp:107:22: warning: instantiation of function \'C1<int>::C2<char>::s_func_2\' required here, but no definition is available [-Wundefined-func-template]","clang/test/SemaTemplate/undefined-template.cpp:116:6: warning: instantiation of function \'C1<int>::C2<char>::meth_2\' required here, but no definition is available [-Wundefined-func-template]","clang/test/SemaTemplate/undefined-template.cpp:134:6: warning: instantiation of function \'C1<int>::C2<long>::tmeth_2<int>\' required here, but no definition is available [-Wundefined-func-template]"}
["clang/test/SemaTemplate/undefined-template.cpp"]={"clang/test/SemaTemplate/undefined-template.cpp:48:12: warning: instantiation of function \'C1<int>::s_func_1\' required here, but no definition is available [-Wundefined-func-template]","clang/test/SemaTemplate/undefined-template.cpp:57:13: warning: instantiation of function \'C1<char>::s_func_2\' required here, but no definition is available [-Wundefined-func-template]","clang/test/SemaTemplate/undefined-template.cpp:62:6: warning: instantiation of function \'C1<int>::meth_1\' required here, but no definition is available [-Wundefined-func-template]","clang/test/SemaTemplate/undefined-template.cpp:71:6: warning: instantiation of function \'C1<char>::meth_1\' required here, but no definition is available [-Wundefined-func-template]","clang/test/SemaTemplate/undefined-template.cpp:89:12: warning: instantiation of function \'C1<int>::s_tfunc_2<long>\' required here, but no definition is available [-Wundefined-func-template]","clang/test/SemaTemplate/undefined-template.cpp:107:22: warning: instantiation of function \'C1<int>::C2<char>::s_func_2\' required here, but no definition is available [-Wundefined-func-template]","clang/test/SemaTemplate/undefined-template.cpp:116:6: warning: instantiation of function \'C1<int>::C2<char>::meth_2\' required here, but no definition is available [-Wundefined-func-template]","clang/test/SemaTemplate/undefined-template.cpp:134:6: warning: instantiation of function \'C1<int>::C2<long>::tmeth_2<int>\' required here, but no definition is available [-Wundefined-func-template]"}
}
}
},
},
["warn_function_attribute_ignored_in_stmt"]={
["warn_function_attribute_ignored_in_stmt"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]={{nil,kb,"attribute is ignored on this statement as it only applies to functions; use \'%0\' on statements"}},
[c]={{nil,C,"warn_function_attribute_ignored_in_stmt"}},
[d]=g,
[d]={{nil,C,"attribute is ignored on this statement as it only applies to functions; use \'%0\' on statements"}},
[e]="attribute is ignored on this statement as it only applies to functions; use \'(.*?)\' on statements",
[e]=i,
[f]=vb,
[g]="attribute is ignored on this statement as it only applies to functions; use \'(.*?)\' on statements",
[b]=l,
[a]=Db,
[a]={fd,1620118562,ld,kd},
[b]={{nil,C,m}},
[f]={jd,1620118562,td,sd},
[h]={{"clang/lib/Sema/SemaStmtAttr.cpp",276,"static Attr *handleNoInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  // ...\n  if (!NIA.isClangNoInline()) {\n    S.Diag(St->getBeginLoc(), diag::warn_function_attribute_ignored_in_stmt) << \"[[clang::noinline]]\";"},{"clang/lib/Sema/SemaStmtAttr.cpp",291,"static Attr *handleAlwaysInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  // ...\n  if (!AIA.isClangAlwaysInline()) {\n    S.Diag(St->getBeginLoc(), diag::warn_function_attribute_ignored_in_stmt) << \"[[clang::always_inline]]\";"}},
[h]={{"clang/lib/Sema/SemaStmtAttr.cpp",276,"static Attr *handleNoInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  // ...\n  if (!NIA.isClangNoInline()) {\n    S.Diag(St->getBeginLoc(), diag::warn_function_attribute_ignored_in_stmt) << \"[[clang::noinline]]\";"},{"clang/lib/Sema/SemaStmtAttr.cpp",291,"static Attr *handleAlwaysInlineAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  // ...\n  if (!AIA.isClangAlwaysInline()) {\n    S.Diag(St->getBeginLoc(), diag::warn_function_attribute_ignored_in_stmt) << \"[[clang::always_inline]]\";"}},
[k]={
[l]={
["clang/test/Sema/attr-alwaysinline.cpp"]={"clang/test/Sema/attr-alwaysinline.cpp:24:26: warning: attribute is ignored on this statement as it only applies to functions; use \'[[clang::always_inline]]\' on statements [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:25:34: warning: attribute is ignored on this statement as it only applies to functions; use \'[[clang::always_inline]]\' on statements [-Wignored-attributes]"}
["clang/test/Sema/attr-alwaysinline.cpp"]={"clang/test/Sema/attr-alwaysinline.cpp:24:26: warning: attribute is ignored on this statement as it only applies to functions; use \'[[clang::always_inline]]\' on statements [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:25:34: warning: attribute is ignored on this statement as it only applies to functions; use \'[[clang::always_inline]]\' on statements [-Wignored-attributes]"}
}
}
},
},
["warn_function_def_in_objc_container"]={
["warn_function_def_in_objc_container"]={
[j]={"function-def-in-objc-container"},
[k]={"function-def-in-objc-container"},
[i]="function-def-in-objc-container",
[j]="function-def-in-objc-container",
[c]="function definition inside an Objective-C container is deprecated",
[c]="warn_function_def_in_objc_container",
[d]=g,
[d]="function definition inside an Objective-C container is deprecated",
[e]="function definition inside an Objective\\-C container is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfunction\\-def\\-in\\-objc\\-container[^\\]]*\\]",
[g]="function definition inside an Objective\\-C container is deprecated",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wfunction\\-def\\-in\\-objc\\-container[^\\]]*\\]",
[a]={"3451df8f5dfc",1401296555,"Objective-C. Deprecate use of function definitions","Objective-C. Deprecate use of function definitions\nin Objective-C container declarations (but not\nin their definitions. // rdar://10414277\n\nllvm-svn: 209751"},
[b]=m,
[h]={{D,15430,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  if (getCurLexicalContext()->isObjCContainer() && getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation)\n    Diag(FD->getLocation(), diag::warn_function_def_in_objc_container);"}},
[f]={"3451df8f5dfc",1401296555,"Objective-C. Deprecate use of function definitions","Objective-C. Deprecate use of function definitions\nin Objective-C container declarations (but not\nin their definitions. // rdar://10414277\n\nllvm-svn: 209751"},
[k]={
[h]={{M,15430,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  if (getCurLexicalContext()->isObjCContainer() && getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation)\n    Diag(FD->getLocation(), diag::warn_function_def_in_objc_container);"}},
[l]={
["clang/test/SemaObjC/deprecate_function_containers.m"]={"clang/test/SemaObjC/deprecate_function_containers.m:5:6: warning: function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]","clang/test/SemaObjC/deprecate_function_containers.m:9:6: warning: function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]","clang/test/SemaObjC/deprecate_function_containers.m:10:13: warning: function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]","clang/test/SemaObjC/deprecate_function_containers.m:11:12: warning: function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]","clang/test/SemaObjC/deprecate_function_containers.m:12:19: warning: function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]","clang/test/SemaObjC/deprecate_function_containers.m:16:6: warning: function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]","clang/test/SemaObjC/deprecate_function_containers.m:32:20: warning: function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]"}
["clang/test/SemaObjC/deprecate_function_containers.m"]={"clang/test/SemaObjC/deprecate_function_containers.m:5:6: warning: function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]","clang/test/SemaObjC/deprecate_function_containers.m:9:6: warning: function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]","clang/test/SemaObjC/deprecate_function_containers.m:10:13: warning: function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]","clang/test/SemaObjC/deprecate_function_containers.m:11:12: warning: function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]","clang/test/SemaObjC/deprecate_function_containers.m:12:19: warning: function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]","clang/test/SemaObjC/deprecate_function_containers.m:16:6: warning: function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]","clang/test/SemaObjC/deprecate_function_containers.m:32:20: warning: function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]"}
}
}
},
},
["warn_function_stmt_attribute_precedence"]={
["warn_function_stmt_attribute_precedence"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]={{nil,kb,"statement attribute %0 has higher precedence than function attribute \'%select{always_inline|flatten|noinline}1\'"}},
[c]={{nil,C,"warn_function_stmt_attribute_precedence"}},
[d]=g,
[d]={{nil,C,"statement attribute %0 has higher precedence than function attribute \'%select{always_inline|flatten|noinline}1\'"}},
[e]="statement attribute (.*?) has higher precedence than function attribute \'(?:always_inline|flatten|noinline)\'",
[e]=i,
[f]=vb,
[g]="statement attribute (.*?) has higher precedence than function attribute \'(?:always_inline|flatten|noinline)\'",
[b]=l,
[a]=Db,
[a]={fd,1620118562,ld,kd},
[b]={{nil,C,m}},
[f]={jd,1620118562,td,sd},
[h]={{"clang/lib/Sema/SemaStmtAttr.cpp",252,"template <typename OtherAttr, int DiagIdx> static bool CheckStmtInlineAttr(Sema &SemaRef, const Stmt *OrigSt, const Stmt *CurSt, const AttributeCommonInfo &A) {\n  // ...\n  for (const auto &Tup : llvm::zip_longest(OrigCEF.getCallExprs(), CEF.getCallExprs())) {\n    // If the original call expression already had a callee, we already\n    // diagnosed this, so skip it here. We can\'t skip if there isn\'t a 1:1\n    // relationship between the two lists of call expressions.\n    if (!CanSuppressDiag || !(*std::get<0>(Tup))->getCalleeDecl()) {\n      // ...\n      if (Callee && (Callee->hasAttr<OtherAttr>() || Callee->hasAttr<FlattenAttr>())) {\n        SemaRef.Diag(CurSt->getBeginLoc(), diag::warn_function_stmt_attribute_precedence) << A << (Callee->hasAttr<OtherAttr>() ? DiagIdx : 1);"}},
[h]={{"clang/lib/Sema/SemaStmtAttr.cpp",252,"template <typename OtherAttr, int DiagIdx> static bool CheckStmtInlineAttr(Sema &SemaRef, const Stmt *OrigSt, const Stmt *CurSt, const AttributeCommonInfo &A) {\n  // ...\n  for (const auto &Tup : llvm::zip_longest(OrigCEF.getCallExprs(), CEF.getCallExprs())) {\n    // If the original call expression already had a callee, we already\n    // diagnosed this, so skip it here. We can\'t skip if there isn\'t a 1:1\n    // relationship between the two lists of call expressions.\n    if (!CanSuppressDiag || !(*std::get<0>(Tup))->getCalleeDecl()) {\n      // ...\n      if (Callee && (Callee->hasAttr<OtherAttr>() || Callee->hasAttr<FlattenAttr>())) {\n        SemaRef.Diag(CurSt->getBeginLoc(), diag::warn_function_stmt_attribute_precedence) << A << (Callee->hasAttr<OtherAttr>() ? DiagIdx : 1);"}},
[k]={
[l]={
["clang/test/Sema/attr-alwaysinline.cpp"]={"clang/test/Sema/attr-alwaysinline.cpp:21:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:22:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'flatten\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:46:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:54:30: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:69:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:54:30: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:54:30: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:54:30: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:69:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:69:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:69:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:69:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]"}
["clang/test/Sema/attr-alwaysinline.cpp"]={"clang/test/Sema/attr-alwaysinline.cpp:21:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:22:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'flatten\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:46:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:54:30: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:69:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:54:30: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:54:30: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:54:30: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:69:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:69:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:69:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]","clang/test/Sema/attr-alwaysinline.cpp:69:28: warning: statement attribute \'always_inline\' has higher precedence than function attribute \'noinline\' [-Wignored-attributes]"}
}
}
},
},
["warn_gc_attribute_weak_on_local"]={
["warn_gc_attribute_weak_on_local"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]="Objective-C GC does not allow weak variables on the stack",
[c]="warn_gc_attribute_weak_on_local",
[d]=g,
[d]="Objective-C GC does not allow weak variables on the stack",
[e]="Objective\\-C GC does not allow weak variables on the stack",
[e]=i,
[f]=vb,
[g]="Objective\\-C GC does not allow weak variables on the stack",
[b]=l,
[a]=Db,
[a]={"c32830cd6469",1307477746,"More coherent diagnostic when a stack variable is","More coherent diagnostic when a stack variable is\ndeclared __weak objc-gc mode.  // rdar://9666091.\n\nllvm-svn: 132731"},
[b]=m,
[h]={{D,8648,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (NewVD->hasLocalStorage() && T.isObjCGCWeak() && !NewVD->hasAttr<BlocksAttr>()) {\n    if (getLangOpts().getGC() != LangOptions::NonGC)\n      Diag(NewVD->getLocation(), diag::warn_gc_attribute_weak_on_local);"}},
[f]={"c32830cd6469",1307477746,"More coherent diagnostic when a stack variable is","More coherent diagnostic when a stack variable is\ndeclared __weak objc-gc mode.  // rdar://9666091.\n\nllvm-svn: 132731"},
[k]={
[h]={{M,8648,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (NewVD->hasLocalStorage() && T.isObjCGCWeak() && !NewVD->hasAttr<BlocksAttr>()) {\n    if (getLangOpts().getGC() != LangOptions::NonGC)\n      Diag(NewVD->getLocation(), diag::warn_gc_attribute_weak_on_local);"}},
[l]={
["clang/test/SemaObjC/objc2-warn-weak-decl.m"]={"clang/test/SemaObjC/objc2-warn-weak-decl.m:9:14: warning: Objective-C GC does not allow weak variables on the stack [-Wignored-attributes]"}
["clang/test/SemaObjC/objc2-warn-weak-decl.m"]={"clang/test/SemaObjC/objc2-warn-weak-decl.m:9:14: warning: Objective-C GC does not allow weak variables on the stack [-Wignored-attributes]"}
}
}
},
},
["warn_gcc_attribute_location"]={
["warn_gcc_attribute_location"]={
[j]={Cc},
[k]={Bc},
[i]=Cc,
[j]=Bc,
[c]="GCC does not allow an attribute in this position on a function declaration",
[c]="warn_gcc_attribute_location",
[d]=g,
[d]="GCC does not allow an attribute in this position on a function declaration",
[e]="GCC does not allow an attribute in this position on a function declaration",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[g]="GCC does not allow an attribute in this position on a function declaration",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[a]={"5d153e313394",1407171831,"Diagnose GNU-style attributes preceding virt-specifiers, but only when the attribute is known to GCC...","Diagnose GNU-style attributes preceding virt-specifiers, but only when the attribute is known to GCC. Clang accepts attributes in this position, but\nGCC does not, so this is a GCC-compat warning. If the attribute is not known to GCC, then the diagnostic is suppressed.\n\nllvm-svn: 214730"},
[b]=A,
[h]={{bb,2566,"/// Parse a C++ member-declarator up to, but not including, the optional\n/// brace-or-equal-initializer or pure-specifier.\nbool Parser::ParseCXXMemberDeclaratorBeforeInitializer(Declarator &DeclaratorInfo, VirtSpecifiers &VS, ExprResult &BitfieldSize, LateParsedAttrList &LateParsedAttrs) {\n  // ...\n  // For compatibility with code written to older Clang, also accept a\n  // virt-specifier *after* the GNU attributes.\n  if (BitfieldSize.isUnset() && VS.isUnset()) {\n    // ...\n    if (!VS.isUnset()) {\n      // If we saw any GNU-style attributes that are known to GCC followed by a\n      // virt-specifier, issue a GCC-compat warning.\n      for (const ParsedAttr &AL : DeclaratorInfo.getAttributes())\n        if (AL.isKnownToGCC() && !AL.isCXX11Attribute())\n          Diag(AL.getLoc(), diag::warn_gcc_attribute_location);"}},
[f]={"5d153e313394",1407171831,"Diagnose GNU-style attributes preceding virt-specifiers, but only when the attribute is known to GCC...","Diagnose GNU-style attributes preceding virt-specifiers, but only when the attribute is known to GCC. Clang accepts attributes in this position, but\nGCC does not, so this is a GCC-compat warning. If the attribute is not known to GCC, then the diagnostic is suppressed.\n\nllvm-svn: 214730"},
[k]={
[h]={{kb,2566,"/// Parse a C++ member-declarator up to, but not including, the optional\n/// brace-or-equal-initializer or pure-specifier.\nbool Parser::ParseCXXMemberDeclaratorBeforeInitializer(Declarator &DeclaratorInfo, VirtSpecifiers &VS, ExprResult &BitfieldSize, LateParsedAttrList &LateParsedAttrs) {\n  // ...\n  // For compatibility with code written to older Clang, also accept a\n  // virt-specifier *after* the GNU attributes.\n  if (BitfieldSize.isUnset() && VS.isUnset()) {\n    // ...\n    if (!VS.isUnset()) {\n      // If we saw any GNU-style attributes that are known to GCC followed by a\n      // virt-specifier, issue a GCC-compat warning.\n      for (const ParsedAttr &AL : DeclaratorInfo.getAttributes())\n        if (AL.isKnownToGCC() && !AL.isCXX11Attribute())\n          Diag(AL.getLoc(), diag::warn_gcc_attribute_location);"}},
[l]={
["clang/test/SemaCXX/attr-gnu.cpp"]={"clang/test/SemaCXX/attr-gnu.cpp:32:30: warning: GCC does not allow an attribute in this position on a function declaration [-Wgcc-compat]"}
["clang/test/SemaCXX/attr-gnu.cpp"]={"clang/test/SemaCXX/attr-gnu.cpp:32:30: warning: GCC does not allow an attribute in this position on a function declaration [-Wgcc-compat]"}
}
}
},
},
["warn_gcc_ignores_type_attr"]={
["warn_gcc_ignores_type_attr"]={
[j]={Cc},
[k]={Bc},
[i]=Cc,
[j]=Bc,
[c]={{nil,eb,"GCC does not allow the %0 attribute to be written on a type"}},
[c]={{nil,D,"warn_gcc_ignores_type_attr"}},
[d]=g,
[d]={{nil,D,"GCC does not allow the %0 attribute to be written on a type"}},
[e]="GCC does not allow the (.*?) attribute to be written on a type",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[g]="GCC does not allow the (.*?) attribute to be written on a type",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[a]={"b9a457af35b2",1525361630,"Allow writing calling convention attributes on function types.","Allow writing calling convention attributes on function types.\n\nCalling convention attributes notionally appertain to the function type -- they modify the mangling of the function, change the behavior of assignment operations, etc. This commit allows the calling convention attributes to be written in the type position as well as the declaration position.\n\nllvm-svn: 331459"},
[b]={{nil,D,m}},
[h]={{Jb,8545,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  // ...\n  for (ParsedAttr &attr : AttrsCopy) {\n    // ...\n    if (attr.isStandardAttributeSyntax() || attr.isRegularKeywordAttribute()) {\n      // [[gnu::...]] attributes are treated as declaration attributes, so may\n      // not appertain to a DeclaratorChunk. If we handle them as type\n      // attributes, accept them in that position and diagnose the GCC\n      // incompatibility.\n      if (attr.isGNUScope()) {\n        // ...\n        if (TAL == TAL_DeclChunk) {\n          state.getSema().Diag(attr.getLoc(), IsTypeAttr ? diag::warn_gcc_ignores_type_attr : diag::warn_cxx11_gnu_attribute_on_type) << attr;"}},
[f]={"b9a457af35b2",1525361630,"Allow writing calling convention attributes on function types.","Allow writing calling convention attributes on function types.\n\nCalling convention attributes notionally appertain to the function type -- they modify the mangling of the function, change the behavior of assignment operations, etc. This commit allows the calling convention attributes to be written in the type position as well as the declaration position.\n\nllvm-svn: 331459"},
[k]={
[h]={{Nb,8545,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  // ...\n  for (ParsedAttr &attr : AttrsCopy) {\n    // ...\n    if (attr.isStandardAttributeSyntax() || attr.isRegularKeywordAttribute()) {\n      // [[gnu::...]] attributes are treated as declaration attributes, so may\n      // not appertain to a DeclaratorChunk. If we handle them as type\n      // attributes, accept them in that position and diagnose the GCC\n      // incompatibility.\n      if (attr.isGNUScope()) {\n        // ...\n        if (TAL == TAL_DeclChunk) {\n          state.getSema().Diag(attr.getLoc(), IsTypeAttr ? diag::warn_gcc_ignores_type_attr : diag::warn_cxx11_gnu_attribute_on_type) << attr;"}},
[l]={
["clang/test/Sema/vector-gcc-compat.c"]={"clang/test/Sema/vector-gcc-compat.c:35:22: warning: GCC does not allow the \'vector_size\' attribute to be written on a type [-Wgcc-compat]"}
["clang/test/Sema/vector-gcc-compat.c"]={"clang/test/Sema/vector-gcc-compat.c:35:22: warning: GCC does not allow the \'vector_size\' attribute to be written on a type [-Wgcc-compat]"}
}
}
},
},
["warn_gcc_requires_variadic_function"]={
["warn_gcc_requires_variadic_function"]={
[j]={Cc},
[k]={Bc},
[i]=Cc,
[j]=Bc,
[c]={{nil,kb,"GCC requires a function with the %0 attribute to be variadic"}},
[c]={{nil,C,"warn_gcc_requires_variadic_function"}},
[d]=g,
[d]={{nil,C,"GCC requires a function with the %0 attribute to be variadic"}},
[e]="GCC requires a function with the (.*?) attribute to be variadic",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[g]="GCC requires a function with the (.*?) attribute to be variadic",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[a]={Eb,1625925174,Fb,Hb},
[b]={{nil,C,m}},
[h]={{E,4032,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // FirstArg == 0 is is always valid.\n  if (FirstArg != 0) {\n    if (Kind == StrftimeFormat) {\n    // ...\n    } else if (isFunctionOrMethodVariadic(D)) {\n    // ...\n    } else {\n      // ...\n      S.Diag(D->getLocation(), diag::warn_gcc_requires_variadic_function) << AL;"}},
[f]={Lb,1625925174,Kb,Jb},
[k]={
[h]={{N,4032,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // FirstArg == 0 is is always valid.\n  if (FirstArg != 0) {\n    if (Kind == StrftimeFormat) {\n    // ...\n    } else if (isFunctionOrMethodVariadic(D)) {\n    // ...\n    } else {\n      // ...\n      S.Diag(D->getLocation(), diag::warn_gcc_requires_variadic_function) << AL;"}},
[l]={
["clang/test/Sema/attr-format.c"]={"clang/test/Sema/attr-format.c:8:6: warning: GCC requires a function with the \'format\' attribute to be variadic [-Wgcc-compat]","clang/test/Sema/attr-format.c:44:6: warning: GCC requires a function with the \'format\' attribute to be variadic [-Wgcc-compat]","clang/test/Sema/attr-format.c:66:6: warning: GCC requires a function with the \'format\' attribute to be variadic [-Wgcc-compat]","clang/test/Sema/attr-format.c:97:44: warning: GCC requires a function with the \'format\' attribute to be variadic [-Wgcc-compat]","clang/test/Sema/attr-format.c:102:44: warning: GCC requires a function with the \'format\' attribute to be variadic [-Wgcc-compat]"}
["clang/test/Sema/attr-format.c"]={"clang/test/Sema/attr-format.c:8:6: warning: GCC requires a function with the \'format\' attribute to be variadic [-Wgcc-compat]","clang/test/Sema/attr-format.c:44:6: warning: GCC requires a function with the \'format\' attribute to be variadic [-Wgcc-compat]","clang/test/Sema/attr-format.c:66:6: warning: GCC requires a function with the \'format\' attribute to be variadic [-Wgcc-compat]","clang/test/Sema/attr-format.c:97:44: warning: GCC requires a function with the \'format\' attribute to be variadic [-Wgcc-compat]","clang/test/Sema/attr-format.c:102:44: warning: GCC requires a function with the \'format\' attribute to be variadic [-Wgcc-compat]"}
}
}
},
},
["warn_gcc_variable_decl_in_for_loop"]={
["warn_gcc_variable_decl_in_for_loop"]={
[j]={Cc},
[k]={Bc},
[i]=Cc,
[j]=Bc,
[c]={{nil,eb,"GCC does not allow variable declarations in for loop initializers before C99"}},
[c]={{nil,D,"warn_gcc_variable_decl_in_for_loop"}},
[d]=g,
[d]={{nil,D,"GCC does not allow variable declarations in for loop initializers before C99"}},
[e]="GCC does not allow variable declarations in for loop initializers before C99",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[g]="GCC does not allow variable declarations in for loop initializers before C99",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[a]={"4d456455684c",1530221760,"[Parse] Make -Wgcc-compat complain about for loop inits in C89","[Parse] Make -Wgcc-compat complain about for loop inits in C89\n\nWhile clang allows declarations in for loop init statements in c89 and\ngnu89, gcc does not. So, we should probably warn if users care about gcc\ncompatibility.\n\nDifferential Revision: https://reviews.llvm.org/D47840\n\nllvm-svn: 335927"},
[b]={{nil,D,A}},
[f]={"4d456455684c",1530221760,"[Parse] Make -Wgcc-compat complain about for loop inits in C89","[Parse] Make -Wgcc-compat complain about for loop inits in C89\n\nWhile clang allows declarations in for loop init statements in c89 and\ngnu89, gcc does not. So, we should probably warn if users care about gcc\ncompatibility.\n\nDifferential Revision: https://reviews.llvm.org/D47840\n\nllvm-svn: 335927"},
[h]={{nc,2055,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  // Parse the first part of the for specifier.\n  if (Tok.is(tok::semi)) { // for (;\n  // ...\n  } else if (getLangOpts().CPlusPlus && Tok.is(tok::identifier) && isForRangeIdentifier()) {\n  // ...\n  } else if (isForInitDeclaration()) { // for (int X = 4;\n    // ...\n    // Parse declaration, which eats the \';\'.\n    if (!C99orCXXorObjC) { // Use of C99-style for loops in C90 mode?\n      // ...\n      Diag(Tok, diag::warn_gcc_variable_decl_in_for_loop);"}},
[h]={{nc,2055,"/// ParseForStatement\n///      for-statement: [C99 6.8.5.3]\n///        \'for\' \'(\' expr[opt] \';\' expr[opt] \';\' expr[opt] \')\' statement\n///        \'for\' \'(\' declaration expr[opt] \';\' expr[opt] \')\' statement\n/// [C++]  \'for\' \'(\' for-init-statement condition[opt] \';\' expression[opt] \')\'\n/// [C++]      statement\n/// [C++0x] \'for\'\n///            \'co_await\'[opt]    [Coroutines]\n///            \'(\' for-range-declaration \':\' for-range-initializer \')\'\n///            statement\n/// [OBJC2] \'for\' \'(\' declaration \'in\' expr \')\' statement\n/// [OBJC2] \'for\' \'(\' expr \'in\' expr \')\' statement\n///\n/// [C++] for-init-statement:\n/// [C++]  expression-statement\n/// [C++]  simple-declaration\n/// [C++23] alias-declaration\n///\n/// [C++0x] for-range-declaration:\n/// [C++0x]  attribute-specifier-seq[opt] type-specifier-seq declarator\n/// [C++0x] for-range-initializer:\n/// [C++0x]  expression\n/// [C++0x]  braced-init-list            [TODO]\nStmtResult Parser::ParseForStatement(SourceLocation *TrailingElseLoc) {\n  // ...\n  // Parse the first part of the for specifier.\n  if (Tok.is(tok::semi)) { // for (;\n  // ...\n  } else if (getLangOpts().CPlusPlus && Tok.is(tok::identifier) && isForRangeIdentifier()) {\n  // ...\n  } else if (isForInitDeclaration()) { // for (int X = 4;\n    // ...\n    // Parse declaration, which eats the \';\'.\n    if (!C99orCXXorObjC) { // Use of C99-style for loops in C90 mode?\n      // ...\n      Diag(Tok, diag::warn_gcc_variable_decl_in_for_loop);"}},
[k]={
[l]={
["clang/test/Parser/gcc-for-loop-init-compatibility.c"]={"clang/test/Parser/gcc-for-loop-init-compatibility.c:13:8: warning: GCC does not allow variable declarations in for loop initializers before C99 [-Wgcc-compat]"}
["clang/test/Parser/gcc-for-loop-init-compatibility.c"]={"clang/test/Parser/gcc-for-loop-init-compatibility.c:13:8: warning: GCC does not allow variable declarations in for loop initializers before C99 [-Wgcc-compat]"}
}
}
},
},
["warn_global_constructor"]={
["warn_global_constructor"]={
[j]={"global-constructors"},
[k]={"global-constructors"},
[i]="global-constructors",
[j]="global-constructors",
[c]="declaration requires a global constructor",
[c]="warn_global_constructor",
[d]=g,
[d]="declaration requires a global constructor",
[e]="declaration requires a global constructor",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wglobal\\-constructors[^\\]]*\\]",
[g]="declaration requires a global constructor",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wglobal\\-constructors[^\\]]*\\]",
[a]={"47e40931c9af",1280694059,"Make a first pass at implementing -Wglobal-constructors.  I\'m worried that this","Make a first pass at implementing -Wglobal-constructors.  I\'m worried that this\nwill end up bizarrely mirroring CGExprConstant, but that might be the hazard of\nthis feature.\n\nllvm-svn: 109984"},
[b]=m,
[h]={{D,14234,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    // ...\n    } else if (IsGlobal && !getDiagnostics().isIgnored(diag::warn_global_constructor, var->getLocation())) {"},{D,14245,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    // ...\n    if (HasConstInit) {\n    // ...\n    } else if (var->isConstexpr()) {\n    // ...\n    } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n    // ...\n    } else if (IsGlobal && !getDiagnostics().isIgnored(diag::warn_global_constructor, var->getLocation())) {\n      // ...\n      if (!(RD && !RD->hasTrivialDestructor())) {\n        // checkConstInit() here permits trivial default initialization even in\n        // C++11 onwards, where such an initializer is not a constant initializer\n        // but nonetheless doesn\'t require a global constructor.\n        if (!checkConstInit())\n          Diag(var->getLocation(), diag::warn_global_constructor) << Init->getSourceRange();"}},
[f]={"47e40931c9af",1280694059,"Make a first pass at implementing -Wglobal-constructors.  I\'m worried that this","Make a first pass at implementing -Wglobal-constructors.  I\'m worried that this\nwill end up bizarrely mirroring CGExprConstant, but that might be the hazard of\nthis feature.\n\nllvm-svn: 109984"},
[k]={
[h]={{M,14234,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    // ...\n    } else if (IsGlobal && !getDiagnostics().isIgnored(diag::warn_global_constructor, var->getLocation())) {"},{M,14245,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    // ...\n    if (HasConstInit) {\n    // ...\n    } else if (var->isConstexpr()) {\n    // ...\n    } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n    // ...\n    } else if (IsGlobal && !getDiagnostics().isIgnored(diag::warn_global_constructor, var->getLocation())) {\n      // ...\n      if (!(RD && !RD->hasTrivialDestructor())) {\n        // checkConstInit() here permits trivial default initialization even in\n        // C++11 onwards, where such an initializer is not a constant initializer\n        // but nonetheless doesn\'t require a global constructor.\n        if (!checkConstInit())\n          Diag(var->getLocation(), diag::warn_global_constructor) << Init->getSourceRange();"}},
[l]={
["clang/test/SemaCXX/warn-global-constructors.cpp"]={"clang/test/SemaCXX/warn-global-constructors.cpp:13:7: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:16:7: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:17:7: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:25:5: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:27:5: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:28:5: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:35:5: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:36:5: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:37:5: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:146:28: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:147:22: warning: declaration requires a global constructor [-Wglobal-constructors]"}
["clang/test/SemaCXX/warn-global-constructors.cpp"]={"clang/test/SemaCXX/warn-global-constructors.cpp:13:7: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:16:7: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:17:7: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:25:5: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:27:5: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:28:5: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:35:5: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:36:5: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:37:5: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:146:28: warning: declaration requires a global constructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:147:22: warning: declaration requires a global constructor [-Wglobal-constructors]"}
}
}
},
},
["warn_global_destructor"]={
["warn_global_destructor"]={
[j]={"global-constructors"},
[k]={"global-constructors"},
[i]="global-constructors",
[j]="global-constructors",
[c]="declaration requires a global destructor",
[c]="warn_global_destructor",
[d]=g,
[d]="declaration requires a global destructor",
[e]="declaration requires a global destructor",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wglobal\\-constructors[^\\]]*\\]",
[g]="declaration requires a global destructor",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wglobal\\-constructors[^\\]]*\\]",
[a]={"47e40931c9af",1280694059,"Make a first pass at implementing -Wglobal-constructors.  I\'m worried that this","Make a first pass at implementing -Wglobal-constructors.  I\'m worried that this\nwill end up bizarrely mirroring CGExprConstant, but that might be the hazard of\nthis feature.\n\nllvm-svn: 109984"},
[b]=m,
[h]={{C,15901,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // ...\n  // TODO: this should be re-enabled for static locals by !CXAAtExit\n  if (!VD->isStaticLocal())\n    Diag(VD->getLocation(), diag::warn_global_destructor);"}},
[f]={"47e40931c9af",1280694059,"Make a first pass at implementing -Wglobal-constructors.  I\'m worried that this","Make a first pass at implementing -Wglobal-constructors.  I\'m worried that this\nwill end up bizarrely mirroring CGExprConstant, but that might be the hazard of\nthis feature.\n\nllvm-svn: 109984"},
[k]={
[h]={{L,15901,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // ...\n  // TODO: this should be re-enabled for static locals by !CXAAtExit\n  if (!VD->isStaticLocal())\n    Diag(VD->getLocation(), diag::warn_global_destructor);"}},
[l]={
["clang/test/SemaCXX/warn-global-constructors.cpp"]={"clang/test/SemaCXX/warn-global-constructors.cpp:46:5: warning: declaration requires a global destructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:47:5: warning: declaration requires a global destructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:48:5: warning: declaration requires a global destructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:112:5: warning: declaration requires a global destructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:165:5: warning: declaration requires a global destructor [-Wglobal-constructors]"}
["clang/test/SemaCXX/warn-global-constructors.cpp"]={"clang/test/SemaCXX/warn-global-constructors.cpp:46:5: warning: declaration requires a global destructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:47:5: warning: declaration requires a global destructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:48:5: warning: declaration requires a global destructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:112:5: warning: declaration requires a global destructor [-Wglobal-constructors]","clang/test/SemaCXX/warn-global-constructors.cpp:165:5: warning: declaration requires a global destructor [-Wglobal-constructors]"}
}
}
},
},
["warn_gnu_inline_attribute_requires_inline"]={
["warn_gnu_inline_attribute_requires_inline"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]="\'gnu_inline\' attribute requires function to be marked \'inline\', attribute ignored",
[c]="warn_gnu_inline_attribute_requires_inline",
[d]=g,
[d]="\'gnu_inline\' attribute requires function to be marked \'inline\', attribute ignored",
[e]="\'gnu_inline\' attribute requires function to be marked \'inline\', attribute ignored",
[e]=i,
[f]=vb,
[g]="\'gnu_inline\' attribute requires function to be marked \'inline\', attribute ignored",
[b]=l,
[a]=Db,
[a]={"ddf6ca0355a8",1240254748,"the __gnuc_inline__ attribute is actually named __gnu_inline__,","the __gnuc_inline__ attribute is actually named __gnu_inline__,\nPR4023\n\nllvm-svn: 69618"},
[b]=m,
[h]={{E,5105,"static void handleGNUInlineAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!Fn->isInlineSpecified()) {\n    S.Diag(AL.getLoc(), diag::warn_gnu_inline_attribute_requires_inline);"}},
[f]={"ddf6ca0355a8",1240254748,"the __gnuc_inline__ attribute is actually named __gnu_inline__,","the __gnuc_inline__ attribute is actually named __gnu_inline__,\nPR4023\n\nllvm-svn: 69618"},
[k]={
[h]={{N,5105,"static void handleGNUInlineAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!Fn->isInlineSpecified()) {\n    S.Diag(AL.getLoc(), diag::warn_gnu_inline_attribute_requires_inline);"}},
[l]={
["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:71:16: warning: \'gnu_inline\' attribute requires function to be marked \'inline\', attribute ignored [-Wignored-attributes]"}
["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:71:16: warning: \'gnu_inline\' attribute requires function to be marked \'inline\', attribute ignored [-Wignored-attributes]"}
}
}
},
},
["warn_gnu_inline_cplusplus_without_extern"]={
["warn_gnu_inline_cplusplus_without_extern"]={
[j]={"gnu-inline-cpp-without-extern"},
[k]={"gnu-inline-cpp-without-extern"},
[i]="gnu-inline-cpp-without-extern",
[j]="gnu-inline-cpp-without-extern",
[c]={{nil,z,"\'gnu_inline\' attribute without \'extern\' in C++ treated as externally available, this changed in Clang 10"}},
[c]={{nil,q,"warn_gnu_inline_cplusplus_without_extern"}},
[d]=g,
[d]={{nil,q,"\'gnu_inline\' attribute without \'extern\' in C++ treated as externally available, this changed in Clang 10"}},
[e]="\'gnu_inline\' attribute without \'extern\' in C\\+\\+ treated as externally available, this changed in Clang 10",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wgnu\\-inline\\-cpp\\-without\\-extern[^\\]]*\\]",
[g]="\'gnu_inline\' attribute without \'extern\' in C\\+\\+ treated as externally available, this changed in Clang 10",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-inline\\-cpp\\-without\\-extern[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,m}},
[h]={{E,5110,"static void handleGNUInlineAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.LangOpts.CPlusPlus && Fn->getStorageClass() != SC_Extern)\n    S.Diag(AL.getLoc(), diag::warn_gnu_inline_cplusplus_without_extern);"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{N,5110,"static void handleGNUInlineAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.LangOpts.CPlusPlus && Fn->getStorageClass() != SC_Extern)\n    S.Diag(AL.getLoc(), diag::warn_gnu_inline_cplusplus_without_extern);"}},
[l]={
["clang/test/SemaCXX/gnu_inline.cpp"]={"clang/test/SemaCXX/gnu_inline.cpp:8:16: warning: \'gnu_inline\' attribute without \'extern\' in C++ treated as externally available, this changed in Clang 10 [-Wgnu-inline-cpp-without-extern]"}
["clang/test/SemaCXX/gnu_inline.cpp"]={"clang/test/SemaCXX/gnu_inline.cpp:8:16: warning: \'gnu_inline\' attribute without \'extern\' in C++ treated as externally available, this changed in Clang 10 [-Wgnu-inline-cpp-without-extern]"}
}
}
},
},
["warn_gnu_null_ptr_arith"]={
["warn_gnu_null_ptr_arith"]={
[j]={p,B,Fc,"gnu","gnu-null-pointer-arithmetic","null-pointer-arithmetic",id},
[k]={r,K,Ic,"gnu","gnu-null-pointer-arithmetic","null-pointer-arithmetic",hd},
[i]="gnu-null-pointer-arithmetic",
[j]="gnu-null-pointer-arithmetic",
[c]={{nil,lb,"arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension"}},
[c]={{nil,F,"warn_gnu_null_ptr_arith"}},
[d]=g,
[d]={{nil,F,"arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension"}},
[e]="arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wgnu\\-null\\-pointer\\-arithmetic[^\\]]*\\]",
[g]="arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-null\\-pointer\\-arithmetic[^\\]]*\\]",
[a]={"3d0a540857ed",1505852800,"Teach clang to tolerate the \'p = nullptr + n\' idiom used by glibc","Teach clang to tolerate the \'p = nullptr + n\' idiom used by glibc\n\nDifferential Revision: https://reviews.llvm.org/D37042\n\nllvm-svn: 313666"},
[b]={{nil,F,m}},
[h]={{K,11456,"/// Diagnose invalid arithmetic on a null pointer.\n///\n/// If \\p IsGNUIdiom is true, the operation is using the \'p = (i8*)nullptr + n\'\n/// idiom, which we recognize as a GNU extension.\n///\nstatic void diagnoseArithmeticOnNullPointer(Sema &S, SourceLocation Loc, Expr *Pointer, bool IsGNUIdiom) {\n  if (IsGNUIdiom)\n    S.Diag(Loc, diag::warn_gnu_null_ptr_arith) << Pointer->getSourceRange();"}},
[f]={"3d0a540857ed",1505852800,"Teach clang to tolerate the \'p = nullptr + n\' idiom used by glibc","Teach clang to tolerate the \'p = nullptr + n\' idiom used by glibc\n\nDifferential Revision: https://reviews.llvm.org/D37042\n\nllvm-svn: 313666"},
[k]={
[h]={{S,11456,"/// Diagnose invalid arithmetic on a null pointer.\n///\n/// If \\p IsGNUIdiom is true, the operation is using the \'p = (i8*)nullptr + n\'\n/// idiom, which we recognize as a GNU extension.\n///\nstatic void diagnoseArithmeticOnNullPointer(Sema &S, SourceLocation Loc, Expr *Pointer, bool IsGNUIdiom) {\n  if (IsGNUIdiom)\n    S.Diag(Loc, diag::warn_gnu_null_ptr_arith) << Pointer->getSourceRange();"}},
[l]={
["clang/test/SemaCXX/nullptr-arithmetic.cpp"]={"clang/test/SemaCXX/nullptr-arithmetic.cpp:14:22: warning: arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension [-Wgnu-null-pointer-arithmetic]"}
["clang/test/SemaCXX/nullptr-arithmetic.cpp"]={"clang/test/SemaCXX/nullptr-arithmetic.cpp:14:22: warning: arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension [-Wgnu-null-pointer-arithmetic]"}
}
}
},
},
["warn_guarded_pass_by_reference"]={
["warn_guarded_pass_by_reference"]={
[j]={Ac,"thread-safety-reference"},
[k]={Fc,"thread-safety-reference"},
[i]="thread-safety-reference",
[j]="thread-safety-reference",
[c]={{nil,eb,"passing variable %1 by reference requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"},{lb,nil,"passing variable \'%1\' by reference requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"}},
[c]="warn_guarded_pass_by_reference",
[d]=g,
[d]={{nil,D,"passing variable %1 by reference requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"},{F,nil,"passing variable \'%1\' by reference requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"}},
[e]="passing variable (.*?) by reference requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-reference[^\\]]*\\]",
[g]="passing variable (.*?) by reference requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-reference[^\\]]*\\]",
[a]={"c60dc2cfb9ad",1411081346,"Thread Safety Analysis: add new warning flag, -Wthread-safety-reference, which","Thread Safety Analysis: add new warning flag, -Wthread-safety-reference, which\nwarns when a guarded variable is passed by reference as a function argument.\nThis is released as a separate warning flag, because it could potentially\nbreak existing code that uses thread safety analysis.\n\nllvm-svn: 218087"},
[b]=m,
[h]={{gb,1970,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    // ...\n    if (PossibleMatch) {\n      // ...\n      case POK_PassByRef:\n        DiagID = diag::warn_guarded_pass_by_reference;"},{gb,2000,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    // ...\n    if (PossibleMatch) {\n    // ...\n    } else {\n      // ...\n      case POK_PassByRef:\n        DiagID = diag::warn_guarded_pass_by_reference;"}},
[f]={"c60dc2cfb9ad",1411081346,"Thread Safety Analysis: add new warning flag, -Wthread-safety-reference, which","Thread Safety Analysis: add new warning flag, -Wthread-safety-reference, which\nwarns when a guarded variable is passed by reference as a function argument.\nThis is released as a separate warning flag, because it could potentially\nbreak existing code that uses thread safety analysis.\n\nllvm-svn: 218087"},
[k]={
[h]={{qb,1970,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    // ...\n    if (PossibleMatch) {\n      // ...\n      case POK_PassByRef:\n        DiagID = diag::warn_guarded_pass_by_reference;"},{qb,2000,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    // ...\n    if (PossibleMatch) {\n    // ...\n    } else {\n      // ...\n      case POK_PassByRef:\n        DiagID = diag::warn_guarded_pass_by_reference;"}},
[l]={
["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={"clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5524:12: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5525:16: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5526:11: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5527:15: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5528:20: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5531:18: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5532:19: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5535:20: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5536:21: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5538:13: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5539:17: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5540:12: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5541:16: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5543:14: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5544:18: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5545:13: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5546:17: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5548:11: warning: passing variable \'foo2\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5550:11: warning: passing variable \'foo2\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5552:11: warning: passing variable \'foo2\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5554:9: warning: passing variable \'foo2\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5557:16: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]"}
["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={"clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5524:12: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5525:16: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5526:11: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5527:15: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5528:20: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5531:18: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5532:19: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5535:20: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5536:21: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5538:13: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5539:17: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5540:12: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5541:16: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5543:14: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5544:18: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5545:13: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5546:17: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5548:11: warning: passing variable \'foo2\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5550:11: warning: passing variable \'foo2\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5552:11: warning: passing variable \'foo2\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5554:9: warning: passing variable \'foo2\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5557:16: warning: passing variable \'foo\' by reference requires holding mutex \'mu\' [-Wthread-safety-reference]"}
}
}
},
},
["warn_has_warning_invalid_option"]={
["warn_has_warning_invalid_option"]={
[j]={"malformed-warning-check"},
[k]={"malformed-warning-check"},
[i]="malformed-warning-check",
[j]="malformed-warning-check",
[c]="__has_warning expected option name (e.g. \"-Wundef\")",
[c]="warn_has_warning_invalid_option",
[d]=g,
[d]="__has_warning expected option name (e.g. \"-Wundef\")",
[e]="__has_warning expected option name \\(e\\.g\\. \"\\-Wundef\"\\)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmalformed\\-warning\\-check[^\\]]*\\]",
[g]="__has_warning expected option name \\(e\\.g\\. \"\\-Wundef\"\\)",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wmalformed\\-warning\\-check[^\\]]*\\]",
[a]={"a35d67dfd927",1318448790,"Implement built-in macro \'__has_warning\', which allows one to query if a warning flag is valid.  Fix...","Implement built-in macro \'__has_warning\', which allows one to query if a warning flag is valid.  Fixes <rdar://problem/10263428>.\n\nllvm-svn: 141802"},
[b]=T,
[f]={"a35d67dfd927",1318448790,"Implement built-in macro \'__has_warning\', which allows one to query if a warning flag is valid.  Fix...","Implement built-in macro \'__has_warning\', which allows one to query if a warning flag is valid.  Fixes <rdar://problem/10263428>.\n\nllvm-svn: 141802"},
[h]={{"clang/lib/Lex/PPMacroExpansion.cpp",1821,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  } else if (II == Ident__has_constexpr_builtin) {\n  // ...\n  } else if (II == Ident__is_identifier) {\n  // ...\n  } else if (II == Ident__has_attribute) {\n  // ...\n  } else if (II == Ident__has_declspec) {\n  // ...\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  // ...\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n  // ...\n  } else if (II == Ident__has_warning) {\n    // The argument should be a parenthesized string literal.\n    EvaluateFeatureLikeBuiltinMacro(OS, Tok, II, *this, false, [this](Token &Tok, bool &HasLexedNextToken) -> int {\n      // ...\n      // FIXME: Should we accept \"-R...\" flags here, or should that be\n      // handled by a separate __has_remark?\n      if (WarningName.size() < 3 || WarningName[0] != \'-\' || WarningName[1] != \'W\') {\n        Diag(StrStartLoc, diag::warn_has_warning_invalid_option);"}},
[h]={{"clang/lib/Lex/PPMacroExpansion.cpp",1821,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  } else if (II == Ident__has_constexpr_builtin) {\n  // ...\n  } else if (II == Ident__is_identifier) {\n  // ...\n  } else if (II == Ident__has_attribute) {\n  // ...\n  } else if (II == Ident__has_declspec) {\n  // ...\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  // ...\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n  // ...\n  } else if (II == Ident__has_warning) {\n    // The argument should be a parenthesized string literal.\n    EvaluateFeatureLikeBuiltinMacro(OS, Tok, II, *this, false, [this](Token &Tok, bool &HasLexedNextToken) -> int {\n      // ...\n      // FIXME: Should we accept \"-R...\" flags here, or should that be\n      // handled by a separate __has_remark?\n      if (WarningName.size() < 3 || WarningName[0] != \'-\' || WarningName[1] != \'W\') {\n        Diag(StrStartLoc, diag::warn_has_warning_invalid_option);"}},
[k]={
[l]={
["clang/test/Preprocessor/warning_tests.c"]={"clang/test/Preprocessor/warning_tests.c:6:19: warning: __has_warning expected option name (e.g. \"-Wundef\") [-Wmalformed-warning-check]"}
["clang/test/Preprocessor/warning_tests.c"]={"clang/test/Preprocessor/warning_tests.c:6:19: warning: __has_warning expected option name (e.g. \"-Wundef\") [-Wmalformed-warning-check]"}
}
}
},
},
["warn_header_guard"]={
["warn_header_guard"]={
[j]={"header-guard"},
[k]={"header-guard"},
[i]="header-guard",
[j]="header-guard",
[c]="%0 is used as a header guard here, followed by #define of a different macro",
[c]="warn_header_guard",
[d]=g,
[d]="%0 is used as a header guard here, followed by #define of a different macro",
[e]="(.*?) is used as a header guard here, followed by \\#define of a different macro",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wheader\\-guard[^\\]]*\\]",
[g]="(.*?) is used as a header guard here, followed by \\#define of a different macro",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wheader\\-guard[^\\]]*\\]",
[a]={"33a4b3db0de5",1371072057,"Introducing -Wheader-guard, a warning that checks header guards actually work","Introducing -Wheader-guard, a warning that checks header guards actually work\nproperly.  This warning checks that the #ifndef and #define directives at\nthe beginning of a header refer to the same macro name.  Includes a fix-it\nhint to correct the header guard.\n\nllvm-svn: 183867"},
[b]=T,
[f]={"33a4b3db0de5",1371072057,"Introducing -Wheader-guard, a warning that checks header guards actually work","Introducing -Wheader-guard, a warning that checks header guards actually work\nproperly.  This warning checks that the #ifndef and #define directives at\nthe beginning of a header refer to the same macro name.  Includes a fix-it\nhint to correct the header guard.\n\nllvm-svn: 183867"},
[h]={{"clang/lib/Lex/PPLexerChange.cpp",396,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  // See if this file had a controlling macro.\n  if (CurPPLexer) { // Not ending a macro, ignore it.\n    if (const IdentifierInfo *ControllingMacro = CurPPLexer->MIOpt.GetControllingMacroAtEndOfFile()) {\n      // Okay, this has a controlling macro, remember in HeaderFileInfo.\n      if (const FileEntry *FE = CurPPLexer->getFileEntry()) {\n        // ...\n        if (const IdentifierInfo *DefinedMacro = CurPPLexer->MIOpt.GetDefinedMacro()) {\n          if (!isMacroDefined(ControllingMacro) && DefinedMacro != ControllingMacro && CurLexer->isFirstTimeLexingFile()) {\n            // ...\n            if (ED <= MaxHalfLength) {\n              // ...\n              Diag(CurPPLexer->MIOpt.GetMacroLocation(), diag::warn_header_guard) << CurPPLexer->MIOpt.GetMacroLocation() << ControllingMacro;"}},
[h]={{"clang/lib/Lex/PPLexerChange.cpp",396,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  // See if this file had a controlling macro.\n  if (CurPPLexer) { // Not ending a macro, ignore it.\n    if (const IdentifierInfo *ControllingMacro = CurPPLexer->MIOpt.GetControllingMacroAtEndOfFile()) {\n      // Okay, this has a controlling macro, remember in HeaderFileInfo.\n      if (const FileEntry *FE = CurPPLexer->getFileEntry()) {\n        // ...\n        if (const IdentifierInfo *DefinedMacro = CurPPLexer->MIOpt.GetDefinedMacro()) {\n          if (!isMacroDefined(ControllingMacro) && DefinedMacro != ControllingMacro && CurLexer->isFirstTimeLexingFile()) {\n            // ...\n            if (ED <= MaxHalfLength) {\n              // ...\n              Diag(CurPPLexer->MIOpt.GetMacroLocation(), diag::warn_header_guard) << CurPPLexer->MIOpt.GetMacroLocation() << ControllingMacro;"}},
[k]={
[l]={
["clang/test/Lexer/header.cpp"]={"clang/test/Lexer/Inputs/bad-header-guard.h:1:9: warning: \'bad_header_guard\' is used as a header guard here, followed by #define of a different macro [-Wheader-guard]","clang/test/Lexer/Inputs/bad-header-guard-defined.h:1:2: warning: \'foo\' is used as a header guard here, followed by #define of a different macro [-Wheader-guard]","clang/test/Lexer/Inputs/multiple.h:1:9: warning: \'multiple\' is used as a header guard here, followed by #define of a different macro [-Wheader-guard]"}
["clang/test/Lexer/header.cpp"]={"clang/test/Lexer/Inputs/bad-header-guard.h:1:9: warning: \'bad_header_guard\' is used as a header guard here, followed by #define of a different macro [-Wheader-guard]","clang/test/Lexer/Inputs/bad-header-guard-defined.h:1:2: warning: \'foo\' is used as a header guard here, followed by #define of a different macro [-Wheader-guard]","clang/test/Lexer/Inputs/multiple.h:1:9: warning: \'multiple\' is used as a header guard here, followed by #define of a different macro [-Wheader-guard]"}
}
}
},
},
["warn_hip_omp_target_directives"]={
["warn_hip_omp_target_directives"]={
[j]={"hip-omp-target-directives"},
[k]={"hip-omp-target-directives"},
[i]="hip-omp-target-directives",
[j]="hip-omp-target-directives",
[c]="HIP does not support OpenMP target directives; directive has been ignored",
[c]="warn_hip_omp_target_directives",
[d]="(?:error|warning|fatal error)\\: ",
[d]="HIP does not support OpenMP target directives; directive has been ignored",
[e]="HIP does not support OpenMP target directives; directive has been ignored",
[e]="(?:error|warning|fatal error)\\: ",
[f]=" \\[[^\\]]*\\-Whip\\-omp\\-target\\-directives[^\\]]*\\]",
[g]="HIP does not support OpenMP target directives; directive has been ignored",
[b]=l,
[a]=" \\[[^\\]]*\\-Whip\\-omp\\-target\\-directives[^\\]]*\\]",
[a]={Eb,1625925174,Fb,Hb},
[b]=m,
[f]={Lb,1625925174,Kb,Jb},
[h]={{"clang/lib/Sema/SemaOpenMP.cpp",6107,"StmtResult Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP && (isOpenMPTargetExecutionDirective(Kind) || isOpenMPTargetDataManagementDirective(Kind)))\n    Diag(StartLoc, diag::warn_hip_omp_target_directives);"},{"clang/lib/Sema/SemaOpenMP.cpp",13343,"StmtResult Sema::ActOnOpenMPTeamsDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP && (DSAStack->getParentDirective() == OMPD_target))\n    Diag(StartLoc, diag::warn_hip_omp_target_directives);"},{"clang/lib/Sema/SemaOpenMP.cpp",22989,"bool Sema::ActOnStartOpenMPDeclareTargetContext(DeclareTargetContextInfo &DTCI) {\n  // ...\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP)\n    Diag(DTCI.Loc, diag::warn_hip_omp_target_directives);"},{"clang/lib/Sema/SemaOpenMP.cpp",23065,"void Sema::ActOnOpenMPDeclareTargetName(NamedDecl *ND, SourceLocation Loc, OMPDeclareTargetDeclAttr::MapTypeTy MT, DeclareTargetContextInfo &DTCI) {\n  // ...\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP)\n    Diag(Loc, diag::warn_hip_omp_target_directives);"}},
[h]={{"clang/lib/Sema/SemaOpenMP.cpp",6107,"StmtResult Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP && (isOpenMPTargetExecutionDirective(Kind) || isOpenMPTargetDataManagementDirective(Kind)))\n    Diag(StartLoc, diag::warn_hip_omp_target_directives);"},{"clang/lib/Sema/SemaOpenMP.cpp",13343,"StmtResult Sema::ActOnOpenMPTeamsDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP && (DSAStack->getParentDirective() == OMPD_target))\n    Diag(StartLoc, diag::warn_hip_omp_target_directives);"},{"clang/lib/Sema/SemaOpenMP.cpp",22989,"bool Sema::ActOnStartOpenMPDeclareTargetContext(DeclareTargetContextInfo &DTCI) {\n  // ...\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP)\n    Diag(DTCI.Loc, diag::warn_hip_omp_target_directives);"},{"clang/lib/Sema/SemaOpenMP.cpp",23065,"void Sema::ActOnOpenMPDeclareTargetName(NamedDecl *ND, SourceLocation Loc, OMPDeclareTargetDeclAttr::MapTypeTy MT, DeclareTargetContextInfo &DTCI) {\n  // ...\n  // Report affected OpenMP target offloading behavior when in HIP lang-mode.\n  if (getLangOpts().HIP)\n    Diag(Loc, diag::warn_hip_omp_target_directives);"}},
[k]={
[l]={
["clang/test/SemaOpenMP/hip-omp-mix.cpp"]={"clang/test/SemaOpenMP/hip-omp-mix.cpp:34:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:40:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:45:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:50:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:55:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:59:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:63:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:66:29: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:71:27: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:82:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:88:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:94:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:100:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:106:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:112:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:118:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:124:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:130:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:136:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:142:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:150:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:148:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:157:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:156:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]"}
["clang/test/SemaOpenMP/hip-omp-mix.cpp"]={"clang/test/SemaOpenMP/hip-omp-mix.cpp:34:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:40:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:45:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:50:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:55:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:59:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:63:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:66:29: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:71:27: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:82:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:88:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:94:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:100:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:106:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:112:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:118:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:124:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:130:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:136:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:142:3: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:150:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:148:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:157:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]","clang/test/SemaOpenMP/hip-omp-mix.cpp:156:1: error: HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]"}
}
}
},
},
["warn_iboutlet_object_type"]={
["warn_iboutlet_object_type"]={
[j]={"invalid-iboutlet"},
[k]={"invalid-iboutlet"},
[i]="invalid-iboutlet",
[j]="invalid-iboutlet",
[c]="%select{instance variable|property}2 with %0 attribute must be an object type (invalid %1)",
[c]="warn_iboutlet_object_type",
[d]=g,
[d]="%select{instance variable|property}2 with %0 attribute must be an object type (invalid %1)",
[e]="(?:instance variable|property) with (.*?) attribute must be an object type \\(invalid (.*?)\\)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winvalid\\-iboutlet[^\\]]*\\]",
[g]="(?:instance variable|property) with (.*?) attribute must be an object type \\(invalid (.*?)\\)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-iboutlet[^\\]]*\\]",
[a]={"5d6044e41357",1320170915,"Downgrade err_iboutlet_object_type to a warning.  It was breaking a bunch of code.  We will reconsid...","Downgrade err_iboutlet_object_type to a warning.  It was breaking a bunch of code.  We will reconsider promoting it back to an error later.\n\nllvm-svn: 143470"},
[b]=m,
[h]={{E,1474,"static bool checkIBOutletCommon(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The IBOutlet/IBOutletCollection attributes only apply to instance\n  // variables or properties of Objective-C classes.  The outlet must also\n  // have an object reference type.\n  if (const auto *VD = dyn_cast<ObjCIvarDecl>(D)) {\n    if (!VD->getType()->getAs<ObjCObjectPointerType>()) {\n      S.Diag(AL.getLoc(), diag::warn_iboutlet_object_type) << AL << VD->getType() << 0;"},{E,1481,"static bool checkIBOutletCommon(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The IBOutlet/IBOutletCollection attributes only apply to instance\n  // variables or properties of Objective-C classes.  The outlet must also\n  // have an object reference type.\n  if (const auto *VD = dyn_cast<ObjCIvarDecl>(D)) {\n  // ...\n  } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n    if (!PD->getType()->getAs<ObjCObjectPointerType>()) {\n      S.Diag(AL.getLoc(), diag::warn_iboutlet_object_type) << AL << PD->getType() << 1;"}},
[f]={"5d6044e41357",1320170915,"Downgrade err_iboutlet_object_type to a warning.  It was breaking a bunch of code.  We will reconsid...","Downgrade err_iboutlet_object_type to a warning.  It was breaking a bunch of code.  We will reconsider promoting it back to an error later.\n\nllvm-svn: 143470"},
[k]={
[h]={{N,1474,"static bool checkIBOutletCommon(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The IBOutlet/IBOutletCollection attributes only apply to instance\n  // variables or properties of Objective-C classes.  The outlet must also\n  // have an object reference type.\n  if (const auto *VD = dyn_cast<ObjCIvarDecl>(D)) {\n    if (!VD->getType()->getAs<ObjCObjectPointerType>()) {\n      S.Diag(AL.getLoc(), diag::warn_iboutlet_object_type) << AL << VD->getType() << 0;"},{N,1481,"static bool checkIBOutletCommon(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The IBOutlet/IBOutletCollection attributes only apply to instance\n  // variables or properties of Objective-C classes.  The outlet must also\n  // have an object reference type.\n  if (const auto *VD = dyn_cast<ObjCIvarDecl>(D)) {\n  // ...\n  } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n    if (!PD->getType()->getAs<ObjCObjectPointerType>()) {\n      S.Diag(AL.getLoc(), diag::warn_iboutlet_object_type) << AL << PD->getType() << 1;"}},
[l]={
["clang/test/SemaObjC/iboutletcollection-attr.m"]={"clang/test/SemaObjC/iboutletcollection-attr.m:24:20: warning: instance variable with \'iboutletcollection\' attribute must be an object type (invalid \'void *\') [-Winvalid-iboutlet]","clang/test/SemaObjC/iboutletcollection-attr.m:26:20: warning: instance variable with \'iboutlet\' attribute must be an object type (invalid \'int\') [-Winvalid-iboutlet]","clang/test/SemaObjC/iboutletcollection-attr.m:31:26: warning: property with \'iboutletcollection\' attribute must be an object type (invalid \'int\') [-Winvalid-iboutlet]"}
["clang/test/SemaObjC/iboutletcollection-attr.m"]={"clang/test/SemaObjC/iboutletcollection-attr.m:24:20: warning: instance variable with \'iboutletcollection\' attribute must be an object type (invalid \'void *\') [-Winvalid-iboutlet]","clang/test/SemaObjC/iboutletcollection-attr.m:26:20: warning: instance variable with \'iboutlet\' attribute must be an object type (invalid \'int\') [-Winvalid-iboutlet]","clang/test/SemaObjC/iboutletcollection-attr.m:31:26: warning: property with \'iboutletcollection\' attribute must be an object type (invalid \'int\') [-Winvalid-iboutlet]"}
}
}
},
},
["warn_iboutletcollection_property_assign"]={
["warn_iboutletcollection_property_assign"]={
[j]={"invalid-iboutlet"},
[k]={"invalid-iboutlet"},
[i]="invalid-iboutlet",
[j]="invalid-iboutlet",
[c]="IBOutletCollection properties should be copy/strong and not assign",
[c]="warn_iboutletcollection_property_assign",
[d]=g,
[d]="IBOutletCollection properties should be copy/strong and not assign",
[e]="IBOutletCollection properties should be copy\\/strong and not assign",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winvalid\\-iboutlet[^\\]]*\\]",
[g]="IBOutletCollection properties should be copy\\/strong and not assign",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-iboutlet[^\\]]*\\]",
[a]={"f030d16c920f",1372181690,"Objective-C: Warn when IBOutletCollection property","Objective-C: Warn when IBOutletCollection property\nis declared to have \'assign\' attribute.\n// rdar://14212998\n\nllvm-svn: 184863"},
[b]=m,
[h]={{Qc,2702,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    // ...\n    if (PropertyDecl->hasAttr<IBOutletCollectionAttr>())\n      Diag(Loc, diag::warn_iboutletcollection_property_assign);"}},
[f]={"f030d16c920f",1372181690,"Objective-C: Warn when IBOutletCollection property","Objective-C: Warn when IBOutletCollection property\nis declared to have \'assign\' attribute.\n// rdar://14212998\n\nllvm-svn: 184863"},
[k]={
[h]={{Xc,2702,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    // ...\n    if (PropertyDecl->hasAttr<IBOutletCollectionAttr>())\n      Diag(Loc, diag::warn_iboutletcollection_property_assign);"}},
[l]={
["clang/test/SemaObjC/iboutletcollection-attr.m"]={"clang/test/SemaObjC/iboutletcollection-attr.m:49:1: warning: IBOutletCollection properties should be copy/strong and not assign [-Winvalid-iboutlet]"}
["clang/test/SemaObjC/iboutletcollection-attr.m"]={"clang/test/SemaObjC/iboutletcollection-attr.m:49:1: warning: IBOutletCollection properties should be copy/strong and not assign [-Winvalid-iboutlet]"}
}
}
},
},
["warn_identity_field_assign"]={
["warn_identity_field_assign"]={
[j]={B,H,N,"self-assign","self-assign-field"},
[k]={K,O,V,"self-assign","self-assign-field"},
[i]="self-assign-field",
[j]="self-assign-field",
[c]="assigning %select{field|instance variable}0 to itself",
[c]="warn_identity_field_assign",
[d]=g,
[d]="assigning %select{field|instance variable}0 to itself",
[e]="assigning (?:field|instance variable) to itself",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wself\\-assign\\-field[^\\]]*\\]",
[g]="assigning (?:field|instance variable) to itself",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wself\\-assign\\-field[^\\]]*\\]",
[a]={"b8124d1af1d2",1341280986,"Rename -Wself-assign-memvar to -Wself-assign-field to improve local consistency a bit.","Rename -Wself-assign-memvar to -Wself-assign-field to improve local consistency a bit.\n\n(cf -Wunused-private-field and several other existing -field diagnostics.)\n\nllvm-svn: 159633"},
[b]=m,
[h]={{K,14427,"static void CheckIdentityFieldAssignment(Expr *LHSExpr, Expr *RHSExpr, SourceLocation Loc, Sema &Sema) {\n  // ...\n  if (ML && MR) {\n    // ...\n    Sema.Diag(Loc, diag::warn_identity_field_assign) << 0;"},{K,14451,"static void CheckIdentityFieldAssignment(Expr *LHSExpr, Expr *RHSExpr, SourceLocation Loc, Sema &Sema) {\n  // ...\n  if (OL && OR && OL->getDecl() == OR->getDecl()) {\n    // ...\n    if (RL && RR && RL->getDecl() == RR->getDecl())\n      Sema.Diag(Loc, diag::warn_identity_field_assign) << 1;"}},
[f]={"b8124d1af1d2",1341280986,"Rename -Wself-assign-memvar to -Wself-assign-field to improve local consistency a bit.","Rename -Wself-assign-memvar to -Wself-assign-field to improve local consistency a bit.\n\n(cf -Wunused-private-field and several other existing -field diagnostics.)\n\nllvm-svn: 159633"},
[k]={
[h]={{S,14427,"static void CheckIdentityFieldAssignment(Expr *LHSExpr, Expr *RHSExpr, SourceLocation Loc, Sema &Sema) {\n  // ...\n  if (ML && MR) {\n    // ...\n    Sema.Diag(Loc, diag::warn_identity_field_assign) << 0;"},{S,14451,"static void CheckIdentityFieldAssignment(Expr *LHSExpr, Expr *RHSExpr, SourceLocation Loc, Sema &Sema) {\n  // ...\n  if (OL && OR && OL->getDecl() == OR->getDecl()) {\n    // ...\n    if (RL && RR && RL->getDecl() == RR->getDecl())\n      Sema.Diag(Loc, diag::warn_identity_field_assign) << 1;"}},
[l]={
["clang/test/SemaCXX/warn-self-assign-field-builtin.cpp"]={"clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:10:7: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:11:7: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:14:13: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:15:13: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:16:7: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:17:7: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:18:13: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:19:13: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:79:9: warning: assigning field to itself [-Wself-assign-field]"}
["clang/test/SemaCXX/warn-self-assign-field-builtin.cpp"]={"clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:10:7: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:11:7: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:14:13: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:15:13: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:16:7: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:17:7: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:18:13: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:19:13: warning: assigning field to itself [-Wself-assign-field]","clang/test/SemaCXX/warn-self-assign-field-builtin.cpp:79:9: warning: assigning field to itself [-Wself-assign-field]"}
}
}
},
},
["warn_ignored_clang_option"]={
["warn_ignored_clang_option"]={
[j]={qb},
[k]={tb},
[i]=qb,
[j]=tb,
[c]={{nil,nd,"the flag \'%0\' has been deprecated and will be ignored"}},
[c]={{nil,Ab,"warn_ignored_clang_option"}},
[d]=g,
[d]={{nil,Ab,"the flag \'%0\' has been deprecated and will be ignored"}},
[e]="the flag \'(.*?)\' has been deprecated and will be ignored",
[e]=i,
[f]=Ec,
[g]="the flag \'(.*?)\' has been deprecated and will be ignored",
[b]=p,
[a]=Cc,
[a]={"c91996817fa3",1498944981,"Add an option group for deprecated warnings. Add the removed","Add an option group for deprecated warnings. Add the removed\n-fslp-vectorize-aggressive and -fno-slp-vectorize-aggressive flags back\nunder this group and test for the warning. Document the future removal\nin the ReleaseNotes.\n\nDifferential Revision: https://reviews.llvm.org/D34926\n\nllvm-svn: 306965"},
[b]={{nil,Ab,r}},
[h]={{T,5947,"#endif\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_clang_ignored_legacy_options_Group)) {\n    D.Diag(diag::warn_ignored_clang_option) << A->getAsString(Args);"}}
[f]={"c91996817fa3",1498944981,"Add an option group for deprecated warnings. Add the removed","Add an option group for deprecated warnings. Add the removed\n-fslp-vectorize-aggressive and -fno-slp-vectorize-aggressive flags back\nunder this group and test for the warning. Document the future removal\nin the ReleaseNotes.\n\nDifferential Revision: https://reviews.llvm.org/D34926\n\nllvm-svn: 306965"},
[h]={{ab,5947,"#endif\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_clang_ignored_legacy_options_Group)) {\n    D.Diag(diag::warn_ignored_clang_option) << A->getAsString(Args);"}}
},
},
["warn_ignored_gcc_optimization"]={
["warn_ignored_gcc_optimization"]={
[j]={"ignored-optimization-argument",Bb},
[k]={"ignored-optimization-argument",Gb},
[i]="ignored-optimization-argument",
[j]="ignored-optimization-argument",
[c]="optimization flag \'%0\' is not supported",
[c]="warn_ignored_gcc_optimization",
[d]=g,
[d]="optimization flag \'%0\' is not supported",
[e]="optimization flag \'(.*?)\' is not supported",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wignored\\-optimization\\-argument[^\\]]*\\]",
[g]="optimization flag \'(.*?)\' is not supported",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wignored\\-optimization\\-argument[^\\]]*\\]",
[a]={"2fe501eef908",1405079037,"GCC compatibility: Create a Group to ignore unsupported optimization.","GCC compatibility: Create a Group to ignore unsupported optimization.\n\nReturns a warning when using an unknown optimization flag.\nThis patch includes -finline-limit as one of those ignored flags.\nMore options will be moved in this group\n\nPatch by Arthur Marble <arthur@info9.net> in the context of\nDebian Google Summer of code 2014.\n\nReviewers: rnk, Sylvestre\nllvm-svn: 212805"},
[b]=r,
[h]={{T,5941,"#endif\n  // ...\n  // Warn about ignored options to clang.\n  for (const Arg *A : Args.filtered(options::OPT_clang_ignored_gcc_optimization_f_Group)) {\n    D.Diag(diag::warn_ignored_gcc_optimization) << A->getAsString(Args);"}}
[f]={"2fe501eef908",1405079037,"GCC compatibility: Create a Group to ignore unsupported optimization.","GCC compatibility: Create a Group to ignore unsupported optimization.\n\nReturns a warning when using an unknown optimization flag.\nThis patch includes -finline-limit as one of those ignored flags.\nMore options will be moved in this group\n\nPatch by Arthur Marble <arthur@info9.net> in the context of\nDebian Google Summer of code 2014.\n\nReviewers: rnk, Sylvestre\nllvm-svn: 212805"},
[h]={{ab,5941,"#endif\n  // ...\n  // Warn about ignored options to clang.\n  for (const Arg *A : Args.filtered(options::OPT_clang_ignored_gcc_optimization_f_Group)) {\n    D.Diag(diag::warn_ignored_gcc_optimization) << A->getAsString(Args);"}}
},
},
["warn_ignored_hip_only_option"]={
["warn_ignored_hip_only_option"]={
[j]={"hip-only"},
[k]={"hip-only"},
[i]="hip-only",
[j]="hip-only",
[c]={{nil,z,"\'%0\' is ignored since it is only supported for HIP"}},
[c]={{nil,q,"warn_ignored_hip_only_option"}},
[d]=g,
[d]={{nil,q,"\'%0\' is ignored since it is only supported for HIP"}},
[e]="\'(.*?)\' is ignored since it is only supported for HIP",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Whip\\-only[^\\]]*\\]",
[g]="\'(.*?)\' is ignored since it is only supported for HIP",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Whip\\-only[^\\]]*\\]",
[a]={"39f50da2a357",1568041174,"Support -fstack-clash-protection for x86","Support -fstack-clash-protection for x86\n\nImplement protection against the stack clash attack [0] through inline stack\nprobing.\n\nProbe stack allocation every PAGE_SIZE during frame lowering or dynamic\nallocation to make sure the page guard, if any, is touched when touching the\nstack, in a similar manner to GCC[1].\n\nThis extends the existing `probe-stack\' mechanism with a special value `inline-asm\'.\nTechnically the former uses function call before stack allocation while this\npatch provides inlined stack probes and chunk allocation.\n\nOnly implemented for x86.\n\n[0] https://www.qualys.com/2017/06/19/stack-clash/stack-clash.txt\n[1] https://gcc.gnu.org/ml/gcc-patches/2017-07/msg00556.html\n\nDifferential Revision: https://reviews.llvm.org/D68720"},
[b]={{nil,q,r}},
[h]={{Ic,522,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  // ...\n  if (Args.hasArg(OPT_fgpu_allow_device_init) && !LangOpts.HIP)\n    Diags.Report(diag::warn_ignored_hip_only_option) << Args.getLastArg(OPT_fgpu_allow_device_init)->getAsString(Args);"},{Ic,526,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  // ...\n  if (Args.hasArg(OPT_gpu_max_threads_per_block_EQ) && !LangOpts.HIP)\n    Diags.Report(diag::warn_ignored_hip_only_option) << Args.getLastArg(OPT_gpu_max_threads_per_block_EQ)->getAsString(Args);"}}
[f]={"39f50da2a357",1568041174,"Support -fstack-clash-protection for x86","Support -fstack-clash-protection for x86\n\nImplement protection against the stack clash attack [0] through inline stack\nprobing.\n\nProbe stack allocation every PAGE_SIZE during frame lowering or dynamic\nallocation to make sure the page guard, if any, is touched when touching the\nstack, in a similar manner to GCC[1].\n\nThis extends the existing `probe-stack\' mechanism with a special value `inline-asm\'.\nTechnically the former uses function call before stack allocation while this\npatch provides inlined stack probes and chunk allocation.\n\nOnly implemented for x86.\n\n[0] https://www.qualys.com/2017/06/19/stack-clash/stack-clash.txt\n[1] https://gcc.gnu.org/ml/gcc-patches/2017-07/msg00556.html\n\nDifferential Revision: https://reviews.llvm.org/D68720"},
[h]={{Jc,522,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  // ...\n  if (Args.hasArg(OPT_fgpu_allow_device_init) && !LangOpts.HIP)\n    Diags.Report(diag::warn_ignored_hip_only_option) << Args.getLastArg(OPT_fgpu_allow_device_init)->getAsString(Args);"},{Jc,526,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  // ...\n  if (Args.hasArg(OPT_gpu_max_threads_per_block_EQ) && !LangOpts.HIP)\n    Diags.Report(diag::warn_ignored_hip_only_option) << Args.getLastArg(OPT_gpu_max_threads_per_block_EQ)->getAsString(Args);"}}
},
},
["warn_ignored_ms_inheritance"]={
["warn_ignored_ms_inheritance"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]="inheritance model ignored on %select{primary template|partial specialization}0",
[c]="warn_ignored_ms_inheritance",
[d]=g,
[d]="inheritance model ignored on %select{primary template|partial specialization}0",
[e]="inheritance model ignored on (?:primary template|partial specialization)",
[e]=i,
[f]=vb,
[g]="inheritance model ignored on (?:primary template|partial specialization)",
[b]=l,
[a]=Db,
[a]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords","Sema: Diagnose improper application of inheritance keywords\n\nWe would previously allow inappropriate inheritance keywords to appear\non class declarations.  We would also allow inheritance keywords on\ntemplates which were not fully specialized; this was divergent from\nMSVC.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2585\n\nllvm-svn: 200423"},
[b]=m,
[h]={{E,8082,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  // ...\n  if (RD->hasDefinition()) {\n  // ...\n  } else {\n    if (isa<ClassTemplatePartialSpecializationDecl>(RD)) {\n      Diag(CI.getLoc(), diag::warn_ignored_ms_inheritance) << 1 /*partial specialization*/;"},{E,8087,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  // ...\n  if (RD->hasDefinition()) {\n  // ...\n  } else {\n    // ...\n    if (RD->getDescribedClassTemplate()) {\n      Diag(CI.getLoc(), diag::warn_ignored_ms_inheritance) << 0 /*primary template*/;"}},
[f]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords","Sema: Diagnose improper application of inheritance keywords\n\nWe would previously allow inappropriate inheritance keywords to appear\non class declarations.  We would also allow inheritance keywords on\ntemplates which were not fully specialized; this was divergent from\nMSVC.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2585\n\nllvm-svn: 200423"},
[k]={
[h]={{N,8082,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  // ...\n  if (RD->hasDefinition()) {\n  // ...\n  } else {\n    if (isa<ClassTemplatePartialSpecializationDecl>(RD)) {\n      Diag(CI.getLoc(), diag::warn_ignored_ms_inheritance) << 1 /*partial specialization*/;"},{N,8087,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  // ...\n  if (RD->hasDefinition()) {\n  // ...\n  } else {\n    // ...\n    if (RD->getDescribedClassTemplate()) {\n      Diag(CI.getLoc(), diag::warn_ignored_ms_inheritance) << 0 /*primary template*/;"}},
[l]={
["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:236:42: warning: inheritance model ignored on primary template [-Wignored-attributes]","clang/test/SemaCXX/member-pointer-ms.cpp:238:30: warning: inheritance model ignored on partial specialization [-Wignored-attributes]"}
["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:236:42: warning: inheritance model ignored on primary template [-Wignored-attributes]","clang/test/SemaCXX/member-pointer-ms.cpp:238:30: warning: inheritance model ignored on partial specialization [-Wignored-attributes]"}
}
}
},
},
["warn_ignored_objc_externally_retained"]={
["warn_ignored_objc_externally_retained"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]={{nil,ob,"\'objc_externally_retained\' can only be applied to local variables %select{of retainable type|with strong ownership}0"}},
[c]={{nil,B,"warn_ignored_objc_externally_retained"}},
[d]=g,
[d]={{nil,B,"\'objc_externally_retained\' can only be applied to local variables %select{of retainable type|with strong ownership}0"}},
[e]="\'objc_externally_retained\' can only be applied to local variables (?:of retainable type|with strong ownership)",
[e]=i,
[f]=vb,
[g]="\'objc_externally_retained\' can only be applied to local variables (?:of retainable type|with strong ownership)",
[b]=l,
[a]=Db,
[a]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained","[ObjCARC] Add an new attribute, objc_externally_retained\n\nThis attribute, called \"objc_externally_retained\", exposes clang\'s\nnotion of pseudo-__strong variables in ARC. Pseudo-strong variables\n\"borrow\" their initializer, meaning that they don\'t retain/release\nit, instead assuming that someone else is keeping their value alive.\n\nIf a function is annotated with this attribute, implicitly strong\nparameters of that function aren\'t implicitly retained/released in\nthe function body, and are implicitly const. This is useful to expose\nfor performance reasons, most functions don\'t need the extra safety\nof the retain/release, so programmers can opt out as needed.\n\nThis attribute can also apply to declarations of local variables,\nwith similar effect.\n\nDifferential revision: https://reviews.llvm.org/D55865\n\nllvm-svn: 350422"},
[b]={{nil,B,m}},
[h]={{E,8452,"static bool tryMakeVariablePseudoStrong(Sema &S, VarDecl *VD, bool DiagnoseFailure) {\n  // ...\n  if (!Ty->isObjCRetainableType()) {\n    if (DiagnoseFailure) {\n      S.Diag(VD->getBeginLoc(), diag::warn_ignored_objc_externally_retained) << 0;"},{E,8470,"static bool tryMakeVariablePseudoStrong(Sema &S, VarDecl *VD, bool DiagnoseFailure) {\n  // ...\n  // The attributes only really makes sense for __strong variables; ignore any\n  // attempts to annotate a parameter with any other lifetime qualifier.\n  if (LifetimeQual != Qualifiers::OCL_Strong) {\n    if (DiagnoseFailure) {\n      S.Diag(VD->getBeginLoc(), diag::warn_ignored_objc_externally_retained) << 1;"},{E,8489,"static void handleObjCExternallyRetainedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (auto *VD = dyn_cast<VarDecl>(D)) {\n    // ...\n    if (!VD->hasLocalStorage()) {\n      S.Diag(D->getBeginLoc(), diag::warn_ignored_objc_externally_retained) << 0;"}},
[f]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained","[ObjCARC] Add an new attribute, objc_externally_retained\n\nThis attribute, called \"objc_externally_retained\", exposes clang\'s\nnotion of pseudo-__strong variables in ARC. Pseudo-strong variables\n\"borrow\" their initializer, meaning that they don\'t retain/release\nit, instead assuming that someone else is keeping their value alive.\n\nIf a function is annotated with this attribute, implicitly strong\nparameters of that function aren\'t implicitly retained/released in\nthe function body, and are implicitly const. This is useful to expose\nfor performance reasons, most functions don\'t need the extra safety\nof the retain/release, so programmers can opt out as needed.\n\nThis attribute can also apply to declarations of local variables,\nwith similar effect.\n\nDifferential revision: https://reviews.llvm.org/D55865\n\nllvm-svn: 350422"},
[k]={
[h]={{N,8452,"static bool tryMakeVariablePseudoStrong(Sema &S, VarDecl *VD, bool DiagnoseFailure) {\n  // ...\n  if (!Ty->isObjCRetainableType()) {\n    if (DiagnoseFailure) {\n      S.Diag(VD->getBeginLoc(), diag::warn_ignored_objc_externally_retained) << 0;"},{N,8470,"static bool tryMakeVariablePseudoStrong(Sema &S, VarDecl *VD, bool DiagnoseFailure) {\n  // ...\n  // The attributes only really makes sense for __strong variables; ignore any\n  // attempts to annotate a parameter with any other lifetime qualifier.\n  if (LifetimeQual != Qualifiers::OCL_Strong) {\n    if (DiagnoseFailure) {\n      S.Diag(VD->getBeginLoc(), diag::warn_ignored_objc_externally_retained) << 1;"},{N,8489,"static void handleObjCExternallyRetainedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (auto *VD = dyn_cast<VarDecl>(D)) {\n    // ...\n    if (!VD->hasLocalStorage()) {\n      S.Diag(D->getBeginLoc(), diag::warn_ignored_objc_externally_retained) << 0;"}},
[l]={
["clang/test/SemaObjC/externally-retained.m"]={"clang/test/SemaObjC/externally-retained.m:10:3: warning: \'objc_externally_retained\' can only be applied to local variables of retainable type [-Wignored-attributes]","clang/test/SemaObjC/externally-retained.m:11:3: warning: \'objc_externally_retained\' can only be applied to local variables with strong ownership [-Wignored-attributes]","clang/test/SemaObjC/externally-retained.m:12:3: warning: \'objc_externally_retained\' can only be applied to local variables with strong ownership [-Wignored-attributes]","clang/test/SemaObjC/externally-retained.m:29:1: warning: \'objc_externally_retained\' can only be applied to local variables of retainable type [-Wignored-attributes]"}
["clang/test/SemaObjC/externally-retained.m"]={"clang/test/SemaObjC/externally-retained.m:10:3: warning: \'objc_externally_retained\' can only be applied to local variables of retainable type [-Wignored-attributes]","clang/test/SemaObjC/externally-retained.m:11:3: warning: \'objc_externally_retained\' can only be applied to local variables with strong ownership [-Wignored-attributes]","clang/test/SemaObjC/externally-retained.m:12:3: warning: \'objc_externally_retained\' can only be applied to local variables with strong ownership [-Wignored-attributes]","clang/test/SemaObjC/externally-retained.m:29:1: warning: \'objc_externally_retained\' can only be applied to local variables of retainable type [-Wignored-attributes]"}
}
}
},
},
["warn_ignoring_fdiscard_for_bitcode"]={
["warn_ignoring_fdiscard_for_bitcode"]={
[j]={qb},
[k]={tb},
[i]=qb,
[j]=tb,
[c]={{nil,z,"ignoring -fdiscard-value-names for LLVM Bitcode"}},
[c]={{nil,q,"warn_ignoring_fdiscard_for_bitcode"}},
[d]=g,
[d]={{nil,q,"ignoring -fdiscard-value-names for LLVM Bitcode"}},
[e]="ignoring \\-fdiscard\\-value\\-names for LLVM Bitcode",
[e]=i,
[f]=Ec,
[g]="ignoring \\-fdiscard\\-value\\-names for LLVM Bitcode",
[b]=p,
[a]=Cc,
[a]={jc,1534346725,ic,dc},
[b]={{nil,q,r}},
[h]={{T,5132,"#endif\n  // ...\n  // Discard value names in assert builds unless otherwise specified.\n  if (Args.hasFlag(options::OPT_fdiscard_value_names, options::OPT_fno_discard_value_names, !IsAssertBuild)) {\n    if (Args.hasArg(options::OPT_fdiscard_value_names) && llvm::any_of(Inputs, [](const clang::driver::InputInfo &II) { return types::isLLVMIR(II.getType()); })) {\n      D.Diag(diag::warn_ignoring_fdiscard_for_bitcode);"}}
[f]={mc,1534346725,ic,hc},
[h]={{ab,5132,"#endif\n  // ...\n  // Discard value names in assert builds unless otherwise specified.\n  if (Args.hasFlag(options::OPT_fdiscard_value_names, options::OPT_fno_discard_value_names, !IsAssertBuild)) {\n    if (Args.hasArg(options::OPT_fdiscard_value_names) && llvm::any_of(Inputs, [](const clang::driver::InputInfo &II) { return types::isLLVMIR(II.getType()); })) {\n      D.Diag(diag::warn_ignoring_fdiscard_for_bitcode);"}}
},
},
["warn_ignoring_ftabstop_value"]={
["warn_ignoring_ftabstop_value"]={
[c]="ignoring invalid -ftabstop value \'%0\', using default value %1",
[c]="warn_ignoring_ftabstop_value",
[d]=g,
[d]="ignoring invalid -ftabstop value \'%0\', using default value %1",
[e]="ignoring invalid \\-ftabstop value \'(.*?)\', using default value (.*?)",
[e]=i,
[f]=Gb,
[g]="ignoring invalid \\-ftabstop value \'(.*?)\', using default value (.*?)",
[b]=p,
[a]=Ib,
[a]={"3d756f1a9e05",1263352010,"diagnose invalid values of -ftabstop, patch by Christian Adaker!","diagnose invalid values of -ftabstop, patch by Christian Adaker!\n\nllvm-svn: 93288"},
[b]=r,
[h]={{Ic,2401,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Opts.TabStop == 0 || Opts.TabStop > DiagnosticOptions::MaxTabStop) {\n    Diags->Report(diag::warn_ignoring_ftabstop_value) << Opts.TabStop << DiagnosticOptions::DefaultTabStop;"}},
[f]={"3d756f1a9e05",1263352010,"diagnose invalid values of -ftabstop, patch by Christian Adaker!","diagnose invalid values of -ftabstop, patch by Christian Adaker!\n\nllvm-svn: 93288"},
[k]={
[h]={{Jc,2401,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Opts.TabStop == 0 || Opts.TabStop > DiagnosticOptions::MaxTabStop) {\n    Diags->Report(diag::warn_ignoring_ftabstop_value) << Opts.TabStop << DiagnosticOptions::DefaultTabStop;"}},
[l]={
["clang/test/Misc/tabstop.c"]={"warning: ignoring invalid -ftabstop value \'101\', using default value 8"}
["clang/test/Misc/tabstop.c"]={"warning: ignoring invalid -ftabstop value \'101\', using default value 8"}
}
}
},
},
["warn_ignoring_verify_debuginfo_preserve_export"]={
["warn_ignoring_verify_debuginfo_preserve_export"]={
[j]={qb},
[k]={tb},
[i]=qb,
[j]=tb,
[c]={{nil,jb,"ignoring -fverify-debuginfo-preserve-export=%0 because -fverify-debuginfo-preserve wasn\'t enabled"}},
[c]={{nil,I,"warn_ignoring_verify_debuginfo_preserve_export"}},
[d]=g,
[d]={{nil,I,"ignoring -fverify-debuginfo-preserve-export=%0 because -fverify-debuginfo-preserve wasn\'t enabled"}},
[e]="ignoring \\-fverify\\-debuginfo\\-preserve\\-export\\=(.*?) because \\-fverify\\-debuginfo\\-preserve wasn\'t enabled",
[e]=i,
[f]=p,
[g]="ignoring \\-fverify\\-debuginfo\\-preserve\\-export\\=(.*?) because \\-fverify\\-debuginfo\\-preserve wasn\'t enabled",
[b]=p,
[a]=r,
[a]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
[b]={{nil,I,r}},
[h]={{Ic,1712,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (!Opts.EnableDIPreservationVerify && Opts.DIBugsReportFilePath.size()) {\n    Diags.Report(diag::warn_ignoring_verify_debuginfo_preserve_export) << Opts.DIBugsReportFilePath;"}},
[f]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
[k]={
[h]={{Jc,1712,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (!Opts.EnableDIPreservationVerify && Opts.DIBugsReportFilePath.size()) {\n    Diags.Report(diag::warn_ignoring_verify_debuginfo_preserve_export) << Opts.DIBugsReportFilePath;"}},
[l]={
["clang/test/Driver/verify-debug-info-preservation.c"]={"warning: ignoring -fverify-debuginfo-preserve-export=build/tools/clang/test/Driver/Output/verify-debug-info-preservation.c.tmp.json because -fverify-debuginfo-preserve wasn\'t enabled"}
["clang/test/Driver/verify-debug-info-preservation.c"]={"warning: ignoring -fverify-debuginfo-preserve-export=build/tools/clang/test/Driver/Output/verify-debug-info-preservation.c.tmp.json because -fverify-debuginfo-preserve wasn\'t enabled"}
}
}
},
},
["warn_imp_cast_drops_unaligned"]={
["warn_imp_cast_drops_unaligned"]={
[j]={"unaligned-qualifier-implicit-cast"},
[k]={"unaligned-qualifier-implicit-cast"},
[i]="unaligned-qualifier-implicit-cast",
[j]="unaligned-qualifier-implicit-cast",
[c]={{nil,kb,"implicit cast from type %0 to type %1 drops __unaligned qualifier"}},
[c]={{nil,C,"warn_imp_cast_drops_unaligned"}},
[d]=g,
[d]={{nil,C,"implicit cast from type %0 to type %1 drops __unaligned qualifier"}},
[e]="implicit cast from type (.*?) to type (.*?) drops __unaligned qualifier",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wunaligned\\-qualifier\\-implicit\\-cast[^\\]]*\\]",
[g]="implicit cast from type (.*?) to type (.*?) drops __unaligned qualifier",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wunaligned\\-qualifier\\-implicit\\-cast[^\\]]*\\]",
[a]={fd,1620118562,ld,kd},
[b]={{nil,C,m}},
[f]={jd,1620118562,td,sd},
[h]={{bc,4740,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  // ...\n  case ICK_Qualification: {\n    // ...\n    if (!isCast(CCK) && !ToType->getPointeeType().getQualifiers().hasUnaligned() && From->getType()->getPointeeType().getQualifiers().hasUnaligned()) {\n      Diag(From->getBeginLoc(), diag::warn_imp_cast_drops_unaligned) << InitialFromType << ToType;"}},
[h]={{bc,4740,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  // ...\n  case ICK_Qualification: {\n    // ...\n    if (!isCast(CCK) && !ToType->getPointeeType().getQualifiers().hasUnaligned() && From->getType()->getPointeeType().getQualifiers().hasUnaligned()) {\n      Diag(From->getBeginLoc(), diag::warn_imp_cast_drops_unaligned) << InitialFromType << ToType;"}},
[k]={
[l]={
["clang/test/SemaCXX/MicrosoftExtensions.cpp"]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:92:26: warning: implicit cast from type \'__unaligned B_unaligned *\' to type \'B_unaligned *\' drops __unaligned qualifier [-Wunaligned-qualifier-implicit-cast]","clang/test/SemaCXX/MicrosoftExtensions.cpp:95:21: warning: implicit cast from type \'__unaligned B_unaligned *\' to type \'B_unaligned *\' drops __unaligned qualifier [-Wunaligned-qualifier-implicit-cast]","clang/test/SemaCXX/MicrosoftExtensions.cpp:101:22: warning: implicit cast from type \'__unaligned int aligned_type4::*\' to type \'int aligned_type4::*\' drops __unaligned qualifier [-Wunaligned-qualifier-implicit-cast]","clang/test/SemaCXX/MicrosoftExtensions.cpp:106:12: warning: implicit cast from type \'__unaligned int[10]\' to type \'int *\' drops __unaligned qualifier [-Wunaligned-qualifier-implicit-cast]","clang/test/SemaCXX/MicrosoftExtensions.cpp:134:25: warning: implicit cast from type \'__unaligned IN_ADDR *\' (aka \'__unaligned in_addr *\') to type \'in_addr *\' drops __unaligned qualifier [-Wunaligned-qualifier-implicit-cast]","clang/test/SemaCXX/MicrosoftExtensions.cpp:136:23: warning: implicit cast from type \'__unaligned IN_ADDR *\' (aka \'__unaligned in_addr *\') to type \'in_addr *\' drops __unaligned qualifier [-Wunaligned-qualifier-implicit-cast]"}
["clang/test/SemaCXX/MicrosoftExtensions.cpp"]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:92:26: warning: implicit cast from type \'__unaligned B_unaligned *\' to type \'B_unaligned *\' drops __unaligned qualifier [-Wunaligned-qualifier-implicit-cast]","clang/test/SemaCXX/MicrosoftExtensions.cpp:95:21: warning: implicit cast from type \'__unaligned B_unaligned *\' to type \'B_unaligned *\' drops __unaligned qualifier [-Wunaligned-qualifier-implicit-cast]","clang/test/SemaCXX/MicrosoftExtensions.cpp:101:22: warning: implicit cast from type \'__unaligned int aligned_type4::*\' to type \'int aligned_type4::*\' drops __unaligned qualifier [-Wunaligned-qualifier-implicit-cast]","clang/test/SemaCXX/MicrosoftExtensions.cpp:106:12: warning: implicit cast from type \'__unaligned int[10]\' to type \'int *\' drops __unaligned qualifier [-Wunaligned-qualifier-implicit-cast]","clang/test/SemaCXX/MicrosoftExtensions.cpp:134:25: warning: implicit cast from type \'__unaligned IN_ADDR *\' (aka \'__unaligned in_addr *\') to type \'in_addr *\' drops __unaligned qualifier [-Wunaligned-qualifier-implicit-cast]","clang/test/SemaCXX/MicrosoftExtensions.cpp:136:23: warning: implicit cast from type \'__unaligned IN_ADDR *\' (aka \'__unaligned in_addr *\') to type \'in_addr *\' drops __unaligned qualifier [-Wunaligned-qualifier-implicit-cast]"}
}
}
},
},
["warn_impcast_bitfield_precision_constant"]={
["warn_impcast_bitfield_precision_constant"]={
[j]={"bitfield-constant-conversion","constant-conversion",V,R},
[k]={"bitfield-constant-conversion","constant-conversion",eb,Z},
[i]="bitfield-constant-conversion",
[j]="bitfield-constant-conversion",
[c]="implicit truncation from %2 to bit-field changes value from %0 to %1",
[c]="warn_impcast_bitfield_precision_constant",
[d]=g,
[d]="implicit truncation from %2 to bit-field changes value from %0 to %1",
[e]="implicit truncation from (.*?) to bit\\-field changes value from (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-constant\\-conversion[^\\]]*\\]",
[g]="implicit truncation from (.*?) to bit\\-field changes value from (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-constant\\-conversion[^\\]]*\\]",
[a]={"d2a5312e14e3",1289345087,"Add a warning for implicit truncation of constant values due to","Add a warning for implicit truncation of constant values due to\nbitfield assignment.\n\nImplements rdar://problem/7809123\n\nllvm-svn: 118647"},
[b]=hb,
[h]={{r,14157,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  // ...\n  S.Diag(InitLoc, OneAssignedToOneBitBitfield ? diag::warn_impcast_single_bit_bitield_precision_constant : diag::warn_impcast_bitfield_precision_constant) << PrettyValue << PrettyTrunc << OriginalInit->getType() << Init->getSourceRange();"}},
[f]={"d2a5312e14e3",1289345087,"Add a warning for implicit truncation of constant values due to","Add a warning for implicit truncation of constant values due to\nbitfield assignment.\n\nImplements rdar://problem/7809123\n\nllvm-svn: 118647"},
[k]={
[h]={{t,14157,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  // ...\n  S.Diag(InitLoc, OneAssignedToOneBitBitfield ? diag::warn_impcast_single_bit_bitield_precision_constant : diag::warn_impcast_bitfield_precision_constant) << PrettyValue << PrettyTrunc << OriginalInit->getType() << Init->getSourceRange();"}},
[l]={
["clang/test/CodeGen/2008-07-22-bitfield-init-after-zero-len-array.c"]={"clang/test/CodeGen/2008-07-22-bitfield-init-after-zero-len-array.c:8:3: warning: implicit truncation from \'int\' to bit-field changes value from 52 to -12 [-Wbitfield-constant-conversion]"}
["clang/test/CodeGen/2008-07-22-bitfield-init-after-zero-len-array.c"]={"clang/test/CodeGen/2008-07-22-bitfield-init-after-zero-len-array.c:8:3: warning: implicit truncation from \'int\' to bit-field changes value from 52 to -12 [-Wbitfield-constant-conversion]"}
}
}
},
},
["warn_impcast_bool_to_null_pointer"]={
["warn_impcast_bool_to_null_pointer"]={
[j]={"bool-conversion","bool-conversions",V,R},
[k]={"bool-conversion","bool-conversions",eb,Z},
[i]="bool-conversion",
[j]="bool-conversion",
[c]="initialization of pointer of type %0 to null from a constant boolean expression",
[c]="warn_impcast_bool_to_null_pointer",
[d]=g,
[d]="initialization of pointer of type %0 to null from a constant boolean expression",
[e]="initialization of pointer of type (.*?) to null from a constant boolean expression",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wbool\\-conversion[^\\]]*\\]",
[g]="initialization of pointer of type (.*?) to null from a constant boolean expression",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wbool\\-conversion[^\\]]*\\]",
[a]={"66a7b0476768",1302335297,"Clean up the bool conversion warning. Group it with other conversion","Clean up the bool conversion warning. Group it with other conversion\nwarnings, and make its text appropriate for constant bool expressions\nother than \'false\'. This should finish off PR9612.\n\nllvm-svn: 129205"},
[b]=hb,
[f]={"66a7b0476768",1302335297,"Clean up the bool conversion warning. Group it with other conversion","Clean up the bool conversion warning. Group it with other conversion\nwarnings, and make its text appropriate for constant bool expressions\nother than \'false\'. This should finish off PR9612.\n\nllvm-svn: 129205"},
[h]={{"clang/lib/Sema/SemaOverload.cpp",3128,"/// CheckPointerConversion - Check the pointer conversion from the\n/// expression From to the type ToType. This routine checks for\n/// ambiguous or inaccessible derived-to-base pointer\n/// conversions for which IsPointerConversion has already returned\n/// true. It returns true and produces a diagnostic if there was an\n/// error, or returns false otherwise.\nbool Sema::CheckPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess, bool Diagnose) {\n  // ...\n  if (Diagnose && !IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() && From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) == Expr::NPCK_ZeroExpression) {\n    if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))\n      DiagRuntimeBehavior(From->getExprLoc(), From, PDiag(diag::warn_impcast_bool_to_null_pointer) << ToType << From->getSourceRange());"}},
[h]={{"clang/lib/Sema/SemaOverload.cpp",3128,"/// CheckPointerConversion - Check the pointer conversion from the\n/// expression From to the type ToType. This routine checks for\n/// ambiguous or inaccessible derived-to-base pointer\n/// conversions for which IsPointerConversion has already returned\n/// true. It returns true and produces a diagnostic if there was an\n/// error, or returns false otherwise.\nbool Sema::CheckPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess, bool Diagnose) {\n  // ...\n  if (Diagnose && !IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() && From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) == Expr::NPCK_ZeroExpression) {\n    if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))\n      DiagRuntimeBehavior(From->getExprLoc(), From, PDiag(diag::warn_impcast_bool_to_null_pointer) << ToType << From->getSourceRange());"}},
[k]={
[l]={
["clang/test/Sema/c2x-bool.c"]={"clang/test/Sema/c2x-bool.c:22:18: warning: initialization of pointer of type \'void *\' to null from a constant boolean expression [-Wbool-conversion]"}
["clang/test/Sema/c2x-bool.c"]={"clang/test/Sema/c2x-bool.c:22:18: warning: initialization of pointer of type \'void *\' to null from a constant boolean expression [-Wbool-conversion]"}
}
}
},
},
["warn_impcast_complex_scalar"]={
["warn_impcast_complex_scalar"]={
[j]={V,R},
[k]={eb,Z},
[i]=V,
[j]=eb,
[c]="implicit conversion discards imaginary component: %0 to %1",
[c]="warn_impcast_complex_scalar",
[d]=g,
[d]="implicit conversion discards imaginary component: %0 to %1",
[e]="implicit conversion discards imaginary component\\: (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wconversion[^\\]]*\\]",
[g]="implicit conversion discards imaginary component\\: (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wconversion[^\\]]*\\]",
[a]={"fceb64bd044f",1257564610,"Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s","Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s\nsignificant work left to be done to reduce the false-positive rate here.\n\nllvm-svn: 86326"},
[b]=hb,
[h]={{r,14763,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Strip complex types.\n  if (isa<ComplexType>(Source)) {\n    if (!isa<ComplexType>(Target)) {\n      // ...\n      return DiagnoseImpCast(S, E, T, CC, S.getLangOpts().CPlusPlus ? diag::err_impcast_complex_scalar : diag::warn_impcast_complex_scalar);"}}
[f]={"fceb64bd044f",1257564610,"Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s","Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s\nsignificant work left to be done to reduce the false-positive rate here.\n\nllvm-svn: 86326"},
[h]={{t,14763,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Strip complex types.\n  if (isa<ComplexType>(Source)) {\n    if (!isa<ComplexType>(Target)) {\n      // ...\n      return DiagnoseImpCast(S, E, T, CC, S.getLangOpts().CPlusPlus ? diag::err_impcast_complex_scalar : diag::warn_impcast_complex_scalar);"}}
},
},
["warn_impcast_constant_value_to_objc_bool"]={
["warn_impcast_constant_value_to_objc_bool"]={
[j]={"constant-conversion",V,R,"objc-bool-constant-conversion","objc-signed-char-bool"},
[k]={"constant-conversion",eb,Z,"objc-bool-constant-conversion","objc-signed-char-bool"},
[i]="objc-bool-constant-conversion",
[j]="objc-bool-constant-conversion",
[c]={{nil,z,"implicit conversion from constant value %0 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO"}},
[c]={{nil,q,"warn_impcast_constant_value_to_objc_bool"}},
[d]=g,
[d]={{nil,q,"implicit conversion from constant value %0 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO"}},
[e]="implicit conversion from constant value (.*?) to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wobjc\\-bool\\-constant\\-conversion[^\\]]*\\]",
[g]="implicit conversion from constant value (.*?) to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-bool\\-constant\\-conversion[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,hb}},
[h]={{r,14280,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (isObjCSignedCharBool(S, T) && IntegerValue != 0 && IntegerValue != 1) {\n    return adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CContext, diag::warn_impcast_constant_value_to_objc_bool) << PrettySourceValue);"},{r,14707,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // If the we\'re converting a constant to an ObjC BOOL on a platform where BOOL\n  // is a typedef for signed char (macOS), then that constant value has to be 1\n  // or 0.\n  if (isObjCSignedCharBool(S, T) && Source->isIntegralType(S.Context)) {\n    // ...\n    if (E->EvaluateAsInt(Result, S.getASTContext(), Expr::SE_AllowSideEffects)) {\n      if (Result.Val.getInt() != 1 && Result.Val.getInt() != 0) {\n        adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CC, diag::warn_impcast_constant_value_to_objc_bool) << toString(Result.Val.getInt(), 10));"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{t,14280,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (isObjCSignedCharBool(S, T) && IntegerValue != 0 && IntegerValue != 1) {\n    return adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CContext, diag::warn_impcast_constant_value_to_objc_bool) << PrettySourceValue);"},{t,14707,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // If the we\'re converting a constant to an ObjC BOOL on a platform where BOOL\n  // is a typedef for signed char (macOS), then that constant value has to be 1\n  // or 0.\n  if (isObjCSignedCharBool(S, T) && Source->isIntegralType(S.Context)) {\n    // ...\n    if (E->EvaluateAsInt(Result, S.getASTContext(), Expr::SE_AllowSideEffects)) {\n      if (Result.Val.getInt() != 1 && Result.Val.getInt() != 0) {\n        adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CC, diag::warn_impcast_constant_value_to_objc_bool) << toString(Result.Val.getInt(), 10));"}},
[l]={
["clang/test/Sema/objc-bool-constant-conversion-fixit.m"]={"clang/test/Sema/objc-bool-constant-conversion-fixit.m:8:8: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:11:5: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:14:5: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:17:5: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:17:5: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:20:5: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:23:5: error: implicit conversion from constant value 3 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:26:5: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:37:5: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:37:5: error: implicit conversion from constant value 3 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:46:8: error: implicit conversion from constant value 43 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:49:3: error: implicit conversion from constant value 43 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]"}
["clang/test/Sema/objc-bool-constant-conversion-fixit.m"]={"clang/test/Sema/objc-bool-constant-conversion-fixit.m:8:8: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:11:5: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:14:5: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:17:5: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:17:5: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:20:5: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:23:5: error: implicit conversion from constant value 3 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:26:5: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:37:5: error: implicit conversion from constant value 2 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:37:5: error: implicit conversion from constant value 3 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:46:8: error: implicit conversion from constant value 43 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:49:3: error: implicit conversion from constant value 43 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Werror,-Wobjc-bool-constant-conversion]"}
}
}
},
},
["warn_impcast_different_enum_types"]={
["warn_impcast_different_enum_types"]={
[j]={V,"enum-conversion",R},
[k]={eb,"enum-conversion",Z},
[i]="enum-conversion",
[j]="enum-conversion",
[c]="implicit conversion from enumeration type %0 to different enumeration type %1",
[c]="warn_impcast_different_enum_types",
[d]=g,
[d]="implicit conversion from enumeration type %0 to different enumeration type %1",
[e]="implicit conversion from enumeration type (.*?) to different enumeration type (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wenum\\-conversion[^\\]]*\\]",
[g]="implicit conversion from enumeration type (.*?) to different enumeration type (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wenum\\-conversion[^\\]]*\\]",
[a]={"a78f193e7ecf",1298342707,"Warn about implicit conversions between values of different, named","Warn about implicit conversions between values of different, named\nenumeration types. Fixes <rdar://problem/8559831>.\n\nllvm-svn: 126183"},
[b]=hb,
[h]={{r,15131,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (const EnumType *SourceEnum = Source->getAs<EnumType>())\n    if (const EnumType *TargetEnum = Target->getAs<EnumType>())\n      if (SourceEnum->getDecl()->hasNameForLinkage() && TargetEnum->getDecl()->hasNameForLinkage() && SourceEnum != TargetEnum) {\n        // ...\n        return DiagnoseImpCast(S, E, SourceType, T, CC, diag::warn_impcast_different_enum_types);"}},
[f]={"a78f193e7ecf",1298342707,"Warn about implicit conversions between values of different, named","Warn about implicit conversions between values of different, named\nenumeration types. Fixes <rdar://problem/8559831>.\n\nllvm-svn: 126183"},
[k]={
[h]={{t,15131,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (const EnumType *SourceEnum = Source->getAs<EnumType>())\n    if (const EnumType *TargetEnum = Target->getAs<EnumType>())\n      if (SourceEnum->getDecl()->hasNameForLinkage() && TargetEnum->getDecl()->hasNameForLinkage() && SourceEnum != TargetEnum) {\n        // ...\n        return DiagnoseImpCast(S, E, SourceType, T, CC, diag::warn_impcast_different_enum_types);"}},
[l]={
["clang/test/Sema/conversion.c"]={"clang/test/Sema/conversion.c:396:18: warning: implicit conversion from enumeration type \'enum E8559831b\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:397:23: warning: implicit conversion from enumeration type \'enum E8559831b\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:398:8: warning: implicit conversion from enumeration type \'enum E8559831b\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:400:18: warning: implicit conversion from enumeration type \'enum E8559831b\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:401:24: warning: implicit conversion from enumeration type \'enum E8559831b\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:402:8: warning: implicit conversion from enumeration type \'enum E8559831b\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:404:18: warning: implicit conversion from enumeration type \'E8559831c\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:405:23: warning: implicit conversion from enumeration type \'E8559831c\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:406:8: warning: implicit conversion from enumeration type \'E8559831c\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]"}
["clang/test/Sema/conversion.c"]={"clang/test/Sema/conversion.c:396:18: warning: implicit conversion from enumeration type \'enum E8559831b\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:397:23: warning: implicit conversion from enumeration type \'enum E8559831b\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:398:8: warning: implicit conversion from enumeration type \'enum E8559831b\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:400:18: warning: implicit conversion from enumeration type \'enum E8559831b\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:401:24: warning: implicit conversion from enumeration type \'enum E8559831b\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:402:8: warning: implicit conversion from enumeration type \'enum E8559831b\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:404:18: warning: implicit conversion from enumeration type \'E8559831c\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:405:23: warning: implicit conversion from enumeration type \'E8559831c\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]","clang/test/Sema/conversion.c:406:8: warning: implicit conversion from enumeration type \'E8559831c\' to different enumeration type \'enum E8559831a\' [-Wenum-conversion]"}
}
}
},
},
["warn_impcast_double_promotion"]={
["warn_impcast_double_promotion"]={
[j]={"double-promotion"},
[k]={"double-promotion"},
[i]="double-promotion",
[j]="double-promotion",
[c]="implicit conversion increases floating-point precision: %0 to %1",
[c]="warn_impcast_double_promotion",
[d]=g,
[d]="implicit conversion increases floating-point precision: %0 to %1",
[e]="implicit conversion increases floating\\-point precision\\: (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdouble\\-promotion[^\\]]*\\]",
[g]="implicit conversion increases floating\\-point precision\\: (.*?) to (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdouble\\-promotion[^\\]]*\\]",
[a]={"148e0d3d5d8d",1446078532,"[Sema] Implement -Wdouble-promotion for clang.","[Sema] Implement -Wdouble-promotion for clang.\n\nGCC has a warning called -Wdouble-promotion, which warns you when\nan implicit conversion increases the width of a floating point type.\n\nThis is useful when writing code for architectures that can perform\nhardware FP ops on floats, but must fall back to software emulation for\nlarger types (i.e. double, long double).\n\nThis fixes PR15109 <https://llvm.org/bugs/show_bug.cgi?id=15109>.\n\nThanks to Carl Norum for the patch!\n\nllvm-svn: 251588"},
[b]=m,
[h]={{r,14826,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // If the source is floating point...\n  if (SourceBT && SourceBT->isFloatingPoint()) {\n    // ...and the target is floating point...\n    if (TargetBT && TargetBT->isFloatingPoint()) {\n      // ...\n      }\n      // ... or possibly if we\'re increasing rank, too\n      else if (Order < 0) {\n        // ...\n        DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_double_promotion);"}},
[f]={"148e0d3d5d8d",1446078532,"[Sema] Implement -Wdouble-promotion for clang.","[Sema] Implement -Wdouble-promotion for clang.\n\nGCC has a warning called -Wdouble-promotion, which warns you when\nan implicit conversion increases the width of a floating point type.\n\nThis is useful when writing code for architectures that can perform\nhardware FP ops on floats, but must fall back to software emulation for\nlarger types (i.e. double, long double).\n\nThis fixes PR15109 <https://llvm.org/bugs/show_bug.cgi?id=15109>.\n\nThanks to Carl Norum for the patch!\n\nllvm-svn: 251588"},
[k]={
[h]={{t,14826,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // If the source is floating point...\n  if (SourceBT && SourceBT->isFloatingPoint()) {\n    // ...and the target is floating point...\n    if (TargetBT && TargetBT->isFloatingPoint()) {\n      // ...\n      }\n      // ... or possibly if we\'re increasing rank, too\n      else if (Order < 0) {\n        // ...\n        DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_double_promotion);"}},
[l]={
["clang/test/Misc/warn-in-system-macro-def.c"]={"clang/test/Misc/warn-in-system-macro-def.c:18:12: warning: implicit conversion increases floating-point precision: \'double\' to \'long double\' [-Wdouble-promotion]"}
["clang/test/Misc/warn-in-system-macro-def.c"]={"clang/test/Misc/warn-in-system-macro-def.c:18:12: warning: implicit conversion increases floating-point precision: \'double\' to \'long double\' [-Wdouble-promotion]"}
}
}
},
},
["warn_impcast_fixed_point_range"]={
["warn_impcast_fixed_point_range"]={
[j]={"implicit-fixed-point-conversion"},
[k]={"implicit-fixed-point-conversion"},
[i]="implicit-fixed-point-conversion",
[j]="implicit-fixed-point-conversion",
[c]={{nil,I,"implicit conversion from %0 cannot fit within the range of values for %1"}},
[c]={{nil,x,"warn_impcast_fixed_point_range"}},
[d]=g,
[d]={{nil,x,"implicit conversion from %0 cannot fit within the range of values for %1"}},
[e]="implicit conversion from (.*?) cannot fit within the range of values for (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-fixed\\-point\\-conversion[^\\]]*\\]",
[g]="implicit conversion from (.*?) cannot fit within the range of values for (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-fixed\\-point\\-conversion[^\\]]*\\]",
[a]={"d3f3e16293e5",1547845465,"[Fixed Point Arithmetic] Fixed Point Addition Constant Expression Evaluation","[Fixed Point Arithmetic] Fixed Point Addition Constant Expression Evaluation\n\nThis patch includes logic for constant expression evaluation of fixed point additions.\n\nDifferential Revision: https://reviews.llvm.org/D55868\n\nllvm-svn: 351593"},
[b]={{nil,x,m}},
[h]={{r,14877,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Valid casts involving fixed point types should be accounted for here.\n  if (Source->isFixedPointType()) {\n    if (Target->isUnsaturatedFixedPointType()) {\n      // ...\n      if (E->EvaluateAsFixedPoint(Result, S.Context, Expr::SE_AllowSideEffects, S.isConstantEvaluated())) {\n        // ...\n        if (Value > MaxVal || Value < MinVal) {\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_fixed_point_range) << Value.toString() << T << E->getSourceRange() << clang::SourceRange(CC));"},{r,14898,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Valid casts involving fixed point types should be accounted for here.\n  if (Source->isFixedPointType()) {\n    if (Target->isUnsaturatedFixedPointType()) {\n    // ...\n    } else if (Target->isIntegerType()) {\n      // ...\n      if (!S.isConstantEvaluated() && E->EvaluateAsFixedPoint(Result, S.Context, Expr::SE_AllowSideEffects)) {\n        // ...\n        if (Overflowed) {\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_fixed_point_range) << FXResult.toString() << T << E->getSourceRange() << clang::SourceRange(CC));"},{r,14919,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Valid casts involving fixed point types should be accounted for here.\n  if (Source->isFixedPointType()) {\n  // ...\n  } else if (Target->isUnsaturatedFixedPointType()) {\n    if (Source->isIntegerType()) {\n      // ...\n      if (!S.isConstantEvaluated() && E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n        // ...\n        if (Overflowed) {\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_fixed_point_range) << toString(Value, /*Radix=*/10) << T << E->getSourceRange() << clang::SourceRange(CC));"}},
[f]={"d3f3e16293e5",1547845465,"[Fixed Point Arithmetic] Fixed Point Addition Constant Expression Evaluation","[Fixed Point Arithmetic] Fixed Point Addition Constant Expression Evaluation\n\nThis patch includes logic for constant expression evaluation of fixed point additions.\n\nDifferential Revision: https://reviews.llvm.org/D55868\n\nllvm-svn: 351593"},
[k]={
[h]={{t,14877,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Valid casts involving fixed point types should be accounted for here.\n  if (Source->isFixedPointType()) {\n    if (Target->isUnsaturatedFixedPointType()) {\n      // ...\n      if (E->EvaluateAsFixedPoint(Result, S.Context, Expr::SE_AllowSideEffects, S.isConstantEvaluated())) {\n        // ...\n        if (Value > MaxVal || Value < MinVal) {\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_fixed_point_range) << Value.toString() << T << E->getSourceRange() << clang::SourceRange(CC));"},{t,14898,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Valid casts involving fixed point types should be accounted for here.\n  if (Source->isFixedPointType()) {\n    if (Target->isUnsaturatedFixedPointType()) {\n    // ...\n    } else if (Target->isIntegerType()) {\n      // ...\n      if (!S.isConstantEvaluated() && E->EvaluateAsFixedPoint(Result, S.Context, Expr::SE_AllowSideEffects)) {\n        // ...\n        if (Overflowed) {\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_fixed_point_range) << FXResult.toString() << T << E->getSourceRange() << clang::SourceRange(CC));"},{t,14919,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Valid casts involving fixed point types should be accounted for here.\n  if (Source->isFixedPointType()) {\n  // ...\n  } else if (Target->isUnsaturatedFixedPointType()) {\n    if (Source->isIntegerType()) {\n      // ...\n      if (!S.isConstantEvaluated() && E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n        // ...\n        if (Overflowed) {\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_fixed_point_range) << toString(Value, /*Radix=*/10) << T << E->getSourceRange() << clang::SourceRange(CC));"}},
[l]={
["clang/test/Frontend/fixed_point_errors.c"]={"clang/test/Frontend/fixed_point_errors.c:244:25: warning: implicit conversion from 256.0 cannot fit within the range of values for \'short _Accum\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:245:25: warning: implicit conversion from 1.0 cannot fit within the range of values for \'short _Fract\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:246:28: warning: implicit conversion from -1.0 cannot fit within the range of values for \'unsigned _Accum\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:247:33: warning: implicit conversion from 256.0 cannot fit within the range of values for \'short _Accum\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:248:17: warning: implicit conversion from 65536.0 cannot fit within the range of values for \'short\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:249:20: warning: implicit conversion from -2.5 cannot fit within the range of values for \'unsigned int\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:250:16: warning: implicit conversion from 256.0 cannot fit within the range of values for \'char\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:251:26: warning: implicit conversion from 256 cannot fit within the range of values for \'short _Accum\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:252:36: warning: implicit conversion from -2 cannot fit within the range of values for \'unsigned short _Accum\' [-Wimplicit-fixed-point-conversion]"}
["clang/test/Frontend/fixed_point_errors.c"]={"clang/test/Frontend/fixed_point_errors.c:244:25: warning: implicit conversion from 256.0 cannot fit within the range of values for \'short _Accum\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:245:25: warning: implicit conversion from 1.0 cannot fit within the range of values for \'short _Fract\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:246:28: warning: implicit conversion from -1.0 cannot fit within the range of values for \'unsigned _Accum\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:247:33: warning: implicit conversion from 256.0 cannot fit within the range of values for \'short _Accum\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:248:17: warning: implicit conversion from 65536.0 cannot fit within the range of values for \'short\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:249:20: warning: implicit conversion from -2.5 cannot fit within the range of values for \'unsigned int\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:250:16: warning: implicit conversion from 256.0 cannot fit within the range of values for \'char\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:251:26: warning: implicit conversion from 256 cannot fit within the range of values for \'short _Accum\' [-Wimplicit-fixed-point-conversion]","clang/test/Frontend/fixed_point_errors.c:252:36: warning: implicit conversion from -2 cannot fit within the range of values for \'unsigned short _Accum\' [-Wimplicit-fixed-point-conversion]"}
}
}
},
},
["warn_impcast_float_integer"]={
["warn_impcast_float_integer"]={
[j]={V,"float-conversion",R},
[k]={eb,"float-conversion",Z},
[i]="float-conversion",
[j]="float-conversion",
[c]="implicit conversion turns floating-point number into integer: %0 to %1",
[c]="warn_impcast_float_integer",
[d]=g,
[d]="implicit conversion turns floating-point number into integer: %0 to %1",
[e]="implicit conversion turns floating\\-point number into integer\\: (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfloat\\-conversion[^\\]]*\\]",
[g]="implicit conversion turns floating\\-point number into integer\\: (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wfloat\\-conversion[^\\]]*\\]",
[a]={"fceb64bd044f",1257564610,"Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s","Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s\nsignificant work left to be done to reduce the false-positive rate here.\n\nllvm-svn: 86326"},
[b]=hb,
[h]={{r,14257,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (!IsConstant) {\n    // ...\n    return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{r,14286,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (Result == llvm::APFloat::opOK && isExact) {\n    // ...\n    return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{r,14306,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (IsLiteral) {\n  // ...\n  } else if (IntegerValue == 0) {\n    if (Value.isZero()) { // Skip -0.0 to 0 conversion.\n      return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{r,14314,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (IsLiteral) {\n  // ...\n  } else if (IntegerValue == 0) {\n  // ...\n  } else {\n    if (IntegerValue.isUnsigned()) {\n      if (!IntegerValue.isMaxValue()) {\n        return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{r,14320,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (IsLiteral) {\n  // ...\n  } else if (IntegerValue == 0) {\n  // ...\n  } else {\n    if (IntegerValue.isUnsigned()) {\n    // ...\n    } else { // IntegerValue.isSigned()\n      if (!IntegerValue.isMaxSignedValue() && !IntegerValue.isMinSignedValue()) {\n        return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{r,14370,"/// Analyze the given compound assignment for the possible losing of\n/// floating-point precision.\nstatic void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {\n  // ...\n  // If source is floating point but target is an integer.\n  if (ResultBT->isInteger())\n    return DiagnoseImpCast(S, E, E->getRHS()->getType(), E->getLHS()->getType(), E->getExprLoc(), diag::warn_impcast_float_integer);"}},
[f]={"fceb64bd044f",1257564610,"Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s","Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s\nsignificant work left to be done to reduce the false-positive rate here.\n\nllvm-svn: 86326"},
[k]={
[h]={{t,14257,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (!IsConstant) {\n    // ...\n    return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{t,14286,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (Result == llvm::APFloat::opOK && isExact) {\n    // ...\n    return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{t,14306,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (IsLiteral) {\n  // ...\n  } else if (IntegerValue == 0) {\n    if (Value.isZero()) { // Skip -0.0 to 0 conversion.\n      return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{t,14314,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (IsLiteral) {\n  // ...\n  } else if (IntegerValue == 0) {\n  // ...\n  } else {\n    if (IntegerValue.isUnsigned()) {\n      if (!IntegerValue.isMaxValue()) {\n        return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{t,14320,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (IsLiteral) {\n  // ...\n  } else if (IntegerValue == 0) {\n  // ...\n  } else {\n    if (IntegerValue.isUnsigned()) {\n    // ...\n    } else { // IntegerValue.isSigned()\n      if (!IntegerValue.isMaxSignedValue() && !IntegerValue.isMinSignedValue()) {\n        return DiagnoseImpCast(S, E, T, CContext, diag::warn_impcast_float_integer, PruneWarnings);"},{t,14370,"/// Analyze the given compound assignment for the possible losing of\n/// floating-point precision.\nstatic void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {\n  // ...\n  // If source is floating point but target is an integer.\n  if (ResultBT->isInteger())\n    return DiagnoseImpCast(S, E, E->getRHS()->getType(), E->getLHS()->getType(), E->getExprLoc(), diag::warn_impcast_float_integer);"}},
[l]={
["clang/test/Preprocessor/_Pragma-in-macro-arg.c"]={"clang/test/Preprocessor/_Pragma-in-macro-arg.c:27:10: warning: implicit conversion turns floating-point number into integer: \'double\' to \'int\' [-Wfloat-conversion]"}
["clang/test/Preprocessor/_Pragma-in-macro-arg.c"]={"clang/test/Preprocessor/_Pragma-in-macro-arg.c:27:10: warning: implicit conversion turns floating-point number into integer: \'double\' to \'int\' [-Wfloat-conversion]"}
}
}
},
},
["warn_impcast_float_precision"]={
["warn_impcast_float_precision"]={
[j]={V,sd,R},
[k]={eb,ld,Z},
[i]=sd,
[j]=ld,
[c]="implicit conversion loses floating-point precision: %0 to %1",
[c]="warn_impcast_float_precision",
[d]=g,
[d]="implicit conversion loses floating-point precision: %0 to %1",
[e]="implicit conversion loses floating\\-point precision\\: (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-float\\-conversion[^\\]]*\\]",
[g]="implicit conversion loses floating\\-point precision\\: (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-float\\-conversion[^\\]]*\\]",
[a]={"fceb64bd044f",1257564610,"Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s","Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s\nsignificant work left to be done to reduce the false-positive rate here.\n\nllvm-svn: 86326"},
[b]=hb,
[h]={{r,14819,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // If the source is floating point...\n  if (SourceBT && SourceBT->isFloatingPoint()) {\n    // ...and the target is floating point...\n    if (TargetBT && TargetBT->isFloatingPoint()) {\n      // ...\n      if (Order > 0) {\n        // ...\n        DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_float_precision);"}},
[f]={"fceb64bd044f",1257564610,"Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s","Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s\nsignificant work left to be done to reduce the false-positive rate here.\n\nllvm-svn: 86326"},
[k]={
[h]={{t,14819,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // If the source is floating point...\n  if (SourceBT && SourceBT->isFloatingPoint()) {\n    // ...and the target is floating point...\n    if (TargetBT && TargetBT->isFloatingPoint()) {\n      // ...\n      if (Order > 0) {\n        // ...\n        DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_float_precision);"}},
[l]={
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:120:8: warning: implicit conversion loses floating-point precision: \'double\' to \'float2\' (vector of 2 \'float\' values) [-Wimplicit-float-conversion]","clang/test/Sema/ext_vector_casts.c:122:13: warning: implicit conversion loses floating-point precision: \'double\' to \'float2\' (vector of 2 \'float\' values) [-Wimplicit-float-conversion]"}
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:120:8: warning: implicit conversion loses floating-point precision: \'double\' to \'float2\' (vector of 2 \'float\' values) [-Wimplicit-float-conversion]","clang/test/Sema/ext_vector_casts.c:122:13: warning: implicit conversion loses floating-point precision: \'double\' to \'float2\' (vector of 2 \'float\' values) [-Wimplicit-float-conversion]"}
}
}
},
},
["warn_impcast_float_result_precision"]={
["warn_impcast_float_result_precision"]={
[j]={V,sd,R},
[k]={eb,ld,Z},
[i]=sd,
[j]=ld,
[c]={{nil,eb,"implicit conversion when assigning computation result loses floating-point precision: %0 to %1"}},
[c]={{nil,D,"warn_impcast_float_result_precision"}},
[d]=g,
[d]={{nil,D,"implicit conversion when assigning computation result loses floating-point precision: %0 to %1"}},
[e]="implicit conversion when assigning computation result loses floating\\-point precision\\: (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-float\\-conversion[^\\]]*\\]",
[g]="implicit conversion when assigning computation result loses floating\\-point precision\\: (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-float\\-conversion[^\\]]*\\]",
[a]={"5704dc0c7f6c",1521108215,"More warnings when double truncation to float: compound assignment is supported now.","More warnings when double truncation to float: compound assignment is supported now.\n\nllvm-svn: 327618"},
[b]={{nil,D,hb}},
[h]={{r,14381,"/// Analyze the given compound assignment for the possible losing of\n/// floating-point precision.\nstatic void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {\n  // ...\n  if (Order < 0 && !S.SourceMgr.isInSystemMacro(E->getOperatorLoc()))\n    // ...\n    DiagnoseImpCast(S, E->getRHS(), E->getLHS()->getType(), E->getOperatorLoc(), diag::warn_impcast_float_result_precision);"}},
[f]={"5704dc0c7f6c",1521108215,"More warnings when double truncation to float: compound assignment is supported now.","More warnings when double truncation to float: compound assignment is supported now.\n\nllvm-svn: 327618"},
[k]={
[h]={{t,14381,"/// Analyze the given compound assignment for the possible losing of\n/// floating-point precision.\nstatic void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {\n  // ...\n  if (Order < 0 && !S.SourceMgr.isInSystemMacro(E->getOperatorLoc()))\n    // ...\n    DiagnoseImpCast(S, E->getRHS(), E->getLHS()->getType(), E->getOperatorLoc(), diag::warn_impcast_float_result_precision);"}},
[l]={
["clang/test/Sema/conversion.c"]={"clang/test/Sema/conversion.c:439:9: warning: implicit conversion when assigning computation result loses floating-point precision: \'double\' to \'float\' [-Wimplicit-float-conversion]","clang/test/Sema/conversion.c:448:8: warning: implicit conversion when assigning computation result loses floating-point precision: \'double\' to \'float\' [-Wimplicit-float-conversion]"}
["clang/test/Sema/conversion.c"]={"clang/test/Sema/conversion.c:439:9: warning: implicit conversion when assigning computation result loses floating-point precision: \'double\' to \'float\' [-Wimplicit-float-conversion]","clang/test/Sema/conversion.c:448:8: warning: implicit conversion when assigning computation result loses floating-point precision: \'double\' to \'float\' [-Wimplicit-float-conversion]"}
}
}
},
},
["warn_impcast_float_to_integer"]={
["warn_impcast_float_to_integer"]={
[j]={V,"float-conversion","float-overflow-conversion",R},
[k]={eb,"float-conversion","float-overflow-conversion",Z},
[i]="float-overflow-conversion",
[j]="float-overflow-conversion",
[c]={{nil,eb,"implicit conversion from %0 to %1 changes value from %2 to %3"},{lb,nil,"implicit conversion of out of range value from %0 to %1 changes value from %2 to %3"}},
[c]="warn_impcast_float_to_integer",
[d]=g,
[d]={{nil,D,"implicit conversion from %0 to %1 changes value from %2 to %3"},{F,nil,"implicit conversion of out of range value from %0 to %1 changes value from %2 to %3"}},
[e]="implicit conversion from (.*?) to (.*?) changes value from (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfloat\\-overflow\\-conversion[^\\]]*\\]",
[g]="implicit conversion from (.*?) to (.*?) changes value from (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wfloat\\-overflow\\-conversion[^\\]]*\\]",
[a]={"be234c30ada7",1461272695,"Split interesting warnings off from -Wfloat-conversion","Split interesting warnings off from -Wfloat-conversion\n\nRestructure the implict floating point to integer conversions so that\ninteresting sub-groups are under different flags.  Breakdown of warnings:\n\nNo warning:\nExact conversions from floating point to integer:\nint x = 10.0;\nint x = 1e10;\n\n-Wliteral-conversion - Floating point literal to integer with rounding:\nint x = 5.5;\nint x = -3.4;\n\n-Wfloat-conversion - All conversions not covered by the above two:\nint x = GetFloat();\nint x = 5.5 + 3.5;\n\n-Wfloat-zero-conversion - The expression converted has a non-zero floating\npoint value that gets converted to a zero integer value, excluded the cases\nfalling under -Wliteral-conversion.  Subset of -Wfloat-conversion.\nint x = 1.0 / 2.0;\n\n-Wfloat-overflow-conversion - The floating point value is outside the range\nof the integer type, exluding cases from -Wliteral conversion.  Subset of\n-Wfloat-conversion.\nchar x = 500;\nchar x = -1000;\n\n-Wfloat-bool-conversion - Any conversion of a floating point type to bool.\nSubset of -Wfloat-conversion.\nif (GetFloat()) {}\nbool x = 5.0;\n\n-Wfloat-bool-constant-conversion - Conversion of a compile time evaluatable\nfloating point value to bool.  Subset of -Wfloat-bool-conversion.\nbool x = 1.0;\nbool x = 4.0 / 20.0;\n\nAlso add EvaluateAsFloat to Sema, which is similar to EvaluateAsInt, but for\nfloating point values.\n\nllvm-svn: 267054"},
[b]=hb,
[h]={{r,14324,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (IsLiteral) {\n  // ...\n  } else if (IntegerValue == 0) {\n  // ...\n  } else {\n    // ...\n    DiagID = diag::warn_impcast_float_to_integer;"}},
[f]={"be234c30ada7",1461272695,"Split interesting warnings off from -Wfloat-conversion","Split interesting warnings off from -Wfloat-conversion\n\nRestructure the implict floating point to integer conversions so that\ninteresting sub-groups are under different flags.  Breakdown of warnings:\n\nNo warning:\nExact conversions from floating point to integer:\nint x = 10.0;\nint x = 1e10;\n\n-Wliteral-conversion - Floating point literal to integer with rounding:\nint x = 5.5;\nint x = -3.4;\n\n-Wfloat-conversion - All conversions not covered by the above two:\nint x = GetFloat();\nint x = 5.5 + 3.5;\n\n-Wfloat-zero-conversion - The expression converted has a non-zero floating\npoint value that gets converted to a zero integer value, excluded the cases\nfalling under -Wliteral-conversion.  Subset of -Wfloat-conversion.\nint x = 1.0 / 2.0;\n\n-Wfloat-overflow-conversion - The floating point value is outside the range\nof the integer type, exluding cases from -Wliteral conversion.  Subset of\n-Wfloat-conversion.\nchar x = 500;\nchar x = -1000;\n\n-Wfloat-bool-conversion - Any conversion of a floating point type to bool.\nSubset of -Wfloat-conversion.\nif (GetFloat()) {}\nbool x = 5.0;\n\n-Wfloat-bool-constant-conversion - Conversion of a compile time evaluatable\nfloating point value to bool.  Subset of -Wfloat-bool-conversion.\nbool x = 1.0;\nbool x = 4.0 / 20.0;\n\nAlso add EvaluateAsFloat to Sema, which is similar to EvaluateAsInt, but for\nfloating point values.\n\nllvm-svn: 267054"},
[k]={
[h]={{t,14324,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (IsLiteral) {\n  // ...\n  } else if (IntegerValue == 0) {\n  // ...\n  } else {\n    // ...\n    DiagID = diag::warn_impcast_float_to_integer;"}},
[l]={
["clang/test/SemaCXX/warn-float-conversion.cpp"]={"warn-float-conversion.cpp:30:24: warning: implicit conversion from \'double\' to \'int\' changes value from 2147483647.5 to 2147483647 [-Wfloat-overflow-conversion]"}
["clang/test/SemaCXX/warn-float-conversion.cpp"]={"warn-float-conversion.cpp:30:24: warning: implicit conversion from \'double\' to \'int\' changes value from 2147483647.5 to 2147483647 [-Wfloat-overflow-conversion]"}
}
}
},
},
["warn_impcast_float_to_integer_out_of_range"]={
["warn_impcast_float_to_integer_out_of_range"]={
[j]={V,"float-conversion","float-overflow-conversion",R},
[k]={eb,"float-conversion","float-overflow-conversion",Z},
[i]="float-overflow-conversion",
[j]="float-overflow-conversion",
[c]={{nil,eb,"implicit conversion of out of range value from %0 to %1 is undefined"}},
[c]={{nil,D,"warn_impcast_float_to_integer_out_of_range"}},
[d]=g,
[d]={{nil,D,"implicit conversion of out of range value from %0 to %1 is undefined"}},
[e]="implicit conversion of out of range value from (.*?) to (.*?) is undefined",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfloat\\-overflow\\-conversion[^\\]]*\\]",
[g]="implicit conversion of out of range value from (.*?) to (.*?) is undefined",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wfloat\\-overflow\\-conversion[^\\]]*\\]",
[a]={"7130a9393470",1525726376,"Correct warning on Float->Integer conversions.","Correct warning on Float->Integer conversions.\n\nAs identified and briefly discussed here:\nhttps://bugs.llvm.org/show_bug.cgi?id=37305\n\nConverting a floating point number to an integer type when\nthe integral part is out of the range of the integer type is\nundefined behavior in C. Additionally, CodeGen emits an undef\nin this situation.\n\nHOWEVER, we\'ve been giving a warning that says that the value is\nchanged. This patch corrects the warning to list that it is actually\nundefined behavior.\n\nDifferential Revision: https://reviews.llvm.org/D46535\n\nllvm-svn: 331673"},
[b]={{nil,D,hb}},
[h]={{r,14296,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  // Conversion of a floating-point value to a non-bool integer where the\n  // integral part cannot be represented by the integer type is undefined.\n  if (!IsBool && Result == llvm::APFloat::opInvalidOp)\n    return DiagnoseImpCast(S, E, T, CContext, IsLiteral ? diag::warn_impcast_literal_float_to_integer_out_of_range : diag::warn_impcast_float_to_integer_out_of_range, PruneWarnings);"}},
[f]={"7130a9393470",1525726376,"Correct warning on Float->Integer conversions.","Correct warning on Float->Integer conversions.\n\nAs identified and briefly discussed here:\nhttps://bugs.llvm.org/show_bug.cgi?id=37305\n\nConverting a floating point number to an integer type when\nthe integral part is out of the range of the integer type is\nundefined behavior in C. Additionally, CodeGen emits an undef\nin this situation.\n\nHOWEVER, we\'ve been giving a warning that says that the value is\nchanged. This patch corrects the warning to list that it is actually\nundefined behavior.\n\nDifferential Revision: https://reviews.llvm.org/D46535\n\nllvm-svn: 331673"},
[k]={
[h]={{t,14296,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  // Conversion of a floating-point value to a non-bool integer where the\n  // integral part cannot be represented by the integer type is undefined.\n  if (!IsBool && Result == llvm::APFloat::opInvalidOp)\n    return DiagnoseImpCast(S, E, T, CContext, IsLiteral ? diag::warn_impcast_literal_float_to_integer_out_of_range : diag::warn_impcast_float_to_integer_out_of_range, PruneWarnings);"}},
[l]={
["clang/test/SemaCXX/warn-float-conversion.cpp"]={"clang/test/SemaCXX/warn-float-conversion.cpp:113:12: warning: implicit conversion of out of range value from \'const float\' to \'char\' is undefined [-Wfloat-overflow-conversion]","clang/test/SemaCXX/warn-float-conversion.cpp:114:18: warning: implicit conversion of out of range value from \'double\' to \'char\' is undefined [-Wfloat-overflow-conversion]","clang/test/SemaCXX/warn-float-conversion.cpp:116:16: warning: implicit conversion of out of range value from \'double\' to \'char\' is undefined [-Wfloat-overflow-conversion]","clang/test/SemaCXX/warn-float-conversion.cpp:135:10: warning: implicit conversion of out of range value from \'const float\' to \'char\' is undefined [-Wfloat-overflow-conversion]"}
["clang/test/SemaCXX/warn-float-conversion.cpp"]={"clang/test/SemaCXX/warn-float-conversion.cpp:113:12: warning: implicit conversion of out of range value from \'const float\' to \'char\' is undefined [-Wfloat-overflow-conversion]","clang/test/SemaCXX/warn-float-conversion.cpp:114:18: warning: implicit conversion of out of range value from \'double\' to \'char\' is undefined [-Wfloat-overflow-conversion]","clang/test/SemaCXX/warn-float-conversion.cpp:116:16: warning: implicit conversion of out of range value from \'double\' to \'char\' is undefined [-Wfloat-overflow-conversion]","clang/test/SemaCXX/warn-float-conversion.cpp:135:10: warning: implicit conversion of out of range value from \'const float\' to \'char\' is undefined [-Wfloat-overflow-conversion]"}
}
}
},
},
["warn_impcast_float_to_integer_zero"]={
["warn_impcast_float_to_integer_zero"]={
[j]={V,"float-conversion","float-zero-conversion",R},
[k]={eb,"float-conversion","float-zero-conversion",Z},
[i]="float-zero-conversion",
[j]="float-zero-conversion",
[c]="implicit conversion from %0 to %1 changes non-zero value from %2 to %3",
[c]="warn_impcast_float_to_integer_zero",
[d]=g,
[d]="implicit conversion from %0 to %1 changes non-zero value from %2 to %3",
[e]="implicit conversion from (.*?) to (.*?) changes non\\-zero value from (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wfloat\\-zero\\-conversion[^\\]]*\\]",
[g]="implicit conversion from (.*?) to (.*?) changes non\\-zero value from (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wfloat\\-zero\\-conversion[^\\]]*\\]",
[a]={"be234c30ada7",1461272695,"Split interesting warnings off from -Wfloat-conversion","Split interesting warnings off from -Wfloat-conversion\n\nRestructure the implict floating point to integer conversions so that\ninteresting sub-groups are under different flags.  Breakdown of warnings:\n\nNo warning:\nExact conversions from floating point to integer:\nint x = 10.0;\nint x = 1e10;\n\n-Wliteral-conversion - Floating point literal to integer with rounding:\nint x = 5.5;\nint x = -3.4;\n\n-Wfloat-conversion - All conversions not covered by the above two:\nint x = GetFloat();\nint x = 5.5 + 3.5;\n\n-Wfloat-zero-conversion - The expression converted has a non-zero floating\npoint value that gets converted to a zero integer value, excluded the cases\nfalling under -Wliteral-conversion.  Subset of -Wfloat-conversion.\nint x = 1.0 / 2.0;\n\n-Wfloat-overflow-conversion - The floating point value is outside the range\nof the integer type, exluding cases from -Wliteral conversion.  Subset of\n-Wfloat-conversion.\nchar x = 500;\nchar x = -1000;\n\n-Wfloat-bool-conversion - Any conversion of a floating point type to bool.\nSubset of -Wfloat-conversion.\nif (GetFloat()) {}\nbool x = 5.0;\n\n-Wfloat-bool-constant-conversion - Conversion of a compile time evaluatable\nfloating point value to bool.  Subset of -Wfloat-bool-conversion.\nbool x = 1.0;\nbool x = 4.0 / 20.0;\n\nAlso add EvaluateAsFloat to Sema, which is similar to EvaluateAsInt, but for\nfloating point values.\n\nllvm-svn: 267054"},
[b]=hb,
[h]={{r,14309,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (IsLiteral) {\n  // ...\n  } else if (IntegerValue == 0) {\n    // ...\n    DiagID = diag::warn_impcast_float_to_integer_zero;"}},
[f]={"be234c30ada7",1461272695,"Split interesting warnings off from -Wfloat-conversion","Split interesting warnings off from -Wfloat-conversion\n\nRestructure the implict floating point to integer conversions so that\ninteresting sub-groups are under different flags.  Breakdown of warnings:\n\nNo warning:\nExact conversions from floating point to integer:\nint x = 10.0;\nint x = 1e10;\n\n-Wliteral-conversion - Floating point literal to integer with rounding:\nint x = 5.5;\nint x = -3.4;\n\n-Wfloat-conversion - All conversions not covered by the above two:\nint x = GetFloat();\nint x = 5.5 + 3.5;\n\n-Wfloat-zero-conversion - The expression converted has a non-zero floating\npoint value that gets converted to a zero integer value, excluded the cases\nfalling under -Wliteral-conversion.  Subset of -Wfloat-conversion.\nint x = 1.0 / 2.0;\n\n-Wfloat-overflow-conversion - The floating point value is outside the range\nof the integer type, exluding cases from -Wliteral conversion.  Subset of\n-Wfloat-conversion.\nchar x = 500;\nchar x = -1000;\n\n-Wfloat-bool-conversion - Any conversion of a floating point type to bool.\nSubset of -Wfloat-conversion.\nif (GetFloat()) {}\nbool x = 5.0;\n\n-Wfloat-bool-constant-conversion - Conversion of a compile time evaluatable\nfloating point value to bool.  Subset of -Wfloat-bool-conversion.\nbool x = 1.0;\nbool x = 4.0 / 20.0;\n\nAlso add EvaluateAsFloat to Sema, which is similar to EvaluateAsInt, but for\nfloating point values.\n\nllvm-svn: 267054"},
[k]={
[h]={{t,14309,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (IsLiteral) {\n  // ...\n  } else if (IntegerValue == 0) {\n    // ...\n    DiagID = diag::warn_impcast_float_to_integer_zero;"}},
[l]={
["clang/test/SemaCXX/warn-float-conversion.cpp"]={"clang/test/SemaCXX/warn-float-conversion.cpp:101:12: warning: implicit conversion from \'const float\' to \'int\' changes non-zero value from 0.5 to 0 [-Wfloat-zero-conversion]","clang/test/SemaCXX/warn-float-conversion.cpp:102:16: warning: implicit conversion from \'double\' to \'int\' changes non-zero value from 0.5 to 0 [-Wfloat-zero-conversion]"}
["clang/test/SemaCXX/warn-float-conversion.cpp"]={"clang/test/SemaCXX/warn-float-conversion.cpp:101:12: warning: implicit conversion from \'const float\' to \'int\' changes non-zero value from 0.5 to 0 [-Wfloat-zero-conversion]","clang/test/SemaCXX/warn-float-conversion.cpp:102:16: warning: implicit conversion from \'double\' to \'int\' changes non-zero value from 0.5 to 0 [-Wfloat-zero-conversion]"}
}
}
},
},
["warn_impcast_float_to_objc_signed_char_bool"]={
["warn_impcast_float_to_objc_signed_char_bool"]={
[j]={V,sd,R,"objc-signed-char-bool","objc-signed-char-bool-implicit-float-conversion"},
[k]={eb,ld,Z,"objc-signed-char-bool","objc-signed-char-bool-implicit-float-conversion"},
[i]="objc-signed-char-bool-implicit-float-conversion",
[j]="objc-signed-char-bool-implicit-float-conversion",
[c]={{nil,z,"implicit conversion from floating-point type %0 to \'BOOL\'"}},
[c]={{nil,q,"warn_impcast_float_to_objc_signed_char_bool"}},
[d]=g,
[d]={{nil,q,"implicit conversion from floating-point type %0 to \'BOOL\'"}},
[e]="implicit conversion from floating\\-point type (.*?) to \'BOOL\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wobjc\\-signed\\-char\\-bool\\-implicit\\-float\\-conversion[^\\]]*\\]",
[g]="implicit conversion from floating\\-point type (.*?) to \'BOOL\'",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-signed\\-char\\-bool\\-implicit\\-float\\-conversion[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,hb}},
[h]={{r,14252,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (!IsConstant) {\n    if (isObjCSignedCharBool(S, T)) {\n      return adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CContext, diag::warn_impcast_float_to_objc_signed_char_bool) << E->getType());"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{t,14252,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (!IsConstant) {\n    if (isObjCSignedCharBool(S, T)) {\n      return adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CContext, diag::warn_impcast_float_to_objc_signed_char_bool) << E->getType());"}},
[l]={
["clang/test/SemaObjC/signed-char-bool-conversion.m"]={"clang/test/SemaObjC/signed-char-bool-conversion.m:18:5: warning: implicit conversion from floating-point type \'float\' to \'BOOL\' [-Wobjc-signed-char-bool-implicit-float-conversion]","clang/test/SemaObjC/signed-char-bool-conversion.m:38:8: warning: implicit conversion from floating-point type \'float\' to \'BOOL\' [-Wobjc-signed-char-bool-implicit-float-conversion]"}
["clang/test/SemaObjC/signed-char-bool-conversion.m"]={"clang/test/SemaObjC/signed-char-bool-conversion.m:18:5: warning: implicit conversion from floating-point type \'float\' to \'BOOL\' [-Wobjc-signed-char-bool-implicit-float-conversion]","clang/test/SemaObjC/signed-char-bool-conversion.m:38:8: warning: implicit conversion from floating-point type \'float\' to \'BOOL\' [-Wobjc-signed-char-bool-implicit-float-conversion]"}
}
}
},
},
["warn_impcast_floating_point_to_bool"]={
["warn_impcast_floating_point_to_bool"]={
[j]={"implicit-conversion-floating-point-to-bool"},
[k]={"implicit-conversion-floating-point-to-bool"},
[i]="implicit-conversion-floating-point-to-bool",
[j]="implicit-conversion-floating-point-to-bool",
[c]="implicit conversion turns floating-point number into bool: %0 to %1",
[c]="warn_impcast_floating_point_to_bool",
[d]=g,
[d]="implicit conversion turns floating-point number into bool: %0 to %1",
[e]="implicit conversion turns floating\\-point number into bool\\: (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-conversion\\-floating\\-point\\-to\\-bool[^\\]]*\\]",
[g]="implicit conversion turns floating\\-point number into bool\\: (.*?) to (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-conversion\\-floating\\-point\\-to\\-bool[^\\]]*\\]",
[a]={"f4ad23292111",1346168670,"Warn about suspicious implicit conversions from floating point to bool","Warn about suspicious implicit conversions from floating point to bool\n\nThis warns in two specific situations:\n\n1) For potentially swapped function arguments, e.g.\n\n    void foo(bool, float);\n    foo(1.7, false);\n\n2) Misplaced brackets around function call arguments, e.g.\n\n    bool InRange = fabs(a - b < delta);\n\n  Where the last argument in a function call is implicitly converted\n  from bool to float, and the function returns a float which gets\n  implicitly converted to bool.\n\nPatch by Andreas Eckleder!\n\nllvm-svn: 162763"},
[b]=m,
[h]={{r,14429,"static void CheckImplicitArgumentConversions(Sema &S, CallExpr *TheCall, SourceLocation CC) {\n  // ...\n  for (unsigned i = 0; i < NumArgs; ++i) {\n    // ...\n    if (IsSwapped) {\n      // ...\n      DiagnoseImpCast(S, CurrA->IgnoreParenImpCasts(), CurrA->getType(), CC, diag::warn_impcast_floating_point_to_bool);"},{r,14859,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // If the source is floating point...\n  if (SourceBT && SourceBT->isFloatingPoint()) {\n    // ...\n    // Detect the case where a call result is converted from floating-point to\n    // to bool, and the final argument to the call is converted from bool, to\n    // discover this typo:\n    //\n    //    bool b = fabs(x < 1.0);  // should be \"bool b = fabs(x) < 1.0;\"\n    //\n    // FIXME: This is an incredibly special case; is there some more general\n    // way to detect this class of misplaced-parentheses bug?\n    if (Target->isBooleanType() && isa<CallExpr>(E)) {\n      // ...\n      if (unsigned NumArgs = CEx->getNumArgs()) {\n        // ...\n        if (isa<ImplicitCastExpr>(LastA) && InnerE->getType()->isBooleanType()) {\n          // ...\n          DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_floating_point_to_bool);"}},
[f]={"f4ad23292111",1346168670,"Warn about suspicious implicit conversions from floating point to bool","Warn about suspicious implicit conversions from floating point to bool\n\nThis warns in two specific situations:\n\n1) For potentially swapped function arguments, e.g.\n\n    void foo(bool, float);\n    foo(1.7, false);\n\n2) Misplaced brackets around function call arguments, e.g.\n\n    bool InRange = fabs(a - b < delta);\n\n  Where the last argument in a function call is implicitly converted\n  from bool to float, and the function returns a float which gets\n  implicitly converted to bool.\n\nPatch by Andreas Eckleder!\n\nllvm-svn: 162763"},
[k]={
[h]={{t,14429,"static void CheckImplicitArgumentConversions(Sema &S, CallExpr *TheCall, SourceLocation CC) {\n  // ...\n  for (unsigned i = 0; i < NumArgs; ++i) {\n    // ...\n    if (IsSwapped) {\n      // ...\n      DiagnoseImpCast(S, CurrA->IgnoreParenImpCasts(), CurrA->getType(), CC, diag::warn_impcast_floating_point_to_bool);"},{t,14859,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // If the source is floating point...\n  if (SourceBT && SourceBT->isFloatingPoint()) {\n    // ...\n    // Detect the case where a call result is converted from floating-point to\n    // to bool, and the final argument to the call is converted from bool, to\n    // discover this typo:\n    //\n    //    bool b = fabs(x < 1.0);  // should be \"bool b = fabs(x) < 1.0;\"\n    //\n    // FIXME: This is an incredibly special case; is there some more general\n    // way to detect this class of misplaced-parentheses bug?\n    if (Target->isBooleanType() && isa<CallExpr>(E)) {\n      // ...\n      if (unsigned NumArgs = CEx->getNumArgs()) {\n        // ...\n        if (isa<ImplicitCastExpr>(LastA) && InnerE->getType()->isBooleanType()) {\n          // ...\n          DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_floating_point_to_bool);"}},
[l]={
["clang/test/SemaCXX/warn-implicit-conversion-floating-point-to-bool.cpp"]={"clang/test/SemaCXX/warn-implicit-conversion-floating-point-to-bool.cpp:17:7: warning: implicit conversion turns floating-point number into bool: \'float\' to \'bool\' [-Wimplicit-conversion-floating-point-to-bool]","clang/test/SemaCXX/warn-implicit-conversion-floating-point-to-bool.cpp:19:7: warning: implicit conversion turns floating-point number into bool: \'double\' to \'bool\' [-Wimplicit-conversion-floating-point-to-bool]","clang/test/SemaCXX/warn-implicit-conversion-floating-point-to-bool.cpp:21:7: warning: implicit conversion turns floating-point number into bool: \'float\' to \'bool\' [-Wimplicit-conversion-floating-point-to-bool]"}
["clang/test/SemaCXX/warn-implicit-conversion-floating-point-to-bool.cpp"]={"clang/test/SemaCXX/warn-implicit-conversion-floating-point-to-bool.cpp:17:7: warning: implicit conversion turns floating-point number into bool: \'float\' to \'bool\' [-Wimplicit-conversion-floating-point-to-bool]","clang/test/SemaCXX/warn-implicit-conversion-floating-point-to-bool.cpp:19:7: warning: implicit conversion turns floating-point number into bool: \'double\' to \'bool\' [-Wimplicit-conversion-floating-point-to-bool]","clang/test/SemaCXX/warn-implicit-conversion-floating-point-to-bool.cpp:21:7: warning: implicit conversion turns floating-point number into bool: \'float\' to \'bool\' [-Wimplicit-conversion-floating-point-to-bool]"}
}
}
},
},
["warn_impcast_high_order_zero_bits"]={
["warn_impcast_high_order_zero_bits"]={
[j]={V,"implicit-int-conversion",R},
[k]={eb,"implicit-int-conversion",Z},
[i]="implicit-int-conversion",
[j]="implicit-int-conversion",
[c]={{nil,ob,"higher order bits are zeroes after implicit conversion"}},
[c]={{nil,B,"warn_impcast_high_order_zero_bits"}},
[d]=g,
[d]={{nil,B,"higher order bits are zeroes after implicit conversion"}},
[e]="higher order bits are zeroes after implicit conversion",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-int\\-conversion[^\\]]*\\]",
[g]="higher order bits are zeroes after implicit conversion",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-int\\-conversion[^\\]]*\\]",
[a]={"cf7d2256d6b2",1538460150,"Added warning for unary minus used with unsigned type","Added warning for unary minus used with unsigned type\n\nSummary:\nInspired by MSVC, which found some occurrences of this expression on our code base.\n\nFixes PR38950\n\nReviewers: rsmith, craig.topper, spatel, RKSimon, aaron.ballman, thakis\n\nReviewed By: rsmith\n\nSubscribers: joerg, Quuxplusone, lebedev.ri, craig.topper, RKSimon, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D52137\n\nllvm-svn: 343560"},
[b]={{nil,B,hb}},
[h]={{r,15047,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (TargetRange.Width > SourceTypeRange.Width) {\n    if (auto *UO = dyn_cast<UnaryOperator>(E))\n      if (UO->getOpcode() == UO_Minus)\n        if (Source->isUnsignedIntegerType()) {\n          if (Target->isUnsignedIntegerType())\n            return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_high_order_zero_bits);"}},
[f]={"cf7d2256d6b2",1538460150,"Added warning for unary minus used with unsigned type","Added warning for unary minus used with unsigned type\n\nSummary:\nInspired by MSVC, which found some occurrences of this expression on our code base.\n\nFixes PR38950\n\nReviewers: rsmith, craig.topper, spatel, RKSimon, aaron.ballman, thakis\n\nReviewed By: rsmith\n\nSubscribers: joerg, Quuxplusone, lebedev.ri, craig.topper, RKSimon, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D52137\n\nllvm-svn: 343560"},
[k]={
[h]={{t,15047,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (TargetRange.Width > SourceTypeRange.Width) {\n    if (auto *UO = dyn_cast<UnaryOperator>(E))\n      if (UO->getOpcode() == UO_Minus)\n        if (Source->isUnsignedIntegerType()) {\n          if (Target->isUnsignedIntegerType())\n            return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_high_order_zero_bits);"}},
[l]={
["clang/test/Sema/unary-minus-integer-impcast.c"]={"clang/test/Sema/unary-minus-integer-impcast.c:7:26: warning: higher order bits are zeroes after implicit conversion [-Wimplicit-int-conversion]"}
["clang/test/Sema/unary-minus-integer-impcast.c"]={"clang/test/Sema/unary-minus-integer-impcast.c:7:26: warning: higher order bits are zeroes after implicit conversion [-Wimplicit-int-conversion]"}
}
}
},
},
["warn_impcast_int_to_objc_signed_char_bool"]={
["warn_impcast_int_to_objc_signed_char_bool"]={
[j]={V,"implicit-int-conversion",R,"objc-signed-char-bool","objc-signed-char-bool-implicit-int-conversion"},
[k]={eb,"implicit-int-conversion",Z,"objc-signed-char-bool","objc-signed-char-bool-implicit-int-conversion"},
[i]="objc-signed-char-bool-implicit-int-conversion",
[j]="objc-signed-char-bool-implicit-int-conversion",
[c]={{nil,z,"implicit conversion from integral type %0 to \'BOOL\'"}},
[c]={{nil,q,"warn_impcast_int_to_objc_signed_char_bool"}},
[d]=g,
[d]={{nil,q,"implicit conversion from integral type %0 to \'BOOL\'"}},
[e]="implicit conversion from integral type (.*?) to \'BOOL\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wobjc\\-signed\\-char\\-bool\\-implicit\\-int\\-conversion[^\\]]*\\]",
[g]="implicit conversion from integral type (.*?) to \'BOOL\'",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-signed\\-char\\-bool\\-implicit\\-int\\-conversion[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,hb}},
[h]={{r,14998,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (isObjCSignedCharBool(S, T) && !Source->isCharType() && !E->isKnownToHaveBooleanValue(/*Semantic=*/false)) {\n    return adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CC, diag::warn_impcast_int_to_objc_signed_char_bool) << E->getType());"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{t,14998,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (isObjCSignedCharBool(S, T) && !Source->isCharType() && !E->isKnownToHaveBooleanValue(/*Semantic=*/false)) {\n    return adornObjCBoolConversionDiagWithTernaryFixit(S, E, S.Diag(CC, diag::warn_impcast_int_to_objc_signed_char_bool) << E->getType());"}},
[l]={
["clang/test/Sema/objc-bool-constant-conversion-fixit.m"]={"clang/test/Sema/objc-bool-constant-conversion-fixit.m:31:5: error: implicit conversion from integral type \'int\' to \'BOOL\' [-Werror,-Wobjc-signed-char-bool-implicit-int-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:34:5: error: implicit conversion from integral type \'int\' to \'BOOL\' [-Werror,-Wobjc-signed-char-bool-implicit-int-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:54:8: error: implicit conversion from integral type \'int\' to \'BOOL\' [-Werror,-Wobjc-signed-char-bool-implicit-int-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:57:8: error: implicit conversion from integral type \'int\' to \'BOOL\' [-Werror,-Wobjc-signed-char-bool-implicit-int-conversion]"}
["clang/test/Sema/objc-bool-constant-conversion-fixit.m"]={"clang/test/Sema/objc-bool-constant-conversion-fixit.m:31:5: error: implicit conversion from integral type \'int\' to \'BOOL\' [-Werror,-Wobjc-signed-char-bool-implicit-int-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:34:5: error: implicit conversion from integral type \'int\' to \'BOOL\' [-Werror,-Wobjc-signed-char-bool-implicit-int-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:54:8: error: implicit conversion from integral type \'int\' to \'BOOL\' [-Werror,-Wobjc-signed-char-bool-implicit-int-conversion]","clang/test/Sema/objc-bool-constant-conversion-fixit.m:57:8: error: implicit conversion from integral type \'int\' to \'BOOL\' [-Werror,-Wobjc-signed-char-bool-implicit-int-conversion]"}
}
}
},
},
["warn_impcast_integer_64_32"]={
["warn_impcast_integer_64_32"]={
[j]={V,R,"shorten-64-to-32"},
[k]={eb,Z,"shorten-64-to-32"},
[i]="shorten-64-to-32",
[j]="shorten-64-to-32",
[c]="implicit conversion loses integer precision: %0 to %1",
[c]="warn_impcast_integer_64_32",
[d]=g,
[d]="implicit conversion loses integer precision: %0 to %1",
[e]="implicit conversion loses integer precision\\: (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wshorten\\-64\\-to\\-32[^\\]]*\\]",
[g]="implicit conversion loses integer precision\\: (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wshorten\\-64\\-to\\-32[^\\]]*\\]",
[a]={"b61e9d03c1ab",1257584633,"Support -Wshorten-64-to-32 for integer types only, which seems to satisfy the","Support -Wshorten-64-to-32 for integer types only, which seems to satisfy the\ncore requirements.  Fixes rdar://problem/6389954\n\nllvm-svn: 86364"},
[b]=hb,
[h]={{r,15036,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (LikelySourceRange.Width > TargetRange.Width) {\n    // ...\n    if (TargetRange.Width == 32 && S.Context.getIntWidth(E->getType()) == 64)\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_64_32,"}},
[f]={"b61e9d03c1ab",1257584633,"Support -Wshorten-64-to-32 for integer types only, which seems to satisfy the","Support -Wshorten-64-to-32 for integer types only, which seems to satisfy the\ncore requirements.  Fixes rdar://problem/6389954\n\nllvm-svn: 86364"},
[k]={
[h]={{t,15036,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (LikelySourceRange.Width > TargetRange.Width) {\n    // ...\n    if (TargetRange.Width == 32 && S.Context.getIntWidth(E->getType()) == 64)\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_64_32,"}},
[l]={
["clang/test/Sema/conversion-64-32.c"]={"clang/test/Sema/conversion-64-32.c:4:10: warning: implicit conversion loses integer precision: \'long\' to \'int\' [-Wshorten-64-to-32]","clang/test/Sema/conversion-64-32.c:18:12: warning: implicit conversion loses integer precision: \'long\' to \'int\' [-Wshorten-64-to-32]"}
["clang/test/Sema/conversion-64-32.c"]={"clang/test/Sema/conversion-64-32.c:4:10: warning: implicit conversion loses integer precision: \'long\' to \'int\' [-Wshorten-64-to-32]","clang/test/Sema/conversion-64-32.c:18:12: warning: implicit conversion loses integer precision: \'long\' to \'int\' [-Wshorten-64-to-32]"}
}
}
},
},
["warn_impcast_integer_float_precision"]={
["warn_impcast_integer_float_precision"]={
[j]={V,sd,"implicit-int-float-conversion",R},
[k]={eb,ld,"implicit-int-float-conversion",Z},
[i]="implicit-int-float-conversion",
[j]="implicit-int-float-conversion",
[c]={{nil,z,"implicit conversion from %0 to %1 may lose precision"}},
[c]={{nil,q,"warn_impcast_integer_float_precision"}},
[d]=g,
[d]={{nil,q,"implicit conversion from %0 to %1 may lose precision"}},
[e]="implicit conversion from (.*?) to (.*?) may lose precision",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-int\\-float\\-conversion[^\\]]*\\]",
[g]="implicit conversion from (.*?) to (.*?) may lose precision",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-int\\-float\\-conversion[^\\]]*\\]",
[a]={"2028d97d09b8",1564014770,"[Sema] Enable -Wimplicit-float-conversion for integral to floating point precision loss","[Sema] Enable -Wimplicit-float-conversion for integral to floating point precision loss\n\nIssue an warning when the code tries to do an implicit int -> float\nconversion, where the float type ha a narrower significant than the\nfloat type.\n\nThe new warning is controlled by flag -Wimplicit-int-float-conversion,\nunder -Wimplicit-float-conversion and -Wconversion.\n\nDifferential Revision: https://reviews.llvm.org/D64666\n\nllvm-svn: 366972"},
[b]={{nil,q,hb}},
[h]={{r,14974,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // If we are casting an integer type to a floating point type without\n  // initialization-list syntax, we might lose accuracy if the floating\n  // point type has a narrower significand than the integer type.\n  if (SourceBT && TargetBT && SourceBT->isIntegerType() && TargetBT->isFloatingType() && !IsListInit) {\n    // ...\n    if (SourcePrecision > 0 && TargetPrecision > 0 && SourcePrecision > TargetPrecision) {\n      if (std::optional<llvm::APSInt> SourceInt = E->getIntegerConstantExpr(S.Context)) {\n      // ...\n      } else {\n        // ...\n        DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_float_precision);"}},
[f]={"2028d97d09b8",1564014770,"[Sema] Enable -Wimplicit-float-conversion for integral to floating point precision loss","[Sema] Enable -Wimplicit-float-conversion for integral to floating point precision loss\n\nIssue an warning when the code tries to do an implicit int -> float\nconversion, where the float type ha a narrower significant than the\nfloat type.\n\nThe new warning is controlled by flag -Wimplicit-int-float-conversion,\nunder -Wimplicit-float-conversion and -Wconversion.\n\nDifferential Revision: https://reviews.llvm.org/D64666\n\nllvm-svn: 366972"},
[k]={
[h]={{t,14974,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // If we are casting an integer type to a floating point type without\n  // initialization-list syntax, we might lose accuracy if the floating\n  // point type has a narrower significand than the integer type.\n  if (SourceBT && TargetBT && SourceBT->isIntegerType() && TargetBT->isFloatingType() && !IsListInit) {\n    // ...\n    if (SourcePrecision > 0 && TargetPrecision > 0 && SourcePrecision > TargetPrecision) {\n      if (std::optional<llvm::APSInt> SourceInt = E->getIntegerConstantExpr(S.Context)) {\n      // ...\n      } else {\n        // ...\n        DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_float_precision);"}},
[l]={
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:118:8: warning: implicit conversion from \'long\' to \'float2\' (vector of 2 \'float\' values) may lose precision [-Wimplicit-int-float-conversion]","clang/test/Sema/ext_vector_casts.c:124:8: warning: implicit conversion from \'long\' to \'double2\' (vector of 2 \'double\' values) may lose precision [-Wimplicit-int-float-conversion]","clang/test/Sema/ext_vector_casts.c:125:13: warning: implicit conversion from \'__uint128_t\' (aka \'unsigned __int128\') to \'double2\' (vector of 2 \'double\' values) may lose precision [-Wimplicit-int-float-conversion]"}
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:118:8: warning: implicit conversion from \'long\' to \'float2\' (vector of 2 \'float\' values) may lose precision [-Wimplicit-int-float-conversion]","clang/test/Sema/ext_vector_casts.c:124:8: warning: implicit conversion from \'long\' to \'double2\' (vector of 2 \'double\' values) may lose precision [-Wimplicit-int-float-conversion]","clang/test/Sema/ext_vector_casts.c:125:13: warning: implicit conversion from \'__uint128_t\' (aka \'unsigned __int128\') to \'double2\' (vector of 2 \'double\' values) may lose precision [-Wimplicit-int-float-conversion]"}
}
}
},
},
["warn_impcast_integer_float_precision_constant"]={
["warn_impcast_integer_float_precision_constant"]={
[j]={V,"implicit-const-int-float-conversion",sd,"implicit-int-float-conversion",R},
[k]={eb,"implicit-const-int-float-conversion",ld,"implicit-int-float-conversion",Z},
[i]="implicit-const-int-float-conversion",
[j]="implicit-const-int-float-conversion",
[c]={{nil,z,"implicit conversion from %2 to %3 changes value from %0 to %1"}},
[c]={{nil,q,"warn_impcast_integer_float_precision_constant"}},
[d]=g,
[d]={{nil,q,"implicit conversion from %2 to %3 changes value from %0 to %1"}},
[e]="implicit conversion from (.*?) to (.*?) changes value from (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-const\\-int\\-float\\-conversion[^\\]]*\\]",
[g]="implicit conversion from (.*?) to (.*?) changes value from (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-const\\-int\\-float\\-conversion[^\\]]*\\]",
[a]={"2028d97d09b8",1564014770,"[Sema] Enable -Wimplicit-float-conversion for integral to floating point precision loss","[Sema] Enable -Wimplicit-float-conversion for integral to floating point precision loss\n\nIssue an warning when the code tries to do an implicit int -> float\nconversion, where the float type ha a narrower significant than the\nfloat type.\n\nThe new warning is controlled by flag -Wimplicit-int-float-conversion,\nunder -Wimplicit-float-conversion and -Wconversion.\n\nDifferential Revision: https://reviews.llvm.org/D64666\n\nllvm-svn: 366972"},
[b]={{nil,q,hb}},
[h]={{r,14967,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // If we are casting an integer type to a floating point type without\n  // initialization-list syntax, we might lose accuracy if the floating\n  // point type has a narrower significand than the integer type.\n  if (SourceBT && TargetBT && SourceBT->isIntegerType() && TargetBT->isFloatingType() && !IsListInit) {\n    // ...\n    if (SourcePrecision > 0 && TargetPrecision > 0 && SourcePrecision > TargetPrecision) {\n      if (std::optional<llvm::APSInt> SourceInt = E->getIntegerConstantExpr(S.Context)) {\n        // ...\n        if (ConversionStatus != llvm::APFloat::opOK) {\n          // ...\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_integer_float_precision_constant) << PrettySourceValue << PrettyTargetValue << E->getType() << T << E->getSourceRange() << clang::SourceRange(CC));"}},
[f]={"2028d97d09b8",1564014770,"[Sema] Enable -Wimplicit-float-conversion for integral to floating point precision loss","[Sema] Enable -Wimplicit-float-conversion for integral to floating point precision loss\n\nIssue an warning when the code tries to do an implicit int -> float\nconversion, where the float type ha a narrower significant than the\nfloat type.\n\nThe new warning is controlled by flag -Wimplicit-int-float-conversion,\nunder -Wimplicit-float-conversion and -Wconversion.\n\nDifferential Revision: https://reviews.llvm.org/D64666\n\nllvm-svn: 366972"},
[k]={
[h]={{t,14967,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // If we are casting an integer type to a floating point type without\n  // initialization-list syntax, we might lose accuracy if the floating\n  // point type has a narrower significand than the integer type.\n  if (SourceBT && TargetBT && SourceBT->isIntegerType() && TargetBT->isFloatingType() && !IsListInit) {\n    // ...\n    if (SourcePrecision > 0 && TargetPrecision > 0 && SourcePrecision > TargetPrecision) {\n      if (std::optional<llvm::APSInt> SourceInt = E->getIntegerConstantExpr(S.Context)) {\n        // ...\n        if (ConversionStatus != llvm::APFloat::opOK) {\n          // ...\n          S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_integer_float_precision_constant) << PrettySourceValue << PrettyTargetValue << E->getType() << T << E->getSourceRange() << clang::SourceRange(CC));"}},
[l]={
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:121:13: warning: implicit conversion from \'unsigned int\' to \'float2\' (vector of 2 \'float\' values) changes value from 4294967295 to 4294967296 [-Wimplicit-const-int-float-conversion]"}
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:121:13: warning: implicit conversion from \'unsigned int\' to \'float2\' (vector of 2 \'float\' values) changes value from 4294967295 to 4294967296 [-Wimplicit-const-int-float-conversion]"}
}
}
},
},
["warn_impcast_integer_precision"]={
["warn_impcast_integer_precision"]={
[j]={V,"implicit-int-conversion",R},
[k]={eb,"implicit-int-conversion",Z},
[i]="implicit-int-conversion",
[j]="implicit-int-conversion",
[c]="implicit conversion loses integer precision: %0 to %1",
[c]="warn_impcast_integer_precision",
[d]=g,
[d]="implicit conversion loses integer precision: %0 to %1",
[e]="implicit conversion loses integer precision\\: (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-int\\-conversion[^\\]]*\\]",
[g]="implicit conversion loses integer precision\\: (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-int\\-conversion[^\\]]*\\]",
[a]={"fceb64bd044f",1257564610,"Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s","Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s\nsignificant work left to be done to reduce the false-positive rate here.\n\nllvm-svn: 86326"},
[b]=hb,
[h]={{r,15038,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (LikelySourceRange.Width > TargetRange.Width) {\n    // ...\n    return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_precision);"}},
[f]={"fceb64bd044f",1257564610,"Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s","Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s\nsignificant work left to be done to reduce the false-positive rate here.\n\nllvm-svn: 86326"},
[k]={
[h]={{t,15038,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (LikelySourceRange.Width > TargetRange.Width) {\n    // ...\n    return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_precision);"}},
[l]={
["clang/test/SemaObjC/conversion.m"]={"clang/test/SemaObjC/conversion.m:14:7: warning: implicit conversion loses integer precision: \'int\' to \'char\' [-Wimplicit-int-conversion]"}
["clang/test/SemaObjC/conversion.m"]={"clang/test/SemaObjC/conversion.m:14:7: warning: implicit conversion loses integer precision: \'int\' to \'char\' [-Wimplicit-int-conversion]"}
}
}
},
},
["warn_impcast_integer_precision_constant"]={
["warn_impcast_integer_precision_constant"]={
[j]={"constant-conversion",V,R},
[k]={"constant-conversion",eb,Z},
[i]="constant-conversion",
[j]="constant-conversion",
[c]="implicit conversion from %2 to %3 changes value from %0 to %1",
[c]="warn_impcast_integer_precision_constant",
[d]=g,
[d]="implicit conversion from %2 to %3 changes value from %0 to %1",
[e]="implicit conversion from (.*?) to (.*?) changes value from (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wconstant\\-conversion[^\\]]*\\]",
[g]="implicit conversion from (.*?) to (.*?) changes value from (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wconstant\\-conversion[^\\]]*\\]",
[a]={"18a2c2c0b9d2",1289341332,"Split out -Wconversion warnings about constant precision into their","Split out -Wconversion warnings about constant precision into their\nown subcategory, -Wconstant-conversion, which is on by default.\n\nTweak the constant folder to give better results in the invalid\ncase of a negative shift amount.\n\nImplements rdar://problem/6792488\n\nllvm-svn: 118636"},
[b]=hb,
[h]={{r,15025,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (LikelySourceRange.Width > TargetRange.Width) {\n    // ...\n    if (E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects, S.isConstantEvaluated())) {\n      // ...\n      S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_integer_precision_constant) << PrettySourceValue << PrettyTargetValue << E->getType() << T << E->getSourceRange() << SourceRange(CC));"},{r,15071,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (TargetRange.Width == LikelySourceRange.Width && !TargetRange.NonNegative && LikelySourceRange.NonNegative && Source->isSignedIntegerType()) {\n    // ...\n    if (E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects) && !S.SourceMgr.isInSystemMacro(CC)) {\n      // ...\n      if (isSameWidthConstantConversion(S, E, T, CC)) {\n        // ...\n        S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_integer_precision_constant) << PrettySourceValue << PrettyTargetValue << E->getType() << T << E->getSourceRange() << SourceRange(CC));"}},
[f]={"18a2c2c0b9d2",1289341332,"Split out -Wconversion warnings about constant precision into their","Split out -Wconversion warnings about constant precision into their\nown subcategory, -Wconstant-conversion, which is on by default.\n\nTweak the constant folder to give better results in the invalid\ncase of a negative shift amount.\n\nImplements rdar://problem/6792488\n\nllvm-svn: 118636"},
[k]={
[h]={{t,15025,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (LikelySourceRange.Width > TargetRange.Width) {\n    // ...\n    if (E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects, S.isConstantEvaluated())) {\n      // ...\n      S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_integer_precision_constant) << PrettySourceValue << PrettyTargetValue << E->getType() << T << E->getSourceRange() << SourceRange(CC));"},{t,15071,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (TargetRange.Width == LikelySourceRange.Width && !TargetRange.NonNegative && LikelySourceRange.NonNegative && Source->isSignedIntegerType()) {\n    // ...\n    if (E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects) && !S.SourceMgr.isInSystemMacro(CC)) {\n      // ...\n      if (isSameWidthConstantConversion(S, E, T, CC)) {\n        // ...\n        S.DiagRuntimeBehavior(E->getExprLoc(), E, S.PDiag(diag::warn_impcast_integer_precision_constant) << PrettySourceValue << PrettyTargetValue << E->getType() << T << E->getSourceRange() << SourceRange(CC));"}},
[l]={
["clang/test/SemaCXX/cxx0x-initializer-scalars.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:48:21: warning: implicit conversion from \'int\' to \'const short\' changes value from 100000 to -31072 [-Wconstant-conversion]","clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:49:24: warning: implicit conversion from \'int\' to \'const short\' changes value from 100000 to -31072 [-Wconstant-conversion]"}
["clang/test/SemaCXX/cxx0x-initializer-scalars.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:48:21: warning: implicit conversion from \'int\' to \'const short\' changes value from 100000 to -31072 [-Wconstant-conversion]","clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:49:24: warning: implicit conversion from \'int\' to \'const short\' changes value from 100000 to -31072 [-Wconstant-conversion]"}
}
}
},
},
["warn_impcast_integer_sign"]={
["warn_impcast_integer_sign"]={
[j]={V,R,Fd},
[k]={eb,Z,"sign-conversion"},
[i]=Fd,
[j]="sign-conversion",
[c]="implicit conversion changes signedness: %0 to %1",
[c]="warn_impcast_integer_sign",
[d]=g,
[d]="implicit conversion changes signedness: %0 to %1",
[e]="implicit conversion changes signedness\\: (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wsign\\-conversion[^\\]]*\\]",
[g]="implicit conversion changes signedness\\: (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wsign\\-conversion[^\\]]*\\]",
[a]={"cc7e5bff5c80",1273136313,"Rearchitect -Wconversion and -Wsign-compare.  Instead of computing them","Rearchitect -Wconversion and -Wsign-compare.  Instead of computing them\n\"bottom-up\" when implicit casts and comparisons are inserted, compute them\n\"top-down\" when the full expression is finished.  Makes it easier to\ncoordinate warnings and thus implement -Wconversion for signedness\nconversions without double-warning with -Wsign-compare.  Also makes it possible\nto realize that a signedness conversion is okay because the context is\nperforming the inverse conversion.  Also simplifies some logic that was\ntrying to calculate the ultimate comparison/result type and getting it wrong.\nAlso fixes a problem with the C++ explicit casts which are often \"implemented\"\nin the AST with a series of implicit cast expressions.\n\nllvm-svn: 103174"},
[b]=hb,
[h]={{r,15094,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if ((!isa<EnumType>(Target) || !isa<EnumType>(Source)) && ((TargetRange.NonNegative && !LikelySourceRange.NonNegative) || (!TargetRange.NonNegative && LikelySourceRange.NonNegative && LikelySourceRange.Width == TargetRange.Width))) {\n    // ...\n    unsigned DiagID = diag::warn_impcast_integer_sign;"}},
[f]={"cc7e5bff5c80",1273136313,"Rearchitect -Wconversion and -Wsign-compare.  Instead of computing them","Rearchitect -Wconversion and -Wsign-compare.  Instead of computing them\n\"bottom-up\" when implicit casts and comparisons are inserted, compute them\n\"top-down\" when the full expression is finished.  Makes it easier to\ncoordinate warnings and thus implement -Wconversion for signedness\nconversions without double-warning with -Wsign-compare.  Also makes it possible\nto realize that a signedness conversion is okay because the context is\nperforming the inverse conversion.  Also simplifies some logic that was\ntrying to calculate the ultimate comparison/result type and getting it wrong.\nAlso fixes a problem with the C++ explicit casts which are often \"implemented\"\nin the AST with a series of implicit cast expressions.\n\nllvm-svn: 103174"},
[k]={
[h]={{t,15094,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if ((!isa<EnumType>(Target) || !isa<EnumType>(Source)) && ((TargetRange.NonNegative && !LikelySourceRange.NonNegative) || (!TargetRange.NonNegative && LikelySourceRange.NonNegative && LikelySourceRange.Width == TargetRange.Width))) {\n    // ...\n    unsigned DiagID = diag::warn_impcast_integer_sign;"}},
[l]={
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:112:13: warning: implicit conversion changes signedness: \'unsigned int\' to \'int4\' (vector of 4 \'int\' values) [-Wsign-conversion]","clang/test/Sema/ext_vector_casts.c:114:8: warning: implicit conversion changes signedness: \'long\' to \'ulong2\' (vector of 2 \'unsigned long\' values) [-Wsign-conversion]"}
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:112:13: warning: implicit conversion changes signedness: \'unsigned int\' to \'int4\' (vector of 4 \'int\' values) [-Wsign-conversion]","clang/test/Sema/ext_vector_casts.c:114:8: warning: implicit conversion changes signedness: \'long\' to \'ulong2\' (vector of 2 \'unsigned long\' values) [-Wsign-conversion]"}
}
}
},
},
["warn_impcast_integer_sign_conditional"]={
["warn_impcast_integer_sign_conditional"]={
[j]={V,R,Fd},
[k]={eb,Z,"sign-conversion"},
[i]=Fd,
[j]="sign-conversion",
[c]="operand of ? changes signedness: %0 to %1",
[c]="warn_impcast_integer_sign_conditional",
[d]=g,
[d]="operand of ? changes signedness: %0 to %1",
[e]="operand of \\? changes signedness\\: (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wsign\\-conversion[^\\]]*\\]",
[g]="operand of \\? changes signedness\\: (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wsign\\-conversion[^\\]]*\\]",
[a]={"cc7e5bff5c80",1273136313,"Rearchitect -Wconversion and -Wsign-compare.  Instead of computing them","Rearchitect -Wconversion and -Wsign-compare.  Instead of computing them\n\"bottom-up\" when implicit casts and comparisons are inserted, compute them\n\"top-down\" when the full expression is finished.  Makes it easier to\ncoordinate warnings and thus implement -Wconversion for signedness\nconversions without double-warning with -Wsign-compare.  Also makes it possible\nto realize that a signedness conversion is okay because the context is\nperforming the inverse conversion.  Also simplifies some logic that was\ntrying to calculate the ultimate comparison/result type and getting it wrong.\nAlso fixes a problem with the C++ explicit casts which are often \"implemented\"\nin the AST with a series of implicit cast expressions.\n\nllvm-svn: 103174"},
[b]=hb,
[h]={{r,15102,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if ((!isa<EnumType>(Target) || !isa<EnumType>(Source)) && ((TargetRange.NonNegative && !LikelySourceRange.NonNegative) || (!TargetRange.NonNegative && LikelySourceRange.NonNegative && LikelySourceRange.Width == TargetRange.Width))) {\n    // ...\n    // Traditionally, gcc has warned about this under -Wsign-compare.\n    // We also want to warn about it in -Wconversion.\n    // So if -Wconversion is off, use a completely identical diagnostic\n    // in the sign-compare group.\n    // The conditional-checking code will\n    if (ICContext) {\n      DiagID = diag::warn_impcast_integer_sign_conditional;"},{r,15173,"static void CheckConditionalOperator(Sema &S, AbstractConditionalOperator *E, SourceLocation CC, QualType T) {\n  // ...\n  if (!S.Diags.isIgnored(diag::warn_impcast_integer_sign_conditional, CC))"}},
[f]={"cc7e5bff5c80",1273136313,"Rearchitect -Wconversion and -Wsign-compare.  Instead of computing them","Rearchitect -Wconversion and -Wsign-compare.  Instead of computing them\n\"bottom-up\" when implicit casts and comparisons are inserted, compute them\n\"top-down\" when the full expression is finished.  Makes it easier to\ncoordinate warnings and thus implement -Wconversion for signedness\nconversions without double-warning with -Wsign-compare.  Also makes it possible\nto realize that a signedness conversion is okay because the context is\nperforming the inverse conversion.  Also simplifies some logic that was\ntrying to calculate the ultimate comparison/result type and getting it wrong.\nAlso fixes a problem with the C++ explicit casts which are often \"implemented\"\nin the AST with a series of implicit cast expressions.\n\nllvm-svn: 103174"},
[k]={
[h]={{t,15102,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if ((!isa<EnumType>(Target) || !isa<EnumType>(Source)) && ((TargetRange.NonNegative && !LikelySourceRange.NonNegative) || (!TargetRange.NonNegative && LikelySourceRange.NonNegative && LikelySourceRange.Width == TargetRange.Width))) {\n    // ...\n    // Traditionally, gcc has warned about this under -Wsign-compare.\n    // We also want to warn about it in -Wconversion.\n    // So if -Wconversion is off, use a completely identical diagnostic\n    // in the sign-compare group.\n    // The conditional-checking code will\n    if (ICContext) {\n      DiagID = diag::warn_impcast_integer_sign_conditional;"},{t,15173,"static void CheckConditionalOperator(Sema &S, AbstractConditionalOperator *E, SourceLocation CC, QualType T) {\n  // ...\n  if (!S.Diags.isIgnored(diag::warn_impcast_integer_sign_conditional, CC))"}},
[l]={
["clang/test/Sema/conditional-expr.c"]={"clang/test/Sema/conditional-expr.c:44:19: warning: operand of ? changes signedness: \'long\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:45:19: warning: operand of ? changes signedness: \'int\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:46:19: warning: operand of ? changes signedness: \'short\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:47:27: warning: operand of ? changes signedness: \'long\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:48:27: warning: operand of ? changes signedness: \'int\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:49:27: warning: operand of ? changes signedness: \'short\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:63:19: warning: operand of ? changes signedness: \'int\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:65:26: warning: operand of ? changes signedness: \'int\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:66:19: warning: operand of ? changes signedness: \'int\' to \'unsigned long\' [-Wsign-conversion]"}
["clang/test/Sema/conditional-expr.c"]={"clang/test/Sema/conditional-expr.c:44:19: warning: operand of ? changes signedness: \'long\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:45:19: warning: operand of ? changes signedness: \'int\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:46:19: warning: operand of ? changes signedness: \'short\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:47:27: warning: operand of ? changes signedness: \'long\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:48:27: warning: operand of ? changes signedness: \'int\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:49:27: warning: operand of ? changes signedness: \'short\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:63:19: warning: operand of ? changes signedness: \'int\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:65:26: warning: operand of ? changes signedness: \'int\' to \'unsigned long\' [-Wsign-conversion]","clang/test/Sema/conditional-expr.c:66:19: warning: operand of ? changes signedness: \'int\' to \'unsigned long\' [-Wsign-conversion]"}
}
}
},
},
["warn_impcast_literal_float_to_integer"]={
["warn_impcast_literal_float_to_integer"]={
[j]={V,"literal-conversion",R},
[k]={eb,"literal-conversion",Z},
[i]="literal-conversion",
[j]="literal-conversion",
[c]="implicit conversion from %0 to %1 changes value from %2 to %3",
[c]="warn_impcast_literal_float_to_integer",
[d]=g,
[d]="implicit conversion from %0 to %1 changes value from %2 to %3",
[e]="implicit conversion from (.*?) to (.*?) changes value from (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wliteral\\-conversion[^\\]]*\\]",
[g]="implicit conversion from (.*?) to (.*?) changes value from (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wliteral\\-conversion[^\\]]*\\]",
[a]={"22c7a79a1da4",1297940749,"Implement a sub-group of -Wconversion: -Wliteral-conversion. This","Implement a sub-group of -Wconversion: -Wliteral-conversion. This\nspecifically targets literals which are implicitly converted, a those\nare more often unintended and trivial to fix. This can be especially\nhelpful for diagnosing what makes \'const int x = 1e6\' not an ICE.\n\nOriginal patch authored by Jim Meehan with contributions from other\nGooglers and a few cleanups from myself.\n\nllvm-svn: 125745"},
[b]=hb,
[h]={{r,14302,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (IsLiteral) {\n    // ...\n    DiagID = diag::warn_impcast_literal_float_to_integer;"}},
[f]={"22c7a79a1da4",1297940749,"Implement a sub-group of -Wconversion: -Wliteral-conversion. This","Implement a sub-group of -Wconversion: -Wliteral-conversion. This\nspecifically targets literals which are implicitly converted, a those\nare more often unintended and trivial to fix. This can be especially\nhelpful for diagnosing what makes \'const int x = 1e6\' not an ICE.\n\nOriginal patch authored by Jim Meehan with contributions from other\nGooglers and a few cleanups from myself.\n\nllvm-svn: 125745"},
[k]={
[h]={{t,14302,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  if (IsLiteral) {\n    // ...\n    DiagID = diag::warn_impcast_literal_float_to_integer;"}},
[l]={
["clang/test/Preprocessor/_Pragma-in-macro-arg.cpp"]={"clang/test/Preprocessor/_Pragma-in-macro-arg.cpp:13:11: warning: implicit conversion from \'double\' to \'int\' changes value from 1.2 to 1 [-Wliteral-conversion]","clang/test/Preprocessor/_Pragma-in-macro-arg.cpp:21:11: warning: implicit conversion from \'double\' to \'int\' changes value from 1.2 to 1 [-Wliteral-conversion]"}
["clang/test/Preprocessor/_Pragma-in-macro-arg.cpp"]={"clang/test/Preprocessor/_Pragma-in-macro-arg.cpp:13:11: warning: implicit conversion from \'double\' to \'int\' changes value from 1.2 to 1 [-Wliteral-conversion]","clang/test/Preprocessor/_Pragma-in-macro-arg.cpp:21:11: warning: implicit conversion from \'double\' to \'int\' changes value from 1.2 to 1 [-Wliteral-conversion]"}
}
}
},
},
["warn_impcast_literal_float_to_integer_out_of_range"]={
["warn_impcast_literal_float_to_integer_out_of_range"]={
[j]={V,"literal-conversion",R},
[k]={eb,"literal-conversion",Z},
[i]="literal-conversion",
[j]="literal-conversion",
[c]={{nil,eb,"implicit conversion of out of range value from %0 to %1 is undefined"}},
[c]={{nil,D,"warn_impcast_literal_float_to_integer_out_of_range"}},
[d]=g,
[d]={{nil,D,"implicit conversion of out of range value from %0 to %1 is undefined"}},
[e]="implicit conversion of out of range value from (.*?) to (.*?) is undefined",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wliteral\\-conversion[^\\]]*\\]",
[g]="implicit conversion of out of range value from (.*?) to (.*?) is undefined",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wliteral\\-conversion[^\\]]*\\]",
[a]={"7130a9393470",1525726376,"Correct warning on Float->Integer conversions.","Correct warning on Float->Integer conversions.\n\nAs identified and briefly discussed here:\nhttps://bugs.llvm.org/show_bug.cgi?id=37305\n\nConverting a floating point number to an integer type when\nthe integral part is out of the range of the integer type is\nundefined behavior in C. Additionally, CodeGen emits an undef\nin this situation.\n\nHOWEVER, we\'ve been giving a warning that says that the value is\nchanged. This patch corrects the warning to list that it is actually\nundefined behavior.\n\nDifferential Revision: https://reviews.llvm.org/D46535\n\nllvm-svn: 331673"},
[b]={{nil,D,hb}},
[h]={{r,14295,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  // Conversion of a floating-point value to a non-bool integer where the\n  // integral part cannot be represented by the integer type is undefined.\n  if (!IsBool && Result == llvm::APFloat::opInvalidOp)\n    return DiagnoseImpCast(S, E, T, CContext, IsLiteral ? diag::warn_impcast_literal_float_to_integer_out_of_range : diag::warn_impcast_float_to_integer_out_of_range, PruneWarnings);"}},
[f]={"7130a9393470",1525726376,"Correct warning on Float->Integer conversions.","Correct warning on Float->Integer conversions.\n\nAs identified and briefly discussed here:\nhttps://bugs.llvm.org/show_bug.cgi?id=37305\n\nConverting a floating point number to an integer type when\nthe integral part is out of the range of the integer type is\nundefined behavior in C. Additionally, CodeGen emits an undef\nin this situation.\n\nHOWEVER, we\'ve been giving a warning that says that the value is\nchanged. This patch corrects the warning to list that it is actually\nundefined behavior.\n\nDifferential Revision: https://reviews.llvm.org/D46535\n\nllvm-svn: 331673"},
[k]={
[h]={{t,14295,"/// Diagnose an implicit cast from a floating point value to an integer value.\nstatic void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T, SourceLocation CContext) {\n  // ...\n  // Conversion of a floating-point value to a non-bool integer where the\n  // integral part cannot be represented by the integer type is undefined.\n  if (!IsBool && Result == llvm::APFloat::opInvalidOp)\n    return DiagnoseImpCast(S, E, T, CContext, IsLiteral ? diag::warn_impcast_literal_float_to_integer_out_of_range : diag::warn_impcast_float_to_integer_out_of_range, PruneWarnings);"}},
[l]={
["clang/test/SemaCXX/warn-literal-conversion.cpp"]={"clang/test/SemaCXX/warn-literal-conversion.cpp:53:13: warning: implicit conversion of out of range value from \'double\' to \'short\' is undefined [-Wliteral-conversion]","clang/test/SemaCXX/warn-literal-conversion.cpp:54:23: warning: implicit conversion of out of range value from \'double\' to \'unsigned short\' is undefined [-Wliteral-conversion]","clang/test/SemaCXX/warn-literal-conversion.cpp:56:14: warning: implicit conversion of out of range value from \'double\' to \'short\' is undefined [-Wliteral-conversion]","clang/test/SemaCXX/warn-literal-conversion.cpp:57:24: warning: implicit conversion of out of range value from \'double\' to \'unsigned short\' is undefined [-Wliteral-conversion]"}
["clang/test/SemaCXX/warn-literal-conversion.cpp"]={"clang/test/SemaCXX/warn-literal-conversion.cpp:53:13: warning: implicit conversion of out of range value from \'double\' to \'short\' is undefined [-Wliteral-conversion]","clang/test/SemaCXX/warn-literal-conversion.cpp:54:23: warning: implicit conversion of out of range value from \'double\' to \'unsigned short\' is undefined [-Wliteral-conversion]","clang/test/SemaCXX/warn-literal-conversion.cpp:56:14: warning: implicit conversion of out of range value from \'double\' to \'short\' is undefined [-Wliteral-conversion]","clang/test/SemaCXX/warn-literal-conversion.cpp:57:24: warning: implicit conversion of out of range value from \'double\' to \'unsigned short\' is undefined [-Wliteral-conversion]"}
}
}
},
},
["warn_impcast_nonnegative_result"]={
["warn_impcast_nonnegative_result"]={
[j]={V,R,Fd},
[k]={eb,Z,"sign-conversion"},
[i]=Fd,
[j]="sign-conversion",
[c]={{nil,ob,"the resulting value is always non-negative after implicit conversion"}},
[c]={{nil,B,"warn_impcast_nonnegative_result"}},
[d]=g,
[d]={{nil,B,"the resulting value is always non-negative after implicit conversion"}},
[e]="the resulting value is always non\\-negative after implicit conversion",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wsign\\-conversion[^\\]]*\\]",
[g]="the resulting value is always non\\-negative after implicit conversion",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wsign\\-conversion[^\\]]*\\]",
[a]={"cf7d2256d6b2",1538460150,"Added warning for unary minus used with unsigned type","Added warning for unary minus used with unsigned type\n\nSummary:\nInspired by MSVC, which found some occurrences of this expression on our code base.\n\nFixes PR38950\n\nReviewers: rsmith, craig.topper, spatel, RKSimon, aaron.ballman, thakis\n\nReviewed By: rsmith\n\nSubscribers: joerg, Quuxplusone, lebedev.ri, craig.topper, RKSimon, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D52137\n\nllvm-svn: 343560"},
[b]={{nil,B,hb}},
[h]={{r,15050,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (TargetRange.Width > SourceTypeRange.Width) {\n    if (auto *UO = dyn_cast<UnaryOperator>(E))\n      if (UO->getOpcode() == UO_Minus)\n        if (Source->isUnsignedIntegerType()) {\n          // ...\n          if (Target->isSignedIntegerType())\n            return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_nonnegative_result);"}},
[f]={"cf7d2256d6b2",1538460150,"Added warning for unary minus used with unsigned type","Added warning for unary minus used with unsigned type\n\nSummary:\nInspired by MSVC, which found some occurrences of this expression on our code base.\n\nFixes PR38950\n\nReviewers: rsmith, craig.topper, spatel, RKSimon, aaron.ballman, thakis\n\nReviewed By: rsmith\n\nSubscribers: joerg, Quuxplusone, lebedev.ri, craig.topper, RKSimon, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D52137\n\nllvm-svn: 343560"},
[k]={
[h]={{t,15050,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  if (TargetRange.Width > SourceTypeRange.Width) {\n    if (auto *UO = dyn_cast<UnaryOperator>(E))\n      if (UO->getOpcode() == UO_Minus)\n        if (Source->isUnsignedIntegerType()) {\n          // ...\n          if (Target->isSignedIntegerType())\n            return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_nonnegative_result);"}},
[l]={
["clang/test/Sema/unary-minus-integer-impcast.c"]={"clang/test/Sema/unary-minus-integer-impcast.c:8:17: warning: the resulting value is always non-negative after implicit conversion [-Wsign-conversion]"}
["clang/test/Sema/unary-minus-integer-impcast.c"]={"clang/test/Sema/unary-minus-integer-impcast.c:8:17: warning: the resulting value is always non-negative after implicit conversion [-Wsign-conversion]"}
}
}
},
},
["warn_impcast_null_pointer_to_integer"]={
["warn_impcast_null_pointer_to_integer"]={
[j]={V,"conversion-null",R,"null-conversion"},
[k]={eb,"conversion-null",Z,"null-conversion"},
[i]="null-conversion",
[j]="null-conversion",
[c]="implicit conversion of %select{NULL|nullptr}0 constant to %1",
[c]="warn_impcast_null_pointer_to_integer",
[d]=g,
[d]="implicit conversion of %select{NULL|nullptr}0 constant to %1",
[e]="implicit conversion of (?:NULL|nullptr) constant to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wnull\\-conversion[^\\]]*\\]",
[g]="implicit conversion of (?:NULL|nullptr) constant to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wnull\\-conversion[^\\]]*\\]",
[a]={"beaf34531ef1",1306699142,"Add a new warning on NULL pointer constant to integer conversion.","Add a new warning on NULL pointer constant to integer conversion.\n\nThis path was reviewed by Chandler Carruth at http://codereview.appspot.com/4538074/\n\nllvm-svn: 132297"},
[b]=hb,
[h]={{r,14436,"static void DiagnoseNullConversion(Sema &S, Expr *E, QualType T, SourceLocation CC) {\n  if (S.Diags.isIgnored(diag::warn_impcast_null_pointer_to_integer, E->getExprLoc()))"},{r,14476,"static void DiagnoseNullConversion(Sema &S, Expr *E, QualType T, SourceLocation CC) {\n  // ...\n  S.Diag(Loc, diag::warn_impcast_null_pointer_to_integer) << HasNullPtrType << T << SourceRange(CC) << FixItHint::CreateReplacement(Loc, S.getFixItZeroLiteralForType(T, Loc));"}},
[f]={"beaf34531ef1",1306699142,"Add a new warning on NULL pointer constant to integer conversion.","Add a new warning on NULL pointer constant to integer conversion.\n\nThis path was reviewed by Chandler Carruth at http://codereview.appspot.com/4538074/\n\nllvm-svn: 132297"},
[k]={
[h]={{t,14436,"static void DiagnoseNullConversion(Sema &S, Expr *E, QualType T, SourceLocation CC) {\n  if (S.Diags.isIgnored(diag::warn_impcast_null_pointer_to_integer, E->getExprLoc()))"},{t,14476,"static void DiagnoseNullConversion(Sema &S, Expr *E, QualType T, SourceLocation CC) {\n  // ...\n  S.Diag(Loc, diag::warn_impcast_null_pointer_to_integer) << HasNullPtrType << T << SourceRange(CC) << FixItHint::CreateReplacement(Loc, S.getFixItZeroLiteralForType(T, Loc));"}},
[l]={
["clang/test/CodeGenCXX/__null.cpp"]={"clang/test/CodeGenCXX/__null.cpp:4:9: warning: implicit conversion of NULL constant to \'int\' [-Wnull-conversion]","clang/test/CodeGenCXX/__null.cpp:8:11: warning: implicit conversion of NULL constant to \'int\' [-Wnull-conversion]"}
["clang/test/CodeGenCXX/__null.cpp"]={"clang/test/CodeGenCXX/__null.cpp:4:9: warning: implicit conversion of NULL constant to \'int\' [-Wnull-conversion]","clang/test/CodeGenCXX/__null.cpp:8:11: warning: implicit conversion of NULL constant to \'int\' [-Wnull-conversion]"}
}
}
},
},
["warn_impcast_objective_c_literal_to_bool"]={
["warn_impcast_objective_c_literal_to_bool"]={
[j]={V,R,"objc-literal-conversion"},
[k]={eb,Z,"objc-literal-conversion"},
[i]="objc-literal-conversion",
[j]="objc-literal-conversion",
[c]="implicit boolean conversion of Objective-C object literal always evaluates to true",
[c]="warn_impcast_objective_c_literal_to_bool",
[d]=g,
[d]="implicit boolean conversion of Objective-C object literal always evaluates to true",
[e]="implicit boolean conversion of Objective\\-C object literal always evaluates to true",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wobjc\\-literal\\-conversion[^\\]]*\\]",
[g]="implicit boolean conversion of Objective\\-C object literal always evaluates to true",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-literal\\-conversion[^\\]]*\\]",
[a]={"1e632af0d498",1390952426,"A new conversion warning for when an Objective-C object literal is implicitly","A new conversion warning for when an Objective-C object literal is implicitly\ncast into a boolean true value.  This warning will catch code like:\n\nif (@0) {}\nif (@\"foo\") {}\n\nllvm-svn: 200356"},
[b]=hb,
[h]={{r,14688,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Diagnose implicit casts to bool.\n  if (Target->isSpecificBuiltinType(BuiltinType::Bool)) {\n    // ...\n    if (isa<ObjCStringLiteral>(E) || isa<ObjCArrayLiteral>(E) || isa<ObjCDictionaryLiteral>(E) || isa<ObjCBoxedExpr>(E)) {\n      // ...\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_objective_c_literal_to_bool);"}},
[f]={"1e632af0d498",1390952426,"A new conversion warning for when an Objective-C object literal is implicitly","A new conversion warning for when an Objective-C object literal is implicitly\ncast into a boolean true value.  This warning will catch code like:\n\nif (@0) {}\nif (@\"foo\") {}\n\nllvm-svn: 200356"},
[k]={
[h]={{t,14688,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Diagnose implicit casts to bool.\n  if (Target->isSpecificBuiltinType(BuiltinType::Bool)) {\n    // ...\n    if (isa<ObjCStringLiteral>(E) || isa<ObjCArrayLiteral>(E) || isa<ObjCDictionaryLiteral>(E) || isa<ObjCBoxedExpr>(E)) {\n      // ...\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_objective_c_literal_to_bool);"}},
[l]={
["clang/test/SemaObjCXX/warn-objc-literal-conversion.mm"]={"clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:23:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:28:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:30:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:32:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:34:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:39:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:41:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:43:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:45:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:50:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:52:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:57:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:62:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:67:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]"}
["clang/test/SemaObjCXX/warn-objc-literal-conversion.mm"]={"clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:23:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:28:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:30:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:32:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:34:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:39:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:41:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:43:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:45:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:50:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:52:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:57:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:62:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]","clang/test/SemaObjCXX/warn-objc-literal-conversion.mm:67:7: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]"}
}
}
},
},
["warn_impcast_pointer_to_bool"]={
["warn_impcast_pointer_to_bool"]={
[j]={"address","bool-conversion","bool-conversions",V,R,"pointer-bool-conversion"},
[k]={"address","bool-conversion","bool-conversions",eb,Z,"pointer-bool-conversion"},
[i]="pointer-bool-conversion",
[j]="pointer-bool-conversion",
[c]="address of%select{| function| array}0 \'%1\' will always evaluate to \'true\'",
[c]="warn_impcast_pointer_to_bool",
[d]=g,
[d]="address of%select{| function| array}0 \'%1\' will always evaluate to \'true\'",
[e]="address of(?:| function| array) \'(.*?)\' will always evaluate to \'true\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wpointer\\-bool\\-conversion[^\\]]*\\]",
[g]="address of(?:| function| array) \'(.*?)\' will always evaluate to \'true\'",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wpointer\\-bool\\-conversion[^\\]]*\\]",
[a]={"3bb8b56a5d90",1393382166,"PR16074, implement warnings to catch pointer to boolean true and pointer to","PR16074, implement warnings to catch pointer to boolean true and pointer to\nnull comparison when the pointer is known to be non-null.\n\nThis catches the array to pointer decay, function to pointer decay and\naddress of variables.  This does not catch address of function since this\nhas been previously used to silence a warning.\n\nPointer to bool conversion is under -Wbool-conversion.\nPointer to null comparison is under -Wtautological-pointer-compare, a sub-group\nof -Wtautological-compare.\n\nvoid foo() {\n  int arr[5];\n  int x;\n  // warn on these conditionals\n  if (foo);\n  if (arr);\n  if (&x);\n  if (foo == null);\n  if (arr == null);\n  if (&x == null);\n\n  if (&foo);  // no warning\n}\n\nllvm-svn: 202216"},
[b]=hb,
[h]={{r,15571,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  // ...\n  unsigned DiagID = IsCompare ? diag::warn_null_pointer_compare : diag::warn_impcast_pointer_to_bool;"}},
[f]={"3bb8b56a5d90",1393382166,"PR16074, implement warnings to catch pointer to boolean true and pointer to","PR16074, implement warnings to catch pointer to boolean true and pointer to\nnull comparison when the pointer is known to be non-null.\n\nThis catches the array to pointer decay, function to pointer decay and\naddress of variables.  This does not catch address of function since this\nhas been previously used to silence a warning.\n\nPointer to bool conversion is under -Wbool-conversion.\nPointer to null comparison is under -Wtautological-pointer-compare, a sub-group\nof -Wtautological-compare.\n\nvoid foo() {\n  int arr[5];\n  int x;\n  // warn on these conditionals\n  if (foo);\n  if (arr);\n  if (&x);\n  if (foo == null);\n  if (arr == null);\n  if (&x == null);\n\n  if (&foo);  // no warning\n}\n\nllvm-svn: 202216"},
[k]={
[h]={{t,15571,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  // ...\n  unsigned DiagID = IsCompare ? diag::warn_null_pointer_compare : diag::warn_impcast_pointer_to_bool;"}},
[l]={
["clang/test/SemaCXX/condition.cpp"]={"clang/test/SemaCXX/condition.cpp:53:7: warning: address of function \'test3\' will always evaluate to \'true\' [-Wpointer-bool-conversion]"}
["clang/test/SemaCXX/condition.cpp"]={"clang/test/SemaCXX/condition.cpp:53:7: warning: address of function \'test3\' will always evaluate to \'true\' [-Wpointer-bool-conversion]"}
}
}
},
},
["warn_impcast_single_bit_bitield_precision_constant"]={
["warn_impcast_single_bit_bitield_precision_constant"]={
[j]={"bitfield-constant-conversion","constant-conversion",V,R,"single-bit-bitfield-constant-conversion"},
[k]={"bitfield-constant-conversion","constant-conversion",eb,Z,"single-bit-bitfield-constant-conversion"},
[i]="single-bit-bitfield-constant-conversion",
[j]="single-bit-bitfield-constant-conversion",
[c]={{nil,yc,"implicit truncation from %2 to a one-bit wide bit-field changes value from %0 to %1"}},
[c]={{nil,bb,"warn_impcast_single_bit_bitield_precision_constant"}},
[d]=g,
[d]={{nil,bb,"implicit truncation from %2 to a one-bit wide bit-field changes value from %0 to %1"}},
[e]="implicit truncation from (.*?) to a one\\-bit wide bit\\-field changes value from (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wsingle\\-bit\\-bitfield\\-constant\\-conversion[^\\]]*\\]",
[g]="implicit truncation from (.*?) to a one\\-bit wide bit\\-field changes value from (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wsingle\\-bit\\-bitfield\\-constant\\-conversion[^\\]]*\\]",
[a]={Eb,1625925174,Fb,Hb},
[b]={{nil,bb,hb}},
[h]={{r,14156,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  // ...\n  S.Diag(InitLoc, OneAssignedToOneBitBitfield ? diag::warn_impcast_single_bit_bitield_precision_constant : diag::warn_impcast_bitfield_precision_constant) << PrettyValue << PrettyTrunc << OriginalInit->getType() << Init->getSourceRange();"}},
[f]={Lb,1625925174,Kb,Jb},
[k]={
[h]={{t,14156,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  // ...\n  S.Diag(InitLoc, OneAssignedToOneBitBitfield ? diag::warn_impcast_single_bit_bitield_precision_constant : diag::warn_impcast_bitfield_precision_constant) << PrettyValue << PrettyTrunc << OriginalInit->getType() << Init->getSourceRange();"}},
[l]={
["clang/test/SemaCXX/constant-conversion.cpp"]={"clang/test/SemaCXX/constant-conversion.cpp:31:13: warning: implicit truncation from \'int\' to a one-bit wide bit-field changes value from 1 to -1 [-Wsingle-bit-bitfield-constant-conversion]"}
["clang/test/SemaCXX/constant-conversion.cpp"]={"clang/test/SemaCXX/constant-conversion.cpp:31:13: warning: implicit truncation from \'int\' to a one-bit wide bit-field changes value from 1 to -1 [-Wsingle-bit-bitfield-constant-conversion]"}
}
}
},
},
["warn_impcast_string_literal_to_bool"]={
["warn_impcast_string_literal_to_bool"]={
[j]={V,R,"string-conversion"},
[k]={eb,Z,"string-conversion"},
[i]="string-conversion",
[j]="string-conversion",
[c]="implicit conversion turns string literal into bool: %0 to %1",
[c]="warn_impcast_string_literal_to_bool",
[d]=g,
[d]="implicit conversion turns string literal into bool: %0 to %1",
[e]="implicit conversion turns string literal into bool\\: (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wstring\\-conversion[^\\]]*\\]",
[g]="implicit conversion turns string literal into bool\\: (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wstring\\-conversion[^\\]]*\\]",
[a]={"021baa373f58",1316808600,"Add a new warning to -Wliteral-conversion to catch cases where a string literal","Add a new warning to -Wliteral-conversion to catch cases where a string literal\nis cast to a boolean.  An exception has been made for string literals in\nlogical expressions to allow the common case of use in assert statements.\n\nbool x;\nx = \"hi\";  // Warn here\nvoid foo(bool x);\nfoo(\"hi\");  // Warn here\nassert(0 && \"error\");\nassert(\"error);  // Warn here\n\nllvm-svn: 140405"},
[b]=hb,
[h]={{r,14682,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Diagnose implicit casts to bool.\n  if (Target->isSpecificBuiltinType(BuiltinType::Bool)) {\n    if (isa<StringLiteral>(E))\n      // ...\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_string_literal_to_bool);"}},
[f]={"021baa373f58",1316808600,"Add a new warning to -Wliteral-conversion to catch cases where a string literal","Add a new warning to -Wliteral-conversion to catch cases where a string literal\nis cast to a boolean.  An exception has been made for string literals in\nlogical expressions to allow the common case of use in assert statements.\n\nbool x;\nx = \"hi\";  // Warn here\nvoid foo(bool x);\nfoo(\"hi\");  // Warn here\nassert(0 && \"error\");\nassert(\"error);  // Warn here\n\nllvm-svn: 140405"},
[k]={
[h]={{t,14682,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Diagnose implicit casts to bool.\n  if (Target->isSpecificBuiltinType(BuiltinType::Bool)) {\n    if (isa<StringLiteral>(E))\n      // ...\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_string_literal_to_bool);"}},
[l]={
["clang/test/Sema/warn-string-conversion.c"]={"clang/test/Sema/warn-string-conversion.c:19:16: warning: implicit conversion turns string literal into bool: \'char[4]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:20:11: warning: implicit conversion turns string literal into bool: \'char[4]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:24:16: warning: implicit conversion turns string literal into bool: \'char[4]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:25:11: warning: implicit conversion turns string literal into bool: \'char[4]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:29:7: warning: implicit conversion turns string literal into bool: \'char[3]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:30:10: warning: implicit conversion turns string literal into bool: \'char[6]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:31:9: warning: implicit conversion turns string literal into bool: \'char[6]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:32:17: warning: implicit conversion turns string literal into bool: \'char[4]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:33:11: warning: implicit conversion turns string literal into bool: \'char[4]\' to \'_Bool\' [-Wstring-conversion]"}
["clang/test/Sema/warn-string-conversion.c"]={"clang/test/Sema/warn-string-conversion.c:19:16: warning: implicit conversion turns string literal into bool: \'char[4]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:20:11: warning: implicit conversion turns string literal into bool: \'char[4]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:24:16: warning: implicit conversion turns string literal into bool: \'char[4]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:25:11: warning: implicit conversion turns string literal into bool: \'char[4]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:29:7: warning: implicit conversion turns string literal into bool: \'char[3]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:30:10: warning: implicit conversion turns string literal into bool: \'char[6]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:31:9: warning: implicit conversion turns string literal into bool: \'char[6]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:32:17: warning: implicit conversion turns string literal into bool: \'char[4]\' to \'_Bool\' [-Wstring-conversion]","clang/test/Sema/warn-string-conversion.c:33:11: warning: implicit conversion turns string literal into bool: \'char[4]\' to \'_Bool\' [-Wstring-conversion]"}
}
}
},
},
["warn_impcast_vector_scalar"]={
["warn_impcast_vector_scalar"]={
[j]={V,R},
[k]={eb,Z},
[i]=V,
[j]=eb,
[c]="implicit conversion turns vector to scalar: %0 to %1",
[c]="warn_impcast_vector_scalar",
[d]=g,
[d]="implicit conversion turns vector to scalar: %0 to %1",
[e]="implicit conversion turns vector to scalar\\: (.*?) to (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wconversion[^\\]]*\\]",
[g]="implicit conversion turns vector to scalar\\: (.*?) to (.*?)",
[b]=Y,
[a]=" \\[(?:\\-Werror,)?\\-Wconversion[^\\]]*\\]",
[a]={"fceb64bd044f",1257564610,"Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s","Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s\nsignificant work left to be done to reduce the false-positive rate here.\n\nllvm-svn: 86326"},
[b]=hb,
[h]={{r,14740,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Strip vector types.\n  if (isa<VectorType>(Source)) {\n    // ...\n    if (!isa<VectorType>(Target)) {\n      // ...\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_vector_scalar);"}}
[f]={"fceb64bd044f",1257564610,"Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s","Implement -Wconversion.  Off by default, in the non-gcc group.  There\'s\nsignificant work left to be done to reduce the false-positive rate here.\n\nllvm-svn: 86326"},
[h]={{t,14740,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Strip vector types.\n  if (isa<VectorType>(Source)) {\n    // ...\n    if (!isa<VectorType>(Target)) {\n      // ...\n      return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_vector_scalar);"}}
},
},
["warn_impl_required_for_class_property"]={
["warn_impl_required_for_class_property"]={
[j]={"objc-property-implementation"},
[k]={"objc-property-implementation"},
[i]="objc-property-implementation",
[j]="objc-property-implementation",
[c]="class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this class implementation",
[c]="warn_impl_required_for_class_property",
[d]=g,
[d]="class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this class implementation",
[e]="class property (.*?) requires method (.*?) to be defined \\- use @dynamic or provide a method implementation in this class implementation",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-implementation[^\\]]*\\]",
[g]="class property (.*?) requires method (.*?) to be defined \\- use @dynamic or provide a method implementation in this class implementation",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-implementation[^\\]]*\\]",
[a]={"16a7d637dd44",1460502115,"ObjC class properties: add diagnostics for unimplemented class properties.","ObjC class properties: add diagnostics for unimplemented class properties.\n\nrdar://24711047\n\nllvm-svn: 266146"},
[b]=m,
[h]={{Qc,2018,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // ...\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);"}},
[f]={"16a7d637dd44",1460502115,"ObjC class properties: add diagnostics for unimplemented class properties.","ObjC class properties: add diagnostics for unimplemented class properties.\n\nrdar://24711047\n\nllvm-svn: 266146"},
[k]={
[h]={{Xc,2018,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // ...\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);"}},
[l]={
["clang/test/SemaObjC/objc-class-property.m"]={"clang/test/SemaObjC/objc-class-property.m:28:17: warning: class property \'c2\' requires method \'c2\' to be defined - use @dynamic or provide a method implementation in this class implementation [-Wobjc-property-implementation]","clang/test/SemaObjC/objc-class-property.m:28:17: warning: class property \'c2\' requires method \'setC2:\' to be defined - use @dynamic or provide a method implementation in this class implementation [-Wobjc-property-implementation]","clang/test/SemaObjC/objc-class-property.m:64:17: warning: class property \'classProp\' requires method \'classProp\' to be defined - use @dynamic or provide a method implementation in this class implementation [-Wobjc-property-implementation]"}
["clang/test/SemaObjC/objc-class-property.m"]={"clang/test/SemaObjC/objc-class-property.m:28:17: warning: class property \'c2\' requires method \'c2\' to be defined - use @dynamic or provide a method implementation in this class implementation [-Wobjc-property-implementation]","clang/test/SemaObjC/objc-class-property.m:28:17: warning: class property \'c2\' requires method \'setC2:\' to be defined - use @dynamic or provide a method implementation in this class implementation [-Wobjc-property-implementation]","clang/test/SemaObjC/objc-class-property.m:64:17: warning: class property \'classProp\' requires method \'classProp\' to be defined - use @dynamic or provide a method implementation in this class implementation [-Wobjc-property-implementation]"}
}
}
},
},
["warn_impl_required_in_category_for_class_property"]={
["warn_impl_required_in_category_for_class_property"]={
[j]={"objc-property-implementation"},
[k]={"objc-property-implementation"},
[i]="objc-property-implementation",
[j]="objc-property-implementation",
[c]="class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category",
[c]="warn_impl_required_in_category_for_class_property",
[d]=g,
[d]="class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category",
[e]="class property (.*?) requires method (.*?) to be defined \\- use @dynamic or provide a method implementation in this category",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-implementation[^\\]]*\\]",
[g]="class property (.*?) requires method (.*?) to be defined \\- use @dynamic or provide a method implementation in this category",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-implementation[^\\]]*\\]",
[a]={"16a7d637dd44",1460502115,"ObjC class properties: add diagnostics for unimplemented class properties.","ObjC class properties: add diagnostics for unimplemented class properties.\n\nrdar://24711047\n\nllvm-svn: 266146"},
[b]=m,
[h]={{Qc,2015,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // ...\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);"}}
[f]={"16a7d637dd44",1460502115,"ObjC class properties: add diagnostics for unimplemented class properties.","ObjC class properties: add diagnostics for unimplemented class properties.\n\nrdar://24711047\n\nllvm-svn: 266146"},
[h]={{Xc,2015,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // ...\n  // When reporting on missing property setter/getter implementation in\n  // categories, do not report when they are declared in primary class,\n  // class\'s protocol, or one of it super classes. This is because,\n  // the class is going to implement them.\n  if (I == SMap.end() && (PrimaryClass == nullptr || !PrimaryClass->lookupPropertyAccessor(Method, C, Prop->isClassProperty()))) {\n    unsigned diag = isa<ObjCCategoryDecl>(CDecl) ? (Prop->isClassProperty() ? diag::warn_impl_required_in_category_for_class_property : diag::warn_setter_getter_impl_required_in_category) : (Prop->isClassProperty() ? diag::warn_impl_required_for_class_property : diag::warn_setter_getter_impl_required);"}}
},
},
["warn_implements_nscopying"]={
["warn_implements_nscopying"]={
[c]="default assign attribute on property %0 which implements NSCopying protocol is not appropriate with -fobjc-gc[-only]",
[c]="warn_implements_nscopying",
[d]=g,
[d]="default assign attribute on property %0 which implements NSCopying protocol is not appropriate with -fobjc-gc[-only]",
[e]="default assign attribute on property (.*?) which implements NSCopying protocol is not appropriate with \\-fobjc\\-gc\\[\\-only\\]",
[e]=i,
[f]=Gb,
[g]="default assign attribute on property (.*?) which implements NSCopying protocol is not appropriate with \\-fobjc\\-gc\\[\\-only\\]",
[b]=l,
[a]=Ib,
[a]={"3f8917abf6f2",1250028145,"Patch to warn if a property which is \'assign\' by default","Patch to warn if a property which is \'assign\' by default\nmay not implement NSCopying protocol in -fobjc-gc[-only] mode.\n\nllvm-svn: 78726"},
[b]=m,
[h]={{Qc,601,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  // ...\n  // Issue a warning if property is \'assign\' as default and its\n  // object, which is gc\'able conforms to NSCopying protocol\n  if (getLangOpts().getGC() != LangOptions::NonGC && isAssign && !(Attributes & ObjCPropertyAttribute::kind_assign)) {\n    if (const ObjCObjectPointerType *ObjPtrTy = T->getAs<ObjCObjectPointerType>()) {\n      // ...\n      if (IDecl)\n        if (ObjCProtocolDecl *PNSCopying = LookupProtocol(&Context.Idents.get(\"NSCopying\"), AtLoc))\n          if (IDecl->ClassImplementsProtocol(PNSCopying, true))\n            Diag(AtLoc, diag::warn_implements_nscopying) << PropertyId;"}},
[f]={"3f8917abf6f2",1250028145,"Patch to warn if a property which is \'assign\' by default","Patch to warn if a property which is \'assign\' by default\nmay not implement NSCopying protocol in -fobjc-gc[-only] mode.\n\nllvm-svn: 78726"},
[k]={
[h]={{Xc,601,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  // ...\n  // Issue a warning if property is \'assign\' as default and its\n  // object, which is gc\'able conforms to NSCopying protocol\n  if (getLangOpts().getGC() != LangOptions::NonGC && isAssign && !(Attributes & ObjCPropertyAttribute::kind_assign)) {\n    if (const ObjCObjectPointerType *ObjPtrTy = T->getAs<ObjCObjectPointerType>()) {\n      // ...\n      if (IDecl)\n        if (ObjCProtocolDecl *PNSCopying = LookupProtocol(&Context.Idents.get(\"NSCopying\"), AtLoc))\n          if (IDecl->ClassImplementsProtocol(PNSCopying, true))\n            Diag(AtLoc, diag::warn_implements_nscopying) << PropertyId;"}},
[l]={
["clang/test/SemaObjC/warn-assign-property-nscopying.m"]={"clang/test/SemaObjC/warn-assign-property-nscopying.m:13:3: warning: default assign attribute on property \'undoAction\' which implements NSCopying protocol is not appropriate with -fobjc-gc[-only]"}
["clang/test/SemaObjC/warn-assign-property-nscopying.m"]={"clang/test/SemaObjC/warn-assign-property-nscopying.m:13:3: warning: default assign attribute on property \'undoAction\' which implements NSCopying protocol is not appropriate with -fobjc-gc[-only]"}
}
}
},
},
["warn_implicit_atomic_property"]={
["warn_implicit_atomic_property"]={
[j]={"atomic-properties","implicit-atomic-properties"},
[k]={"atomic-properties","implicit-atomic-properties"},
[i]="implicit-atomic-properties",
[j]="implicit-atomic-properties",
[c]="property is assumed atomic by default",
[c]="warn_implicit_atomic_property",
[d]=g,
[d]="property is assumed atomic by default",
[e]="property is assumed atomic by default",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-atomic\\-properties[^\\]]*\\]",
[g]="property is assumed atomic by default",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-atomic\\-properties[^\\]]*\\]",
[a]={"382c040da2a6",1292624896,"Warn when synthesizing a property which is","Warn when synthesizing a property which is\nimplicitly atomic under -Wimplicit-atomic-properties\nflag. // rdar://8774580\n\nllvm-svn: 122095"},
[b]=m,
[h]={{Qc,1125,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    // ...\n    if ((PIkind & (ObjCPropertyAttribute::kind_atomic | ObjCPropertyAttribute::kind_nonatomic)) == 0) {\n      if (AtLoc.isValid())\n        Diag(AtLoc, diag::warn_implicit_atomic_property);"}},
[f]={"382c040da2a6",1292624896,"Warn when synthesizing a property which is","Warn when synthesizing a property which is\nimplicitly atomic under -Wimplicit-atomic-properties\nflag. // rdar://8774580\n\nllvm-svn: 122095"},
[k]={
[h]={{Xc,1125,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    // ...\n    if ((PIkind & (ObjCPropertyAttribute::kind_atomic | ObjCPropertyAttribute::kind_nonatomic)) == 0) {\n      if (AtLoc.isValid())\n        Diag(AtLoc, diag::warn_implicit_atomic_property);"}},
[l]={
["clang/test/SemaObjC/warn-implicit-atomic-property.m"]={"clang/test/SemaObjC/warn-implicit-atomic-property.m:12:1: warning: property is assumed atomic by default [-Wimplicit-atomic-properties]"}
["clang/test/SemaObjC/warn-implicit-atomic-property.m"]={"clang/test/SemaObjC/warn-implicit-atomic-property.m:12:1: warning: property is assumed atomic by default [-Wimplicit-atomic-properties]"}
}
}
},
},
["warn_implicit_decl_no_jmp_buf"]={
["warn_implicit_decl_no_jmp_buf"]={
[j]={"incomplete-setjmp-declaration"},
[k]={"incomplete-setjmp-declaration"},
[i]="incomplete-setjmp-declaration",
[j]="incomplete-setjmp-declaration",
[c]={{nil,I,"declaration of built-in function \'%0\' requires the declaration of the \'jmp_buf\' type, commonly provided in the header <setjmp.h>."}},
[c]={{nil,x,"warn_implicit_decl_no_jmp_buf"}},
[d]=g,
[d]={{nil,x,"declaration of built-in function \'%0\' requires the declaration of the \'jmp_buf\' type, commonly provided in the header <setjmp.h>."}},
[e]="declaration of built\\-in function \'(.*?)\' requires the declaration of the \'jmp_buf\' type, commonly provided in the header \\<setjmp\\.h\\>\\.",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-setjmp\\-declaration[^\\]]*\\]",
[g]="declaration of built\\-in function \'(.*?)\' requires the declaration of the \'jmp_buf\' type, commonly provided in the header \\<setjmp\\.h\\>\\.",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-setjmp\\-declaration[^\\]]*\\]",
[a]={"3be25e79477d",1564550198,"[Fix] Customize warnings for missing built-in types","[Fix] Customize warnings for missing built-in types\n\nIf we detect a built-in declaration for which we cannot derive a type\nmatching the pattern in the Builtins.def file, we currently emit a\nwarning that the respective header is needed. However, this is not\nnecessarily the behavior we want as it has no connection to the location\nof the declaration (which can actually be in the header in question).\nInstead, this warning is generated\n  - if we could not build the type for the pattern on file (for some\n    reason). Here we should make the reason explicit. The actual problem\n    is otherwise circumvented as the warning is misleading, see [0] for\n    an example.\n  - if we could not build the type for the pattern because we do not\n    have a type on record, possible since D55483, we should not emit any\n    warning. See [1] for a legitimate problem.\n\nThis patch address both cases. For the \"setjmp\" family a new warning is\nintroduced and for built-ins without type on record, so far\n\"pthread_create\", we do not emit the warning anymore.\n\nAlso see: PR40692\n\n[0] https://lkml.org/lkml/2019/1/11/718\n[1] https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=235583\n\nDifferential Revision: https://reviews.llvm.org/D58091\n\nllvm-svn: 367387"},
[b]={{nil,x,m}},
[h]={{D,2451,"/// LazilyCreateBuiltin - The specified Builtin-ID was first used at\n/// file scope.  lazily create a decl for it. ForRedeclaration is true\n/// if we\'re creating this built-in in anticipation of redeclaring the\n/// built-in.\nNamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, Scope *S, bool ForRedeclaration, SourceLocation Loc) {\n  // ...\n  if (Error) {\n    // ...\n    // If we could not find a type for setjmp it is because the jmp_buf type was\n    // not defined prior to the setjmp declaration.\n    if (Error == ASTContext::GE_Missing_setjmp) {\n      Diag(Loc, diag::warn_implicit_decl_no_jmp_buf) << Context.BuiltinInfo.getName(ID);"}}
[f]={"3be25e79477d",1564550198,"[Fix] Customize warnings for missing built-in types","[Fix] Customize warnings for missing built-in types\n\nIf we detect a built-in declaration for which we cannot derive a type\nmatching the pattern in the Builtins.def file, we currently emit a\nwarning that the respective header is needed. However, this is not\nnecessarily the behavior we want as it has no connection to the location\nof the declaration (which can actually be in the header in question).\nInstead, this warning is generated\n  - if we could not build the type for the pattern on file (for some\n    reason). Here we should make the reason explicit. The actual problem\n    is otherwise circumvented as the warning is misleading, see [0] for\n    an example.\n  - if we could not build the type for the pattern because we do not\n    have a type on record, possible since D55483, we should not emit any\n    warning. See [1] for a legitimate problem.\n\nThis patch address both cases. For the \"setjmp\" family a new warning is\nintroduced and for built-ins without type on record, so far\n\"pthread_create\", we do not emit the warning anymore.\n\nAlso see: PR40692\n\n[0] https://lkml.org/lkml/2019/1/11/718\n[1] https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=235583\n\nDifferential Revision: https://reviews.llvm.org/D58091\n\nllvm-svn: 367387"},
[h]={{M,2451,"/// LazilyCreateBuiltin - The specified Builtin-ID was first used at\n/// file scope.  lazily create a decl for it. ForRedeclaration is true\n/// if we\'re creating this built-in in anticipation of redeclaring the\n/// built-in.\nNamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, Scope *S, bool ForRedeclaration, SourceLocation Loc) {\n  // ...\n  if (Error) {\n    // ...\n    // If we could not find a type for setjmp it is because the jmp_buf type was\n    // not defined prior to the setjmp declaration.\n    if (Error == ASTContext::GE_Missing_setjmp) {\n      Diag(Loc, diag::warn_implicit_decl_no_jmp_buf) << Context.BuiltinInfo.getName(ID);"}}
},
},
["warn_implicit_decl_requires_sysheader"]={
["warn_implicit_decl_requires_sysheader"]={
[j]={"builtin-requires-header"},
[k]={"builtin-requires-header"},
[i]="builtin-requires-header",
[j]="builtin-requires-header",
[c]="declaration of built-in function \'%1\' requires inclusion of the header <%0>",
[c]="warn_implicit_decl_requires_sysheader",
[d]=g,
[d]="declaration of built-in function \'%1\' requires inclusion of the header <%0>",
[e]="declaration of built\\-in function \'(.*?)\' requires inclusion of the header \\<(.*?)\\>",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-requires\\-header[^\\]]*\\]",
[g]="declaration of built\\-in function \'(.*?)\' requires inclusion of the header \\<(.*?)\\>",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-requires\\-header[^\\]]*\\]",
[a]={"5d96e0a3a795",1405112031,"Consolidate header inclusion diagnostics","Consolidate header inclusion diagnostics\n\nMake argument orders match, unify diagnostic IDs and reword the message to be a\nlittle less saccharine.\n\nllvm-svn: 212845"},
[b]=m,
[h]={{D,2458,"/// LazilyCreateBuiltin - The specified Builtin-ID was first used at\n/// file scope.  lazily create a decl for it. ForRedeclaration is true\n/// if we\'re creating this built-in in anticipation of redeclaring the\n/// built-in.\nNamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, Scope *S, bool ForRedeclaration, SourceLocation Loc) {\n  // ...\n  if (Error) {\n    // ...\n    Diag(Loc, diag::warn_implicit_decl_requires_sysheader) << getHeaderName(Context.BuiltinInfo, ID, Error) << Context.BuiltinInfo.getName(ID);"}},
[f]={"5d96e0a3a795",1405112031,"Consolidate header inclusion diagnostics","Consolidate header inclusion diagnostics\n\nMake argument orders match, unify diagnostic IDs and reword the message to be a\nlittle less saccharine.\n\nllvm-svn: 212845"},
[k]={
[h]={{M,2458,"/// LazilyCreateBuiltin - The specified Builtin-ID was first used at\n/// file scope.  lazily create a decl for it. ForRedeclaration is true\n/// if we\'re creating this built-in in anticipation of redeclaring the\n/// built-in.\nNamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, Scope *S, bool ForRedeclaration, SourceLocation Loc) {\n  // ...\n  if (Error) {\n    // ...\n    Diag(Loc, diag::warn_implicit_decl_requires_sysheader) << getHeaderName(Context.BuiltinInfo, ID, Error) << Context.BuiltinInfo.getName(ID);"}},
[l]={
["clang/test/Sema/vfprintf-invalid-redecl.c"]={"clang/test/Sema/vfprintf-invalid-redecl.c:6:6: warning: declaration of built-in function \'vfprintf\' requires inclusion of the header <stdio.h> [-Wbuiltin-requires-header]"}
["clang/test/Sema/vfprintf-invalid-redecl.c"]={"clang/test/Sema/vfprintf-invalid-redecl.c:6:6: warning: declaration of built-in function \'vfprintf\' requires inclusion of the header <stdio.h> [-Wbuiltin-requires-header]"}
}
}
},
},
["warn_implicit_function_decl"]={
["warn_implicit_function_decl"]={
[j]={B,H,"implicit","implicit-function-declaration",N},
[k]={K,O,"implicit","implicit-function-declaration",V},
[i]="implicit-function-declaration",
[j]="implicit-function-declaration",
[c]="implicit declaration of function %0",
[c]="warn_implicit_function_decl",
[d]=g,
[d]="implicit declaration of function %0",
[e]="implicit declaration of function (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-function\\-declaration[^\\]]*\\]",
[g]="implicit declaration of function (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-function\\-declaration[^\\]]*\\]",
[a]={Kd,1236199783,Jd,Ld},
[b]=m,
[h]={{D,16055,"/// ImplicitlyDefineFunction - An undeclared identifier was used in a function\n/// call, forming a call to an implicitly defined function (per C99 6.5.1p2).\nNamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc, IdentifierInfo &II, Scope *S) {\n  // ...\n  if (II.getName().startswith(\"__builtin_\"))\n  // ...\n  // OpenCL v2.0 s6.9.u - Implicit function declaration is not supported.\n  else if (getLangOpts().C99)\n  // ...\n  else\n    diag_id = diag::warn_implicit_function_decl;"}},
[f]={Ad,1236199783,Cd,Ed},
[k]={
[h]={{M,16055,"/// ImplicitlyDefineFunction - An undeclared identifier was used in a function\n/// call, forming a call to an implicitly defined function (per C99 6.5.1p2).\nNamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc, IdentifierInfo &II, Scope *S) {\n  // ...\n  if (II.getName().startswith(\"__builtin_\"))\n  // ...\n  // OpenCL v2.0 s6.9.u - Implicit function declaration is not supported.\n  else if (getLangOpts().C99)\n  // ...\n  else\n    diag_id = diag::warn_implicit_function_decl;"}},
[l]={
["clang/test/Sema/c89.c"]={"clang/test/Sema/c89.c:86:3: warning: implicit declaration of function \'printg\' [-Wimplicit-function-declaration]"}
["clang/test/Sema/c89.c"]={"clang/test/Sema/c89.c:86:3: warning: implicit declaration of function \'printg\' [-Wimplicit-function-declaration]"}
}
}
},
},
["warn_implicitly_retains_self"]={
["warn_implicitly_retains_self"]={
[j]={"implicit-retain-self"},
[k]={"implicit-retain-self"},
[i]="implicit-retain-self",
[j]="implicit-retain-self",
[c]="block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior",
[c]="warn_implicitly_retains_self",
[d]=g,
[d]="block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior",
[e]="block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-retain\\-self[^\\]]*\\]",
[g]="block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-retain\\-self[^\\]]*\\]",
[a]={"4a67508685ab",1349286929,"objective-C arc: Warn under arc about a use of an ivar inside a block","objective-C arc: Warn under arc about a use of an ivar inside a block\nthat doesn\'t have a \'self\' as this implicitly captures \'self\' and could\ncreate retain cycles. Provide fixit. // rdar://11194874\n\nllvm-svn: 165133"},
[b]=m,
[h]={{D,15554,"static void diagnoseImplicitlyRetainedSelf(Sema &S) {\n  // ...\n  // If the location where \'self\' is implicitly retained is inside a escaping\n  // block, emit a diagnostic.\n  for (const std::pair<SourceLocation, const BlockDecl *> &P : S.ImplicitlyRetainedSelfLocs)\n    if (IsOrNestedInEscapingBlock(P.second))\n      S.Diag(P.first, diag::warn_implicitly_retains_self) << FixItHint::CreateInsertion(P.first, \"self->\");"}},
[f]={"4a67508685ab",1349286929,"objective-C arc: Warn under arc about a use of an ivar inside a block","objective-C arc: Warn under arc about a use of an ivar inside a block\nthat doesn\'t have a \'self\' as this implicitly captures \'self\' and could\ncreate retain cycles. Provide fixit. // rdar://11194874\n\nllvm-svn: 165133"},
[k]={
[h]={{M,15554,"static void diagnoseImplicitlyRetainedSelf(Sema &S) {\n  // ...\n  // If the location where \'self\' is implicitly retained is inside a escaping\n  // block, emit a diagnostic.\n  for (const std::pair<SourceLocation, const BlockDecl *> &P : S.ImplicitlyRetainedSelfLocs)\n    if (IsOrNestedInEscapingBlock(P.second))\n      S.Diag(P.first, diag::warn_implicitly_retains_self) << FixItHint::CreateInsertion(P.first, \"self->\");"}},
[l]={
["clang/test/SemaObjCXX/warn-implicit-self-in-block.mm"]={"clang/test/SemaObjCXX/warn-implicit-self-in-block.mm:20:12: warning: block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior [-Wimplicit-retain-self]","clang/test/SemaObjCXX/warn-implicit-self-in-block.mm:28:15: warning: block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior [-Wimplicit-retain-self]","clang/test/SemaObjCXX/warn-implicit-self-in-block.mm:30:17: warning: block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior [-Wimplicit-retain-self]","clang/test/SemaObjCXX/warn-implicit-self-in-block.mm:32:15: warning: block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior [-Wimplicit-retain-self]","clang/test/SemaObjCXX/warn-implicit-self-in-block.mm:40:32: warning: block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior [-Wimplicit-retain-self]"}
["clang/test/SemaObjCXX/warn-implicit-self-in-block.mm"]={"clang/test/SemaObjCXX/warn-implicit-self-in-block.mm:20:12: warning: block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior [-Wimplicit-retain-self]","clang/test/SemaObjCXX/warn-implicit-self-in-block.mm:28:15: warning: block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior [-Wimplicit-retain-self]","clang/test/SemaObjCXX/warn-implicit-self-in-block.mm:30:17: warning: block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior [-Wimplicit-retain-self]","clang/test/SemaObjCXX/warn-implicit-self-in-block.mm:32:15: warning: block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior [-Wimplicit-retain-self]","clang/test/SemaObjCXX/warn-implicit-self-in-block.mm:40:32: warning: block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior [-Wimplicit-retain-self]"}
}
}
},
},
["warn_import_on_definition"]={
["warn_import_on_definition"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]={{nil,mb,"import %select{module|name}0 cannot be applied to a function with a definition"}},
[c]={{nil,z,"warn_import_on_definition"}},
[d]=g,
[d]={{nil,z,"import %select{module|name}0 cannot be applied to a function with a definition"}},
[e]="import (?:module|name) cannot be applied to a function with a definition",
[e]=i,
[f]=vb,
[g]="import (?:module|name) cannot be applied to a function with a definition",
[b]=p,
[a]=Db,
[a]={Bd,1576908663,ud,Ed},
[b]={{nil,z,r}},
[h]={{E,7688,"WebAssemblyImportModuleAttr *Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) {\n  // ...\n  if (FD->hasBody()) {\n    Diag(AL.getLoc(), diag::warn_import_on_definition) << 0;"},{E,7708,"WebAssemblyImportNameAttr *Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) {\n  // ...\n  if (FD->hasBody()) {\n    Diag(AL.getLoc(), diag::warn_import_on_definition) << 1;"},{E,7724,"static void handleWebAssemblyImportModuleAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (FD->hasBody()) {\n    S.Diag(AL.getLoc(), diag::warn_import_on_definition) << 0;"},{E,7741,"static void handleWebAssemblyImportNameAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (FD->hasBody()) {\n    S.Diag(AL.getLoc(), diag::warn_import_on_definition) << 1;"}}
[f]={Ld,1576908663,xd,"[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n  turned out to be ineffective anyway since functions can be defined later\n  in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520"},
[h]={{N,7688,"WebAssemblyImportModuleAttr *Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) {\n  // ...\n  if (FD->hasBody()) {\n    Diag(AL.getLoc(), diag::warn_import_on_definition) << 0;"},{N,7708,"WebAssemblyImportNameAttr *Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) {\n  // ...\n  if (FD->hasBody()) {\n    Diag(AL.getLoc(), diag::warn_import_on_definition) << 1;"},{N,7724,"static void handleWebAssemblyImportModuleAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (FD->hasBody()) {\n    S.Diag(AL.getLoc(), diag::warn_import_on_definition) << 0;"},{N,7741,"static void handleWebAssemblyImportNameAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (FD->hasBody()) {\n    S.Diag(AL.getLoc(), diag::warn_import_on_definition) << 1;"}}
},
},
["warn_inaccessible_base_class"]={
["warn_inaccessible_base_class"]={
[j]={"inaccessible-base"},
[k]={"inaccessible-base"},
[i]="inaccessible-base",
[j]="inaccessible-base",
[c]="direct base %0 is inaccessible due to ambiguity:%1",
[c]="warn_inaccessible_base_class",
[d]=g,
[d]="direct base %0 is inaccessible due to ambiguity:%1",
[e]="direct base (.*?) is inaccessible due to ambiguity\\:(.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winaccessible\\-base[^\\]]*\\]",
[g]="direct base (.*?) is inaccessible due to ambiguity\\:(.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Winaccessible\\-base[^\\]]*\\]",
[a]={"44b21749b9d6",1421631842,"PR6037","PR6037\nWarn on inaccessible direct base\n\nllvm-svn: 226423"},
[b]=m,
[h]={{C,2966,"/// Performs the actual work of attaching the given base class\n/// specifiers to a C++ class.\nbool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, MutableArrayRef<CXXBaseSpecifier *> Bases) {\n  // ...\n  // Check that the only base classes that are duplicate are virtual.\n  for (unsigned idx = 0; idx < NumGoodBases; ++idx) {\n    // ...\n    if (IndirectBaseTypes.count(CanonicalBase)) {\n      // ...\n      if (Paths.isAmbiguous(CanonicalBase))\n        Diag(Bases[idx]->getBeginLoc(), diag::warn_inaccessible_base_class) << BaseType << getAmbiguousPathsDisplayString(Paths) << Bases[idx]->getSourceRange();"}},
[f]={"44b21749b9d6",1421631842,"PR6037","PR6037\nWarn on inaccessible direct base\n\nllvm-svn: 226423"},
[k]={
[h]={{L,2966,"/// Performs the actual work of attaching the given base class\n/// specifiers to a C++ class.\nbool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, MutableArrayRef<CXXBaseSpecifier *> Bases) {\n  // ...\n  // Check that the only base classes that are duplicate are virtual.\n  for (unsigned idx = 0; idx < NumGoodBases; ++idx) {\n    // ...\n    if (IndirectBaseTypes.count(CanonicalBase)) {\n      // ...\n      if (Paths.isAmbiguous(CanonicalBase))\n        Diag(Bases[idx]->getBeginLoc(), diag::warn_inaccessible_base_class) << BaseType << getAmbiguousPathsDisplayString(Paths) << Bases[idx]->getSourceRange();"}},
[l]={
["clang/test/CXX/conv/conv.mem/p4.cpp"]={"clang/test/CXX/conv/conv.mem/p4.cpp:50:20: warning: direct base \'Base\' is inaccessible due to ambiguity:"}
["clang/test/CXX/conv/conv.mem/p4.cpp"]={"clang/test/CXX/conv/conv.mem/p4.cpp:50:20: warning: direct base \'Base\' is inaccessible due to ambiguity:"}
}
}
},
},
["warn_incompatible_analyzer_plugin_api"]={
["warn_incompatible_analyzer_plugin_api"]={
[j]={"analyzer-incompatible-plugin"},
[k]={"analyzer-incompatible-plugin"},
[i]="analyzer-incompatible-plugin",
[j]="analyzer-incompatible-plugin",
[c]="checker plugin \'%0\' is not compatible with this version of the analyzer",
[c]="warn_incompatible_analyzer_plugin_api",
[d]=g,
[d]="checker plugin \'%0\' is not compatible with this version of the analyzer",
[e]="checker plugin \'(.*?)\' is not compatible with this version of the analyzer",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wanalyzer\\-incompatible\\-plugin[^\\]]*\\]",
[g]="checker plugin \'(.*?)\' is not compatible with this version of the analyzer",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wanalyzer\\-incompatible\\-plugin[^\\]]*\\]",
[a]={"075d73bcced3",1313556963,"[analyzer] Add a warning for an incompatible plugin version.","[analyzer] Add a warning for an incompatible plugin version.\n\nllvm-svn: 137813"},
[b]=r,
[f]={"075d73bcced3",1313556963,"[analyzer] Add a warning for an incompatible plugin version.","[analyzer] Add a warning for an incompatible plugin version.\n\nllvm-svn: 137813"},
[h]={{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",88,"#include \"clang/StaticAnalyzer/Checkers/Checkers.inc\"\n  // ...\n  // Register checkers from plugins.\n  for (const std::string &Plugin : Plugins) {\n    // ...\n    if (!isCompatibleAPIVersion(PluginAPIVersion)) {\n      Diags.Report(diag::warn_incompatible_analyzer_plugin_api) << llvm::sys::path::filename(Plugin);"}}
[h]={{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",88,"#include \"clang/StaticAnalyzer/Checkers/Checkers.inc\"\n  // ...\n  // Register checkers from plugins.\n  for (const std::string &Plugin : Plugins) {\n    // ...\n    if (!isCompatibleAPIVersion(PluginAPIVersion)) {\n      Diags.Report(diag::warn_incompatible_analyzer_plugin_api) << llvm::sys::path::filename(Plugin);"}}
},
},
["warn_incompatible_branch_protection_option"]={
["warn_incompatible_branch_protection_option"]={
[j]={"branch-protection"},
[k]={"branch-protection"},
[i]="branch-protection",
[j]="branch-protection",
[c]={{nil,Q,"\'-mbranch-protection=\' option is incompatible with the \'%0\' architecture"}},
[c]={{nil,w,"warn_incompatible_branch_protection_option"}},
[d]=g,
[d]={{nil,w,"\'-mbranch-protection=\' option is incompatible with the \'%0\' architecture"}},
[e]="\'\\-mbranch\\-protection\\=\' option is incompatible with the \'(.*?)\' architecture",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wbranch\\-protection[^\\]]*\\]",
[g]="\'\\-mbranch\\-protection\\=\' option is incompatible with the \'(.*?)\' architecture",
[b]="Nullability Issue",
[a]=" \\[(?:\\-Werror,)?\\-Wbranch\\-protection[^\\]]*\\]",
[a]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for","Add support for floating-point option `ffp-eval-method` and for\n`pragma clang fp eval_method`."},
[b]={{nil,w,"Nullability Issue"}},
[h]={{T,1598,"static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool isAArch64) {\n  // ...\n  if (!(isAArch64 || (Triple.isArmT32() && Triple.isArmMClass())))\n    D.Diag(diag::warn_incompatible_branch_protection_option) << Triple.getArchName();"}}
[f]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for","Add support for floating-point option `ffp-eval-method` and for\n`pragma clang fp eval_method`."},
[h]={{ab,1598,"static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool isAArch64) {\n  // ...\n  if (!(isAArch64 || (Triple.isArmT32() && Triple.isArmMClass())))\n    D.Diag(diag::warn_incompatible_branch_protection_option) << Triple.getArchName();"}}
},
},
["warn_incompatible_exception_specs"]={
["warn_incompatible_exception_specs"]={
[j]={"incompatible-exception-spec"},
[k]={"incompatible-exception-spec"},
[i]="incompatible-exception-spec",
[j]="incompatible-exception-spec",
[c]="target exception specification is not superset of source",
[c]="warn_incompatible_exception_specs",
[d]=g,
[d]="target exception specification is not superset of source",
[e]="target exception specification is not superset of source",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-exception\\-spec[^\\]]*\\]",
[g]="target exception specification is not superset of source",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-exception\\-spec[^\\]]*\\]",
[a]={"1be59c510612",1477099939,"[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for","[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for\nmismatched dynamic exception specifications in expressions from an error to a\nwarning, since this is no longer ill-formed in C++1z.\n\nAllow reference binding of a reference-to-non-noexcept function to a noexcept\nfunction lvalue. As defect resolutions, also allow a conditional between\nnoexcept and non-noexcept function lvalues to produce a non-noexcept function\nlvalue (rather than decaying to a function pointer), and allow function\ntemplate argument deduction to deduce a reference to non-noexcept function when\nbinding to a noexcept function type.\n\nllvm-svn: 284905"},
[b]=m,
[f]={"1be59c510612",1477099939,"[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for","[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for\nmismatched dynamic exception specifications in expressions from an error to a\nwarning, since this is no longer ill-formed in C++1z.\n\nAllow reference binding of a reference-to-non-noexcept function to a noexcept\nfunction lvalue. As defect resolutions, also allow a conditional between\nnoexcept and non-noexcept function lvalues to produce a non-noexcept function\nlvalue (rather than decaying to a function pointer), and allow function\ntemplate argument deduction to deduce a reference to non-noexcept function when\nbinding to a noexcept function type.\n\nllvm-svn: 284905"},
[h]={{"clang/lib/Sema/SemaExceptionSpec.cpp",946,"bool Sema::CheckExceptionSpecCompatibility(Expr *From, QualType ToType) {\n  // ...\n  // This is not an error in C++17 onwards, unless the noexceptness doesn\'t\n  // match, but in that case we have a full-on type mismatch, not just a\n  // type sugar mismatch.\n  if (getLangOpts().CPlusPlus17) {\n    DiagID = diag::warn_incompatible_exception_specs;"}},
[h]={{"clang/lib/Sema/SemaExceptionSpec.cpp",946,"bool Sema::CheckExceptionSpecCompatibility(Expr *From, QualType ToType) {\n  // ...\n  // This is not an error in C++17 onwards, unless the noexceptness doesn\'t\n  // match, but in that case we have a full-on type mismatch, not just a\n  // type sugar mismatch.\n  if (getLangOpts().CPlusPlus17) {\n    DiagID = diag::warn_incompatible_exception_specs;"}},
[k]={
[l]={
["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:43:9: warning: target exception specification is not superset of source [-Wincompatible-exception-spec]","clang/test/CXX/expr/p13.cpp:44:9: warning: target exception specification is not superset of source [-Wincompatible-exception-spec]","clang/test/CXX/expr/p13.cpp:47:9: warning: target exception specification is not superset of source [-Wincompatible-exception-spec]","clang/test/CXX/expr/p13.cpp:48:9: warning: target exception specification is not superset of source [-Wincompatible-exception-spec]"}
["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:43:9: warning: target exception specification is not superset of source [-Wincompatible-exception-spec]","clang/test/CXX/expr/p13.cpp:44:9: warning: target exception specification is not superset of source [-Wincompatible-exception-spec]","clang/test/CXX/expr/p13.cpp:47:9: warning: target exception specification is not superset of source [-Wincompatible-exception-spec]","clang/test/CXX/expr/p13.cpp:48:9: warning: target exception specification is not superset of source [-Wincompatible-exception-spec]"}
}
}
},
},
["warn_incompatible_qualified_id"]={
["warn_incompatible_qualified_id"]={
[c]="%select{%diff{assigning to $ from incompatible type $|assigning to type from incompatible type}0,1|%diff{passing $ to parameter of incompatible type $|passing type to parameter of incompatible type}0,1|%diff{returning $ from a function with incompatible result type $|returning type from a function with incompatible result type}0,1|%diff{converting $ to incompatible type $|converting type to incompatible type}0,1|%diff{initializing $ with an expression of incompatible type $|initializing type with an expression of incompatible type}0,1|%diff{sending $ to parameter of incompatible type $|sending type to parameter of incompatible type}0,1|%diff{casting $ to incompatible type $|casting type to incompatible type}0,1}2",
[c]="warn_incompatible_qualified_id",
[d]=g,
[d]="%select{%diff{assigning to $ from incompatible type $|assigning to type from incompatible type}0,1|%diff{passing $ to parameter of incompatible type $|passing type to parameter of incompatible type}0,1|%diff{returning $ from a function with incompatible result type $|returning type from a function with incompatible result type}0,1|%diff{converting $ to incompatible type $|converting type to incompatible type}0,1|%diff{initializing $ with an expression of incompatible type $|initializing type with an expression of incompatible type}0,1|%diff{sending $ to parameter of incompatible type $|sending type to parameter of incompatible type}0,1|%diff{casting $ to incompatible type $|casting type to incompatible type}0,1}2",
[e]="(?:(?:assigning to (.*?) from incompatible type (.*?)|assigning to type from incompatible type)|(?:passing (.*?) to parameter of incompatible type (.*?)|passing type to parameter of incompatible type)|(?:returning (.*?) from a function with incompatible result type (.*?)|returning type from a function with incompatible result type)|(?:converting (.*?) to incompatible type (.*?)|converting type to incompatible type)|(?:initializing (.*?) with an expression of incompatible type (.*?)|initializing type with an expression of incompatible type)|(?:sending (.*?) to parameter of incompatible type (.*?)|sending type to parameter of incompatible type)|(?:casting (.*?) to incompatible type (.*?)|casting type to incompatible type))",
[e]=i,
[f]=Gb,
[g]="(?:(?:assigning to (.*?) from incompatible type (.*?)|assigning to type from incompatible type)|(?:passing (.*?) to parameter of incompatible type (.*?)|passing type to parameter of incompatible type)|(?:returning (.*?) from a function with incompatible result type (.*?)|returning type from a function with incompatible result type)|(?:converting (.*?) to incompatible type (.*?)|converting type to incompatible type)|(?:initializing (.*?) with an expression of incompatible type (.*?)|initializing type with an expression of incompatible type)|(?:sending (.*?) to parameter of incompatible type (.*?)|sending type to parameter of incompatible type)|(?:casting (.*?) to incompatible type (.*?)|casting type to incompatible type))",
[b]=l,
[a]=Ib,
[a]={Ub,1237025389,Xb,Wb},
[b]=m,
[h]={{K,17688,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleObjCQualifiedId: {\n    // ...\n    if (getLangOpts().CPlusPlus) {\n    // ...\n    } else {\n      DiagKind = diag::warn_incompatible_qualified_id;"},{K,17765,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  if ((DiagKind == diag::warn_incompatible_qualified_id || DiagKind == diag::err_incompatible_qualified_id) && PDecl && IFace && !IFace->hasDefinition())"}},
[f]={Yb,1237025389,Zb,ac},
[k]={
[h]={{S,17688,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleObjCQualifiedId: {\n    // ...\n    if (getLangOpts().CPlusPlus) {\n    // ...\n    } else {\n      DiagKind = diag::warn_incompatible_qualified_id;"},{S,17765,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  if ((DiagKind == diag::warn_incompatible_qualified_id || DiagKind == diag::err_incompatible_qualified_id) && PDecl && IFace && !IFace->hasDefinition())"}},
[l]={
["clang/test/SemaObjC/kindof.m"]={"clang/test/SemaObjC/kindof.m:172:23: warning: assigning to \'__kindof NSString *\' from incompatible type \'id<NSCopying>\'","clang/test/SemaObjC/kindof.m:174:16: warning: assigning to \'NSString *\' from incompatible type \'id<NSCopying>\'","clang/test/SemaObjC/kindof.m:176:23: warning: assigning to \'__kindof NSObject *\' from incompatible type \'id<NSCopying>\'","clang/test/SemaObjC/kindof.m:178:16: warning: assigning to \'NSObject *\' from incompatible type \'id<NSCopying>\'"}
["clang/test/SemaObjC/kindof.m"]={"clang/test/SemaObjC/kindof.m:172:23: warning: assigning to \'__kindof NSString *\' from incompatible type \'id<NSCopying>\'","clang/test/SemaObjC/kindof.m:174:16: warning: assigning to \'NSString *\' from incompatible type \'id<NSCopying>\'","clang/test/SemaObjC/kindof.m:176:23: warning: assigning to \'__kindof NSObject *\' from incompatible type \'id<NSCopying>\'","clang/test/SemaObjC/kindof.m:178:16: warning: assigning to \'NSObject *\' from incompatible type \'id<NSCopying>\'"}
}
}
},
},
["warn_incompatible_sysroot"]={
["warn_incompatible_sysroot"]={
[j]={"incompatible-sysroot"},
[k]={"incompatible-sysroot"},
[i]="incompatible-sysroot",
[j]="incompatible-sysroot",
[c]="using sysroot for \'%0\' but targeting \'%1\'",
[c]="warn_incompatible_sysroot",
[d]=g,
[d]="using sysroot for \'%0\' but targeting \'%1\'",
[e]="using sysroot for \'(.*?)\' but targeting \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-sysroot[^\\]]*\\]",
[g]="using sysroot for \'(.*?)\' but targeting \'(.*?)\'",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-sysroot[^\\]]*\\]",
[a]={"e60e7c2987f1",1461968914,"Add a new warning to notify users of mismatched SDK and deployment target","Add a new warning to notify users of mismatched SDK and deployment target\n\nSummary:\nThis patch adds a new driver warning -Wincompatible-sdk which notifies the user when they are mismatching the version min options and the sysroot.\n\nThe patch works by checking the sysroot (if present) for an SDK name, then matching that against the target platform. In the case of a mismatch it logs a warning.\n\nReviewers: bob.wilson, rsmith\n\nSubscribers: rsmith, edward-san, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D18088\n\nllvm-svn: 268127"},
[b]=r,
[h]={{od,2342,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {\n    // ...\n    if (SDK.size() > 0) {\n      // ...\n      if (!SDKName.startswith(getPlatformFamily()) && !dropSDKNamePrefix(SDKName).startswith(getPlatformFamily()))\n        getDriver().Diag(diag::warn_incompatible_sysroot) << SDKName << getPlatformFamily();"}},
[f]={"e60e7c2987f1",1461968914,"Add a new warning to notify users of mismatched SDK and deployment target","Add a new warning to notify users of mismatched SDK and deployment target\n\nSummary:\nThis patch adds a new driver warning -Wincompatible-sdk which notifies the user when they are mismatching the version min options and the sysroot.\n\nThe patch works by checking the sysroot (if present) for an SDK name, then matching that against the target platform. In the case of a mismatch it logs a warning.\n\nReviewers: bob.wilson, rsmith\n\nSubscribers: rsmith, edward-san, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D18088\n\nllvm-svn: 268127"},
[k]={
[h]={{qd,2342,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {\n    // ...\n    if (SDK.size() > 0) {\n      // ...\n      if (!SDKName.startswith(getPlatformFamily()) && !dropSDKNamePrefix(SDKName).startswith(getPlatformFamily()))\n        getDriver().Diag(diag::warn_incompatible_sysroot) << SDKName << getPlatformFamily();"}},
[l]={
["clang/test/Driver/incompatible_sysroot.c"]={"clang: warning: using sysroot for \'iPhoneOS\' but targeting \'DriverKit\' [-Wincompatible-sysroot]"}
["clang/test/Driver/incompatible_sysroot.c"]={"clang: warning: using sysroot for \'iPhoneOS\' but targeting \'DriverKit\' [-Wincompatible-sysroot]"}
}
}
},
},
["warn_incompatible_vectors"]={
["warn_incompatible_vectors"]={
[j]={"vector-conversion","vector-conversions"},
[k]={"vector-conversion","vector-conversions"},
[i]="vector-conversion",
[j]="vector-conversion",
[c]="incompatible vector 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",
[c]="warn_incompatible_vectors",
[d]=g,
[d]="incompatible vector 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",
[e]="incompatible vector 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))",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wvector\\-conversion[^\\]]*\\]",
[g]="incompatible vector 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))",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wvector\\-conversion[^\\]]*\\]",
[a]={Ub,1237025389,Xb,Wb},
[b]=m,
[h]={{K,17695,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleVectors:\n    if (getLangOpts().CPlusPlus) {\n    // ...\n    } else {\n      DiagKind = diag::warn_incompatible_vectors;"}},
[f]={Yb,1237025389,Zb,ac},
[k]={
[h]={{S,17695,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleVectors:\n    if (getLangOpts().CPlusPlus) {\n    // ...\n    } else {\n      DiagKind = diag::warn_incompatible_vectors;"}},
[l]={
["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:16:8: warning: incompatible vector types assigning to \'v2u\' (vector of 2 \'unsigned int\' values) from \'__attribute__((__vector_size__(2 * sizeof(int)))) int\' (vector of 2 \'int\' values) [-Wvector-conversion]"}
["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:16:8: warning: incompatible vector types assigning to \'v2u\' (vector of 2 \'unsigned int\' values) from \'__attribute__((__vector_size__(2 * sizeof(int)))) int\' (vector of 2 \'int\' values) [-Wvector-conversion]"}
}
}
},
},
["warn_incomplete_encoded_type"]={
["warn_incomplete_encoded_type"]={
[j]={"encode-type"},
[k]={"encode-type"},
[i]="encode-type",
[j]="encode-type",
[c]="encoding of %0 type is incomplete because %1 component has unknown encoding",
[c]="warn_incomplete_encoded_type",
[d]=g,
[d]="encoding of %0 type is incomplete because %1 component has unknown encoding",
[e]="encoding of (.*?) type is incomplete because (.*?) component has unknown encoding",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wencode\\-type[^\\]]*\\]",
[g]="encoding of (.*?) type is incomplete because (.*?) component has unknown encoding",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wencode\\-type[^\\]]*\\]",
[a]={"4bf437ecd8cc",1408749472,"Objective-C. Warn when @encode\'ing provides an incomplete","Objective-C. Warn when @encode\'ing provides an incomplete\ntype encoding because in certain cases, such as for vector\ntypes, because we still haven\'t designed encoding for them.\nrdar://9255564\n\nllvm-svn: 216301"},
[b]=m,
[h]={{Sc,1148,"ExprResult Sema::BuildObjCEncodeExpression(SourceLocation AtLoc, TypeSourceInfo *EncodedTypeInfo, SourceLocation RParenLoc) {\n  // ...\n  if (EncodedType->isDependentType())\n  // ...\n  else {\n    // ...\n    if (!NotEncodedT.isNull())\n      Diag(AtLoc, diag::warn_incomplete_encoded_type) << EncodedType << NotEncodedT;"}},
[f]={"4bf437ecd8cc",1408749472,"Objective-C. Warn when @encode\'ing provides an incomplete","Objective-C. Warn when @encode\'ing provides an incomplete\ntype encoding because in certain cases, such as for vector\ntypes, because we still haven\'t designed encoding for them.\nrdar://9255564\n\nllvm-svn: 216301"},
[k]={
[h]={{Uc,1148,"ExprResult Sema::BuildObjCEncodeExpression(SourceLocation AtLoc, TypeSourceInfo *EncodedTypeInfo, SourceLocation RParenLoc) {\n  // ...\n  if (EncodedType->isDependentType())\n  // ...\n  else {\n    // ...\n    if (!NotEncodedT.isNull())\n      Diag(AtLoc, diag::warn_incomplete_encoded_type) << EncodedType << NotEncodedT;"}},
[l]={
["clang/test/SemaObjC/encode-typeof-test.m"]={"clang/test/SemaObjC/encode-typeof-test.m:43:9: warning: encoding of \'struct foo\' type is incomplete because \'short8\' (vector of 8 \'short\' values) component has unknown encoding [-Wencode-type]"}
["clang/test/SemaObjC/encode-typeof-test.m"]={"clang/test/SemaObjC/encode-typeof-test.m:43:9: warning: encoding of \'struct foo\' type is incomplete because \'short8\' (vector of 8 \'short\' values) component has unknown encoding [-Wencode-type]"}
}
}
},
},
["warn_inconsistent_array_form"]={
["warn_inconsistent_array_form"]={
[j]={B,H,"array-parameter",N},
[k]={K,O,"array-parameter",V},
[i]="array-parameter",
[j]="array-parameter",
[c]={{nil,kb,"argument %0 of type %1 with mismatched bound"}},
[c]={{nil,C,"warn_inconsistent_array_form"}},
[d]=g,
[d]={{nil,C,"argument %0 of type %1 with mismatched bound"}},
[e]="argument (.*?) of type (.*?) with mismatched bound",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Warray\\-parameter[^\\]]*\\]",
[g]="argument (.*?) of type (.*?) with mismatched bound",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Warray\\-parameter[^\\]]*\\]",
[a]={Eb,1625925174,Fb,Hb},
[b]={{nil,C,m}},
[h]={{D,3445,"static void mergeParamDeclTypes(ParmVarDecl *NewParam, const ParmVarDecl *OldParam, Sema &S) {\n  // ...\n  if (OldParamDT && NewParamDT && OldParamDT->getPointeeType() == NewParamDT->getPointeeType()) {\n    // ...\n    if (!EquivalentArrayTypes(OldParamOT, NewParamOT, S.getASTContext())) {\n      S.Diag(NewParam->getLocation(), diag::warn_inconsistent_array_form) << NewParam << NewParamOT;"}},
[f]={Lb,1625925174,Kb,Jb},
[k]={
[h]={{M,3445,"static void mergeParamDeclTypes(ParmVarDecl *NewParam, const ParmVarDecl *OldParam, Sema &S) {\n  // ...\n  if (OldParamDT && NewParamDT && OldParamDT->getPointeeType() == NewParamDT->getPointeeType()) {\n    // ...\n    if (!EquivalentArrayTypes(OldParamOT, NewParamOT, S.getASTContext())) {\n      S.Diag(NewParam->getLocation(), diag::warn_inconsistent_array_form) << NewParam << NewParamOT;"}},
[l]={
["clang/test/Sema/array-parameter.cpp"]={"clang/test/Sema/array-parameter.cpp:7:15: warning: argument \'i\' of type \'int[N]\' with mismatched bound [-Warray-parameter]"}
["clang/test/Sema/array-parameter.cpp"]={"clang/test/Sema/array-parameter.cpp:7:15: warning: argument \'i\' of type \'int[N]\' with mismatched bound [-Warray-parameter]"}
}
}
},
},
["warn_inconsistent_destructor_marked_not_override_overriding"]={
["warn_inconsistent_destructor_marked_not_override_overriding"]={
[j]={"inconsistent-missing-destructor-override"},
[k]={"inconsistent-missing-destructor-override"},
[i]="inconsistent-missing-destructor-override",
[j]="inconsistent-missing-destructor-override",
[c]={{nil,mb,"%0 overrides a destructor but is not marked \'override\'"}},
[c]={{nil,z,"warn_inconsistent_destructor_marked_not_override_overriding"}},
[d]=g,
[d]={{nil,z,"%0 overrides a destructor but is not marked \'override\'"}},
[e]="(.*?) overrides a destructor but is not marked \'override\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winconsistent\\-missing\\-destructor\\-override[^\\]]*\\]",
[g]="(.*?) overrides a destructor but is not marked \'override\'",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Winconsistent\\-missing\\-destructor\\-override[^\\]]*\\]",
[a]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574"},
[b]={{nil,z,m}},
[h]={{C,3314,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  // ...\n  if (MD->size_overridden_methods() > 0) {\n    // ...\n    if (isa<CXXDestructorDecl>(MD))\n      EmitDiag(diag::warn_inconsistent_destructor_marked_not_override_overriding, diag::warn_suggest_destructor_marked_not_override_overriding);"}}
[f]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574"},
[h]={{L,3314,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  // ...\n  if (MD->size_overridden_methods() > 0) {\n    // ...\n    if (isa<CXXDestructorDecl>(MD))\n      EmitDiag(diag::warn_inconsistent_destructor_marked_not_override_overriding, diag::warn_suggest_destructor_marked_not_override_overriding);"}}
},
},
["warn_inconsistent_function_marked_not_override_overriding"]={
["warn_inconsistent_function_marked_not_override_overriding"]={
[j]={"inconsistent-missing-override"},
[k]={"inconsistent-missing-override"},
[i]="inconsistent-missing-override",
[j]="inconsistent-missing-override",
[c]={{nil,mb,"%0 overrides a member function but is not marked \'override\'"}},
[c]={{nil,z,"warn_inconsistent_function_marked_not_override_overriding"}},
[d]=g,
[d]={{nil,z,"%0 overrides a member function but is not marked \'override\'"}},
[e]="(.*?) overrides a member function but is not marked \'override\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winconsistent\\-missing\\-override[^\\]]*\\]",
[g]="(.*?) overrides a member function but is not marked \'override\'",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Winconsistent\\-missing\\-override[^\\]]*\\]",
[a]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574"},
[b]={{nil,z,m}},
[h]={{C,3317,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  // ...\n  if (MD->size_overridden_methods() > 0) {\n    // ...\n    if (isa<CXXDestructorDecl>(MD))\n    // ...\n    else\n      EmitDiag(diag::warn_inconsistent_function_marked_not_override_overriding, diag::warn_suggest_function_marked_not_override_overriding);"}},
[f]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574"},
[k]={
[h]={{L,3317,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  // ...\n  if (MD->size_overridden_methods() > 0) {\n    // ...\n    if (isa<CXXDestructorDecl>(MD))\n    // ...\n    else\n      EmitDiag(diag::warn_inconsistent_function_marked_not_override_overriding, diag::warn_suggest_function_marked_not_override_overriding);"}},
[l]={
["clang/test/Parser/MicrosoftExtensions.cpp"]={"clang/test/Parser/MicrosoftExtensions.cpp:243:8: warning: \'foo1\' overrides a member function but is not marked \'override\' [-Winconsistent-missing-override]"}
["clang/test/Parser/MicrosoftExtensions.cpp"]={"clang/test/Parser/MicrosoftExtensions.cpp:243:8: warning: \'foo1\' overrides a member function but is not marked \'override\' [-Winconsistent-missing-override]"}
}
}
},
},
["warn_increment_bool"]={
["warn_increment_bool"]={
[j]={G,t,F,ab,"deprecated-increment-bool","increment-bool"},
[k]={Q,v,P,jb,"deprecated-increment-bool","increment-bool"},
[i]="deprecated-increment-bool",
[j]="deprecated-increment-bool",
[c]="incrementing expression of type bool is deprecated and incompatible with C++1z",
[c]="warn_increment_bool",
[d]=g,
[d]="incrementing expression of type bool is deprecated and incompatible with C++1z",
[e]="incrementing expression of type bool is deprecated and incompatible with C\\+\\+17",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-increment\\-bool[^\\]]*\\]",
[g]="incrementing expression of type bool is deprecated and incompatible with C\\+\\+17",
[b]=db,
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-increment\\-bool[^\\]]*\\]",
[a]={Ub,1237025389,Xb,Wb},
[b]=ob,
[h]={{K,14707,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n  // ...\n  if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n    // ...\n    S.Diag(OpLoc, S.getLangOpts().CPlusPlus17 ? diag::ext_increment_bool : diag::warn_increment_bool) << Op->getSourceRange();"}},
[f]={Yb,1237025389,Zb,ac},
[k]={
[h]={{S,14707,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n  // ...\n  if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n    // ...\n    S.Diag(OpLoc, S.getLangOpts().CPlusPlus17 ? diag::ext_increment_bool : diag::warn_increment_bool) << Op->getSourceRange();"}},
[l]={
["clang/test/SemaCXX/bool.cpp"]={"clang/test/SemaCXX/bool.cpp:14:3: warning: incrementing expression of type bool is deprecated and incompatible with C++17 [-Wdeprecated-increment-bool]","clang/test/SemaCXX/bool.cpp:16:4: warning: incrementing expression of type bool is deprecated and incompatible with C++17 [-Wdeprecated-increment-bool]"}
["clang/test/SemaCXX/bool.cpp"]={"clang/test/SemaCXX/bool.cpp:14:3: warning: incrementing expression of type bool is deprecated and incompatible with C++17 [-Wdeprecated-increment-bool]","clang/test/SemaCXX/bool.cpp:16:4: warning: incrementing expression of type bool is deprecated and incompatible with C++17 [-Wdeprecated-increment-bool]"}
}
}
},
},
["warn_independentclass_attribute"]={
["warn_independentclass_attribute"]={
[j]={"IndependentClass-attribute"},
[k]={"IndependentClass-attribute"},
[i]="IndependentClass-attribute",
[j]="IndependentClass-attribute",
[c]="\'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored",
[c]="warn_independentclass_attribute",
[d]=g,
[d]="\'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored",
[e]="\'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-WIndependentClass\\-attribute[^\\]]*\\]",
[g]="\'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-WIndependentClass\\-attribute[^\\]]*\\]",
[a]={"7a60b6db76f5",1429209524,"[Objective-C Sema] patch to introduce IndependentClass","[Objective-C Sema] patch to introduce IndependentClass\nattribute to be placed on Objective-C pointer typedef\nto make them strong enough so on their \"new\" method\nfamily no attempt is made to override these \ntypes. rdar://20255473\n\nllvm-svn: 235128"},
[b]=m,
[h]={{E,3025,"static void handleObjCIndependentClass(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n  // ...\n  } else {\n    S.Diag(D->getLocation(), diag::warn_independentclass_attribute);"}},
[f]={"7a60b6db76f5",1429209524,"[Objective-C Sema] patch to introduce IndependentClass","[Objective-C Sema] patch to introduce IndependentClass\nattribute to be placed on Objective-C pointer typedef\nto make them strong enough so on their \"new\" method\nfamily no attempt is made to override these \ntypes. rdar://20255473\n\nllvm-svn: 235128"},
[k]={
[h]={{N,3025,"static void handleObjCIndependentClass(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n  // ...\n  } else {\n    S.Diag(D->getLocation(), diag::warn_independentclass_attribute);"}},
[l]={
["clang/test/SemaObjC/objc-independent-class-attribute.m"]={"clang/test/SemaObjC/objc-independent-class-attribute.m:11:54: warning: \'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored [-WIndependentClass-attribute]","clang/test/SemaObjC/objc-independent-class-attribute.m:10:9: warning: \'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored [-WIndependentClass-attribute]","clang/test/SemaObjC/objc-independent-class-attribute.m:17:53: warning: \'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored [-WIndependentClass-attribute]","clang/test/SemaObjC/objc-independent-class-attribute.m:20:68: warning: \'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored [-WIndependentClass-attribute]"}
["clang/test/SemaObjC/objc-independent-class-attribute.m"]={"clang/test/SemaObjC/objc-independent-class-attribute.m:11:54: warning: \'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored [-WIndependentClass-attribute]","clang/test/SemaObjC/objc-independent-class-attribute.m:10:9: warning: \'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored [-WIndependentClass-attribute]","clang/test/SemaObjC/objc-independent-class-attribute.m:17:53: warning: \'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored [-WIndependentClass-attribute]","clang/test/SemaObjC/objc-independent-class-attribute.m:20:68: warning: \'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored [-WIndependentClass-attribute]"}
}
}
},
},
["warn_indirection_through_null"]={
["warn_indirection_through_null"]={
[j]={"null-dereference"},
[k]={"null-dereference"},
[i]="null-dereference",
[j]="null-dereference",
[c]="indirection of non-volatile null pointer will be deleted, not trap",
[c]="warn_indirection_through_null",
[d]=g,
[d]="indirection of non-volatile null pointer will be deleted, not trap",
[e]="indirection of non\\-volatile null pointer will be deleted, not trap",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wnull\\-dereference[^\\]]*\\]",
[g]="indirection of non\\-volatile null pointer will be deleted, not trap",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wnull\\-dereference[^\\]]*\\]",
[a]={"395610654363",1278483263,"implement PR7569, warning about assignment to null, which ","implement PR7569, warning about assignment to null, which \npeople seem to write when they want a deterministic trap.\nSuggest instead that they use a volatile pointer or \n__builtin_trap.\n\nllvm-svn: 107756"},
[b]=m,
[h]={{K,576,"static void CheckForNullPointerDereference(Sema &S, Expr *E) {\n  // ...\n  if (UO && UO->getOpcode() == UO_Deref && UO->getSubExpr()->getType()->isPointerType()) {\n    // ...\n    if ((!isTargetAddressSpace(AS) || (isTargetAddressSpace(AS) && toTargetAddressSpace(AS) == 0)) && UO->getSubExpr()->IgnoreParenCasts()->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull) && !UO->getType().isVolatileQualified()) {\n      S.DiagRuntimeBehavior(UO->getOperatorLoc(), UO, S.PDiag(diag::warn_indirection_through_null) << UO->getSubExpr()->getSourceRange());"}},
[f]={"395610654363",1278483263,"implement PR7569, warning about assignment to null, which ","implement PR7569, warning about assignment to null, which \npeople seem to write when they want a deterministic trap.\nSuggest instead that they use a volatile pointer or \n__builtin_trap.\n\nllvm-svn: 107756"},
[k]={
[h]={{S,576,"static void CheckForNullPointerDereference(Sema &S, Expr *E) {\n  // ...\n  if (UO && UO->getOpcode() == UO_Deref && UO->getSubExpr()->getType()->isPointerType()) {\n    // ...\n    if ((!isTargetAddressSpace(AS) || (isTargetAddressSpace(AS) && toTargetAddressSpace(AS) == 0)) && UO->getSubExpr()->IgnoreParenCasts()->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull) && !UO->getType().isVolatileQualified()) {\n      S.DiagRuntimeBehavior(UO->getOperatorLoc(), UO, S.PDiag(diag::warn_indirection_through_null) << UO->getSubExpr()->getSourceRange());"}},
[l]={
["clang/test/Parser/expressions.c"]={"clang/test/Parser/expressions.c:42:18: warning: indirection of non-volatile null pointer will be deleted, not trap [-Wnull-dereference]"}
["clang/test/Parser/expressions.c"]={"clang/test/Parser/expressions.c:42:18: warning: indirection of non-volatile null pointer will be deleted, not trap [-Wnull-dereference]"}
}
}
},
},
["warn_infinite_recursive_function"]={
["warn_infinite_recursive_function"]={
[j]={B,H,"infinite-recursion",N},
[k]={K,O,"infinite-recursion",V},
[i]="infinite-recursion",
[j]="infinite-recursion",
[c]="all paths through this function will call itself",
[c]="warn_infinite_recursive_function",
[d]=g,
[d]="all paths through this function will call itself",
[e]="all paths through this function will call itself",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winfinite\\-recursion[^\\]]*\\]",
[g]="all paths through this function will call itself",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Winfinite\\-recursion[^\\]]*\\]",
[a]={"2f024f432d62",1387593223,"Add -Winfinite-recursion to Clang","Add -Winfinite-recursion to Clang\n\nThis new warning detects when a function will recursively call itself on every\ncode path though that function.  This catches simple recursive cases such as:\n\nvoid foo() {\n  foo();\n}\n\nAs well as more complex functions like:\n\nvoid bar() {\n  if (test()) {\n    bar();\n    return;\n  } else {\n    bar();\n  }\n  return;\n}\n\nThis warning uses the CFG.  As with other CFG-based warnings, this is off\nby default.  Due to false positives, this warning is also disabled for\ntemplated functions.\n\nllvm-svn: 197853"},
[b]=m,
[h]={{gb,290,"static void checkRecursiveFunction(Sema &S, const FunctionDecl *FD, const Stmt *Body, AnalysisDeclContext &AC) {\n  // ...\n  // Emit diagnostic if a recursive function call is detected for all paths.\n  if (checkForRecursiveFunctionCall(FD, cfg))\n    S.Diag(Body->getBeginLoc(), diag::warn_infinite_recursive_function);"},{gb,2680,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  // ...\n  if (!Diags.isIgnored(diag::warn_infinite_recursive_function, D->getBeginLoc())) {"}},
[f]={"2f024f432d62",1387593223,"Add -Winfinite-recursion to Clang","Add -Winfinite-recursion to Clang\n\nThis new warning detects when a function will recursively call itself on every\ncode path though that function.  This catches simple recursive cases such as:\n\nvoid foo() {\n  foo();\n}\n\nAs well as more complex functions like:\n\nvoid bar() {\n  if (test()) {\n    bar();\n    return;\n  } else {\n    bar();\n  }\n  return;\n}\n\nThis warning uses the CFG.  As with other CFG-based warnings, this is off\nby default.  Due to false positives, this warning is also disabled for\ntemplated functions.\n\nllvm-svn: 197853"},
[k]={
[h]={{qb,290,"static void checkRecursiveFunction(Sema &S, const FunctionDecl *FD, const Stmt *Body, AnalysisDeclContext &AC) {\n  // ...\n  // Emit diagnostic if a recursive function call is detected for all paths.\n  if (checkForRecursiveFunctionCall(FD, cfg))\n    S.Diag(Body->getBeginLoc(), diag::warn_infinite_recursive_function);"},{qb,2680,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  // ...\n  if (!Diags.isIgnored(diag::warn_infinite_recursive_function, D->getBeginLoc())) {"}},
[l]={
["clang/test/SemaCXX/warn-infinite-recursion.cpp"]={"clang/test/SemaCXX/warn-infinite-recursion.cpp:3:10: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:7:15: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:19:15: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:32:10: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:45:15: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:52:9: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:83:13: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:87:13: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:110:14: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:197:40: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:98:12: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:99:19: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:160:21: warning: all paths through this function will call itself [-Winfinite-recursion]"}
["clang/test/SemaCXX/warn-infinite-recursion.cpp"]={"clang/test/SemaCXX/warn-infinite-recursion.cpp:3:10: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:7:15: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:19:15: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:32:10: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:45:15: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:52:9: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:83:13: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:87:13: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:110:14: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:197:40: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:98:12: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:99:19: warning: all paths through this function will call itself [-Winfinite-recursion]","clang/test/SemaCXX/warn-infinite-recursion.cpp:160:21: warning: all paths through this function will call itself [-Winfinite-recursion]"}
}
}
},
},
["warn_init_list_constant_narrowing"]={
["warn_init_list_constant_narrowing"]={
[j]={u,"c++0x-narrowing",s,o,td,"narrowing"},
[k]={y,"c++0x-narrowing",u,p,zd,"narrowing"},
[i]=td,
[j]=zd,
[c]="constant expression evaluates to %0 which cannot be narrowed to type %1 in C++11",
[c]="warn_init_list_constant_narrowing",
[d]=g,
[d]="constant expression evaluates to %0 which cannot be narrowed to type %1 in C++11",
[e]="constant expression evaluates to (.*?) which cannot be narrowed to type (.*?) in C\\+\\+11",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]",
[g]="constant expression evaluates to (.*?) which cannot be narrowed to type (.*?) in C\\+\\+11",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]",
[a]={"a6667816d589",1311722430,"This patch implements as much of the narrowing conversion error specified by","This patch implements as much of the narrowing conversion error specified by\n[dcl.init.list] as is possible without generalized initializer lists or full\nconstant expression support, and adds a c++0x-compat warning in C++98 mode.\n\nThe FixIt currently uses a typedef\'s basename without qualification, which is\nlikely to be incorrect on some code.  If it\'s incorrect on too much code, we\nshould write a function to get the string that refers to a type from a\nparticular context.\n\nThe warning is currently off by default. I\'ll fix LLVM and clang before turning\nit on.\n\nllvm-svn: 136181"},
[b]=m,
[h]={{fb,10427,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n  // ...\n  case NK_Constant_Narrowing:\n    // ...\n    S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_constant_narrowing : diag::warn_init_list_constant_narrowing) << PostInit->getSourceRange() << ConstantValue.getAsString(S.getASTContext(), ConstantType) << EntityType.getLocalUnqualifiedType();"}},
[f]={"a6667816d589",1311722430,"This patch implements as much of the narrowing conversion error specified by","This patch implements as much of the narrowing conversion error specified by\n[dcl.init.list] as is possible without generalized initializer lists or full\nconstant expression support, and adds a c++0x-compat warning in C++98 mode.\n\nThe FixIt currently uses a typedef\'s basename without qualification, which is\nlikely to be incorrect on some code.  If it\'s incorrect on too much code, we\nshould write a function to get the string that refers to a type from a\nparticular context.\n\nThe warning is currently off by default. I\'ll fix LLVM and clang before turning\nit on.\n\nllvm-svn: 136181"},
[k]={
[h]={{mb,10427,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n  // ...\n  case NK_Constant_Narrowing:\n    // ...\n    S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_constant_narrowing : diag::warn_init_list_constant_narrowing) << PostInit->getSourceRange() << ConstantValue.getAsString(S.getASTContext(), ConstantType) << EntityType.getLocalUnqualifiedType();"}},
[l]={
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p7-0x-fixits.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p7-0x-fixits.cpp:14:30: warning: constant expression evaluates to 70000 which cannot be narrowed to type \'int16_t\' (aka \'short\') in C++11 [-Wc++11-narrowing]","clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p7-0x-fixits.cpp:22:23: warning: constant expression evaluates to 700 which cannot be narrowed to type \'char\' in C++11 [-Wc++11-narrowing]"}
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p7-0x-fixits.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p7-0x-fixits.cpp:14:30: warning: constant expression evaluates to 70000 which cannot be narrowed to type \'int16_t\' (aka \'short\') in C++11 [-Wc++11-narrowing]","clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p7-0x-fixits.cpp:22:23: warning: constant expression evaluates to 700 which cannot be narrowed to type \'char\' in C++11 [-Wc++11-narrowing]"}
}
}
},
},
["warn_init_list_type_narrowing"]={
["warn_init_list_type_narrowing"]={
[j]={u,"c++0x-narrowing",s,o,td,"narrowing"},
[k]={y,"c++0x-narrowing",u,p,zd,"narrowing"},
[i]=td,
[j]=zd,
[c]="type %0 cannot be narrowed to %1 in initializer list in C++11",
[c]="warn_init_list_type_narrowing",
[d]=g,
[d]="type %0 cannot be narrowed to %1 in initializer list in C++11",
[e]="type (.*?) cannot be narrowed to (.*?) in initializer list in C\\+\\+11",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]",
[g]="type (.*?) cannot be narrowed to (.*?) in initializer list in C\\+\\+11",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]",
[a]={"66e05fe63099",1326864109,"Move narrowing conversion detection code from SemaInit to SemaOverload, ready","Move narrowing conversion detection code from SemaInit to SemaOverload, ready\nfor it to be used in converted constant expression checking, and fix a couple\nof issues:\n - Conversion operators implicitly invoked prior to the narrowing conversion\n  were not being correctly handled when determining whether a constant value\n  was narrowed.\n - For conversions from floating-point to integral types, the diagnostic text\n  incorrectly always claimed that the source expression was not a constant\n  expression.\n\nllvm-svn: 148381"},
[b]=m,
[h]={{fb,10416,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n  // ...\n  case NK_Type_Narrowing:\n    // ...\n    S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_type_narrowing : diag::warn_init_list_type_narrowing) << PostInit->getSourceRange() << PreNarrowingType.getLocalUnqualifiedType() << EntityType.getLocalUnqualifiedType();"}}
[f]={"66e05fe63099",1326864109,"Move narrowing conversion detection code from SemaInit to SemaOverload, ready","Move narrowing conversion detection code from SemaInit to SemaOverload, ready\nfor it to be used in converted constant expression checking, and fix a couple\nof issues:\n - Conversion operators implicitly invoked prior to the narrowing conversion\n  were not being correctly handled when determining whether a constant value\n  was narrowed.\n - For conversions from floating-point to integral types, the diagnostic text\n  incorrectly always claimed that the source expression was not a constant\n  expression.\n\nllvm-svn: 148381"},
[h]={{mb,10416,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n  // ...\n  case NK_Type_Narrowing:\n    // ...\n    S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_type_narrowing : diag::warn_init_list_type_narrowing) << PostInit->getSourceRange() << PreNarrowingType.getLocalUnqualifiedType() << EntityType.getLocalUnqualifiedType();"}}
},
},
["warn_init_list_variable_narrowing"]={
["warn_init_list_variable_narrowing"]={
[j]={u,"c++0x-narrowing",s,o,td,"narrowing"},
[k]={y,"c++0x-narrowing",u,p,zd,"narrowing"},
[i]=td,
[j]=zd,
[c]="non-constant-expression cannot be narrowed from type %0 to %1 in initializer list in C++11",
[c]="warn_init_list_variable_narrowing",
[d]=g,
[d]="non-constant-expression cannot be narrowed from type %0 to %1 in initializer list in C++11",
[e]="non\\-constant\\-expression cannot be narrowed from type (.*?) to (.*?) in initializer list in C\\+\\+11",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]",
[g]="non\\-constant\\-expression cannot be narrowed from type (.*?) to (.*?) in initializer list in C\\+\\+11",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]",
[a]={"a6667816d589",1311722430,"This patch implements as much of the narrowing conversion error specified by","This patch implements as much of the narrowing conversion error specified by\n[dcl.init.list] as is possible without generalized initializer lists or full\nconstant expression support, and adds a c++0x-compat warning in C++98 mode.\n\nThe FixIt currently uses a typedef\'s basename without qualification, which is\nlikely to be incorrect on some code.  If it\'s incorrect on too much code, we\nshould write a function to get the string that refers to a type from a\nparticular context.\n\nThe warning is currently off by default. I\'ll fix LLVM and clang before turning\nit on.\n\nllvm-svn: 136181"},
[b]=m,
[h]={{fb,10438,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n  // ...\n  case NK_Variable_Narrowing:\n    // ...\n    S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_variable_narrowing : diag::warn_init_list_variable_narrowing) << PostInit->getSourceRange() << PreNarrowingType.getLocalUnqualifiedType() << EntityType.getLocalUnqualifiedType();"}},
[f]={"a6667816d589",1311722430,"This patch implements as much of the narrowing conversion error specified by","This patch implements as much of the narrowing conversion error specified by\n[dcl.init.list] as is possible without generalized initializer lists or full\nconstant expression support, and adds a c++0x-compat warning in C++98 mode.\n\nThe FixIt currently uses a typedef\'s basename without qualification, which is\nlikely to be incorrect on some code.  If it\'s incorrect on too much code, we\nshould write a function to get the string that refers to a type from a\nparticular context.\n\nThe warning is currently off by default. I\'ll fix LLVM and clang before turning\nit on.\n\nllvm-svn: 136181"},
[k]={
[h]={{mb,10438,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n  // ...\n  case NK_Variable_Narrowing:\n    // ...\n    S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_variable_narrowing : diag::warn_init_list_variable_narrowing) << PostInit->getSourceRange() << PreNarrowingType.getLocalUnqualifiedType() << EntityType.getLocalUnqualifiedType();"}},
[l]={
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p7-0x-fixits.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p7-0x-fixits.cpp:10:26: warning: non-constant-expression cannot be narrowed from type \'int\' to \'char\' in initializer list in C++11 [-Wc++11-narrowing]"}
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p7-0x-fixits.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/p7-0x-fixits.cpp:10:26: warning: non-constant-expression cannot be narrowed from type \'int\' to \'char\' in initializer list in C++11 [-Wc++11-narrowing]"}
}
}
},
},
["warn_init_ptr_member_to_parameter_addr"]={
["warn_init_ptr_member_to_parameter_addr"]={
[j]={"dangling","dangling-field"},
[k]={Kd,"dangling-field"},
[i]="dangling-field",
[j]="dangling-field",
[c]={{nil,eb,"initializing pointer member %0 with the stack address of %select{variable|parameter}2 %1"},{lb,nil,"initializing pointer member %0 with the stack address of parameter %1"}},
[c]="warn_init_ptr_member_to_parameter_addr",
[d]=g,
[d]={{nil,D,"initializing pointer member %0 with the stack address of %select{variable|parameter}2 %1"},{F,nil,"initializing pointer member %0 with the stack address of parameter %1"}},
[e]="initializing pointer member (.*?) with the stack address of (?:variable|parameter) (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdangling\\-field[^\\]]*\\]",
[g]="initializing pointer member (.*?) with the stack address of (?:variable|parameter) (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdangling\\-field[^\\]]*\\]",
[a]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and","Add a simple new warning to catch blatantly dangling pointer and\nreference members of classes. We\'ve had several bugs reported because of\nthis, and there\'s no reason not to flag it right away in the compiler.\n\nComments especially welcome on the strategy for implementing this\nwarning (IE, what should trigger this?) and on the text of the warning\nitself.\n\nI\'m going to extend this to cover obvious cases with temporaries and\nbeef up the test cases some in subsequent patches. I\'ll then run it over\na large codebase and make sure its not misbehaving before I add it to\n-Wall or turn it on by default. I think this one might be a good\ncandidate for on by default.\n\nllvm-svn: 139075"},
[b]=m,
[h]={{fb,8225,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n      // ...\n      } else {\n        // ...\n        if (auto *Member = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          // ...\n          Diag(DiagLoc, IsPointer ? diag::warn_init_ptr_member_to_parameter_addr : diag::warn_bind_ref_member_to_parameter) << Member << VD << isa<ParmVarDecl>(VD) << DiagRange;"}},
[f]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and","Add a simple new warning to catch blatantly dangling pointer and\nreference members of classes. We\'ve had several bugs reported because of\nthis, and there\'s no reason not to flag it right away in the compiler.\n\nComments especially welcome on the strategy for implementing this\nwarning (IE, what should trigger this?) and on the text of the warning\nitself.\n\nI\'m going to extend this to cover obvious cases with temporaries and\nbeef up the test cases some in subsequent patches. I\'ll then run it over\na large codebase and make sure its not misbehaving before I add it to\n-Wall or turn it on by default. I think this one might be a good\ncandidate for on by default.\n\nllvm-svn: 139075"},
[k]={
[h]={{mb,8225,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n      // ...\n      } else {\n        // ...\n        if (auto *Member = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          // ...\n          Diag(DiagLoc, IsPointer ? diag::warn_init_ptr_member_to_parameter_addr : diag::warn_bind_ref_member_to_parameter) << Member << VD << isa<ParmVarDecl>(VD) << DiagRange;"}},
[l]={
["clang/test/SemaCXX/warn-dangling-field.cpp"]={"clang/test/SemaCXX/warn-dangling-field.cpp:16:10: warning: initializing pointer member \'y\' with the stack address of parameter \'i\' [-Wdangling-field]"}
["clang/test/SemaCXX/warn-dangling-field.cpp"]={"clang/test/SemaCXX/warn-dangling-field.cpp:16:10: warning: initializing pointer member \'y\' with the stack address of parameter \'i\' [-Wdangling-field]"}
}
}
},
},
["warn_initializer_out_of_order"]={
["warn_initializer_out_of_order"]={
[j]={B,H,N,"reorder","reorder-ctor"},
[k]={K,O,V,"reorder","reorder-ctor"},
[i]="reorder-ctor",
[j]="reorder-ctor",
[c]="%select{field|base class}0 %1 will be initialized after %select{field|base}2 %3",
[c]="warn_initializer_out_of_order",
[d]=g,
[d]="%select{field|base class}0 %1 will be initialized after %select{field|base}2 %3",
[e]="(?:field|base class) (.*?) will be initialized after (?:field|base) (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wreorder\\-ctor[^\\]]*\\]",
[g]="(?:field|base class) (.*?) will be initialized after (?:field|base) (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wreorder\\-ctor[^\\]]*\\]",
[a]={"bb7b658ab5d0",1270885043,"Diagnose misordered initializers in constructor templates immediately instead of","Diagnose misordered initializers in constructor templates immediately instead of\nwhen they\'re instantiated.  Merge the note into the -Wreorder warning;  it\ndoesn\'t really contribute much, and it was splitting a thought across diagnostics\nanyway.  Don\'t crash in the parser when a constructor\'s initializers end in a\ncomma and there\'s no body;  the recovery here is still terrible, but anything\'s\nbetter than a crash.\n\nllvm-svn: 100922"},
[b]=m,
[h]={{C,5504,"static void DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef, const CXXConstructorDecl *Constructor, ArrayRef<CXXCtorInitializer *> Inits) {\n  // ...\n  for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {\n    // ...\n    if (!SemaRef.Diags.isIgnored(diag::warn_initializer_out_of_order, Init->getSourceLocation())) {"},{C,5586,"static void DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef, const CXXConstructorDecl *Constructor, ArrayRef<CXXCtorInitializer *> Inits) {\n  // ...\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);"}},
[f]={"bb7b658ab5d0",1270885043,"Diagnose misordered initializers in constructor templates immediately instead of","Diagnose misordered initializers in constructor templates immediately instead of\nwhen they\'re instantiated.  Merge the note into the -Wreorder warning;  it\ndoesn\'t really contribute much, and it was splitting a thought across diagnostics\nanyway.  Don\'t crash in the parser when a constructor\'s initializers end in a\ncomma and there\'s no body;  the recovery here is still terrible, but anything\'s\nbetter than a crash.\n\nllvm-svn: 100922"},
[k]={
[h]={{L,5504,"static void DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef, const CXXConstructorDecl *Constructor, ArrayRef<CXXCtorInitializer *> Inits) {\n  // ...\n  for (unsigned InitIndex = 0; InitIndex != Inits.size(); ++InitIndex) {\n    // ...\n    if (!SemaRef.Diags.isIgnored(diag::warn_initializer_out_of_order, Init->getSourceLocation())) {"},{L,5586,"static void DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef, const CXXConstructorDecl *Constructor, ArrayRef<CXXCtorInitializer *> Inits) {\n  // ...\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);"}},
[l]={
["clang/test/SemaTemplate/instantiate-member-initializers.cpp"]={"clang/test/SemaTemplate/instantiate-member-initializers.cpp:13:9: warning: field \'b\' will be initialized after field \'a\' [-Wreorder-ctor]"}
["clang/test/SemaTemplate/instantiate-member-initializers.cpp"]={"clang/test/SemaTemplate/instantiate-member-initializers.cpp:13:9: warning: field \'b\' will be initialized after field \'a\' [-Wreorder-ctor]"}
}
}
},
},
["warn_initializer_overrides"]={
["warn_initializer_overrides"]={
[j]={p,B,Fc,"initializer-overrides","override-init"},
[k]={r,K,Ic,"initializer-overrides","override-init"},
[i]="initializer-overrides",
[j]="initializer-overrides",
[c]={{nil,z,"initializer %select{partially |}0overrides prior initialization of this subobject"},{I,nil,"initializer overrides prior initialization of this subobject"}},
[c]="warn_initializer_overrides",
[d]=g,
[d]={{nil,q,"initializer %select{partially |}0overrides prior initialization of this subobject"},{x,nil,"initializer overrides prior initialization of this subobject"}},
[e]="initializer (?:partially |)overrides prior initialization of this subobject",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winitializer\\-overrides[^\\]]*\\]",
[g]="initializer (?:partially |)overrides prior initialization of this subobject",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Winitializer\\-overrides[^\\]]*\\]",
[a]={Kd,1236199783,Jd,Ld},
[b]=m,
[h]={{fb,416,"/// Semantic checking for initializer lists.\n///\n/// The InitListChecker class contains a set of routines that each\n/// handle the initialization of a certain kind of entity, e.g.,\n/// arrays, vectors, struct/union types, scalars, etc. The\n/// InitListChecker itself performs a recursive walk of the subobject\n/// structure of the type to be initialized, while stepping through\n/// the initializer list one element at a time. The IList and Index\n/// parameters to each of the Check* routines contain the active\n/// (syntactic) initializer list and the index into that initializer\n/// list that represents the current initializer. Each routine is\n/// responsible for moving that Index forward as it consumes elements.\n///\n/// Each Check* routine also has a StructuredList/StructuredIndex\n/// arguments, which contains the current \"structured\" (semantic)\n/// initializer list and the index into that initializer list where we\n/// are copying initializers as we map them over to the semantic\n/// list. Once we have completed our recursive walk of the subobject\n/// structure, we will have constructed a full semantic initializer\n/// list.\n///\n/// C99 designators cause changes in the initializer list traversal,\n/// because they make the initialization \"jump\" into a specific\n/// subobject and then continue the initialization from that\n/// point. CheckDesignatedInitializer() recursively steps into the\n/// designated subobject and manages backing out the recursion to\n/// initialize the subobjects after the one designated.\n///\n/// If an initializer list contains any designators, we build a placeholder\n/// structured list even in \'verify only\' mode, so that we can track which\n/// elements need \'empty\' initializtion.\nclass InitListChecker {\n  // ...\n  /// Diagnose that OldInit (or part thereof) has been overridden by NewInit.\n  void diagnoseInitOverride(Expr *OldInit, SourceRange NewInitRange, bool UnionOverride = false, bool FullyOverwritten = true) {\n    // ...\n    unsigned DiagID = SemaRef.getLangOpts().CPlusPlus ? (UnionOverride ? diag::ext_initializer_union_overrides : diag::ext_initializer_overrides) : diag::warn_initializer_overrides;"}},
[f]={Ad,1236199783,Cd,Ed},
[k]={
[h]={{mb,416,"/// Semantic checking for initializer lists.\n///\n/// The InitListChecker class contains a set of routines that each\n/// handle the initialization of a certain kind of entity, e.g.,\n/// arrays, vectors, struct/union types, scalars, etc. The\n/// InitListChecker itself performs a recursive walk of the subobject\n/// structure of the type to be initialized, while stepping through\n/// the initializer list one element at a time. The IList and Index\n/// parameters to each of the Check* routines contain the active\n/// (syntactic) initializer list and the index into that initializer\n/// list that represents the current initializer. Each routine is\n/// responsible for moving that Index forward as it consumes elements.\n///\n/// Each Check* routine also has a StructuredList/StructuredIndex\n/// arguments, which contains the current \"structured\" (semantic)\n/// initializer list and the index into that initializer list where we\n/// are copying initializers as we map them over to the semantic\n/// list. Once we have completed our recursive walk of the subobject\n/// structure, we will have constructed a full semantic initializer\n/// list.\n///\n/// C99 designators cause changes in the initializer list traversal,\n/// because they make the initialization \"jump\" into a specific\n/// subobject and then continue the initialization from that\n/// point. CheckDesignatedInitializer() recursively steps into the\n/// designated subobject and manages backing out the recursion to\n/// initialize the subobjects after the one designated.\n///\n/// If an initializer list contains any designators, we build a placeholder\n/// structured list even in \'verify only\' mode, so that we can track which\n/// elements need \'empty\' initializtion.\nclass InitListChecker {\n  // ...\n  /// Diagnose that OldInit (or part thereof) has been overridden by NewInit.\n  void diagnoseInitOverride(Expr *OldInit, SourceRange NewInitRange, bool UnionOverride = false, bool FullyOverwritten = true) {\n    // ...\n    unsigned DiagID = SemaRef.getLangOpts().CPlusPlus ? (UnionOverride ? diag::ext_initializer_union_overrides : diag::ext_initializer_overrides) : diag::warn_initializer_overrides;"}},
[l]={
["clang/test/CodeGen/partial-reinitialization1.c"]={"clang/test/CodeGen/partial-reinitialization1.c:13:18: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:14:18: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:14:23: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:20:18: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:21:18: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:21:20: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:30:8: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:48:23: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:49:23: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:49:29: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:60:32: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:73:23: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:74:25: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]"}
["clang/test/CodeGen/partial-reinitialization1.c"]={"clang/test/CodeGen/partial-reinitialization1.c:13:18: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:14:18: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:14:23: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:20:18: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:21:18: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:21:20: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:30:8: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:48:23: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:49:23: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:49:29: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:60:32: warning: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:73:23: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]","clang/test/CodeGen/partial-reinitialization1.c:74:25: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]"}
}
}
},
},
["warn_inline_namespace_reopened_noninline"]={
["warn_inline_namespace_reopened_noninline"]={
[j]={"inline-namespace-reopened-noninline"},
[k]={"inline-namespace-reopened-noninline"},
[i]="inline-namespace-reopened-noninline",
[j]="inline-namespace-reopened-noninline",
[c]="inline namespace reopened as a non-inline namespace",
[c]="warn_inline_namespace_reopened_noninline",
[d]=g,
[d]="inline namespace reopened as a non-inline namespace",
[e]="inline namespace reopened as a non\\-inline namespace",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winline\\-namespace\\-reopened\\-noninline[^\\]]*\\]",
[g]="inline namespace reopened as a non\\-inline namespace",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Winline\\-namespace\\-reopened\\-noninline[^\\]]*\\]",
[a]={"a912197fff7a",1305906511,"Downgrade the error about re-opening an inline namespace as non-inline","Downgrade the error about re-opening an inline namespace as non-inline\nto a warning, since apparently libstdc++\'s debug mode does this (and\nwe can recover safely). Add a Fix-It to insert the \"inline\", just for kicks.\n\nllvm-svn: 131732"},
[b]=m,
[h]={{C,11363,"/// Diagnose a mismatch in \'inline\' qualifiers when a namespace is\n/// reopened.\nstatic void DiagnoseNamespaceInlineMismatch(Sema &S, SourceLocation KeywordLoc, SourceLocation Loc, IdentifierInfo *II, bool *IsInline, NamespaceDecl *PrevNS) {\n  // ...\n  if (PrevNS->isInline())\n    // ...\n    S.Diag(Loc, diag::warn_inline_namespace_reopened_noninline) << FixItHint::CreateInsertion(KeywordLoc, \"inline \");"}},
[f]={"a912197fff7a",1305906511,"Downgrade the error about re-opening an inline namespace as non-inline","Downgrade the error about re-opening an inline namespace as non-inline\nto a warning, since apparently libstdc++\'s debug mode does this (and\nwe can recover safely). Add a Fix-It to insert the \"inline\", just for kicks.\n\nllvm-svn: 131732"},
[k]={
[h]={{L,11363,"/// Diagnose a mismatch in \'inline\' qualifiers when a namespace is\n/// reopened.\nstatic void DiagnoseNamespaceInlineMismatch(Sema &S, SourceLocation KeywordLoc, SourceLocation Loc, IdentifierInfo *II, bool *IsInline, NamespaceDecl *PrevNS) {\n  // ...\n  if (PrevNS->isInline())\n    // ...\n    S.Diag(Loc, diag::warn_inline_namespace_reopened_noninline) << FixItHint::CreateInsertion(KeywordLoc, \"inline \");"}},
[l]={
["clang/test/SemaCXX/warn-inline-namespace-reopened-twice.cpp"]={"clang/test/SemaCXX/warn-inline-namespace-reopened-twice.cpp:8:11: warning: inline namespace reopened as a non-inline namespace [-Winline-namespace-reopened-noninline]","clang/test/SemaCXX/warn-inline-namespace-reopened-twice.cpp:9:11: warning: inline namespace reopened as a non-inline namespace [-Winline-namespace-reopened-noninline]"}
["clang/test/SemaCXX/warn-inline-namespace-reopened-twice.cpp"]={"clang/test/SemaCXX/warn-inline-namespace-reopened-twice.cpp:8:11: warning: inline namespace reopened as a non-inline namespace [-Winline-namespace-reopened-noninline]","clang/test/SemaCXX/warn-inline-namespace-reopened-twice.cpp:9:11: warning: inline namespace reopened as a non-inline namespace [-Winline-namespace-reopened-noninline]"}
}
}
},
},
["warn_inst_method_not_found"]={
["warn_inst_method_not_found"]={
[j]={Ad},
[k]={Nd},
[i]=Ad,
[j]=Nd,
[c]="instance method %objcinstance0 not found (return type defaults to \'id\')",
[c]="warn_inst_method_not_found",
[d]=g,
[d]="instance method %objcinstance0 not found (return type defaults to \'id\')",
[e]="instance method (.*?) not found \\(return type defaults to \'id\'\\)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]",
[g]="instance method (.*?) not found \\(return type defaults to \'id\'\\)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]",
[a]={Ub,1237025389,Xb,Wb},
[b]=m,
[h]={{Sc,1746,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  // ...\n  if (!Method) {\n    // ...\n    if (getLangOpts().ObjCAutoRefCount)\n    // ...\n    else\n      DiagID = isClassMessage ? diag::warn_class_method_not_found : diag::warn_inst_method_not_found;"}},
[f]={Yb,1237025389,Zb,ac},
[k]={
[h]={{Uc,1746,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  // ...\n  if (!Method) {\n    // ...\n    if (getLangOpts().ObjCAutoRefCount)\n    // ...\n    else\n      DiagID = isClassMessage ? diag::warn_class_method_not_found : diag::warn_inst_method_not_found;"}},
[l]={
["clang/test/SemaObjC/missing-atend-metadata.m"]={"clang/test/SemaObjC/missing-atend-metadata.m:13:29: warning: instance method \'-init\' not found (return type defaults to \'id\') [-Wobjc-method-access]"}
["clang/test/SemaObjC/missing-atend-metadata.m"]={"clang/test/SemaObjC/missing-atend-metadata.m:13:29: warning: instance method \'-init\' not found (return type defaults to \'id\') [-Wobjc-method-access]"}
}
}
},
},
["warn_instance_method_not_found_with_typo"]={
["warn_instance_method_not_found_with_typo"]={
[j]={Ad},
[k]={Nd},
[i]=Ad,
[j]=Nd,
[c]="instance method %objcinstance0 not found (return type defaults to \'id\'); did you mean %objcinstance2?",
[c]="warn_instance_method_not_found_with_typo",
[d]=g,
[d]="instance method %objcinstance0 not found (return type defaults to \'id\'); did you mean %objcinstance2?",
[e]="instance method (.*?) not found \\(return type defaults to \'id\'\\); did you mean (.*?)\\?",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]",
[g]="instance method (.*?) not found \\(return type defaults to \'id\'\\); did you mean (.*?)\\?",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]",
[a]={"4cc5552b9b94",1371569496,"Objective-C [qoi]: privide typo correction for selectors","Objective-C [qoi]: privide typo correction for selectors\nin addition of receiver having static type, but also when\nreceiver has dynamic type (of \'id\' variety) as well as when\nreceiver is of \'Class\' type vareity. // rdar://7853549\n\nllvm-svn: 184195"},
[b]=m,
[h]={{Sc,1754,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  // ...\n  if (!Method) {\n    // ...\n    if (!getLangOpts().DebuggerSupport) {\n      // ...\n      if (OMD && !OMD->isInvalidDecl()) {\n        if (getLangOpts().ObjCAutoRefCount)\n        // ...\n        else\n          DiagID = isClassMessage ? diag::warn_class_method_not_found_with_typo : diag::warn_instance_method_not_found_with_typo;"}},
[f]={"4cc5552b9b94",1371569496,"Objective-C [qoi]: privide typo correction for selectors","Objective-C [qoi]: privide typo correction for selectors\nin addition of receiver having static type, but also when\nreceiver has dynamic type (of \'id\' variety) as well as when\nreceiver is of \'Class\' type vareity. // rdar://7853549\n\nllvm-svn: 184195"},
[k]={
[h]={{Uc,1754,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  // ...\n  if (!Method) {\n    // ...\n    if (!getLangOpts().DebuggerSupport) {\n      // ...\n      if (OMD && !OMD->isInvalidDecl()) {\n        if (getLangOpts().ObjCAutoRefCount)\n        // ...\n        else\n          DiagID = isClassMessage ? diag::warn_class_method_not_found_with_typo : diag::warn_instance_method_not_found_with_typo;"}},
[l]={
["clang/test/SemaObjCXX/objc-extern-c.mm"]={"clang/test/SemaObjCXX/objc-extern-c.mm:29:6: warning: instance method \'-meth2\' not found (return type defaults to \'id\'); did you mean \'-meth1\'? [-Wobjc-method-access]"}
["clang/test/SemaObjCXX/objc-extern-c.mm"]={"clang/test/SemaObjCXX/objc-extern-c.mm:29:6: warning: instance method \'-meth2\' not found (return type defaults to \'id\'); did you mean \'-meth1\'? [-Wobjc-method-access]"}
}
}
},
},
["warn_instance_method_on_class_found"]={
["warn_instance_method_on_class_found"]={
[j]={Ad},
[k]={Nd},
[i]=Ad,
[j]=Nd,
[c]="instance method %0 found instead of class method %1",
[c]="warn_instance_method_on_class_found",
[d]=g,
[d]="instance method %0 found instead of class method %1",
[e]="instance method (.*?) found instead of class method (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]",
[g]="instance method (.*?) found instead of class method (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]",
[a]={"3b9819b4a2f1",1302115208,"Fix lookup for class messages sent to qualified-class","Fix lookup for class messages sent to qualified-class\ntypes such that protocols are seached first. Fixes\n// rdar://9224670\n\nllvm-svn: 129016"},
[b]=m,
[h]={{Sc,2986,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (!Method) {\n    // ...\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    // ...\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        // ...\n        if (!Method) {\n          // ...\n          // warn if instance method found for a Class message.\n          if (Method && !isMethodDeclaredInRootProtocol(*this, Method)) {\n            Diag(SelLoc, diag::warn_instance_method_on_class_found) << Method->getSelector() << Sel;"}},
[f]={"3b9819b4a2f1",1302115208,"Fix lookup for class messages sent to qualified-class","Fix lookup for class messages sent to qualified-class\ntypes such that protocols are seached first. Fixes\n// rdar://9224670\n\nllvm-svn: 129016"},
[k]={
[h]={{Uc,2986,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (!Method) {\n    // ...\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    // ...\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        // ...\n        if (!Method) {\n          // ...\n          // warn if instance method found for a Class message.\n          if (Method && !isMethodDeclaredInRootProtocol(*this, Method)) {\n            Diag(SelLoc, diag::warn_instance_method_on_class_found) << Method->getSelector() << Sel;"}},
[l]={
["clang/test/SemaObjC/class-message-protocol-lookup.m"]={"clang/test/SemaObjC/class-message-protocol-lookup.m:22:35: warning: instance method \'alloc2\' found instead of class method \'alloc2\' [-Wobjc-method-access]","clang/test/SemaObjC/class-message-protocol-lookup.m:31:35: warning: instance method \'alloc2\' found instead of class method \'alloc2\' [-Wobjc-method-access]","clang/test/SemaObjC/class-message-protocol-lookup.m:60:6: warning: instance method \'otherInstanceMethod\' found instead of class method \'otherInstanceMethod\' [-Wobjc-method-access]"}
["clang/test/SemaObjC/class-message-protocol-lookup.m"]={"clang/test/SemaObjC/class-message-protocol-lookup.m:22:35: warning: instance method \'alloc2\' found instead of class method \'alloc2\' [-Wobjc-method-access]","clang/test/SemaObjC/class-message-protocol-lookup.m:31:35: warning: instance method \'alloc2\' found instead of class method \'alloc2\' [-Wobjc-method-access]","clang/test/SemaObjC/class-message-protocol-lookup.m:60:6: warning: instance method \'otherInstanceMethod\' found instead of class method \'otherInstanceMethod\' [-Wobjc-method-access]"}
}
}
},
},
["warn_int_to_pointer_cast"]={
["warn_int_to_pointer_cast"]={
[j]={"int-to-pointer-cast"},
[k]={"int-to-pointer-cast"},
[i]="int-to-pointer-cast",
[j]="int-to-pointer-cast",
[c]="cast to %1 from smaller integer type %0",
[c]="warn_int_to_pointer_cast",
[d]=g,
[d]="cast to %1 from smaller integer type %0",
[e]="cast to (.*?) from smaller integer type (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wint\\-to\\-pointer\\-cast[^\\]]*\\]",
[g]="cast to (.*?) from smaller integer type (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wint\\-to\\-pointer\\-cast[^\\]]*\\]",
[a]={"282ad876bd89",1350413594,"Implement GCC\'s -Wint-to-pointer-cast.","Implement GCC\'s -Wint-to-pointer-cast.\n\nThis implementation doesn\'t warn on anything that GCC doesn\'t warn on with the\nexception of templates specializations (GCC doesn\'t warn, Clang does). The\nspecific skipped cases (boolean, constant expressions, enums) are open for\ndebate/adjustment if anyone wants to demonstrate that GCC is being overly\nconservative here. The only really obvious false positive I found was in the\nClang regression suite\'s MPI test - apparently MPI uses specific flag values in\npointer constants. (eg: #define FOO (void*)~0)\n\nllvm-svn: 166039"},
[b]=m,
[f]={"282ad876bd89",1350413594,"Implement GCC\'s -Wint-to-pointer-cast.","Implement GCC\'s -Wint-to-pointer-cast.\n\nThis implementation doesn\'t warn on anything that GCC doesn\'t warn on with the\nexception of templates specializations (GCC doesn\'t warn, Clang does). The\nspecific skipped cases (boolean, constant expressions, enums) are open for\ndebate/adjustment if anyone wants to demonstrate that GCC is being overly\nconservative here. The only really obvious false positive I found was in the\nClang regression suite\'s MPI test - apparently MPI uses specific flag values in\npointer constants. (eg: #define FOO (void*)~0)\n\nllvm-svn: 166039"},
[h]={{"clang/lib/Sema/SemaCast.cpp",2213,"static void checkIntToPointerCast(bool CStyle, const SourceRange &OpRange, const Expr *SrcExpr, QualType DestType, Sema &Self) {\n  // ...\n  // Not warning on reinterpret_cast, boolean, constant expressions, etc\n  // are not explicit design choices, but consistent with GCC\'s behavior.\n  // Feel free to modify them if you\'ve reason/evidence for an alternative.\n  if (CStyle && SrcType->isIntegralType(Self.Context) && !SrcType->isBooleanType() && !SrcType->isEnumeralType() && !SrcExpr->isIntegerConstantExpr(Self.Context) && Self.Context.getTypeSize(DestType) > Self.Context.getTypeSize(SrcType)) {\n    // ...\n    unsigned Diag = DestType->isVoidPointerType() ? diag::warn_int_to_void_pointer_cast : diag::warn_int_to_pointer_cast;"}},
[h]={{"clang/lib/Sema/SemaCast.cpp",2213,"static void checkIntToPointerCast(bool CStyle, const SourceRange &OpRange, const Expr *SrcExpr, QualType DestType, Sema &Self) {\n  // ...\n  // Not warning on reinterpret_cast, boolean, constant expressions, etc\n  // are not explicit design choices, but consistent with GCC\'s behavior.\n  // Feel free to modify them if you\'ve reason/evidence for an alternative.\n  if (CStyle && SrcType->isIntegralType(Self.Context) && !SrcType->isBooleanType() && !SrcType->isEnumeralType() && !SrcExpr->isIntegerConstantExpr(Self.Context) && Self.Context.getTypeSize(DestType) > Self.Context.getTypeSize(SrcType)) {\n    // ...\n    unsigned Diag = DestType->isVoidPointerType() ? diag::warn_int_to_void_pointer_cast : diag::warn_int_to_pointer_cast;"}},
[k]={
[l]={
["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:60:10: warning: cast to \'CharPtr\' (aka \'char *\') from smaller integer type \'Int\' (aka \'int\') [-Wint-to-pointer-cast]","clang/test/Sema/cast.c:67:10: warning: cast to \'CharPtr\' (aka \'char *\') from smaller integer type \'Int\' (aka \'int\') [-Wint-to-pointer-cast]"}
["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:60:10: warning: cast to \'CharPtr\' (aka \'char *\') from smaller integer type \'Int\' (aka \'int\') [-Wint-to-pointer-cast]","clang/test/Sema/cast.c:67:10: warning: cast to \'CharPtr\' (aka \'char *\') from smaller integer type \'Int\' (aka \'int\') [-Wint-to-pointer-cast]"}
}
}
},
},
["warn_int_to_void_pointer_cast"]={
["warn_int_to_void_pointer_cast"]={
[j]={"int-to-pointer-cast","int-to-void-pointer-cast"},
[k]={"int-to-pointer-cast","int-to-void-pointer-cast"},
[i]="int-to-void-pointer-cast",
[j]="int-to-void-pointer-cast",
[c]="cast to %1 from smaller integer type %0",
[c]="warn_int_to_void_pointer_cast",
[d]=g,
[d]="cast to %1 from smaller integer type %0",
[e]="cast to (.*?) from smaller integer type (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wint\\-to\\-void\\-pointer\\-cast[^\\]]*\\]",
[g]="cast to (.*?) from smaller integer type (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wint\\-to\\-void\\-pointer\\-cast[^\\]]*\\]",
[a]={"e3dc7f74bec5",1369864246,"Split off casts to void* for -Wint-to-pointer-cast to subgroup -Wint-to-void-pointer-cast.","Split off casts to void* for -Wint-to-pointer-cast to subgroup -Wint-to-void-pointer-cast.\n\nThis change is motivated from user feedback that some APIs use\nvoid* as an opaque \"context\" object that may not really be a pointer.\nSuch users want an ability to turn off the warning for casts\nto void* while preserving the warning for other cases.\n\nImplements <rdar://problem/14016721>.\n\nllvm-svn: 182884"},
[b]=m,
[f]={"e3dc7f74bec5",1369864246,"Split off casts to void* for -Wint-to-pointer-cast to subgroup -Wint-to-void-pointer-cast.","Split off casts to void* for -Wint-to-pointer-cast to subgroup -Wint-to-void-pointer-cast.\n\nThis change is motivated from user feedback that some APIs use\nvoid* as an opaque \"context\" object that may not really be a pointer.\nSuch users want an ability to turn off the warning for casts\nto void* while preserving the warning for other cases.\n\nImplements <rdar://problem/14016721>.\n\nllvm-svn: 182884"},
[h]={{"clang/lib/Sema/SemaCast.cpp",2212,"static void checkIntToPointerCast(bool CStyle, const SourceRange &OpRange, const Expr *SrcExpr, QualType DestType, Sema &Self) {\n  // ...\n  // Not warning on reinterpret_cast, boolean, constant expressions, etc\n  // are not explicit design choices, but consistent with GCC\'s behavior.\n  // Feel free to modify them if you\'ve reason/evidence for an alternative.\n  if (CStyle && SrcType->isIntegralType(Self.Context) && !SrcType->isBooleanType() && !SrcType->isEnumeralType() && !SrcExpr->isIntegerConstantExpr(Self.Context) && Self.Context.getTypeSize(DestType) > Self.Context.getTypeSize(SrcType)) {\n    // ...\n    unsigned Diag = DestType->isVoidPointerType() ? diag::warn_int_to_void_pointer_cast : diag::warn_int_to_pointer_cast;"}},
[h]={{"clang/lib/Sema/SemaCast.cpp",2212,"static void checkIntToPointerCast(bool CStyle, const SourceRange &OpRange, const Expr *SrcExpr, QualType DestType, Sema &Self) {\n  // ...\n  // Not warning on reinterpret_cast, boolean, constant expressions, etc\n  // are not explicit design choices, but consistent with GCC\'s behavior.\n  // Feel free to modify them if you\'ve reason/evidence for an alternative.\n  if (CStyle && SrcType->isIntegralType(Self.Context) && !SrcType->isBooleanType() && !SrcType->isEnumeralType() && !SrcExpr->isIntegerConstantExpr(Self.Context) && Self.Context.getTypeSize(DestType) > Self.Context.getTypeSize(SrcType)) {\n    // ...\n    unsigned Diag = DestType->isVoidPointerType() ? diag::warn_int_to_void_pointer_cast : diag::warn_int_to_pointer_cast;"}},
[k]={
[l]={
["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:59:10: warning: cast to \'VoidPtr\' (aka \'void *\') from smaller integer type \'Int\' (aka \'int\') [-Wint-to-void-pointer-cast]"}
["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:59:10: warning: cast to \'VoidPtr\' (aka \'void *\') from smaller integer type \'Int\' (aka \'int\') [-Wint-to-void-pointer-cast]"}
}
}
},
},
["warn_integer_constant_overflow"]={
["warn_integer_constant_overflow"]={
[j]={"integer-overflow"},
[k]={"integer-overflow"},
[i]="integer-overflow",
[j]="integer-overflow",
[c]="overflow in expression; result is %0 with type %1",
[c]="warn_integer_constant_overflow",
[d]=g,
[d]="overflow in expression; result is %0 with type %1",
[e]="overflow in expression; result is (.*?) with type (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winteger\\-overflow[^\\]]*\\]",
[g]="overflow in expression; result is (.*?) with type (.*?)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Winteger\\-overflow[^\\]]*\\]",
[a]={"e735ff93e828",1359065505,"Patch to check for integer overflow. It has been","Patch to check for integer overflow. It has been\ncommented on and approved by Richard Smith.\n\nllvm-svn: 173377"},
[b]=r,
[h]={{gd,2774,"/// Perform the given integer operation, which is known to need at most BitWidth\n/// bits, and check for overflow in the original type (if that type was not an\n/// unsigned type).\ntemplate <typename Operation> static bool CheckedIntArithmetic(EvalInfo &Info, const Expr *E, const APSInt &LHS, const APSInt &RHS, unsigned BitWidth, Operation Op, APSInt &Result) {\n  // ...\n  if (Result.extend(BitWidth) != Value) {\n    if (Info.checkingForUndefinedBehavior())\n      Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_integer_constant_overflow) << toString(Result, 10) << E->getType();"},{gd,13597,"bool IntExprEvaluator::VisitUnaryOperator(const UnaryOperator *E) {\n  // ...\n  case UO_Minus: {\n    // ...\n    if (Value.isSigned() && Value.isMinSignedValue() && E->canOverflow()) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_integer_constant_overflow) << toString(Value, 10) << E->getType();"}},
[f]={"e735ff93e828",1359065505,"Patch to check for integer overflow. It has been","Patch to check for integer overflow. It has been\ncommented on and approved by Richard Smith.\n\nllvm-svn: 173377"},
[k]={
[h]={{rd,2774,"/// Perform the given integer operation, which is known to need at most BitWidth\n/// bits, and check for overflow in the original type (if that type was not an\n/// unsigned type).\ntemplate <typename Operation> static bool CheckedIntArithmetic(EvalInfo &Info, const Expr *E, const APSInt &LHS, const APSInt &RHS, unsigned BitWidth, Operation Op, APSInt &Result) {\n  // ...\n  if (Result.extend(BitWidth) != Value) {\n    if (Info.checkingForUndefinedBehavior())\n      Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_integer_constant_overflow) << toString(Result, 10) << E->getType();"},{rd,13597,"bool IntExprEvaluator::VisitUnaryOperator(const UnaryOperator *E) {\n  // ...\n  case UO_Minus: {\n    // ...\n    if (Value.isSigned() && Value.isMinSignedValue() && E->canOverflow()) {\n      if (Info.checkingForUndefinedBehavior())\n        Info.Ctx.getDiagnostics().Report(E->getExprLoc(), diag::warn_integer_constant_overflow) << toString(Value, 10) << E->getType();"}},
[l]={
["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:69:31: warning: overflow in expression; result is -443003904 with type \'int\' [-Winteger-overflow]"}
["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:69:31: warning: overflow in expression; result is -443003904 with type \'int\' [-Winteger-overflow]"}
}
}
},
},
["warn_integer_constants_in_conditional_always_true"]={
["warn_integer_constants_in_conditional_always_true"]={
[j]={B,H,N,"tautological-compare","tautological-constant-compare"},
[k]={K,O,V,"tautological-compare","tautological-constant-compare"},
[i]="tautological-constant-compare",
[j]="tautological-constant-compare",
[c]={{nil,z,"converting the result of \'?:\' with integer constants to a boolean always evaluates to \'true\'"}},
[c]={{nil,q,"warn_integer_constants_in_conditional_always_true"}},
[d]=g,
[d]={{nil,q,"converting the result of \'?:\' with integer constants to a boolean always evaluates to \'true\'"}},
[e]="converting the result of \'\\?\\:\' with integer constants to a boolean always evaluates to \'true\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wtautological\\-constant\\-compare[^\\]]*\\]",
[g]="converting the result of \'\\?\\:\' with integer constants to a boolean always evaluates to \'true\'",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wtautological\\-constant\\-compare[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,m}},
[h]={{r,14649,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  // ...\n  if (const auto *CO = dyn_cast<ConditionalOperator>(E)) {\n    // ...\n    if (LHS->getValue() != 0 && RHS->getValue() != 0)\n      S.Diag(ExprLoc, diag::warn_integer_constants_in_conditional_always_true);"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{t,14649,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  // ...\n  if (const auto *CO = dyn_cast<ConditionalOperator>(E)) {\n    // ...\n    if (LHS->getValue() != 0 && RHS->getValue() != 0)\n      S.Diag(ExprLoc, diag::warn_integer_constants_in_conditional_always_true);"}},
[l]={
["clang/test/Sema/warn-integer-constants-in-ternary.c"]={"clang/test/Sema/warn-integer-constants-in-ternary.c:20:7: warning: converting the result of \'?:\' with integer constants to a boolean always evaluates to \'true\' [-Wtautological-constant-compare]","clang/test/Sema/warn-integer-constants-in-ternary.c:22:7: warning: converting the result of \'?:\' with integer constants to a boolean always evaluates to \'true\' [-Wtautological-constant-compare]","clang/test/Sema/warn-integer-constants-in-ternary.c:24:7: warning: converting the result of \'?:\' with integer constants to a boolean always evaluates to \'true\' [-Wtautological-constant-compare]","clang/test/Sema/warn-integer-constants-in-ternary.c:30:12: warning: converting the result of \'?:\' with integer constants to a boolean always evaluates to \'true\' [-Wtautological-constant-compare]","clang/test/Sema/warn-integer-constants-in-ternary.c:31:12: warning: converting the result of \'?:\' with integer constants to a boolean always evaluates to \'true\' [-Wtautological-constant-compare]"}
["clang/test/Sema/warn-integer-constants-in-ternary.c"]={"clang/test/Sema/warn-integer-constants-in-ternary.c:20:7: warning: converting the result of \'?:\' with integer constants to a boolean always evaluates to \'true\' [-Wtautological-constant-compare]","clang/test/Sema/warn-integer-constants-in-ternary.c:22:7: warning: converting the result of \'?:\' with integer constants to a boolean always evaluates to \'true\' [-Wtautological-constant-compare]","clang/test/Sema/warn-integer-constants-in-ternary.c:24:7: warning: converting the result of \'?:\' with integer constants to a boolean always evaluates to \'true\' [-Wtautological-constant-compare]","clang/test/Sema/warn-integer-constants-in-ternary.c:30:12: warning: converting the result of \'?:\' with integer constants to a boolean always evaluates to \'true\' [-Wtautological-constant-compare]","clang/test/Sema/warn-integer-constants-in-ternary.c:31:12: warning: converting the result of \'?:\' with integer constants to a boolean always evaluates to \'true\' [-Wtautological-constant-compare]"}
}
}
},
},
["warn_internal_linkage_local_storage"]={
["warn_internal_linkage_local_storage"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]="\'internal_linkage\' attribute on a non-static local variable is ignored",
[c]="warn_internal_linkage_local_storage",
[d]=g,
[d]="\'internal_linkage\' attribute on a non-static local variable is ignored",
[e]="\'internal_linkage\' attribute on a non\\-static local variable is ignored",
[e]=i,
[f]=vb,
[g]="\'internal_linkage\' attribute on a non\\-static local variable is ignored",
[b]=l,
[a]=Db,
[a]={"ae6ebd3af525",1447190924,"Implement __attribute__((internal_linkage)).","Implement __attribute__((internal_linkage)).\n\nThe attrubite is applicable to functions and variables and changes\nthe linkage of the subject to internal.\n\nThis is the same functionality as C-style \"static\", but applicable to\nclass methods; and the same as anonymouns namespaces, but can apply\nto individual methods of a class.\n\nFollowing the proposal in\nhttp://lists.llvm.org/pipermail/cfe-dev/2015-October/045580.html\n\nllvm-svn: 252648"},
[b]=m,
[h]={{E,4912,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const ParsedAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // ...\n    // Attribute does not apply to non-static local variables.\n    if (VD->hasLocalStorage()) {\n      Diag(VD->getLocation(), diag::warn_internal_linkage_local_storage);"},{E,4933,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const InternalLinkageAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // ...\n    // Attribute does not apply to non-static local variables.\n    if (VD->hasLocalStorage()) {\n      Diag(VD->getLocation(), diag::warn_internal_linkage_local_storage);"}},
[f]={"ae6ebd3af525",1447190924,"Implement __attribute__((internal_linkage)).","Implement __attribute__((internal_linkage)).\n\nThe attrubite is applicable to functions and variables and changes\nthe linkage of the subject to internal.\n\nThis is the same functionality as C-style \"static\", but applicable to\nclass methods; and the same as anonymouns namespaces, but can apply\nto individual methods of a class.\n\nFollowing the proposal in\nhttp://lists.llvm.org/pipermail/cfe-dev/2015-October/045580.html\n\nllvm-svn: 252648"},
[k]={
[h]={{N,4912,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const ParsedAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // ...\n    // Attribute does not apply to non-static local variables.\n    if (VD->hasLocalStorage()) {\n      Diag(VD->getLocation(), diag::warn_internal_linkage_local_storage);"},{N,4933,"InternalLinkageAttr *Sema::mergeInternalLinkageAttr(Decl *D, const InternalLinkageAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    // ...\n    // Attribute does not apply to non-static local variables.\n    if (VD->hasLocalStorage()) {\n      Diag(VD->getLocation(), diag::warn_internal_linkage_local_storage);"}},
[l]={
["clang/test/SemaCXX/internal_linkage.cpp"]={"clang/test/SemaCXX/internal_linkage.cpp:45:7: warning: \'internal_linkage\' attribute on a non-static local variable is ignored [-Wignored-attributes]"}
["clang/test/SemaCXX/internal_linkage.cpp"]={"clang/test/SemaCXX/internal_linkage.cpp:45:7: warning: \'internal_linkage\' attribute on a non-static local variable is ignored [-Wignored-attributes]"}
}
}
},
},
["warn_interrupt_attribute_invalid"]={
["warn_interrupt_attribute_invalid"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]={{nil,I,"%select{MIPS|MSP430|RISC-V}0 \'interrupt\' attribute only applies to functions that have %select{no parameters|a \'void\' return type}1"}},
[c]={{nil,x,"warn_interrupt_attribute_invalid"}},
[d]=g,
[d]={{nil,x,"%select{MIPS|MSP430|RISC-V}0 \'interrupt\' attribute only applies to functions that have %select{no parameters|a \'void\' return type}1"}},
[e]="(?:MIPS|MSP430|RISC\\-V) \'interrupt\' attribute only applies to functions that have (?:no parameters|a \'void\' return type)",
[e]=i,
[f]=vb,
[g]="(?:MIPS|MSP430|RISC\\-V) \'interrupt\' attribute only applies to functions that have (?:no parameters|a \'void\' return type)",
[b]=l,
[a]=Db,
[a]={"b0d74bfe81b6",1548266537,"Merge similar target diagnostics for interrupt attribute into one; NFC","Merge similar target diagnostics for interrupt attribute into one; NFC\n\nPatch by Kristina Bessonova!\n\nllvm-svn: 351969"},
[b]={{nil,x,m}},
[h]={{E,7386,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (hasFunctionProto(D) && getFunctionOrMethodNumParams(D) != 0) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MSP430*/ 1 << 0;"},{E,7392,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MSP430*/ 1 << 1;"},{E,7459,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (hasFunctionProto(D) && getFunctionOrMethodNumParams(D) != 0) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MIPS*/ 0 << 0;"},{E,7465,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MIPS*/ 0 << 1;"},{E,7785,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (hasFunctionProto(D) && getFunctionOrMethodNumParams(D) != 0) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*RISC-V*/ 2 << 0;"},{E,7791,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*RISC-V*/ 2 << 1;"}},
[f]={"b0d74bfe81b6",1548266537,"Merge similar target diagnostics for interrupt attribute into one; NFC","Merge similar target diagnostics for interrupt attribute into one; NFC\n\nPatch by Kristina Bessonova!\n\nllvm-svn: 351969"},
[k]={
[h]={{N,7386,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (hasFunctionProto(D) && getFunctionOrMethodNumParams(D) != 0) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MSP430*/ 1 << 0;"},{N,7392,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MSP430*/ 1 << 1;"},{N,7459,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (hasFunctionProto(D) && getFunctionOrMethodNumParams(D) != 0) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MIPS*/ 0 << 0;"},{N,7465,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*MIPS*/ 0 << 1;"},{N,7785,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (hasFunctionProto(D) && getFunctionOrMethodNumParams(D) != 0) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*RISC-V*/ 2 << 0;"},{N,7791,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(D->getLocation(), diag::warn_interrupt_attribute_invalid) << /*RISC-V*/ 2 << 1;"}},
[l]={
["clang/test/Sema/mips-interrupt-attr.c"]={"clang/test/Sema/mips-interrupt-attr.c:20:32: warning: MIPS \'interrupt\' attribute only applies to functions that have a \'void\' return type [-Wignored-attributes]","clang/test/Sema/mips-interrupt-attr.c:21:35: warning: MIPS \'interrupt\' attribute only applies to functions that have no parameters [-Wignored-attributes]"}
["clang/test/Sema/mips-interrupt-attr.c"]={"clang/test/Sema/mips-interrupt-attr.c:20:32: warning: MIPS \'interrupt\' attribute only applies to functions that have a \'void\' return type [-Wignored-attributes]","clang/test/Sema/mips-interrupt-attr.c:21:35: warning: MIPS \'interrupt\' attribute only applies to functions that have no parameters [-Wignored-attributes]"}
}
}
},
},
["warn_invalid_asm_cast_lvalue"]={
["warn_invalid_asm_cast_lvalue"]={
[c]={{nil,Sb,"invalid use of a cast in an inline asm context requiring an lvalue: accepted due to -fheinous-gnu-extensions, but clang may remove support for this in the future"},{"11.1",nil,"invalid use of a cast in an inline asm context requiring an l-value: accepted due to -fheinous-gnu-extensions, but clang may remove support for this in the future"}},
[c]="warn_invalid_asm_cast_lvalue",
[d]=g,
[d]={{nil,db,"invalid use of a cast in an inline asm context requiring an lvalue: accepted due to -fheinous-gnu-extensions, but clang may remove support for this in the future"},{"11.1",nil,"invalid use of a cast in an inline asm context requiring an l-value: accepted due to -fheinous-gnu-extensions, but clang may remove support for this in the future"}},
[e]="invalid use of a cast in an inline asm context requiring an lvalue\\: accepted due to \\-fheinous\\-gnu\\-extensions, but clang may remove support for this in the future",
[e]=i,
[f]=Gb,
[g]="invalid use of a cast in an inline asm context requiring an lvalue\\: accepted due to \\-fheinous\\-gnu\\-extensions, but clang may remove support for this in the future",
[a]=Ib,
[b]="Inline Assembly Issue",
[b]="Inline Assembly Issue",
[a]={Ub,1237025389,Xb,Wb},
[f]={Yb,1237025389,Zb,ac},
[h]={{"clang/lib/Sema/SemaStmtAsm.cpp",79,"/// Emit a warning about usage of \"noop\"-like casts for lvalues (GNU extension)\n/// and fix the argument with removing LValueToRValue cast from the expression.\nstatic void emitAndFixInvalidAsmCastLValue(const Expr *LVal, Expr *BadArgument, Sema &S) {\n  if (!S.getLangOpts().HeinousExtensions) {\n  // ...\n  } else {\n    S.Diag(LVal->getBeginLoc(), diag::warn_invalid_asm_cast_lvalue) << BadArgument->getSourceRange();"}},
[h]={{"clang/lib/Sema/SemaStmtAsm.cpp",79,"/// Emit a warning about usage of \"noop\"-like casts for lvalues (GNU extension)\n/// and fix the argument with removing LValueToRValue cast from the expression.\nstatic void emitAndFixInvalidAsmCastLValue(const Expr *LVal, Expr *BadArgument, Sema &S) {\n  if (!S.getLangOpts().HeinousExtensions) {\n  // ...\n  } else {\n    S.Diag(LVal->getBeginLoc(), diag::warn_invalid_asm_cast_lvalue) << BadArgument->getSourceRange();"}},
[k]={
[l]={
["clang/test/Sema/heinous-extensions-on.c"]={"clang/test/Sema/heinous-extensions-on.c:6:27: warning: invalid use of a cast in an inline asm context requiring an lvalue: accepted due to -fheinous-gnu-extensions, but clang may remove support for this in the future","clang/test/Sema/heinous-extensions-on.c:8:30: warning: invalid use of a cast in an inline asm context requiring an lvalue: accepted due to -fheinous-gnu-extensions, but clang may remove support for this in the future"}
["clang/test/Sema/heinous-extensions-on.c"]={"clang/test/Sema/heinous-extensions-on.c:6:27: warning: invalid use of a cast in an inline asm context requiring an lvalue: accepted due to -fheinous-gnu-extensions, but clang may remove support for this in the future","clang/test/Sema/heinous-extensions-on.c:8:30: warning: invalid use of a cast in an inline asm context requiring an lvalue: accepted due to -fheinous-gnu-extensions, but clang may remove support for this in the future"}
}
}
},
},
["warn_invalid_initializer_from_system_header"]={
["warn_invalid_initializer_from_system_header"]={
[j]={"invalid-initializer-from-system-header"},
[k]={"invalid-initializer-from-system-header"},
[i]="invalid-initializer-from-system-header",
[j]="invalid-initializer-from-system-header",
[c]={{nil,Sb,"invalid constructor from class in system header, should not be explicit"},{"11.1",nil,"invalid constructor form class in system header, should not be explicit"}},
[c]="warn_invalid_initializer_from_system_header",
[d]=g,
[d]={{nil,db,"invalid constructor from class in system header, should not be explicit"},{"11.1",nil,"invalid constructor form class in system header, should not be explicit"}},
[e]="invalid constructor from class in system header, should not be explicit",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winvalid\\-initializer\\-from\\-system\\-header[^\\]]*\\]",
[g]="invalid constructor from class in system header, should not be explicit",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-initializer\\-from\\-system\\-header[^\\]]*\\]",
[a]={"bcb70eee1a38",1404345069,"Enable clang to continue to parse libstdc++4.6 and stlport after r210091.","Enable clang to continue to parse libstdc++4.6 and stlport after r210091.\n\nr210091 made initialization checking more strict in c++11 mode. LWG2193 is\nabout changing standard libraries to still be valid under these new rules,\nbut older libstdc++ (e.g. libstdc++4.6 in -D_GLIBCXX_DEBUG=1 mode, or stlport)\ndo not implement that yet.  So fall back to the C++03 semantics for container\nclasses in system headers below the std namespace.\n\nllvm-svn: 212238"},
[b]=m,
[h]={{fb,605,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n  // ...\n  // libstdc++4.6 marks the vector default constructor as explicit in\n  // _GLIBCXX_DEBUG mode, so recover using the C++03 logic in that case.\n  // stlport does so too. Look for std::__debug for libstdc++, and for\n  // std:: for stlport.  This is effectively a compiler-side implementation of\n  // LWG2193.\n  if (!InitSeq && EmptyInitList && InitSeq.getFailureKind() == InitializationSequence::FK_ExplicitConstructor) {\n    // ...\n    if (CtorDecl->getMinRequiredArguments() == 0 && CtorDecl->isExplicit() && R->getDeclName() && SemaRef.SourceMgr.isInSystemHeader(CtorDecl->getLocation())) {\n      // ...\n      if (IsInStd && llvm::StringSwitch<bool>(R->getName()).Cases(\"basic_string\", \"deque\", \"forward_list\", true).Cases(\"list\", \"map\", \"multimap\", \"multiset\", true).Cases(\"priority_queue\", \"queue\", \"set\", \"stack\", true).Cases(\"unordered_map\", \"unordered_set\", \"vector\", true).Default(false)) {\n        // ...\n        // Emit a warning for this.  System header warnings aren\'t shown\n        // by default, but people working on system headers should see it.\n        if (!VerifyOnly) {\n          SemaRef.Diag(CtorDecl->getLocation(), diag::warn_invalid_initializer_from_system_header);"}}
[f]={"bcb70eee1a38",1404345069,"Enable clang to continue to parse libstdc++4.6 and stlport after r210091.","Enable clang to continue to parse libstdc++4.6 and stlport after r210091.\n\nr210091 made initialization checking more strict in c++11 mode. LWG2193 is\nabout changing standard libraries to still be valid under these new rules,\nbut older libstdc++ (e.g. libstdc++4.6 in -D_GLIBCXX_DEBUG=1 mode, or stlport)\ndo not implement that yet.  So fall back to the C++03 semantics for container\nclasses in system headers below the std namespace.\n\nllvm-svn: 212238"},
[h]={{mb,605,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n  // ...\n  // libstdc++4.6 marks the vector default constructor as explicit in\n  // _GLIBCXX_DEBUG mode, so recover using the C++03 logic in that case.\n  // stlport does so too. Look for std::__debug for libstdc++, and for\n  // std:: for stlport.  This is effectively a compiler-side implementation of\n  // LWG2193.\n  if (!InitSeq && EmptyInitList && InitSeq.getFailureKind() == InitializationSequence::FK_ExplicitConstructor) {\n    // ...\n    if (CtorDecl->getMinRequiredArguments() == 0 && CtorDecl->isExplicit() && R->getDeclName() && SemaRef.SourceMgr.isInSystemHeader(CtorDecl->getLocation())) {\n      // ...\n      if (IsInStd && llvm::StringSwitch<bool>(R->getName()).Cases(\"basic_string\", \"deque\", \"forward_list\", true).Cases(\"list\", \"map\", \"multimap\", \"multiset\", true).Cases(\"priority_queue\", \"queue\", \"set\", \"stack\", true).Cases(\"unordered_map\", \"unordered_set\", \"vector\", true).Default(false)) {\n        // ...\n        // Emit a warning for this.  System header warnings aren\'t shown\n        // by default, but people working on system headers should see it.\n        if (!VerifyOnly) {\n          SemaRef.Diag(CtorDecl->getLocation(), diag::warn_invalid_initializer_from_system_header);"}}
},
},
["warn_invalid_ios_deployment_target"]={
["warn_invalid_ios_deployment_target"]={
[j]={"invalid-ios-deployment-target"},
[k]={"invalid-ios-deployment-target"},
[i]="invalid-ios-deployment-target",
[j]="invalid-ios-deployment-target",
[c]={{nil,nd,"invalid iOS deployment version \'%0\', iOS 10 is the maximum deployment target for 32-bit targets"}},
[c]={{nil,Ab,"warn_invalid_ios_deployment_target"}},
[d]="(?:error|warning|fatal error)\\: ",
[d]={{nil,Ab,"invalid iOS deployment version \'%0\', iOS 10 is the maximum deployment target for 32-bit targets"}},
[e]="invalid iOS deployment version \'(.*?)\', iOS 10 is the maximum deployment target for 32\\-bit targets",
[e]="(?:error|warning|fatal error)\\: ",
[f]=" \\[[^\\]]*\\-Winvalid\\-ios\\-deployment\\-target[^\\]]*\\]",
[g]="invalid iOS deployment version \'(.*?)\', iOS 10 is the maximum deployment target for 32\\-bit targets",
[b]=p,
[a]=" \\[[^\\]]*\\-Winvalid\\-ios\\-deployment\\-target[^\\]]*\\]",
[a]={"fb82a59a8cc2",1501528600,"[Driver] Allow users to silence the warning that is issued when the","[Driver] Allow users to silence the warning that is issued when the\ndeployment target is earlier than iOS 11 and the target is 32-bit.\n\nThis is a follow-up to r306922.\n\nrdar://problem/32230613\n\nllvm-svn: 309607"},
[b]={{nil,Ab,r}},
[h]={{od,2291,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  // Set the tool chain target information.\n  if (Platform == MacOS) {\n  // ...\n  } else if (Platform == IPhoneOS) {\n    // ...\n    // For 32-bit targets, the deployment target for iOS has to be earlier than\n    // iOS 11.\n    if (getTriple().isArch32Bit() && Major >= 11) {\n      // If the deployment target is explicitly specified, print a diagnostic.\n      if (OSTarget->isExplicitlySpecified()) {\n        if (OSTarget->getEnvironment() == MacCatalyst)\n        // ...\n        else\n          getDriver().Diag(diag::warn_invalid_ios_deployment_target) << OSTarget->getAsString(Args, Opts);"}}
[f]={"fb82a59a8cc2",1501528600,"[Driver] Allow users to silence the warning that is issued when the","[Driver] Allow users to silence the warning that is issued when the\ndeployment target is earlier than iOS 11 and the target is 32-bit.\n\nThis is a follow-up to r306922.\n\nrdar://problem/32230613\n\nllvm-svn: 309607"},
[h]={{qd,2291,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  // Set the tool chain target information.\n  if (Platform == MacOS) {\n  // ...\n  } else if (Platform == IPhoneOS) {\n    // ...\n    // For 32-bit targets, the deployment target for iOS has to be earlier than\n    // iOS 11.\n    if (getTriple().isArch32Bit() && Major >= 11) {\n      // If the deployment target is explicitly specified, print a diagnostic.\n      if (OSTarget->isExplicitlySpecified()) {\n        if (OSTarget->getEnvironment() == MacCatalyst)\n        // ...\n        else\n          getDriver().Diag(diag::warn_invalid_ios_deployment_target) << OSTarget->getAsString(Args, Opts);"}}
},
},
["warn_invalid_utf8_in_comment"]={
["warn_invalid_utf8_in_comment"]={
[j]={"invalid-utf8",id},
[k]={"invalid-utf8",hd},
[i]="invalid-utf8",
[j]="invalid-utf8",
[c]={{nil,kb,"invalid UTF-8 in comment"}},
[c]={{nil,C,"warn_invalid_utf8_in_comment"}},
[d]=g,
[d]={{nil,C,"invalid UTF-8 in comment"}},
[e]="invalid UTF\\-8 in comment",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Winvalid\\-utf8[^\\]]*\\]",
[g]="invalid UTF\\-8 in comment",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-utf8[^\\]]*\\]",
[a]={Eb,1625925174,Fb,Hb},
[b]={{nil,C,T}},
[h]={{Ab,2479,"/// We have just read the // characters from input.  Skip until we find the\n/// newline character that terminates the comment.  Then update BufferPtr and\n/// return.\n///\n/// If we\'re in KeepCommentMode or any CommentHandler has inserted\n/// some tokens, this will store the first token and return true.\nbool Lexer::SkipLineComment(Token &Result, const char *CurPtr, bool &TokAtPhysicalStartOfLine) {\n  // ...\n  while (true) {\n    // ...\n    if (!isASCII(C)) {\n      // ...\n      if (Length == 0) {\n        if (!UnicodeDecodingAlreadyDiagnosed && !isLexingRawMode())\n          Diag(CurPtr, diag::warn_invalid_utf8_in_comment);"},{Ab,2850,"#endif\n    // ...\n    MultiByteUTF8:\n      // ...\n      if (Length == 0) {\n        if (!UnicodeDecodingAlreadyDiagnosed && !isLexingRawMode())\n          Diag(CurPtr - 1, diag::warn_invalid_utf8_in_comment);"}},
[f]={Lb,1625925174,Kb,Jb},
[k]={
[h]={{Fb,2479,"/// We have just read the // characters from input.  Skip until we find the\n/// newline character that terminates the comment.  Then update BufferPtr and\n/// return.\n///\n/// If we\'re in KeepCommentMode or any CommentHandler has inserted\n/// some tokens, this will store the first token and return true.\nbool Lexer::SkipLineComment(Token &Result, const char *CurPtr, bool &TokAtPhysicalStartOfLine) {\n  // ...\n  while (true) {\n    // ...\n    if (!isASCII(C)) {\n      // ...\n      if (Length == 0) {\n        if (!UnicodeDecodingAlreadyDiagnosed && !isLexingRawMode())\n          Diag(CurPtr, diag::warn_invalid_utf8_in_comment);"},{Fb,2850,"#endif\n    // ...\n    MultiByteUTF8:\n      // ...\n      if (Length == 0) {\n        if (!UnicodeDecodingAlreadyDiagnosed && !isLexingRawMode())\n          Diag(CurPtr - 1, diag::warn_invalid_utf8_in_comment);"}},
[l]={
["clang/test/Lexer/comment-invalid-utf8.c"]={"clang/test/Lexer/comment-invalid-utf8.c:8:3: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:11:4: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:11:6: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:11:15: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:11:17: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:11:19: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:11:21: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:14:3: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:17:3: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:17:5: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:17:14: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:17:16: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:17:18: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:17:20: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:21:1: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:26:4: warning: invalid UTF-8 in comment [-Winvalid-utf8]"}
["clang/test/Lexer/comment-invalid-utf8.c"]={"clang/test/Lexer/comment-invalid-utf8.c:8:3: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:11:4: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:11:6: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:11:15: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:11:17: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:11:19: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:11:21: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:14:3: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:17:3: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:17:5: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:17:14: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:17:16: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:17:18: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:17:20: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:21:1: warning: invalid UTF-8 in comment [-Winvalid-utf8]","clang/test/Lexer/comment-invalid-utf8.c:26:4: warning: invalid UTF-8 in comment [-Winvalid-utf8]"}
}
}
},
},
["warn_is_constant_evaluated_always_true_constexpr"]={
["warn_is_constant_evaluated_always_true_constexpr"]={
[j]={"constant-evaluated"},
[k]={"constant-evaluated"},
[i]="constant-evaluated",
[j]="constant-evaluated",
[c]={{nil,z,"\'%0\' will always evaluate to \'true\' in a manifestly constant-evaluated expression"}},
[c]={{nil,q,"warn_is_constant_evaluated_always_true_constexpr"}},
[d]=g,
[d]={{nil,q,"\'%0\' will always evaluate to \'true\' in a manifestly constant-evaluated expression"}},
[e]="\'(.*?)\' will always evaluate to \'true\' in a manifestly constant\\-evaluated expression",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wconstant\\-evaluated[^\\]]*\\]",
[g]="\'(.*?)\' will always evaluate to \'true\' in a manifestly constant\\-evaluated expression",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wconstant\\-evaluated[^\\]]*\\]",
[a]={"b06305e44949",1572372408,"[Diagnostics] Warn for std::is_constant_evaluated in constexpr mode","[Diagnostics] Warn for std::is_constant_evaluated in constexpr mode\n\nSummary:\nconstexpr int fn1() {\n  if constexpr (std::is_constant_evaluated()) // condition is always true!\n    return 0;\n  else\n    return 1;\n}\n\nconstexpr int fn2() {\n  if (std::is_constant_evaluated())\n    return 0;\n  else\n    return 1;\n}\n\nSolves PR42977\n\nReviewers: rsmith, aaron.ballman\n\nReviewed By: rsmith\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D69518"},
[b]={{nil,q,r}},
[h]={{gd,12131,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  // ...\n  case Builtin::BI__builtin_is_constant_evaluated: {\n    // ...\n    if (Info.InConstantContext && !Info.CheckingPotentialConstantExpression && (Info.CallStackDepth == 1 || (Info.CallStackDepth == 2 && Callee->isInStdNamespace() && Callee->getIdentifier() && Callee->getIdentifier()->isStr(\"is_constant_evaluated\")))) {\n      // FIXME: Find a better way to avoid duplicated diagnostics.\n      if (Info.EvalStatus.Diag)\n        Info.report((Info.CallStackDepth == 1) ? E->getExprLoc() : Info.CurrentCall->CallLoc, diag::warn_is_constant_evaluated_always_true_constexpr) << (Info.CallStackDepth == 1 ? \"__builtin_is_constant_evaluated\" : \"std::is_constant_evaluated\");"}},
[f]={"b06305e44949",1572372408,"[Diagnostics] Warn for std::is_constant_evaluated in constexpr mode","[Diagnostics] Warn for std::is_constant_evaluated in constexpr mode\n\nSummary:\nconstexpr int fn1() {\n  if constexpr (std::is_constant_evaluated()) // condition is always true!\n    return 0;\n  else\n    return 1;\n}\n\nconstexpr int fn2() {\n  if (std::is_constant_evaluated())\n    return 0;\n  else\n    return 1;\n}\n\nSolves PR42977\n\nReviewers: rsmith, aaron.ballman\n\nReviewed By: rsmith\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D69518"},
[k]={
[h]={{rd,12131,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  // ...\n  case Builtin::BI__builtin_is_constant_evaluated: {\n    // ...\n    if (Info.InConstantContext && !Info.CheckingPotentialConstantExpression && (Info.CallStackDepth == 1 || (Info.CallStackDepth == 2 && Callee->isInStdNamespace() && Callee->getIdentifier() && Callee->getIdentifier()->isStr(\"is_constant_evaluated\")))) {\n      // FIXME: Find a better way to avoid duplicated diagnostics.\n      if (Info.EvalStatus.Diag)\n        Info.report((Info.CallStackDepth == 1) ? E->getExprLoc() : Info.CurrentCall->CallLoc, diag::warn_is_constant_evaluated_always_true_constexpr) << (Info.CallStackDepth == 1 ? \"__builtin_is_constant_evaluated\" : \"std::is_constant_evaluated\");"}},
[l]={
["clang/test/SemaCXX/warn-constant-evaluated-constexpr.cpp"]={"clang/test/SemaCXX/warn-constant-evaluated-constexpr.cpp:10:17: warning: \'std::is_constant_evaluated\' will always evaluate to \'true\' in a manifestly constant-evaluated expression [-Wconstant-evaluated]","clang/test/SemaCXX/warn-constant-evaluated-constexpr.cpp:17:18: warning: \'std::is_constant_evaluated\' will always evaluate to \'true\' in a manifestly constant-evaluated expression [-Wconstant-evaluated]","clang/test/SemaCXX/warn-constant-evaluated-constexpr.cpp:24:17: warning: \'std::is_constant_evaluated\' will always evaluate to \'true\' in a manifestly constant-evaluated expression [-Wconstant-evaluated]","clang/test/SemaCXX/warn-constant-evaluated-constexpr.cpp:31:17: warning: \'__builtin_is_constant_evaluated\' will always evaluate to \'true\' in a manifestly constant-evaluated expression [-Wconstant-evaluated]","clang/test/SemaCXX/warn-constant-evaluated-constexpr.cpp:38:17: warning: \'__builtin_is_constant_evaluated\' will always evaluate to \'true\' in a manifestly constant-evaluated expression [-Wconstant-evaluated]"}
["clang/test/SemaCXX/warn-constant-evaluated-constexpr.cpp"]={"clang/test/SemaCXX/warn-constant-evaluated-constexpr.cpp:10:17: warning: \'std::is_constant_evaluated\' will always evaluate to \'true\' in a manifestly constant-evaluated expression [-Wconstant-evaluated]","clang/test/SemaCXX/warn-constant-evaluated-constexpr.cpp:17:18: warning: \'std::is_constant_evaluated\' will always evaluate to \'true\' in a manifestly constant-evaluated expression [-Wconstant-evaluated]","clang/test/SemaCXX/warn-constant-evaluated-constexpr.cpp:24:17: warning: \'std::is_constant_evaluated\' will always evaluate to \'true\' in a manifestly constant-evaluated expression [-Wconstant-evaluated]","clang/test/SemaCXX/warn-constant-evaluated-constexpr.cpp:31:17: warning: \'__builtin_is_constant_evaluated\' will always evaluate to \'true\' in a manifestly constant-evaluated expression [-Wconstant-evaluated]","clang/test/SemaCXX/warn-constant-evaluated-constexpr.cpp:38:17: warning: \'__builtin_is_constant_evaluated\' will always evaluate to \'true\' in a manifestly constant-evaluated expression [-Wconstant-evaluated]"}
}
}
},
},
["warn_ivar_use_hidden"]={
["warn_ivar_use_hidden"]={
[j]={"shadow",Gd,"shadow-ivar"},
[k]={"shadow","shadow-all","shadow-ivar"},
[i]="shadow-ivar",
[j]="shadow-ivar",
[c]="local declaration of %0 hides instance variable",
[c]="warn_ivar_use_hidden",
[d]=g,
[d]="local declaration of %0 hides instance variable",
[e]="local declaration of (.*?) hides instance variable",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wshadow\\-ivar[^\\]]*\\]",
[g]="local declaration of (.*?) hides instance variable",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wshadow\\-ivar[^\\]]*\\]",
[a]={Ub,1237025389,Xb,Wb},
[b]=m,
[h]={{K,2983,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n  // ...\n  if (LookForIvars) {\n  // ...\n  } else if (CurMethod->isInstanceMethod()) {\n    // We should warn if a local variable hides an ivar.\n    if (ObjCInterfaceDecl *IFace = CurMethod->getClassInterface()) {\n      // ...\n      if (ObjCIvarDecl *IV = IFace->lookupInstanceVariable(II, ClassDeclared)) {\n        if (IV->getAccessControl() != ObjCIvarDecl::Private || declaresSameEntity(IFace, ClassDeclared))\n          Diag(Loc, diag::warn_ivar_use_hidden) << IV->getDeclName();"}},
[f]={Yb,1237025389,Zb,ac},
[k]={
[h]={{S,2983,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n  // ...\n  if (LookForIvars) {\n  // ...\n  } else if (CurMethod->isInstanceMethod()) {\n    // We should warn if a local variable hides an ivar.\n    if (ObjCInterfaceDecl *IFace = CurMethod->getClassInterface()) {\n      // ...\n      if (ObjCIvarDecl *IV = IFace->lookupInstanceVariable(II, ClassDeclared)) {\n        if (IV->getAccessControl() != ObjCIvarDecl::Private || declaresSameEntity(IFace, ClassDeclared))\n          Diag(Loc, diag::warn_ivar_use_hidden) << IV->getDeclName();"}},
[l]={
["clang/test/SemaObjC/ivar-ref-misuse.m"]={"clang/test/SemaObjC/ivar-ref-misuse.m:36:3: warning: local declaration of \'sprite\' hides instance variable [-Wshadow-ivar]","clang/test/SemaObjC/ivar-ref-misuse.m:38:3: warning: local declaration of \'spree\' hides instance variable [-Wshadow-ivar]"}
["clang/test/SemaObjC/ivar-ref-misuse.m"]={"clang/test/SemaObjC/ivar-ref-misuse.m:36:3: warning: local declaration of \'sprite\' hides instance variable [-Wshadow-ivar]","clang/test/SemaObjC/ivar-ref-misuse.m:38:3: warning: local declaration of \'spree\' hides instance variable [-Wshadow-ivar]"}
}
}
},
},
["warn_ivars_in_interface"]={
["warn_ivars_in_interface"]={
[j]={"objc-interface-ivars"},
[k]={"objc-interface-ivars"},
[i]="objc-interface-ivars",
[j]="objc-interface-ivars",
[c]="declaration of instance variables in the interface is deprecated",
[c]="warn_ivars_in_interface",
[d]=g,
[d]="declaration of instance variables in the interface is deprecated",
[e]="declaration of instance variables in the interface is deprecated",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wobjc\\-interface\\-ivars[^\\]]*\\]",
[g]="declaration of instance variables in the interface is deprecated",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-interface\\-ivars[^\\]]*\\]",
[a]={"e1ada58ef434",1337103796,"Remove word \'block\' from option and diagnostic I added","Remove word \'block\' from option and diagnostic I added\nin r156825.\n\nllvm-svn: 156831"},
[b]=m,
[h]={{D,18457,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n  // ...\n  if (LangOpts.ObjCRuntime.isNonFragile() && !NewID->isInvalidDecl() && isa<ObjCInterfaceDecl>(EnclosingDecl))\n    Diag(Loc, diag::warn_ivars_in_interface);"}},
[f]={"e1ada58ef434",1337103796,"Remove word \'block\' from option and diagnostic I added","Remove word \'block\' from option and diagnostic I added\nin r156825.\n\nllvm-svn: 156831"},
[k]={
[h]={{M,18457,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n  // ...\n  if (LangOpts.ObjCRuntime.isNonFragile() && !NewID->isInvalidDecl() && isa<ObjCInterfaceDecl>(EnclosingDecl))\n    Diag(Loc, diag::warn_ivars_in_interface);"}},
[l]={
["clang/test/SemaObjC/no-ivar-in-interface-block.m"]={"clang/test/SemaObjC/no-ivar-in-interface-block.m:6:19: warning: declaration of instance variables in the interface is deprecated [-Wobjc-interface-ivars]","clang/test/SemaObjC/no-ivar-in-interface-block.m:8:19: warning: declaration of instance variables in the interface is deprecated [-Wobjc-interface-ivars]","clang/test/SemaObjC/no-ivar-in-interface-block.m:10:19: warning: declaration of instance variables in the interface is deprecated [-Wobjc-interface-ivars]"}
["clang/test/SemaObjC/no-ivar-in-interface-block.m"]={"clang/test/SemaObjC/no-ivar-in-interface-block.m:6:19: warning: declaration of instance variables in the interface is deprecated [-Wobjc-interface-ivars]","clang/test/SemaObjC/no-ivar-in-interface-block.m:8:19: warning: declaration of instance variables in the interface is deprecated [-Wobjc-interface-ivars]","clang/test/SemaObjC/no-ivar-in-interface-block.m:10:19: warning: declaration of instance variables in the interface is deprecated [-Wobjc-interface-ivars]"}
}
}
},
},
["warn_jump_out_of_seh_finally"]={
["warn_jump_out_of_seh_finally"]={
[j]={"jump-seh-finally"},
[k]={"jump-seh-finally"},
[i]="jump-seh-finally",
[j]="jump-seh-finally",
[c]="jump out of __finally block has undefined behavior",
[c]="warn_jump_out_of_seh_finally",
[d]=g,
[d]="jump out of __finally block has undefined behavior",
[e]="jump out of __finally block has undefined behavior",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wjump\\-seh\\-finally[^\\]]*\\]",
[g]="jump out of __finally block has undefined behavior",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wjump\\-seh\\-finally[^\\]]*\\]",
[a]={"d64657f2989f",1425869279,"Warn when jumping out of a __finally block via continue, break, return, __leave.","Warn when jumping out of a __finally block via continue, break, return, __leave.\n\nSince continue, break, return are much more common than __finally, this tries\nto keep the work for continue, break, return O(1).  Sema keeps a stack of active\n__finally scopes (to do this, ActOnSEHFinally() is split into\nActOnStartSEHFinally() and ActOnFinishSEHFinally()), and the various jump\nstatements then check if the current __finally scope (if present) is deeper\nthan then destination scope of the jump.\n\nThe same warning for goto statements is still missing.\n\nThis is the moral equivalent of MSVC\'s C4532.\n\nllvm-svn: 231623"},
[b]=m,
[h]={{"clang/lib/Sema/JumpDiagnostics.cpp",941,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n  // ...\n  // Warn on gotos out of __finally blocks.\n  if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n    // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n    // less nested scope.  Check if it crosses a __finally along the way.\n    for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n      if (Scopes[I].InDiag == diag::note_protected_by_seh_finally) {\n        S.Diag(From->getBeginLoc(), diag::warn_jump_out_of_seh_finally);"},{Cb,3322,"static void CheckJumpOutOfSEHFinally(Sema &S, SourceLocation Loc, const Scope &DestScope) {\n  if (!S.CurrentSEHFinally.empty() && DestScope.Contains(*S.CurrentSEHFinally.back())) {\n    S.Diag(Loc, diag::warn_jump_out_of_seh_finally);"}},
[f]={"d64657f2989f",1425869279,"Warn when jumping out of a __finally block via continue, break, return, __leave.","Warn when jumping out of a __finally block via continue, break, return, __leave.\n\nSince continue, break, return are much more common than __finally, this tries\nto keep the work for continue, break, return O(1).  Sema keeps a stack of active\n__finally scopes (to do this, ActOnSEHFinally() is split into\nActOnStartSEHFinally() and ActOnFinishSEHFinally()), and the various jump\nstatements then check if the current __finally scope (if present) is deeper\nthan then destination scope of the jump.\n\nThe same warning for goto statements is still missing.\n\nThis is the moral equivalent of MSVC\'s C4532.\n\nllvm-svn: 231623"},
[k]={
[h]={{"clang/lib/Sema/JumpDiagnostics.cpp",941,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n  // ...\n  // Warn on gotos out of __finally blocks.\n  if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n    // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n    // less nested scope.  Check if it crosses a __finally along the way.\n    for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n      if (Scopes[I].InDiag == diag::note_protected_by_seh_finally) {\n        S.Diag(From->getBeginLoc(), diag::warn_jump_out_of_seh_finally);"},{Hb,3322,"static void CheckJumpOutOfSEHFinally(Sema &S, SourceLocation Loc, const Scope &DestScope) {\n  if (!S.CurrentSEHFinally.empty() && DestScope.Contains(*S.CurrentSEHFinally.back())) {\n    S.Diag(Loc, diag::warn_jump_out_of_seh_finally);"}},
[l]={
["clang/test/CodeGen/exceptions-seh-leave.c"]={"clang/test/CodeGen/exceptions-seh-leave.c:68:5: warning: jump out of __finally block has undefined behavior [-Wjump-seh-finally]","clang/test/CodeGen/exceptions-seh-leave.c:108:5: warning: jump out of __finally block has undefined behavior [-Wjump-seh-finally]","clang/test/CodeGen/exceptions-seh-leave.c:135:7: warning: jump out of __finally block has undefined behavior [-Wjump-seh-finally]","clang/test/CodeGen/exceptions-seh-leave.c:137:7: warning: jump out of __finally block has undefined behavior [-Wjump-seh-finally]","clang/test/CodeGen/exceptions-seh-leave.c:294:7: warning: jump out of __finally block has undefined behavior [-Wjump-seh-finally]","clang/test/CodeGen/exceptions-seh-leave.c:296:7: warning: jump out of __finally block has undefined behavior [-Wjump-seh-finally]"}
["clang/test/CodeGen/exceptions-seh-leave.c"]={"clang/test/CodeGen/exceptions-seh-leave.c:68:5: warning: jump out of __finally block has undefined behavior [-Wjump-seh-finally]","clang/test/CodeGen/exceptions-seh-leave.c:108:5: warning: jump out of __finally block has undefined behavior [-Wjump-seh-finally]","clang/test/CodeGen/exceptions-seh-leave.c:135:7: warning: jump out of __finally block has undefined behavior [-Wjump-seh-finally]","clang/test/CodeGen/exceptions-seh-leave.c:137:7: warning: jump out of __finally block has undefined behavior [-Wjump-seh-finally]","clang/test/CodeGen/exceptions-seh-leave.c:294:7: warning: jump out of __finally block has undefined behavior [-Wjump-seh-finally]","clang/test/CodeGen/exceptions-seh-leave.c:296:7: warning: jump out of __finally block has undefined behavior [-Wjump-seh-finally]"}
}
}
},
},
["warn_kern_is_inline"]={
["warn_kern_is_inline"]={
[j]={Nd},
[k]={Dd},
[i]=Nd,
[j]=Dd,
[c]="ignored \'inline\' attribute on kernel function %0",
[c]="warn_kern_is_inline",
[d]=g,
[d]="ignored \'inline\' attribute on kernel function %0",
[e]="ignored \'inline\' attribute on kernel function (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]",
[g]="ignored \'inline\' attribute on kernel function (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]",
[a]={"c66a10652a94",1453249617,"[CUDA] Only allow __global__ on free functions and static member functions.","[CUDA] Only allow __global__ on free functions and static member functions.\n\nSummary:\nWarn for NVCC compatibility if you declare a static member function or\ninline function as __global__.\n\nReviewers: tra\n\nSubscribers: jhen, echristo, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D16261\n\nllvm-svn: 258263"},
[b]=m,
[h]={{E,5059,"static void handleGlobalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Only warn for \"inline\" when compiling for host, to cut down on noise.\n  if (FD->isInlineSpecified() && !S.getLangOpts().CUDAIsDevice)\n    S.Diag(FD->getBeginLoc(), diag::warn_kern_is_inline) << FD;"}},
[f]={"c66a10652a94",1453249617,"[CUDA] Only allow __global__ on free functions and static member functions.","[CUDA] Only allow __global__ on free functions and static member functions.\n\nSummary:\nWarn for NVCC compatibility if you declare a static member function or\ninline function as __global__.\n\nReviewers: tra\n\nSubscribers: jhen, echristo, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D16261\n\nllvm-svn: 258263"},
[k]={
[h]={{N,5059,"static void handleGlobalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Only warn for \"inline\" when compiling for host, to cut down on noise.\n  if (FD->isInlineSpecified() && !S.getLangOpts().CUDAIsDevice)\n    S.Diag(FD->getBeginLoc(), diag::warn_kern_is_inline) << FD;"}},
[l]={
["clang/test/SemaCUDA/bad-attributes.cu"]={"clang/test/SemaCUDA/bad-attributes.cu:60:1: warning: ignored \'inline\' attribute on kernel function \'foobar\' [-Wcuda-compat]"}
["clang/test/SemaCUDA/bad-attributes.cu"]={"clang/test/SemaCUDA/bad-attributes.cu:60:1: warning: ignored \'inline\' attribute on kernel function \'foobar\' [-Wcuda-compat]"}
}
}
},
},
["warn_kern_is_method"]={
["warn_kern_is_method"]={
[j]={Nd,id},
[k]={Dd,hd},
[i]=Nd,
[j]=Dd,
[c]="kernel function %0 is a member function; this may not be accepted by nvcc",
[c]="warn_kern_is_method",
[d]=g,
[d]="kernel function %0 is a member function; this may not be accepted by nvcc",
[e]="kernel function (.*?) is a member function; this may not be accepted by nvcc",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]",
[g]="kernel function (.*?) is a member function; this may not be accepted by nvcc",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]",
[a]={"c66a10652a94",1453249617,"[CUDA] Only allow __global__ on free functions and static member functions.","[CUDA] Only allow __global__ on free functions and static member functions.\n\nSummary:\nWarn for NVCC compatibility if you declare a static member function or\ninline function as __global__.\n\nReviewers: tra\n\nSubscribers: jhen, echristo, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D16261\n\nllvm-svn: 258263"},
[b]=m,
[h]={{E,5055,"static void handleGlobalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (const auto *Method = dyn_cast<CXXMethodDecl>(FD)) {\n    // ...\n    S.Diag(Method->getBeginLoc(), diag::warn_kern_is_method) << Method;"}},
[f]={"c66a10652a94",1453249617,"[CUDA] Only allow __global__ on free functions and static member functions.","[CUDA] Only allow __global__ on free functions and static member functions.\n\nSummary:\nWarn for NVCC compatibility if you declare a static member function or\ninline function as __global__.\n\nReviewers: tra\n\nSubscribers: jhen, echristo, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D16261\n\nllvm-svn: 258263"},
[k]={
[h]={{N,5055,"static void handleGlobalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (const auto *Method = dyn_cast<CXXMethodDecl>(FD)) {\n    // ...\n    S.Diag(Method->getBeginLoc(), diag::warn_kern_is_method) << Method;"}},
[l]={
["clang/test/SemaCUDA/bad-attributes.cu"]={"clang/test/SemaCUDA/bad-attributes.cu:55:3: warning: kernel function \'bar\' is a member function; this may not be accepted by nvcc [-Wcuda-compat]","clang/test/SemaCUDA/bad-attributes.cu:57:3: warning: kernel function \'baz\' is a member function; this may not be accepted by nvcc [-Wcuda-compat]"}
["clang/test/SemaCUDA/bad-attributes.cu"]={"clang/test/SemaCUDA/bad-attributes.cu:55:3: warning: kernel function \'bar\' is a member function; this may not be accepted by nvcc [-Wcuda-compat]","clang/test/SemaCUDA/bad-attributes.cu:57:3: warning: kernel function \'baz\' is a member function; this may not be accepted by nvcc [-Wcuda-compat]"}
}
}
},
},
["warn_left_shift_always"]={
["warn_left_shift_always"]={
[j]={B,H,N,"tautological-compare","tautological-constant-compare"},
[k]={K,O,V,"tautological-compare","tautological-constant-compare"},
[i]="tautological-constant-compare",
[j]="tautological-constant-compare",
[c]={{nil,z,"converting the result of \'<<\' to a boolean always evaluates to %select{false|true}0"}},
[c]={{nil,q,"warn_left_shift_always"}},
[d]=g,
[d]={{nil,q,"converting the result of \'<<\' to a boolean always evaluates to %select{false|true}0"}},
[e]="converting the result of \'\\<\\<\' to a boolean always evaluates to (?:false|true)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wtautological\\-constant\\-compare[^\\]]*\\]",
[g]="converting the result of \'\\<\\<\' to a boolean always evaluates to (?:false|true)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wtautological\\-constant\\-compare[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,m}},
[h]={{r,14628,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  // ...\n  if (const auto *BO = dyn_cast<BinaryOperator>(E)) {\n    // ...\n    // Do not diagnose unsigned shifts.\n    if (Opc == BO_Shl) {\n      // ...\n      if (LHS && LHS->getValue() == 0)\n        S.Diag(ExprLoc, diag::warn_left_shift_always) << 0;"},{r,14632,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  // ...\n  if (const auto *BO = dyn_cast<BinaryOperator>(E)) {\n    // ...\n    // Do not diagnose unsigned shifts.\n    if (Opc == BO_Shl) {\n      // ...\n      if (LHS && LHS->getValue() == 0)\n      // ...\n      else if (!E->isValueDependent() && LHS && RHS && RHS->getValue().isNonNegative() && E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects))\n        S.Diag(ExprLoc, diag::warn_left_shift_always) << (Result.Val.getInt() != 0);"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{t,14628,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  // ...\n  if (const auto *BO = dyn_cast<BinaryOperator>(E)) {\n    // ...\n    // Do not diagnose unsigned shifts.\n    if (Opc == BO_Shl) {\n      // ...\n      if (LHS && LHS->getValue() == 0)\n        S.Diag(ExprLoc, diag::warn_left_shift_always) << 0;"},{t,14632,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  // ...\n  if (const auto *BO = dyn_cast<BinaryOperator>(E)) {\n    // ...\n    // Do not diagnose unsigned shifts.\n    if (Opc == BO_Shl) {\n      // ...\n      if (LHS && LHS->getValue() == 0)\n      // ...\n      else if (!E->isValueDependent() && LHS && RHS && RHS->getValue().isNonNegative() && E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects))\n        S.Diag(ExprLoc, diag::warn_left_shift_always) << (Result.Val.getInt() != 0);"}},
[l]={
["clang/test/Sema/warn-int-in-bool-context.c"]={"clang/test/Sema/warn-int-in-bool-context.c:29:10: warning: converting the result of \'<<\' to a boolean always evaluates to true [-Wtautological-constant-compare]","clang/test/Sema/warn-int-in-bool-context.c:30:11: warning: converting the result of \'<<\' to a boolean always evaluates to true [-Wtautological-constant-compare]","clang/test/Sema/warn-int-in-bool-context.c:31:9: warning: converting the result of \'<<\' to a boolean always evaluates to false [-Wtautological-constant-compare]","clang/test/Sema/warn-int-in-bool-context.c:32:9: warning: converting the result of \'<<\' to a boolean always evaluates to false [-Wtautological-constant-compare]","clang/test/Sema/warn-int-in-bool-context.c:33:9: warning: converting the result of \'<<\' to a boolean always evaluates to true [-Wtautological-constant-compare]","clang/test/Sema/warn-int-in-bool-context.c:34:9: warning: converting the result of \'<<\' to a boolean always evaluates to true [-Wtautological-constant-compare]","clang/test/Sema/warn-int-in-bool-context.c:35:12: warning: converting the result of \'<<\' to a boolean always evaluates to true [-Wtautological-constant-compare]"}
["clang/test/Sema/warn-int-in-bool-context.c"]={"clang/test/Sema/warn-int-in-bool-context.c:29:10: warning: converting the result of \'<<\' to a boolean always evaluates to true [-Wtautological-constant-compare]","clang/test/Sema/warn-int-in-bool-context.c:30:11: warning: converting the result of \'<<\' to a boolean always evaluates to true [-Wtautological-constant-compare]","clang/test/Sema/warn-int-in-bool-context.c:31:9: warning: converting the result of \'<<\' to a boolean always evaluates to false [-Wtautological-constant-compare]","clang/test/Sema/warn-int-in-bool-context.c:32:9: warning: converting the result of \'<<\' to a boolean always evaluates to false [-Wtautological-constant-compare]","clang/test/Sema/warn-int-in-bool-context.c:33:9: warning: converting the result of \'<<\' to a boolean always evaluates to true [-Wtautological-constant-compare]","clang/test/Sema/warn-int-in-bool-context.c:34:9: warning: converting the result of \'<<\' to a boolean always evaluates to true [-Wtautological-constant-compare]","clang/test/Sema/warn-int-in-bool-context.c:35:12: warning: converting the result of \'<<\' to a boolean always evaluates to true [-Wtautological-constant-compare]"}
}
}
},
},
["warn_left_shift_in_bool_context"]={
["warn_left_shift_in_bool_context"]={
[j]={B,H,"int-in-bool-context",N},
[k]={K,O,"int-in-bool-context",V},
[i]="int-in-bool-context",
[j]="int-in-bool-context",
[c]={{nil,z,"converting the result of \'<<\' to a boolean; did you mean \'(%0) != 0\'?"}},
[c]={{nil,q,"warn_left_shift_in_bool_context"}},
[d]=g,
[d]={{nil,q,"converting the result of \'<<\' to a boolean; did you mean \'(%0) != 0\'?"}},
[e]="converting the result of \'\\<\\<\' to a boolean; did you mean \'\\((.*?)\\) \\!\\= 0\'\\?",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wint\\-in\\-bool\\-context[^\\]]*\\]",
[g]="converting the result of \'\\<\\<\' to a boolean; did you mean \'\\((.*?)\\) \\!\\= 0\'\\?",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wint\\-in\\-bool\\-context[^\\]]*\\]",
[a]={tb,1567434909,zb,yb},
[b]={{nil,q,m}},
[h]={{r,14635,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  // ...\n  if (const auto *BO = dyn_cast<BinaryOperator>(E)) {\n    // ...\n    // Do not diagnose unsigned shifts.\n    if (Opc == BO_Shl) {\n      // ...\n      if (LHS && LHS->getValue() == 0)\n      // ...\n      else if (!E->isValueDependent() && LHS && RHS && RHS->getValue().isNonNegative() && E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects))\n      // ...\n      else if (E->getType()->isSignedIntegerType())\n        S.Diag(ExprLoc, diag::warn_left_shift_in_bool_context) << E;"}},
[f]={xb,1567434909,yb,Cb},
[k]={
[h]={{t,14635,"static void DiagnoseIntInBoolContext(Sema &S, Expr *E) {\n  // ...\n  if (const auto *BO = dyn_cast<BinaryOperator>(E)) {\n    // ...\n    // Do not diagnose unsigned shifts.\n    if (Opc == BO_Shl) {\n      // ...\n      if (LHS && LHS->getValue() == 0)\n      // ...\n      else if (!E->isValueDependent() && LHS && RHS && RHS->getValue().isNonNegative() && E->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects))\n      // ...\n      else if (E->getType()->isSignedIntegerType())\n        S.Diag(ExprLoc, diag::warn_left_shift_in_bool_context) << E;"}},
[l]={
["clang/test/Sema/warn-int-in-bool-context.c"]={"clang/test/Sema/warn-int-in-bool-context.c:27:9: warning: converting the result of \'<<\' to a boolean; did you mean \'(a << a) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:28:7: warning: converting the result of \'<<\' to a boolean; did you mean \'(a << a) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:36:9: warning: converting the result of \'<<\' to a boolean; did you mean \'(2 << b) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:39:10: warning: converting the result of \'<<\' to a boolean; did you mean \'(1 << a) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:40:11: warning: converting the result of \'<<\' to a boolean; did you mean \'(2 << a) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:41:9: warning: converting the result of \'<<\' to a boolean; did you mean \'(a << 7) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:42:11: warning: converting the result of \'<<\' to a boolean; did you mean \'(1 << a) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:43:11: warning: converting the result of \'<<\' to a boolean; did you mean \'(2 << a) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:46:17: warning: converting the result of \'<<\' to a boolean; did you mean \'(1 << a) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:49:9: warning: converting the result of \'<<\' to a boolean; did you mean \'(a << 2) != 0\'? [-Wint-in-bool-context]"}
["clang/test/Sema/warn-int-in-bool-context.c"]={"clang/test/Sema/warn-int-in-bool-context.c:27:9: warning: converting the result of \'<<\' to a boolean; did you mean \'(a << a) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:28:7: warning: converting the result of \'<<\' to a boolean; did you mean \'(a << a) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:36:9: warning: converting the result of \'<<\' to a boolean; did you mean \'(2 << b) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:39:10: warning: converting the result of \'<<\' to a boolean; did you mean \'(1 << a) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:40:11: warning: converting the result of \'<<\' to a boolean; did you mean \'(2 << a) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:41:9: warning: converting the result of \'<<\' to a boolean; did you mean \'(a << 7) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:42:11: warning: converting the result of \'<<\' to a boolean; did you mean \'(1 << a) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:43:11: warning: converting the result of \'<<\' to a boolean; did you mean \'(2 << a) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:46:17: warning: converting the result of \'<<\' to a boolean; did you mean \'(1 << a) != 0\'? [-Wint-in-bool-context]","clang/test/Sema/warn-int-in-bool-context.c:49:9: warning: converting the result of \'<<\' to a boolean; did you mean \'(a << 2) != 0\'? [-Wint-in-bool-context]"}
}
}
},
},
["warn_lock_exclusive_and_shared"]={
["warn_lock_exclusive_and_shared"]={
[j]={Ac,Qb},
[k]={Fc,Ub},
[i]=Qb,
[j]=Ub,
[c]="%0 \'%1\' is acquired exclusively and shared in the same scope",
[c]="warn_lock_exclusive_and_shared",
[d]=g,
[d]="%0 \'%1\' is acquired exclusively and shared in the same scope",
[e]="(.*?) \'(.*?)\' is acquired exclusively and shared in the same scope",
[e]=i,
[f]=Vc,
[g]="(.*?) \'(.*?)\' is acquired exclusively and shared in the same scope",
[b]=l,
[a]=Yc,
[a]={"46b057681a7f",1315505978,"Thread safety: shared vs. exclusive locks","Thread safety: shared vs. exclusive locks\n\nllvm-svn: 139307"},
[b]=m,
[h]={{gb,1934,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleExclusiveAndShared(StringRef Kind, Name LockName, SourceLocation Loc1, SourceLocation Loc2) override {\n    PartialDiagnosticAt Warning(Loc1, S.PDiag(diag::warn_lock_exclusive_and_shared) << Kind << LockName);"}},
[f]={"46b057681a7f",1315505978,"Thread safety: shared vs. exclusive locks","Thread safety: shared vs. exclusive locks\n\nllvm-svn: 139307"},
[k]={
[h]={{qb,1934,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleExclusiveAndShared(StringRef Kind, Name LockName, SourceLocation Loc1, SourceLocation Loc2) override {\n    PartialDiagnosticAt Warning(Loc1, S.PDiag(diag::warn_lock_exclusive_and_shared) << Kind << LockName);"}},
[l]={
["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={"clang/test/SemaCXX/warn-thread-safety-analysis.cpp:646:12: warning: mutex \'sls_mu\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:672:12: warning: mutex \'sls_mu\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:705:12: warning: mutex \'sls_mu\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:713:12: warning: mutex \'sls_mu\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:724:12: warning: mutex \'sls_mu\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2857:13: warning: mutex \'mu\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2901:13: warning: mutex \'mu\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4808:11: warning: mutex \'mu_\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4819:11: warning: mutex \'mu_\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]"}
["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={"clang/test/SemaCXX/warn-thread-safety-analysis.cpp:646:12: warning: mutex \'sls_mu\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:672:12: warning: mutex \'sls_mu\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:705:12: warning: mutex \'sls_mu\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:713:12: warning: mutex \'sls_mu\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:724:12: warning: mutex \'sls_mu\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2857:13: warning: mutex \'mu\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2901:13: warning: mutex \'mu\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4808:11: warning: mutex \'mu_\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4819:11: warning: mutex \'mu_\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]"}
}
}
},
},
["warn_lock_some_predecessors"]={
["warn_lock_some_predecessors"]={
[j]={Ac,Qb},
[k]={Fc,Ub},
[i]=Qb,
[j]=Ub,
[c]="%0 \'%1\' is not held on every path through here",
[c]="warn_lock_some_predecessors",
[d]=g,
[d]="%0 \'%1\' is not held on every path through here",
[e]="(.*?) \'(.*?)\' is not held on every path through here",
[e]=i,
[f]=Vc,
[g]="(.*?) \'(.*?)\' is not held on every path through here",
[b]=l,
[a]=Yc,
[a]={"922866783b07",1328244326,"Thread safety analysis:","Thread safety analysis:\n * When we detect that a CFG block has inconsistent lock sets, point the\n  diagnostic at the location where we found the inconsistency, and point a note\n  at somewhere the inconsistently-locked mutex was locked.\n * Fix the wording of the normal (non-loop, non-end-of-function) case of this\n  diagnostic to not suggest that the mutex is going out of scope.\n * Fix the diagnostic emission code to keep a warning and its note together when\n  sorting the diagnostics into source location order.\n\nllvm-svn: 149669"},
[b]=m,
[h]={{gb,1909,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexHeldEndOfScope(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) override {\n    // ...\n    case LEK_LockedSomePredecessors:\n      DiagID = diag::warn_lock_some_predecessors;"}},
[f]={"922866783b07",1328244326,"Thread safety analysis:","Thread safety analysis:\n * When we detect that a CFG block has inconsistent lock sets, point the\n  diagnostic at the location where we found the inconsistency, and point a note\n  at somewhere the inconsistently-locked mutex was locked.\n * Fix the wording of the normal (non-loop, non-end-of-function) case of this\n  diagnostic to not suggest that the mutex is going out of scope.\n * Fix the diagnostic emission code to keep a warning and its note together when\n  sorting the diagnostics into source location order.\n\nllvm-svn: 149669"},
[k]={
[h]={{qb,1909,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexHeldEndOfScope(StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) override {\n    // ...\n    case LEK_LockedSomePredecessors:\n      DiagID = diag::warn_lock_some_predecessors;"}},
[l]={
["clang/test/PCH/thread-safety-attrs.cpp"]={"clang/test/PCH/thread-safety-attrs.cpp:231:1: warning: mutex \'sls_mu\' is not held on every path through here [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:231:1: warning: mutex \'sls_mu2\' is not held on every path through here [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:238:1: warning: mutex \'sls_mu\' is not held on every path through here [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:250:3: warning: mutex \'sls_mu\' is not held on every path through here [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:314:3: warning: mutex \'sls_mu\' is not held on every path through here [-Wthread-safety-analysis]"}
["clang/test/PCH/thread-safety-attrs.cpp"]={"clang/test/PCH/thread-safety-attrs.cpp:231:1: warning: mutex \'sls_mu\' is not held on every path through here [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:231:1: warning: mutex \'sls_mu2\' is not held on every path through here [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:238:1: warning: mutex \'sls_mu\' is not held on every path through here [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:250:3: warning: mutex \'sls_mu\' is not held on every path through here [-Wthread-safety-analysis]","clang/test/PCH/thread-safety-attrs.cpp:314:3: warning: mutex \'sls_mu\' is not held on every path through here [-Wthread-safety-analysis]"}
}
}
},
},
["warn_logical_and_in_logical_or"]={
["warn_logical_and_in_logical_or"]={
[j]={B,H,"logical-op-parentheses","parentheses"},
[k]={K,O,"logical-op-parentheses","parentheses"},
[i]="logical-op-parentheses",
[j]="logical-op-parentheses",
[c]="\'&&\' within \'||\'",
[c]="warn_logical_and_in_logical_or",
[d]=g,
[d]="\'&&\' within \'||\'",
[e]="\'&&\' within \'\\|\\|\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wlogical\\-op\\-parentheses[^\\]]*\\]",
[g]="\'&&\' within \'\\|\\|\'",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wlogical\\-op\\-parentheses[^\\]]*\\]",
[a]={"f89a56c74b35",1289941212,"Warn about arg1 && arg2 || arg3, as GCC 4.3+ does. Fixes rdar://8659922","Warn about arg1 && arg2 || arg3, as GCC 4.3+ does. Fixes rdar://8659922\n\nllvm-svn: 119381"},
[b]=m,
[h]={{K,15781,"/// It accepts a \'&&\' expr that is inside a \'||\' one.\n/// Emit a diagnostic together with a fixit hint that wraps the \'&&\' expression\n/// in parentheses.\nstatic void EmitDiagnosticForLogicalAndInLogicalOr(Sema &Self, SourceLocation OpLoc, BinaryOperator *Bop) {\n  // ...\n  Self.Diag(Bop->getOperatorLoc(), diag::warn_logical_and_in_logical_or) << Bop->getSourceRange() << OpLoc;"}},
[f]={"f89a56c74b35",1289941212,"Warn about arg1 && arg2 || arg3, as GCC 4.3+ does. Fixes rdar://8659922","Warn about arg1 && arg2 || arg3, as GCC 4.3+ does. Fixes rdar://8659922\n\nllvm-svn: 119381"},
[k]={
[h]={{S,15781,"/// It accepts a \'&&\' expr that is inside a \'||\' one.\n/// Emit a diagnostic together with a fixit hint that wraps the \'&&\' expression\n/// in parentheses.\nstatic void EmitDiagnosticForLogicalAndInLogicalOr(Sema &Self, SourceLocation OpLoc, BinaryOperator *Bop) {\n  // ...\n  Self.Diag(Bop->getOperatorLoc(), diag::warn_logical_and_in_logical_or) << Bop->getSourceRange() << OpLoc;"}},
[l]={
["clang/test/SemaCXX/parentheses.cpp"]={"clang/test/SemaCXX/parentheses.cpp:7:16: warning: \'&&\' within \'||\' [-Wlogical-op-parentheses]"}
["clang/test/SemaCXX/parentheses.cpp"]={"clang/test/SemaCXX/parentheses.cpp:7:16: warning: \'&&\' within \'||\' [-Wlogical-op-parentheses]"}
}
}
},
},
["warn_logical_instead_of_bitwise"]={
["warn_logical_instead_of_bitwise"]={
[j]={"constant-logical-operand"},
[k]={"constant-logical-operand"},
[i]="constant-logical-operand",
[j]="constant-logical-operand",
[c]="use of logical \'%0\' with constant operand",
[c]="warn_logical_instead_of_bitwise",
[d]=g,
[d]="use of logical \'%0\' with constant operand",
[e]="use of logical \'(.*?)\' with constant operand",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wconstant\\-logical\\-operand[^\\]]*\\]",
[g]="use of logical \'(.*?)\' with constant operand",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wconstant\\-logical\\-operand[^\\]]*\\]",
[a]={"8406c5197b7f",1279050092,"Add a warning to catch a bug recently caught by code review, like this:","Add a warning to catch a bug recently caught by code review, like this:\nt2.c:2:12: warning: use of logical && with constant operand; switch to bitwise &\n      or remove constant [-Wlogical-bitwise-confusion]\n  return x && 4;\n          ^  ~\n\nwording improvement suggestions are welcome.\n\nllvm-svn: 108260"},
[b]=m,
[h]={{K,13936,"// C99 6.5.[13,14]\ninline QualType Sema::CheckLogicalOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n  // Diagnose cases where the user write a logical and/or but probably meant a\n  // bitwise one.  We do this when the LHS is a non-bool integer and the RHS\n  // is a constant.\n  if (!EnumConstantInBoolContext && LHS.get()->getType()->isIntegerType() && !LHS.get()->getType()->isBooleanType() && RHS.get()->getType()->isIntegerType() && !RHS.get()->isValueDependent() &&\n    // ...\n    if (RHS.get()->EvaluateAsInt(EVResult, Context)) {\n      // ...\n      if ((getLangOpts().Bool && !RHS.get()->getType()->isBooleanType() && !RHS.get()->getExprLoc().isMacroID()) || (Result != 0 && Result != 1)) {\n        Diag(Loc, diag::warn_logical_instead_of_bitwise) << RHS.get()->getSourceRange() << (Opc == BO_LAnd ? \"&&\" : \"||\");"}},
[f]={"8406c5197b7f",1279050092,"Add a warning to catch a bug recently caught by code review, like this:","Add a warning to catch a bug recently caught by code review, like this:\nt2.c:2:12: warning: use of logical && with constant operand; switch to bitwise &\n      or remove constant [-Wlogical-bitwise-confusion]\n  return x && 4;\n          ^  ~\n\nwording improvement suggestions are welcome.\n\nllvm-svn: 108260"},
[k]={
[h]={{S,13936,"// C99 6.5.[13,14]\ninline QualType Sema::CheckLogicalOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n  // Diagnose cases where the user write a logical and/or but probably meant a\n  // bitwise one.  We do this when the LHS is a non-bool integer and the RHS\n  // is a constant.\n  if (!EnumConstantInBoolContext && LHS.get()->getType()->isIntegerType() && !LHS.get()->getType()->isBooleanType() && RHS.get()->getType()->isIntegerType() && !RHS.get()->isValueDependent() &&\n    // ...\n    if (RHS.get()->EvaluateAsInt(EVResult, Context)) {\n      // ...\n      if ((getLangOpts().Bool && !RHS.get()->getType()->isBooleanType() && !RHS.get()->getExprLoc().isMacroID()) || (Result != 0 && Result != 1)) {\n        Diag(Loc, diag::warn_logical_instead_of_bitwise) << RHS.get()->getSourceRange() << (Opc == BO_LAnd ? \"&&\" : \"||\");"}},
[l]={
["clang/test/Parser/cxx2a-concept-declaration.cpp"]={"clang/test/Parser/cxx2a-concept-declaration.cpp:78:47: warning: use of logical \'&&\' with constant operand [-Wconstant-logical-operand]"}
["clang/test/Parser/cxx2a-concept-declaration.cpp"]={"clang/test/Parser/cxx2a-concept-declaration.cpp:78:47: warning: use of logical \'&&\' with constant operand [-Wconstant-logical-operand]"}
}
}
},
},
["warn_logical_not_on_lhs_of_check"]={
["warn_logical_not_on_lhs_of_check"]={
[j]={B,H,"logical-not-parentheses","parentheses"},
[k]={K,O,"logical-not-parentheses","parentheses"},
[i]="logical-not-parentheses",
[j]="logical-not-parentheses",
[c]="logical not is only applied to the left hand side of this %select{comparison|bitwise operator}0",
[c]="warn_logical_not_on_lhs_of_check",
[d]=g,
[d]="logical not is only applied to the left hand side of this %select{comparison|bitwise operator}0",
[e]="logical not is only applied to the left hand side of this (?:comparison|bitwise operator)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wlogical\\-not\\-parentheses[^\\]]*\\]",
[g]="logical not is only applied to the left hand side of this (?:comparison|bitwise operator)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wlogical\\-not\\-parentheses[^\\]]*\\]",
[a]={"44f6f2ee4233",1477585926,"Expand -Wlogical-not-parentheses to also fire on `!x & A`.","Expand -Wlogical-not-parentheses to also fire on `!x & A`.\n\nThis is a misspelling of the intended !(x & A) negated bit test that happens in\npractice every now and then.\n\nI ran this on Chromium and all its dependencies, and it fired 0 times -- no\nfalse or true positives, but it would\'ve caught a bug in an in-progress change\nthat had to be caught by a Visual Studio warning instead.\n\nhttps://reviews.llvm.org/D26035\n\nllvm-svn: 285310"},
[b]=m,
[h]={{K,12546,"/// Warns on !x < y, !x & y where !(x < y), !(x & y) was probably intended.\nstatic void diagnoseLogicalNotOnLHSofCheck(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n  S.Diag(UO->getOperatorLoc(), diag::warn_logical_not_on_lhs_of_check) << Loc << IsBitwiseOp;"}},
[f]={"44f6f2ee4233",1477585926,"Expand -Wlogical-not-parentheses to also fire on `!x & A`.","Expand -Wlogical-not-parentheses to also fire on `!x & A`.\n\nThis is a misspelling of the intended !(x & A) negated bit test that happens in\npractice every now and then.\n\nI ran this on Chromium and all its dependencies, and it fired 0 times -- no\nfalse or true positives, but it would\'ve caught a bug in an in-progress change\nthat had to be caught by a Visual Studio warning instead.\n\nhttps://reviews.llvm.org/D26035\n\nllvm-svn: 285310"},
[k]={
[h]={{S,12546,"/// Warns on !x < y, !x & y where !(x < y), !(x & y) was probably intended.\nstatic void diagnoseLogicalNotOnLHSofCheck(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n  S.Diag(UO->getOperatorLoc(), diag::warn_logical_not_on_lhs_of_check) << Loc << IsBitwiseOp;"}},
[l]={
["clang/test/Sema/warn-logical-not-compare.c"]={"clang/test/Sema/warn-logical-not-compare.c:9:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:21:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:33:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:45:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:57:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:69:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:96:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:122:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:134:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:146:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:158:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:187:11: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]"}
["clang/test/Sema/warn-logical-not-compare.c"]={"clang/test/Sema/warn-logical-not-compare.c:9:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:21:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:33:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:45:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:57:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:69:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:96:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:122:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:134:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:146:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:158:9: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]","clang/test/Sema/warn-logical-not-compare.c:187:11: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]"}
}
}
},
},
["warn_loop_ctrl_binds_to_inner"]={
["warn_loop_ctrl_binds_to_inner"]={
[j]={Cc},
[k]={Bc},
[i]=Cc,
[j]=Bc,
[c]="\'%0\' is bound to current loop, GCC binds it to the enclosing loop",
[c]="warn_loop_ctrl_binds_to_inner",
[d]=g,
[d]="\'%0\' is bound to current loop, GCC binds it to the enclosing loop",
[e]="\'(.*?)\' is bound to current loop, GCC binds it to the enclosing loop",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[g]="\'(.*?)\' is bound to current loop, GCC binds it to the enclosing loop",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]",
[a]={"09f9924acf1a",1390489500,"Fix to PR8880 (clang dies processing a for loop)","Fix to PR8880 (clang dies processing a for loop)\n\nDue to statement expressions supported as GCC extension, it is possible\nto put \'break\' or \'continue\' into a loop/switch statement but outside\nits body, for example:\n\n    for ( ; ({ if (first) { first = 0; continue; } 0; }); )\n\nThis code is rejected by GCC if compiled in C mode but is accepted in C++\ncode. GCC bug 44715 tracks this discrepancy. Clang used code generation\nthat differs from GCC in both modes: only statement of the third\nexpression of \'for\' behaves as if it was inside loop body.\n\nThis change makes code generation more close to GCC, considering \'break\'\nor \'continue\' statement in condition and increment expressions of a\nloop as it was inside the loop body. It also adds error for the cases\nwhen \'break\'/\'continue\' appear outside loop due to this syntax. If\ncode generation differ from GCC, warning is issued.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2518\n\nllvm-svn: 199897"},
[b]=m,
[h]={{Cb,2123,"void Sema::CheckBreakContinueBinding(Expr *E) {\n  // ...\n  if (BCFinder.BreakFound() && BreakParent) {\n    if (BreakParent->getFlags() & Scope::SwitchScope) {\n    // ...\n    } else {\n      Diag(BCFinder.GetBreakLoc(), diag::warn_loop_ctrl_binds_to_inner) << \"break\";"},{Cb,2127,"void Sema::CheckBreakContinueBinding(Expr *E) {\n  // ...\n  if (BCFinder.BreakFound() && BreakParent) {\n  // ...\n  } else if (BCFinder.ContinueFound() && CurScope->getContinueParent()) {\n    Diag(BCFinder.GetContinueLoc(), diag::warn_loop_ctrl_binds_to_inner) << \"continue\";"}},
[f]={"09f9924acf1a",1390489500,"Fix to PR8880 (clang dies processing a for loop)","Fix to PR8880 (clang dies processing a for loop)\n\nDue to statement expressions supported as GCC extension, it is possible\nto put \'break\' or \'continue\' into a loop/switch statement but outside\nits body, for example:\n\n    for ( ; ({ if (first) { first = 0; continue; } 0; }); )\n\nThis code is rejected by GCC if compiled in C mode but is accepted in C++\ncode. GCC bug 44715 tracks this discrepancy. Clang used code generation\nthat differs from GCC in both modes: only statement of the third\nexpression of \'for\' behaves as if it was inside loop body.\n\nThis change makes code generation more close to GCC, considering \'break\'\nor \'continue\' statement in condition and increment expressions of a\nloop as it was inside the loop body. It also adds error for the cases\nwhen \'break\'/\'continue\' appear outside loop due to this syntax. If\ncode generation differ from GCC, warning is issued.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2518\n\nllvm-svn: 199897"},
[k]={
[h]={{Hb,2123,"void Sema::CheckBreakContinueBinding(Expr *E) {\n  // ...\n  if (BCFinder.BreakFound() && BreakParent) {\n    if (BreakParent->getFlags() & Scope::SwitchScope) {\n    // ...\n    } else {\n      Diag(BCFinder.GetBreakLoc(), diag::warn_loop_ctrl_binds_to_inner) << \"break\";"},{Hb,2127,"void Sema::CheckBreakContinueBinding(Expr *E) {\n  // ...\n  if (BCFinder.BreakFound() && BreakParent) {\n  // ...\n  } else if (BCFinder.ContinueFound() && CurScope->getContinueParent()) {\n    Diag(BCFinder.GetContinueLoc(), diag::warn_loop_ctrl_binds_to_inner) << \"continue\";"}},
[l]={
["clang/test/Sema/loop-control.c"]={"clang/test/Sema/loop-control.c:41:29: warning: \'continue\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:46:29: warning: \'break\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:51:22: warning: \'continue\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:56:22: warning: \'break\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:61:20: warning: \'break\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:66:20: warning: \'continue\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:71:26: warning: \'break\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:76:26: warning: \'continue\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:132:42: warning: \'continue\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:153:31: warning: \'break\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:160:37: warning: \'break\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]"}
["clang/test/Sema/loop-control.c"]={"clang/test/Sema/loop-control.c:41:29: warning: \'continue\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:46:29: warning: \'break\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:51:22: warning: \'continue\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:56:22: warning: \'break\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:61:20: warning: \'break\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:66:20: warning: \'continue\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:71:26: warning: \'break\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:76:26: warning: \'continue\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:132:42: warning: \'continue\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:153:31: warning: \'break\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]","clang/test/Sema/loop-control.c:160:37: warning: \'break\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]"}
}
}
},
},
["warn_loop_state_mismatch"]={
["warn_loop_state_mismatch"]={
[j]={"consumed"},
[k]={"consumed"},
[i]="consumed",
[j]="consumed",
[c]="state of variable \'%0\' must match at the entry and exit of loop",
[c]="warn_loop_state_mismatch",
[d]=g,
[d]="state of variable \'%0\' must match at the entry and exit of loop",
[e]="state of variable \'(.*?)\' must match at the entry and exit of loop",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wconsumed[^\\]]*\\]",
[g]="state of variable \'(.*?)\' must match at the entry and exit of loop",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wconsumed[^\\]]*\\]",
[a]={"3277a6129b79",1381343424,"Consumed analysis: improve loop handling.  The prior version of the analysis","Consumed analysis: improve loop handling.  The prior version of the analysis\nmarked all variables as \"unknown\" at the start of a loop.  The new version\nkeeps the initial state of variables unchanged, but issues a warning if the\nstate at the end of the loop is different from the state at the beginning.\nThis patch will eventually be replaced with a more precise analysis.\n\nInitial patch by chris.wailes@gmail.com.  Reviewed and edited by\ndelesley@google.com.\n\nllvm-svn: 192314"},
[b]=m,
[h]={{gb,2092,"class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {\n  // ...\n  void warnLoopStateMismatch(SourceLocation Loc, StringRef VariableName) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_loop_state_mismatch) << VariableName);"}},
[f]={"3277a6129b79",1381343424,"Consumed analysis: improve loop handling.  The prior version of the analysis","Consumed analysis: improve loop handling.  The prior version of the analysis\nmarked all variables as \"unknown\" at the start of a loop.  The new version\nkeeps the initial state of variables unchanged, but issues a warning if the\nstate at the end of the loop is different from the state at the beginning.\nThis patch will eventually be replaced with a more precise analysis.\n\nInitial patch by chris.wailes@gmail.com.  Reviewed and edited by\ndelesley@google.com.\n\nllvm-svn: 192314"},
[k]={
[h]={{qb,2092,"class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {\n  // ...\n  void warnLoopStateMismatch(SourceLocation Loc, StringRef VariableName) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_loop_state_mismatch) << VariableName);"}},
[l]={
["clang/test/SemaCXX/warn-consumed-analysis.cpp"]={"clang/test/SemaCXX/warn-consumed-analysis.cpp:641:27: warning: state of variable \'var1\' must match at the entry and exit of loop [-Wconsumed]","clang/test/SemaCXX/warn-consumed-analysis.cpp:657:10: warning: state of variable \'var1\' must match at the entry and exit of loop [-Wconsumed]"}
["clang/test/SemaCXX/warn-consumed-analysis.cpp"]={"clang/test/SemaCXX/warn-consumed-analysis.cpp:641:27: warning: state of variable \'var1\' must match at the entry and exit of loop [-Wconsumed]","clang/test/SemaCXX/warn-consumed-analysis.cpp:657:10: warning: state of variable \'var1\' must match at the entry and exit of loop [-Wconsumed]"}
}
}
},
},
["warn_main_one_arg"]={
["warn_main_one_arg"]={
[j]={yd},
[k]={Fd},
[i]=yd,
[j]=Fd,
[c]="only one parameter on \'main\' declaration",
[c]="warn_main_one_arg",
[d]=g,
[d]="only one parameter on \'main\' declaration",
[e]="only one parameter on \'main\' declaration",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]",
[g]="only one parameter on \'main\' declaration",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]",
[a]={"02dee0a46a39",1248496613,"Semantic checking for main().","Semantic checking for main().\n\nFix some invalid main() methods in the test suite that were nicely\nexposed by the new checks.\n\nllvm-svn: 77047"},
[b]=m,
[h]={{D,12218,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  if (nparams == 1 && !FD->isInvalidDecl()) {\n    Diag(FD->getLocation(), diag::warn_main_one_arg);"}}
[f]={"02dee0a46a39",1248496613,"Semantic checking for main().","Semantic checking for main().\n\nFix some invalid main() methods in the test suite that were nicely\nexposed by the new checks.\n\nllvm-svn: 77047"},
[h]={{M,12218,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  if (nparams == 1 && !FD->isInvalidDecl()) {\n    Diag(FD->getLocation(), diag::warn_main_one_arg);"}}
},
},
["warn_main_redefined"]={
["warn_main_redefined"]={
[j]={yd},
[k]={Fd},
[i]=yd,
[j]=Fd,
[c]="variable named \'main\' with external linkage has undefined behavior",
[c]="warn_main_redefined",
[d]=g,
[d]="variable named \'main\' with external linkage has undefined behavior",
[e]="variable named \'main\' with external linkage has undefined behavior",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]",
[g]="variable named \'main\' with external linkage has undefined behavior",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]",
[a]={"da8a3b903b45",1439561609,"[Sema] main can\'t be declared as global variable, in C++.","[Sema] main can\'t be declared as global variable, in C++.\n\nSo, we now reject that. We also warn for any external-linkage global\nvariable named main in C, because it results in undefined behavior.\n\nPR:   24309\nDifferential Revision: http://reviews.llvm.org/D11658\nReviewed by: rsmith\n\nllvm-svn: 245051"},
[b]=m,
[h]={{D,8114,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Special handling of variable named \'main\'.\n  if (Name.getAsIdentifierInfo() && Name.getAsIdentifierInfo()->isStr(\"main\") && NewVD->getDeclContext()->getRedeclContext()->isTranslationUnit() && !getLangOpts().Freestanding && !NewVD->getDescribedVarTemplate()) {\n    // C++ [basic.start.main]p3\n    // A program that declares a variable main at global scope is ill-formed.\n    if (getLangOpts().CPlusPlus)\n    // ...\n    // In C, and external-linkage variable named main results in undefined\n    // behavior.\n    else if (NewVD->hasExternalFormalLinkage())\n      Diag(D.getBeginLoc(), diag::warn_main_redefined);"}},
[f]={"da8a3b903b45",1439561609,"[Sema] main can\'t be declared as global variable, in C++.","[Sema] main can\'t be declared as global variable, in C++.\n\nSo, we now reject that. We also warn for any external-linkage global\nvariable named main in C, because it results in undefined behavior.\n\nPR:   24309\nDifferential Revision: http://reviews.llvm.org/D11658\nReviewed by: rsmith\n\nllvm-svn: 245051"},
[k]={
[h]={{M,8114,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Special handling of variable named \'main\'.\n  if (Name.getAsIdentifierInfo() && Name.getAsIdentifierInfo()->isStr(\"main\") && NewVD->getDeclContext()->getRedeclContext()->isTranslationUnit() && !getLangOpts().Freestanding && !NewVD->getDescribedVarTemplate()) {\n    // C++ [basic.start.main]p3\n    // A program that declares a variable main at global scope is ill-formed.\n    if (getLangOpts().CPlusPlus)\n    // ...\n    // In C, and external-linkage variable named main results in undefined\n    // behavior.\n    else if (NewVD->hasExternalFormalLinkage())\n      Diag(D.getBeginLoc(), diag::warn_main_redefined);"}},
[l]={
["clang/test/Sema/warn-extern-main.c"]={"clang/test/Sema/warn-extern-main.c:25:3: warning: variable named \'main\' with external linkage has undefined behavior [-Wmain]"}
["clang/test/Sema/warn-extern-main.c"]={"clang/test/Sema/warn-extern-main.c:25:3: warning: variable named \'main\' with external linkage has undefined behavior [-Wmain]"}
}
}
},
},
["warn_main_returns_bool_literal"]={
["warn_main_returns_bool_literal"]={
[j]={yd},
[k]={Fd},
[i]=yd,
[j]=Fd,
[c]="bool literal returned from \'main\'",
[c]="warn_main_returns_bool_literal",
[d]=g,
[d]="bool literal returned from \'main\'",
[e]="bool literal returned from \'main\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]",
[g]="bool literal returned from \'main\'",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]",
[a]={"9bb192ed9996",1480383317,"Add a warning for \'main\' returning \'true\' or \'false\'.","Add a warning for \'main\' returning \'true\' or \'false\'.\n\nPatch by Joshua Hurwitz!\n\nllvm-svn: 288097"},
[b]=m,
[h]={{Cb,3965,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  // ...\n  if (const FunctionDecl *FD = getCurFunctionDecl()) {\n    // ...\n    if (FD->isMain() && RetValExp)\n      if (isa<CXXBoolLiteralExpr>(RetValExp))\n        Diag(ReturnLoc, diag::warn_main_returns_bool_literal) << RetValExp->getSourceRange();"}},
[f]={"9bb192ed9996",1480383317,"Add a warning for \'main\' returning \'true\' or \'false\'.","Add a warning for \'main\' returning \'true\' or \'false\'.\n\nPatch by Joshua Hurwitz!\n\nllvm-svn: 288097"},
[k]={
[h]={{Hb,3965,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  // ...\n  if (const FunctionDecl *FD = getCurFunctionDecl()) {\n    // ...\n    if (FD->isMain() && RetValExp)\n      if (isa<CXXBoolLiteralExpr>(RetValExp))\n        Diag(ReturnLoc, diag::warn_main_returns_bool_literal) << RetValExp->getSourceRange();"}},
[l]={
["clang/test/Sema/warn-main-returns-bool-literal.cpp"]={"clang/test/Sema/warn-main-returns-bool-literal.cpp:19:3: warning: bool literal returned from \'main\' [-Wmain]"}
["clang/test/Sema/warn-main-returns-bool-literal.cpp"]={"clang/test/Sema/warn-main-returns-bool-literal.cpp:19:3: warning: bool literal returned from \'main\' [-Wmain]"}
}
}
},
},
["warn_max_tokens"]={
["warn_max_tokens"]={
[j]={"max-tokens"},
[k]={"max-tokens"},
[i]="max-tokens",
[j]="max-tokens",
[c]={{nil,mb,"the number of preprocessor source tokens (%0) exceeds this token limit (%1)"}},
[c]={{nil,z,"warn_max_tokens"}},
[d]=g,
[d]={{nil,z,"the number of preprocessor source tokens (%0) exceeds this token limit (%1)"}},
[e]="the number of preprocessor source tokens \\((.*?)\\) exceeds this token limit \\((.*?)\\)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmax\\-tokens[^\\]]*\\]",
[g]="the number of preprocessor source tokens \\((.*?)\\) exceeds this token limit \\((.*?)\\)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wmax\\-tokens[^\\]]*\\]",
[a]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit\n\nSee\nhttps://docs.google.com/document/d/1xMkTZMKx9llnMPgso0jrx3ankI4cv60xeZ0y4ksf4wc/preview\nfor background discussion.\n\nThis adds a warning, flags and pragmas to limit the number of\npre-processor tokens either at a certain point in a translation unit, or\noverall.\n\nThe idea is that this would allow projects to limit the size of certain\nwidely included headers, or for translation units overall, as a way to\ninsert backstops for header bloat and prevent compile-time regressions.\n\nDifferential revision: https://reviews.llvm.org/D72703"},
[b]={{nil,z,r}},
[f]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit\n\nSee\nhttps://docs.google.com/document/d/1xMkTZMKx9llnMPgso0jrx3ankI4cv60xeZ0y4ksf4wc/preview\nfor background discussion.\n\nThis adds a warning, flags and pragmas to limit the number of\npre-processor tokens either at a certain point in a translation unit, or\noverall.\n\nThe idea is that this would allow projects to limit the size of certain\nwidely included headers, or for translation units overall, as a way to\ninsert backstops for header bloat and prevent compile-time regressions.\n\nDifferential revision: https://reviews.llvm.org/D72703"},
[h]={{"clang/lib/Parse/ParsePragma.cpp",3995,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (PP.getTokenCount() > MaxTokens) {\n    PP.Diag(Loc, diag::warn_max_tokens) << PP.getTokenCount() << (unsigned)MaxTokens;"}},
[h]={{"clang/lib/Parse/ParsePragma.cpp",3995,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (PP.getTokenCount() > MaxTokens) {\n    PP.Diag(Loc, diag::warn_max_tokens) << PP.getTokenCount() << (unsigned)MaxTokens;"}},
[k]={
[l]={
["clang/test/Parser/max-tokens.cpp"]={"clang/test/Parser/max-tokens.cpp:11:31: warning: the number of preprocessor source tokens (7) exceeds this token limit (1) [-Wmax-tokens]"}
["clang/test/Parser/max-tokens.cpp"]={"clang/test/Parser/max-tokens.cpp:11:31: warning: the number of preprocessor source tokens (7) exceeds this token limit (1) [-Wmax-tokens]"}
}
}
},
},
["warn_max_tokens_total"]={
["warn_max_tokens_total"]={
[j]={"max-tokens"},
[k]={"max-tokens"},
[i]="max-tokens",
[j]="max-tokens",
[c]={{nil,mb,"the total number of preprocessor source tokens (%0) exceeds the token limit (%1)"}},
[c]={{nil,z,"warn_max_tokens_total"}},
[d]=g,
[d]={{nil,z,"the total number of preprocessor source tokens (%0) exceeds the token limit (%1)"}},
[e]="the total number of preprocessor source tokens \\((.*?)\\) exceeds the token limit \\((.*?)\\)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmax\\-tokens[^\\]]*\\]",
[g]="the total number of preprocessor source tokens \\((.*?)\\) exceeds the token limit \\((.*?)\\)",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wmax\\-tokens[^\\]]*\\]",
[a]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit\n\nSee\nhttps://docs.google.com/document/d/1xMkTZMKx9llnMPgso0jrx3ankI4cv60xeZ0y4ksf4wc/preview\nfor background discussion.\n\nThis adds a warning, flags and pragmas to limit the number of\npre-processor tokens either at a certain point in a translation unit, or\noverall.\n\nThe idea is that this would allow projects to limit the size of certain\nwidely included headers, or for translation units overall, as a way to\ninsert backstops for header bloat and prevent compile-time regressions.\n\nDifferential revision: https://reviews.llvm.org/D72703"},
[b]={{nil,z,r}},
[h]={{Lc,700,"/// ParseTopLevelDecl - Parse one top-level declaration, return whatever the\n/// action tells us to.  This returns true if the EOF was encountered.\n///\n///  top-level-declaration:\n///          declaration\n/// [C++20]  module-import-declaration\nbool Parser::ParseTopLevelDecl(DeclGroupPtrTy &Result, Sema::ModuleImportState &ImportState) {\n  // ...\n  case tok::eof:\n  case tok::annot_repl_input_end:\n    // Check whether -fmax-tokens= was reached.\n    if (PP.getMaxTokens() != 0 && PP.getTokenCount() > PP.getMaxTokens()) {\n      PP.Diag(Tok.getLocation(), diag::warn_max_tokens_total) << PP.getTokenCount() << PP.getMaxTokens();"}},
[f]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit\n\nSee\nhttps://docs.google.com/document/d/1xMkTZMKx9llnMPgso0jrx3ankI4cv60xeZ0y4ksf4wc/preview\nfor background discussion.\n\nThis adds a warning, flags and pragmas to limit the number of\npre-processor tokens either at a certain point in a translation unit, or\noverall.\n\nThe idea is that this would allow projects to limit the size of certain\nwidely included headers, or for translation units overall, as a way to\ninsert backstops for header bloat and prevent compile-time regressions.\n\nDifferential revision: https://reviews.llvm.org/D72703"},
[k]={
[h]={{Hc,700,"/// ParseTopLevelDecl - Parse one top-level declaration, return whatever the\n/// action tells us to.  This returns true if the EOF was encountered.\n///\n///  top-level-declaration:\n///          declaration\n/// [C++20]  module-import-declaration\nbool Parser::ParseTopLevelDecl(DeclGroupPtrTy &Result, Sema::ModuleImportState &ImportState) {\n  // ...\n  case tok::eof:\n  case tok::annot_repl_input_end:\n    // Check whether -fmax-tokens= was reached.\n    if (PP.getMaxTokens() != 0 && PP.getTokenCount() > PP.getMaxTokens()) {\n      PP.Diag(Tok.getLocation(), diag::warn_max_tokens_total) << PP.getTokenCount() << PP.getMaxTokens();"}},
[l]={
["clang/test/Parser/max-tokens.cpp"]={"clang/test/Parser/max-tokens.cpp:23:7: warning: the total number of preprocessor source tokens (8) exceeds the token limit (3) [-Wmax-tokens]"}
["clang/test/Parser/max-tokens.cpp"]={"clang/test/Parser/max-tokens.cpp:23:7: warning: the total number of preprocessor source tokens (8) exceeds the token limit (3) [-Wmax-tokens]"}
}
}
},
},
["warn_max_unsigned_zero"]={
["warn_max_unsigned_zero"]={
[j]={"max-unsigned-zero"},
[k]={"max-unsigned-zero"},
[i]="max-unsigned-zero",
[j]="max-unsigned-zero",
[c]="taking the max of %select{a value and unsigned zero|unsigned zero and a value}0 is always equal to the other value",
[c]="warn_max_unsigned_zero",
[d]=g,
[d]="taking the max of %select{a value and unsigned zero|unsigned zero and a value}0 is always equal to the other value",
[e]="taking the max of (?:a value and unsigned zero|unsigned zero and a value) is always equal to the other value",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmax\\-unsigned\\-zero[^\\]]*\\]",
[g]="taking the max of (?:a value and unsigned zero|unsigned zero and a value) is always equal to the other value",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wmax\\-unsigned\\-zero[^\\]]*\\]",
[a]={"67c0071517e5",1480981306,"Warn on unsigned zero in call to std::max","Warn on unsigned zero in call to std::max\n\nNew default warning that triggers when an unsigned zero is used in a call to\nstd::max.  For unsigned values, zero is the minimum value, so any call to\nstd::max is always equal to the other value.  A common pattern was to take\nthe max of zero and the difference of two unsigned values, not taking into\naccount that unsigned values wrap around below zero.  This warning also emits\na note with a fixit hint to remove the zero and call to std::max.\n\nllvm-svn: 288732"},
[b]=m,
[h]={{r,12131,"//===--- CHECK: Warn on use of std::max and unsigned zero. r---------------===//\nvoid Sema::CheckMaxUnsignedZero(const CallExpr *Call, const FunctionDecl *FDecl) {\n  // ...\n  Diag(Call->getExprLoc(), diag::warn_max_unsigned_zero) << IsFirstArgZero << Call->getCallee()->getSourceRange() << ZeroRange;"}},
[f]={"67c0071517e5",1480981306,"Warn on unsigned zero in call to std::max","Warn on unsigned zero in call to std::max\n\nNew default warning that triggers when an unsigned zero is used in a call to\nstd::max.  For unsigned values, zero is the minimum value, so any call to\nstd::max is always equal to the other value.  A common pattern was to take\nthe max of zero and the difference of two unsigned values, not taking into\naccount that unsigned values wrap around below zero.  This warning also emits\na note with a fixit hint to remove the zero and call to std::max.\n\nllvm-svn: 288732"},
[k]={
[h]={{t,12131,"//===--- CHECK: Warn on use of std::max and unsigned zero. r---------------===//\nvoid Sema::CheckMaxUnsignedZero(const CallExpr *Call, const FunctionDecl *FDecl) {\n  // ...\n  Diag(Call->getExprLoc(), diag::warn_max_unsigned_zero) << IsFirstArgZero << Call->getCallee()->getSourceRange() << ZeroRange;"}},
[l]={
["clang/test/SemaCXX/warn-max-unsigned-zero.cpp"]={"clang/test/SemaCXX/warn-max-unsigned-zero.cpp:10:12: warning: taking the max of a value and unsigned zero is always equal to the other value [-Wmax-unsigned-zero]","clang/test/SemaCXX/warn-max-unsigned-zero.cpp:15:12: warning: taking the max of a value and unsigned zero is always equal to the other value [-Wmax-unsigned-zero]","clang/test/SemaCXX/warn-max-unsigned-zero.cpp:20:12: warning: taking the max of unsigned zero and a value is always equal to the other value [-Wmax-unsigned-zero]","clang/test/SemaCXX/warn-max-unsigned-zero.cpp:25:12: warning: taking the max of unsigned zero and a value is always equal to the other value [-Wmax-unsigned-zero]","clang/test/SemaCXX/warn-max-unsigned-zero.cpp:41:10: warning: taking the max of a value and unsigned zero is always equal to the other value [-Wmax-unsigned-zero]"}
["clang/test/SemaCXX/warn-max-unsigned-zero.cpp"]={"clang/test/SemaCXX/warn-max-unsigned-zero.cpp:10:12: warning: taking the max of a value and unsigned zero is always equal to the other value [-Wmax-unsigned-zero]","clang/test/SemaCXX/warn-max-unsigned-zero.cpp:15:12: warning: taking the max of a value and unsigned zero is always equal to the other value [-Wmax-unsigned-zero]","clang/test/SemaCXX/warn-max-unsigned-zero.cpp:20:12: warning: taking the max of unsigned zero and a value is always equal to the other value [-Wmax-unsigned-zero]","clang/test/SemaCXX/warn-max-unsigned-zero.cpp:25:12: warning: taking the max of unsigned zero and a value is always equal to the other value [-Wmax-unsigned-zero]","clang/test/SemaCXX/warn-max-unsigned-zero.cpp:41:10: warning: taking the max of a value and unsigned zero is always equal to the other value [-Wmax-unsigned-zero]"}
}
}
},
},
["warn_maybe_capture_bad_target_this_ptr"]={
["warn_maybe_capture_bad_target_this_ptr"]={
[j]={"gpu-maybe-wrong-side"},
[k]={"gpu-maybe-wrong-side"},
[i]="gpu-maybe-wrong-side",
[j]="gpu-maybe-wrong-side",
[c]={{nil,Q,"capture host side class data member by this pointer in device or host device lambda function may result in invalid memory access if this pointer is not accessible on device side"}},
[c]={{nil,w,"warn_maybe_capture_bad_target_this_ptr"}},
[d]=g,
[d]={{nil,w,"capture host side class data member by this pointer in device or host device lambda function may result in invalid memory access if this pointer is not accessible on device side"}},
[e]="capture host side class data member by this pointer in device or host device lambda function may result in invalid memory access if this pointer is not accessible on device side",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wgpu\\-maybe\\-wrong\\-side[^\\]]*\\]",
[g]="capture host side class data member by this pointer in device or host device lambda function may result in invalid memory access if this pointer is not accessible on device side",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wgpu\\-maybe\\-wrong\\-side[^\\]]*\\]",
[a]={Tc,1615397021,Yc,Mc},
[b]={{nil,w,m}},
[f]={dd,1615397021,bd,ad},
[h]={{"clang/lib/Sema/SemaCUDA.cpp",891,"// Check the wrong-sided reference capture of lambda for CUDA/HIP.\n// A lambda function may capture a stack variable by reference when it is\n// defined and uses the capture by reference when the lambda is called. When\n// the capture and use happen on different sides, the capture is invalid and\n// should be diagnosed.\nvoid Sema::CUDACheckLambdaCapture(CXXMethodDecl *Callee, const sema::Capture &Capture) {\n  // ...\n  if (Capture.isVariableCapture()) {\n  // ...\n  } else if (Capture.isThisCapture()) {\n    // ...\n    SemaDiagnosticBuilder(DiagKind, Capture.getLocation(), diag::warn_maybe_capture_bad_target_this_ptr, Callee, *this);"}},
[h]={{"clang/lib/Sema/SemaCUDA.cpp",891,"// Check the wrong-sided reference capture of lambda for CUDA/HIP.\n// A lambda function may capture a stack variable by reference when it is\n// defined and uses the capture by reference when the lambda is called. When\n// the capture and use happen on different sides, the capture is invalid and\n// should be diagnosed.\nvoid Sema::CUDACheckLambdaCapture(CXXMethodDecl *Callee, const sema::Capture &Capture) {\n  // ...\n  if (Capture.isVariableCapture()) {\n  // ...\n  } else if (Capture.isThisCapture()) {\n    // ...\n    SemaDiagnosticBuilder(DiagKind, Capture.getLocation(), diag::warn_maybe_capture_bad_target_this_ptr, Callee, *this);"}},
[k]={
[l]={
["clang/test/SemaCUDA/lambda.cu"]={"clang/test/SemaCUDA/lambda.cu:29:31: warning: capture host side class data member by this pointer in device or host device lambda function may result in invalid memory access if this pointer is not accessible on device side [-Wgpu-maybe-wrong-side]","clang/test/SemaCUDA/lambda.cu:32:31: warning: capture host side class data member by this pointer in device or host device lambda function may result in invalid memory access if this pointer is not accessible on device side [-Wgpu-maybe-wrong-side]","clang/test/SemaCUDA/lambda.cu:35:43: warning: capture host side class data member by this pointer in device or host device lambda function may result in invalid memory access if this pointer is not accessible on device side [-Wgpu-maybe-wrong-side]","clang/test/SemaCUDA/lambda.cu:39:24: warning: capture host side class data member by this pointer in device or host device lambda function may result in invalid memory access if this pointer is not accessible on device side [-Wgpu-maybe-wrong-side]","clang/test/SemaCUDA/lambda.cu:44:21: warning: capture host side class data member by this pointer in device or host device lambda function may result in invalid memory access if this pointer is not accessible on device side [-Wgpu-maybe-wrong-side]"}
["clang/test/SemaCUDA/lambda.cu"]={"clang/test/SemaCUDA/lambda.cu:29:31: warning: capture host side class data member by this pointer in device or host device lambda function may result in invalid memory access if this pointer is not accessible on device side [-Wgpu-maybe-wrong-side]","clang/test/SemaCUDA/lambda.cu:32:31: warning: capture host side class data member by this pointer in device or host device lambda function may result in invalid memory access if this pointer is not accessible on device side [-Wgpu-maybe-wrong-side]","clang/test/SemaCUDA/lambda.cu:35:43: warning: capture host side class data member by this pointer in device or host device lambda function may result in invalid memory access if this pointer is not accessible on device side [-Wgpu-maybe-wrong-side]","clang/test/SemaCUDA/lambda.cu:39:24: warning: capture host side class data member by this pointer in device or host device lambda function may result in invalid memory access if this pointer is not accessible on device side [-Wgpu-maybe-wrong-side]","clang/test/SemaCUDA/lambda.cu:44:21: warning: capture host side class data member by this pointer in device or host device lambda function may result in invalid memory access if this pointer is not accessible on device side [-Wgpu-maybe-wrong-side]"}
}
}
},
},
["warn_maybe_falloff_nonvoid_coroutine"]={
["warn_maybe_falloff_nonvoid_coroutine"]={
[j]={B,H,N,lc},
[k]={K,O,V,rc},
[i]=lc,
[j]=rc,
[c]="control may reach end of non-void coroutine",
[c]="warn_maybe_falloff_nonvoid_coroutine",
[d]=g,
[d]="control may reach end of non-void coroutine",
[e]="non\\-void coroutine does not return a value in all control paths",
[e]=i,
[f]=Cd,
[g]="non\\-void coroutine does not return a value in all control paths",
[b]=l,
[a]=vd,
[a]={"709d1b30ab9e",1477553431,"[coroutines] Build fallthrough and set_exception statements.","[coroutines] Build fallthrough and set_exception statements.\n\nSummary:\nThis patch adds semantic checking and building of the fall-through `co_return;` statement as well as the `p.set_exception(std::current_exception())` call for handling uncaught exceptions.\n\nThe fall-through statement is built and checked according to:\n> [dcl.fct.def.coroutine]/4\n> The unqualified-ids return_void and return_value are looked up in the scope of class P. If\n> both are found, the program is ill-formed. If the unqualified-id return_void is found, flowing\n> off the end of a coroutine is equivalent to a co_return with no operand. Otherwise, flowing off\n> the end of a coroutine results in undefined behavior.\n\nSimilarly the `set_exception` call is only built when that unqualified-id is found in the scope of class P.\n\nAdditionally this patch adds fall-through warnings for non-void returning coroutines. Since it\'s surprising undefined behavior I thought it would be important to add the warning right away. \n\n\nReviewers: majnemer, GorNishanov, rsmith\n\nSubscribers: mehdi_amini, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D25349\n\nllvm-svn: 285271"},
[b]=m,
[h]={{gb,585,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForCoroutine(const Decl *Func) {\n    // ...\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_coroutine;"},{gb,639,"struct CheckFallThroughDiagnostics {\n  // ...\n  bool checkDiagnostics(DiagnosticsEngine &D, bool ReturnsVoid, bool HasNoReturn) const {\n    // ...\n    if (funMode == Coroutine) {\n      return (ReturnsVoid || D.isIgnored(diag::warn_maybe_falloff_nonvoid_function, FuncLoc) || D.isIgnored(diag::warn_maybe_falloff_nonvoid_coroutine, FuncLoc)) && (!HasNoReturn);"}},
[f]={"709d1b30ab9e",1477553431,"[coroutines] Build fallthrough and set_exception statements.","[coroutines] Build fallthrough and set_exception statements.\n\nSummary:\nThis patch adds semantic checking and building of the fall-through `co_return;` statement as well as the `p.set_exception(std::current_exception())` call for handling uncaught exceptions.\n\nThe fall-through statement is built and checked according to:\n> [dcl.fct.def.coroutine]/4\n> The unqualified-ids return_void and return_value are looked up in the scope of class P. If\n> both are found, the program is ill-formed. If the unqualified-id return_void is found, flowing\n> off the end of a coroutine is equivalent to a co_return with no operand. Otherwise, flowing off\n> the end of a coroutine results in undefined behavior.\n\nSimilarly the `set_exception` call is only built when that unqualified-id is found in the scope of class P.\n\nAdditionally this patch adds fall-through warnings for non-void returning coroutines. Since it\'s surprising undefined behavior I thought it would be important to add the warning right away. \n\n\nReviewers: majnemer, GorNishanov, rsmith\n\nSubscribers: mehdi_amini, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D25349\n\nllvm-svn: 285271"},
[k]={
[h]={{qb,585,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForCoroutine(const Decl *Func) {\n    // ...\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_coroutine;"},{qb,639,"struct CheckFallThroughDiagnostics {\n  // ...\n  bool checkDiagnostics(DiagnosticsEngine &D, bool ReturnsVoid, bool HasNoReturn) const {\n    // ...\n    if (funMode == Coroutine) {\n      return (ReturnsVoid || D.isIgnored(diag::warn_maybe_falloff_nonvoid_function, FuncLoc) || D.isIgnored(diag::warn_maybe_falloff_nonvoid_coroutine, FuncLoc)) && (!HasNoReturn);"}},
[l]={
["clang/test/SemaCXX/coreturn.cpp"]={"clang/test/SemaCXX/coreturn.cpp:96:1: warning: non-void coroutine does not return a value in all control paths [-Wreturn-type]","clang/test/SemaCXX/coreturn.cpp:115:1: warning: non-void coroutine does not return a value in all control paths [-Wreturn-type]","clang/test/SemaCXX/coreturn.cpp:140:1: warning: non-void coroutine does not return a value in all control paths [-Wreturn-type]"}
["clang/test/SemaCXX/coreturn.cpp"]={"clang/test/SemaCXX/coreturn.cpp:96:1: warning: non-void coroutine does not return a value in all control paths [-Wreturn-type]","clang/test/SemaCXX/coreturn.cpp:115:1: warning: non-void coroutine does not return a value in all control paths [-Wreturn-type]","clang/test/SemaCXX/coreturn.cpp:140:1: warning: non-void coroutine does not return a value in all control paths [-Wreturn-type]"}
}
}
},
},
["warn_maybe_falloff_nonvoid_function"]={
["warn_maybe_falloff_nonvoid_function"]={
[j]={B,H,N,lc},
[k]={K,O,V,rc},
[i]=lc,
[j]=rc,
[c]={{nil,z,"non-void function does not return a value in all control paths"},{I,nil,"control may reach end of non-void function"}},
[c]="warn_maybe_falloff_nonvoid_function",
[d]=g,
[d]={{nil,q,"non-void function does not return a value in all control paths"},{x,nil,"control may reach end of non-void function"}},
[e]="non\\-void function does not return a value in all control paths",
[e]=i,
[f]=Cd,
[g]="non\\-void function does not return a value in all control paths",
[b]=l,
[a]=vd,
[a]={"33979f75a0fd",1248307017,"Add warning for falling off the end of a function that should return a","Add warning for falling off the end of a function that should return a\nvalue.  This is on by default, and controlled by -Wreturn-type (-Wmost\n-Wall).  I believe there should be very few false positives, though\nthe most interesting case would be:\n\n  int() { bar(); }\n\nwhen bar does:\n\n  bar() { while (1) ; }\n\nHere, we assume functions return, unless they are marked with the\nnoreturn attribute.  I can envision a fixit note for functions that\nnever return normally that don\'t have a noreturn attribute to add a\nnoreturn attribute.\n\nIf anyone spots other false positives, let me know!\n\nllvm-svn: 76821"},
[b]=m,
[h]={{gb,553,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    // ...\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_function;"},{gb,628,"struct CheckFallThroughDiagnostics {\n  // ...\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));"},{gb,638,"struct CheckFallThroughDiagnostics {\n  // ...\n  bool checkDiagnostics(DiagnosticsEngine &D, bool ReturnsVoid, bool HasNoReturn) const {\n    // ...\n    if (funMode == Coroutine) {\n      return (ReturnsVoid || D.isIgnored(diag::warn_maybe_falloff_nonvoid_function, FuncLoc) || D.isIgnored(diag::warn_maybe_falloff_nonvoid_coroutine, FuncLoc)) && (!HasNoReturn);"}},
[f]={"33979f75a0fd",1248307017,"Add warning for falling off the end of a function that should return a","Add warning for falling off the end of a function that should return a\nvalue.  This is on by default, and controlled by -Wreturn-type (-Wmost\n-Wall).  I believe there should be very few false positives, though\nthe most interesting case would be:\n\n  int() { bar(); }\n\nwhen bar does:\n\n  bar() { while (1) ; }\n\nHere, we assume functions return, unless they are marked with the\nnoreturn attribute.  I can envision a fixit note for functions that\nnever return normally that don\'t have a noreturn attribute to add a\nnoreturn attribute.\n\nIf anyone spots other false positives, let me know!\n\nllvm-svn: 76821"},
[k]={
[h]={{qb,553,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    // ...\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_function;"},{qb,628,"struct CheckFallThroughDiagnostics {\n  // ...\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));"},{qb,638,"struct CheckFallThroughDiagnostics {\n  // ...\n  bool checkDiagnostics(DiagnosticsEngine &D, bool ReturnsVoid, bool HasNoReturn) const {\n    // ...\n    if (funMode == Coroutine) {\n      return (ReturnsVoid || D.isIgnored(diag::warn_maybe_falloff_nonvoid_function, FuncLoc) || D.isIgnored(diag::warn_maybe_falloff_nonvoid_coroutine, FuncLoc)) && (!HasNoReturn);"}},
[l]={
["clang/test/Sema/freemain.c"]={"clang/test/Sema/freemain.c:9:1: warning: non-void function does not return a value in all control paths [-Wreturn-type]"}
["clang/test/Sema/freemain.c"]={"clang/test/Sema/freemain.c:9:1: warning: non-void function does not return a value in all control paths [-Wreturn-type]"}
}
}
},
},
["warn_maybe_falloff_nonvoid_lambda"]={
["warn_maybe_falloff_nonvoid_lambda"]={
[j]={B,H,N,lc},
[k]={K,O,V,rc},
[i]=lc,
[j]=rc,
[c]={{nil,z,"non-void lambda does not return a value in all control paths"},{I,nil,"control may reach end of non-void lambda"}},
[c]="warn_maybe_falloff_nonvoid_lambda",
[d]=g,
[d]={{nil,q,"non-void lambda does not return a value in all control paths"},{x,nil,"control may reach end of non-void lambda"}},
[e]="non\\-void lambda does not return a value in all control paths",
[e]=i,
[f]=Cd,
[g]="non\\-void lambda does not return a value in all control paths",
[b]=Wc,
[a]=vd,
[a]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions.","Specialize noreturn diagnostics for lambda expressions.\n\nllvm-svn: 150586"},
[b]=gd,
[h]={{gb,614,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForLambda() {\n    // ...\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_lambda;"}},
[f]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions.","Specialize noreturn diagnostics for lambda expressions.\n\nllvm-svn: 150586"},
[k]={
[h]={{qb,614,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForLambda() {\n    // ...\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_lambda;"}},
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:6:54: warning: non-void lambda does not return a value in all control paths [-Wreturn-type]"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:6:54: warning: non-void lambda does not return a value in all control paths [-Wreturn-type]"}
}
}
},
},
["warn_maybe_uninit_var"]={
["warn_maybe_uninit_var"]={
[j]={"conditional-uninitialized"},
[k]={"conditional-uninitialized"},
[i]="conditional-uninitialized",
[j]="conditional-uninitialized",
[c]="variable %0 may be uninitialized when %select{used here|captured by block}1",
[c]="warn_maybe_uninit_var",
[d]=g,
[d]="variable %0 may be uninitialized when %select{used here|captured by block}1",
[e]="variable (.*?) may be uninitialized when (?:used here|captured by block)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wconditional\\-uninitialized[^\\]]*\\]",
[g]="variable (.*?) may be uninitialized when (?:used here|captured by block)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wconditional\\-uninitialized[^\\]]*\\]",
[a]={"c8c4e5f37103",1300165058,"Split warnings from -Wuninitialized-experimental into \"must-be-initialized\" and \"may-be-initialized\"...","Split warnings from -Wuninitialized-experimental into \"must-be-initialized\" and \"may-be-initialized\" warnings, each controlled by different flags.\n\nllvm-svn: 127666"},
[b]=m,
[h]={{gb,990,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  // ...\n  if (!Diagnosed)\n    S.Diag(Use.getUser()->getBeginLoc(), diag::warn_maybe_uninit_var) << VD->getDeclName() << IsCapturedByBlock << Use.getUser()->getSourceRange();"},{gb,2631,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  // ...\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())) {"}},
[f]={"c8c4e5f37103",1300165058,"Split warnings from -Wuninitialized-experimental into \"must-be-initialized\" and \"may-be-initialized\"...","Split warnings from -Wuninitialized-experimental into \"must-be-initialized\" and \"may-be-initialized\" warnings, each controlled by different flags.\n\nllvm-svn: 127666"},
[k]={
[h]={{qb,990,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  // ...\n  if (!Diagnosed)\n    S.Diag(Use.getUser()->getBeginLoc(), diag::warn_maybe_uninit_var) << VD->getDeclName() << IsCapturedByBlock << Use.getUser()->getSourceRange();"},{qb,2631,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  // ...\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())) {"}},
[l]={
["clang/test/SemaCXX/uninit-variables-conditional.cpp"]={"clang/test/SemaCXX/uninit-variables-conditional.cpp:22:10: warning: variable \'x\' may be uninitialized when used here [-Wconditional-uninitialized]"}
["clang/test/SemaCXX/uninit-variables-conditional.cpp"]={"clang/test/SemaCXX/uninit-variables-conditional.cpp:22:10: warning: variable \'x\' may be uninitialized when used here [-Wconditional-uninitialized]"}
}
}
},
},
["warn_maynot_respond"]={
["warn_maynot_respond"]={
[c]="%0 may not respond to %1",
[c]="warn_maynot_respond",
[d]=g,
[d]="%0 may not respond to %1",
[e]="(.*?) may not respond to (.*?)",
[e]=i,
[f]=Gb,
[g]="(.*?) may not respond to (.*?)",
[b]=l,
[a]=Ib,
[a]={Ub,1237025389,Xb,Wb},
[b]=m,
[h]={{Sc,3120,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (!Method) {\n    // ...\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    // ...\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    // ...\n    } else {\n      // ...\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      // ...\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n        // ...\n        if (!Method) {\n          // ...\n          if (!Method && (!Receiver || !isSelfExpr(Receiver))) {\n            // If we still haven\'t found a method, look in the global pool. This\n            // behavior isn\'t very desirable, however we need it for GCC\n            // compatibility. FIXME: should we deviate??\n            if (OCIType->qual_empty()) {\n              // ...\n              if (Method && !forwardClass)\n                Diag(SelLoc, diag::warn_maynot_respond) << OCIType->getInterfaceDecl()->getIdentifier() << Sel << RecRange;"}},
[f]={Yb,1237025389,Zb,ac},
[k]={
[h]={{Uc,3120,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (!Method) {\n    // ...\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    // ...\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    // ...\n    } else {\n      // ...\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      // ...\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n        // ...\n        if (!Method) {\n          // ...\n          if (!Method && (!Receiver || !isSelfExpr(Receiver))) {\n            // If we still haven\'t found a method, look in the global pool. This\n            // behavior isn\'t very desirable, however we need it for GCC\n            // compatibility. FIXME: should we deviate??\n            if (OCIType->qual_empty()) {\n              // ...\n              if (Method && !forwardClass)\n                Diag(SelLoc, diag::warn_maynot_respond) << OCIType->getInterfaceDecl()->getIdentifier() << Sel << RecRange;"}},
[l]={
["clang/test/SemaObjC/warn-selector-selection.m"]={"clang/test/SemaObjC/warn-selector-selection.m:13:8: warning: \'Object\' may not respond to \'setWindow:\'"}
["clang/test/SemaObjC/warn-selector-selection.m"]={"clang/test/SemaObjC/warn-selector-selection.m:13:8: warning: \'Object\' may not respond to \'setWindow:\'"}
}
}
},
},
["warn_member_extra_qualification"]={
["warn_member_extra_qualification"]={
[j]={"microsoft","microsoft-extra-qualification"},
[k]={"microsoft","microsoft-extra-qualification"},
[i]="microsoft-extra-qualification",
[j]="microsoft-extra-qualification",
[c]="extra qualification on member %0",
[c]="warn_member_extra_qualification",
[d]=g,
[d]="extra qualification on member %0",
[e]="extra qualification on member (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-extra\\-qualification[^\\]]*\\]",
[g]="extra qualification on member (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-extra\\-qualification[^\\]]*\\]",
[a]={"6d76e6cd9250",1285967968,"Better diagnostic for superfluous scope specifier inside a class definition for member functions. + ...","Better diagnostic for superfluous scope specifier inside a class definition for member functions. + Fixit.\n\nExample: \nclass A {\n  void A::foo(); //warning: extra qualification on member \'foo\'\n};\n\nllvm-svn: 115347"},
[b]=m,
[h]={{D,6176,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // If the user provided a superfluous scope specifier that refers back to the\n  // class in which the entity is already declared, diagnose and ignore it.\n  //\n  // class X {\n  //  void X::f();\n  // };\n  //\n  // Note, it was once ill-formed to give redundant qualification in all\n  // contexts, but that rule was removed by DR482.\n  if (Cur->Equals(DC)) {\n    if (Cur->isRecord()) {\n      Diag(Loc, LangOpts.MicrosoftExt ? diag::warn_member_extra_qualification : diag::err_member_extra_qualification) << Name << FixItHint::CreateRemoval(SS.getRange());"}},
[f]={"6d76e6cd9250",1285967968,"Better diagnostic for superfluous scope specifier inside a class definition for member functions. + ...","Better diagnostic for superfluous scope specifier inside a class definition for member functions. + Fixit.\n\nExample: \nclass A {\n  void A::foo(); //warning: extra qualification on member \'foo\'\n};\n\nllvm-svn: 115347"},
[k]={
[h]={{M,6176,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // If the user provided a superfluous scope specifier that refers back to the\n  // class in which the entity is already declared, diagnose and ignore it.\n  //\n  // class X {\n  //  void X::f();\n  // };\n  //\n  // Note, it was once ill-formed to give redundant qualification in all\n  // contexts, but that rule was removed by DR482.\n  if (Cur->Equals(DC)) {\n    if (Cur->isRecord()) {\n      Diag(Loc, LangOpts.MicrosoftExt ? diag::warn_member_extra_qualification : diag::err_member_extra_qualification) << Name << FixItHint::CreateRemoval(SS.getRange());"}},
[l]={
["clang/test/SemaCXX/MicrosoftExtensions.cpp"]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:259:6: warning: extra qualification on member \'C\' [-Wmicrosoft-extra-qualification]"}
["clang/test/SemaCXX/MicrosoftExtensions.cpp"]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:259:6: warning: extra qualification on member \'C\' [-Wmicrosoft-extra-qualification]"}
}
}
},
},
["warn_memsize_comparison"]={
["warn_memsize_comparison"]={
[j]={"memsize-comparison"},
[k]={"memsize-comparison"},
[i]="memsize-comparison",
[j]="memsize-comparison",
[c]="size argument in %0 call is a comparison",
[c]="warn_memsize_comparison",
[d]=g,
[d]="size argument in %0 call is a comparison",
[e]="size argument in (.*?) call is a comparison",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmemsize\\-comparison[^\\]]*\\]",
[g]="size argument in (.*?) call is a comparison",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wmemsize\\-comparison[^\\]]*\\]",
[a]={"0e6daefe8f11",1388101119,"Warn on mismatched parentheses in memcmp and friends.","Warn on mismatched parentheses in memcmp and friends.\n\nThisadds a new warning that warns on code like this:\n\n  if (memcmp(a, b, sizeof(a) != 0))\n\nThe warning looks like:\n\ntest4.cc:5:30: warning: size argument in \'memcmp\' call is a comparison [-Wmemsize-comparison]\n  if (memcmp(a, b, sizeof(a) != 0))\n                  ~~~~~~~~~~^~~~\ntest4.cc:5:7: note: did you mean to compare the result of \'memcmp\' instead?\n  if (memcmp(a, b, sizeof(a) != 0))\n      ^                          ~\n                            )\ntest4.cc:5:20: note: explicitly cast the argument to size_t to silence this warning\n  if (memcmp(a, b, sizeof(a) != 0))\n                  ^\n                  (size_t)(    )\n1 warning generated.\n\nThis found 2 bugs in chromium and has 0 false positives on both chromium and\nllvm.\n\nThe idea of triggering this warning on a binop in the size argument is due to\nrnk.\n\nllvm-svn: 198063"},
[b]=m,
[h]={{r,12168,"/// Takes the expression passed to the size_t parameter of functions\n/// such as memcmp, strncat, etc and warns if it\'s a comparison.\n///\n/// This is to catch typos like `if (memcmp(&a, &b, sizeof(a) > 0))`.\nstatic bool CheckMemorySizeofForComparison(Sema &S, const Expr *E, IdentifierInfo *FnName, SourceLocation FnLoc, SourceLocation RParenLoc) {\n  // ...\n  S.Diag(Size->getOperatorLoc(), diag::warn_memsize_comparison) << SizeRange << FnName;"}},
[f]={"0e6daefe8f11",1388101119,"Warn on mismatched parentheses in memcmp and friends.","Warn on mismatched parentheses in memcmp and friends.\n\nThisadds a new warning that warns on code like this:\n\n  if (memcmp(a, b, sizeof(a) != 0))\n\nThe warning looks like:\n\ntest4.cc:5:30: warning: size argument in \'memcmp\' call is a comparison [-Wmemsize-comparison]\n  if (memcmp(a, b, sizeof(a) != 0))\n                  ~~~~~~~~~~^~~~\ntest4.cc:5:7: note: did you mean to compare the result of \'memcmp\' instead?\n  if (memcmp(a, b, sizeof(a) != 0))\n      ^                          ~\n                            )\ntest4.cc:5:20: note: explicitly cast the argument to size_t to silence this warning\n  if (memcmp(a, b, sizeof(a) != 0))\n                  ^\n                  (size_t)(    )\n1 warning generated.\n\nThis found 2 bugs in chromium and has 0 false positives on both chromium and\nllvm.\n\nThe idea of triggering this warning on a binop in the size argument is due to\nrnk.\n\nllvm-svn: 198063"},
[k]={
[h]={{t,12168,"/// Takes the expression passed to the size_t parameter of functions\n/// such as memcmp, strncat, etc and warns if it\'s a comparison.\n///\n/// This is to catch typos like `if (memcmp(&a, &b, sizeof(a) > 0))`.\nstatic bool CheckMemorySizeofForComparison(Sema &S, const Expr *E, IdentifierInfo *FnName, SourceLocation FnLoc, SourceLocation RParenLoc) {\n  // ...\n  S.Diag(Size->getOperatorLoc(), diag::warn_memsize_comparison) << SizeRange << FnName;"}},
[l]={
["clang/test/SemaCXX/warn-memsize-comparison.cpp"]={"clang/test/SemaCXX/warn-memsize-comparison.cpp:19:32: warning: size argument in \'memset\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:25:34: warning: size argument in \'memmove\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:32:33: warning: size argument in \'memcpy\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:38:33: warning: size argument in \'memcmp\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:44:34: warning: size argument in \'strncmp\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:50:38: warning: size argument in \'strncasecmp\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:56:39: warning: size argument in \'strncpy\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:63:43: warning: size argument in \'strncat\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:69:30: warning: size argument in \'strndup\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:75:34: warning: size argument in \'strlcpy\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:81:34: warning: size argument in \'strlcat\' call is a comparison [-Wmemsize-comparison]"}
["clang/test/SemaCXX/warn-memsize-comparison.cpp"]={"clang/test/SemaCXX/warn-memsize-comparison.cpp:19:32: warning: size argument in \'memset\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:25:34: warning: size argument in \'memmove\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:32:33: warning: size argument in \'memcpy\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:38:33: warning: size argument in \'memcmp\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:44:34: warning: size argument in \'strncmp\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:50:38: warning: size argument in \'strncasecmp\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:56:39: warning: size argument in \'strncpy\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:63:43: warning: size argument in \'strncat\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:69:30: warning: size argument in \'strndup\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:75:34: warning: size argument in \'strlcpy\' call is a comparison [-Wmemsize-comparison]","clang/test/SemaCXX/warn-memsize-comparison.cpp:81:34: warning: size argument in \'strlcat\' call is a comparison [-Wmemsize-comparison]"}
}
}
},
},
["warn_messaging_unqualified_id"]={
["warn_messaging_unqualified_id"]={
[j]={"objc-messaging-id"},
[k]={"objc-messaging-id"},
[i]="objc-messaging-id",
[j]="objc-messaging-id",
[c]={{nil,lb,"messaging unqualified id"}},
[c]={{nil,F,"warn_messaging_unqualified_id"}},
[d]=g,
[d]={{nil,F,"messaging unqualified id"}},
[e]="messaging unqualified id",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wobjc\\-messaging\\-id[^\\]]*\\]",
[g]="messaging unqualified id",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-messaging\\-id[^\\]]*\\]",
[a]={"d9f1284009d5",1503677537,"[ObjC] Add a -Wobjc-messaging-id warning","[ObjC] Add a -Wobjc-messaging-id warning\n\n-Wobjc-messaging-id is a new, non-default warning that warns about\nmessage sends to unqualified id in Objective-C. This warning is useful\nfor projects that would like to avoid any potential future compiler\nerrors/warnings, as the system frameworks might add a method with the same\nselector which could make the message send to id ambiguous.\n\nrdar://33303354\n\nllvm-svn: 311779"},
[b]={{nil,F,m}},
[h]={{Sc,3180,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (Method && Method->isDirectMethod()) {\n  // ...\n  } else if (ReceiverType->isObjCIdType() && !isImplicit) {\n    Diag(Receiver->getExprLoc(), diag::warn_messaging_unqualified_id);"}},
[f]={"d9f1284009d5",1503677537,"[ObjC] Add a -Wobjc-messaging-id warning","[ObjC] Add a -Wobjc-messaging-id warning\n\n-Wobjc-messaging-id is a new, non-default warning that warns about\nmessage sends to unqualified id in Objective-C. This warning is useful\nfor projects that would like to avoid any potential future compiler\nerrors/warnings, as the system frameworks might add a method with the same\nselector which could make the message send to id ambiguous.\n\nrdar://33303354\n\nllvm-svn: 311779"},
[k]={
[h]={{Uc,3180,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (Method && Method->isDirectMethod()) {\n  // ...\n  } else if (ReceiverType->isObjCIdType() && !isImplicit) {\n    Diag(Receiver->getExprLoc(), diag::warn_messaging_unqualified_id);"}},
[l]={
["clang/test/SemaObjC/warn-messaging-id.mm"]={"clang/test/SemaObjC/warn-messaging-id.mm:18:4: warning: messaging unqualified id [-Wobjc-messaging-id]","clang/test/SemaObjC/warn-messaging-id.mm:19:4: warning: messaging unqualified id [-Wobjc-messaging-id]","clang/test/SemaObjC/warn-messaging-id.mm:13:4: warning: messaging unqualified id [-Wobjc-messaging-id]"}
["clang/test/SemaObjC/warn-messaging-id.mm"]={"clang/test/SemaObjC/warn-messaging-id.mm:18:4: warning: messaging unqualified id [-Wobjc-messaging-id]","clang/test/SemaObjC/warn-messaging-id.mm:19:4: warning: messaging unqualified id [-Wobjc-messaging-id]","clang/test/SemaObjC/warn-messaging-id.mm:13:4: warning: messaging unqualified id [-Wobjc-messaging-id]"}
}
}
},
},
["warn_method_param_declaration"]={
["warn_method_param_declaration"]={
[j]={"duplicate-method-arg"},
[k]={"duplicate-method-arg"},
[i]="duplicate-method-arg",
[j]="duplicate-method-arg",
[c]="redeclaration of method parameter %0",
[c]="warn_method_param_declaration",
[d]=g,
[d]="redeclaration of method parameter %0",
[e]="redeclaration of method parameter (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-method\\-arg[^\\]]*\\]",
[g]="redeclaration of method parameter (.*?)",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-method\\-arg[^\\]]*\\]",
[a]={"c677f693971f",1299956070,"Place duplicate argument declaration in in","Place duplicate argument declaration in in\nmethod prototypes under the -Wduplicate-method-arg and\nturn it off by default.\n\nllvm-svn: 127552"},
[b]=A,
[h]={{wc,4788,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  for (unsigned i = 0, e = Sel.getNumArgs(); i != e; ++i) {\n    // ...\n    if (R.isSingleResult()) {\n      // ...\n      if (S->isDeclScope(PrevDecl)) {\n        Diag(ArgInfo[i].NameLoc, (MethodDefinition ? diag::warn_method_param_redefinition : diag::warn_method_param_declaration)) << ArgInfo[i].Name;"}},
[f]={"c677f693971f",1299956070,"Place duplicate argument declaration in in","Place duplicate argument declaration in in\nmethod prototypes under the -Wduplicate-method-arg and\nturn it off by default.\n\nllvm-svn: 127552"},
[k]={
[h]={{Gc,4788,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  for (unsigned i = 0, e = Sel.getNumArgs(); i != e; ++i) {\n    // ...\n    if (R.isSingleResult()) {\n      // ...\n      if (S->isDeclScope(PrevDecl)) {\n        Diag(ArgInfo[i].NameLoc, (MethodDefinition ? diag::warn_method_param_redefinition : diag::warn_method_param_declaration)) << ArgInfo[i].Name;"}},
[l]={
["clang/test/SemaObjC/method-prototype-scope.m"]={"clang/test/SemaObjC/method-prototype-scope.m:14:65: warning: redeclaration of method parameter \'object\' [-Wduplicate-method-arg]"}
["clang/test/SemaObjC/method-prototype-scope.m"]={"clang/test/SemaObjC/method-prototype-scope.m:14:65: warning: redeclaration of method parameter \'object\' [-Wduplicate-method-arg]"}
}
}
},
},
["warn_method_param_redefinition"]={
["warn_method_param_redefinition"]={
[c]="redefinition of method parameter %0",
[c]="warn_method_param_redefinition",
[d]=g,
[d]="redefinition of method parameter %0",
[e]="redefinition of method parameter (.*?)",
[e]=i,
[f]=Gb,
[g]="redefinition of method parameter (.*?)",
[b]=v,
[a]=Ib,
[a]={"ca3566fc20b6",1297290001,"Fix scoping of method declarations and issue ","Fix scoping of method declarations and issue \nwarning when same parameter name used multiple times.\n// rdar://8877730\n\nllvm-svn: 125229"},
[b]=A,
[h]={{wc,4787,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  for (unsigned i = 0, e = Sel.getNumArgs(); i != e; ++i) {\n    // ...\n    if (R.isSingleResult()) {\n      // ...\n      if (S->isDeclScope(PrevDecl)) {\n        Diag(ArgInfo[i].NameLoc, (MethodDefinition ? diag::warn_method_param_redefinition : diag::warn_method_param_declaration)) << ArgInfo[i].Name;"}},
[f]={"ca3566fc20b6",1297290001,"Fix scoping of method declarations and issue ","Fix scoping of method declarations and issue \nwarning when same parameter name used multiple times.\n// rdar://8877730\n\nllvm-svn: 125229"},
[k]={
[h]={{Gc,4787,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  for (unsigned i = 0, e = Sel.getNumArgs(); i != e; ++i) {\n    // ...\n    if (R.isSingleResult()) {\n      // ...\n      if (S->isDeclScope(PrevDecl)) {\n        Diag(ArgInfo[i].NameLoc, (MethodDefinition ? diag::warn_method_param_redefinition : diag::warn_method_param_declaration)) << ArgInfo[i].Name;"}},
[l]={
["clang/test/SemaObjC/method-prototype-scope.m"]={"clang/test/SemaObjC/method-prototype-scope.m:20:65: warning: redefinition of method parameter \'object\'"}
["clang/test/SemaObjC/method-prototype-scope.m"]={"clang/test/SemaObjC/method-prototype-scope.m:20:65: warning: redefinition of method parameter \'object\'"}
}
}
},
},
["warn_microsoft_dependent_exists"]={
["warn_microsoft_dependent_exists"]={
[j]={"microsoft-exists"},
[k]={"microsoft-exists"},
[i]="microsoft-exists",
[j]="microsoft-exists",
[c]="dependent %select{__if_not_exists|__if_exists}0 declarations are ignored",
[c]="warn_microsoft_dependent_exists",
[d]=g,
[d]="dependent %select{__if_not_exists|__if_exists}0 declarations are ignored",
[e]="dependent (?:__if_not_exists|__if_exists) declarations are ignored",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-exists[^\\]]*\\]",
[g]="dependent (?:__if_not_exists|__if_exists) declarations are ignored",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-exists[^\\]]*\\]",
[a]={"43edb32f1f03",1319495470,"Rework Microsoft __if_exists/__if_not_exists parsing and semantic","Rework Microsoft __if_exists/__if_not_exists parsing and semantic\nanalysis to separate dependent names from non-dependent names. For\ndependent names, we\'ll behave differently from Visual C++:\n\n  - For __if_exists/__if_not_exists at class scope, we\'ll just warn\n    and then ignore them.\n  - For __if_exists/__if_not_exists in statements, we\'ll treat the\n    inner statement as a compound statement, which we only instantiate\n    in templates where the dependent name (after instantiation)\n    exists. This behavior is different from VC++, but it\'s as close as\n    we can get without encroaching ridiculousness.\n\nThe latter part (dependent statements) is not yet implemented.\n\nllvm-svn: 142864"},
[b]=A,
[h]={{bb,4866,"void Parser::ParseMicrosoftIfExistsClassDeclaration(DeclSpec::TST TagType, ParsedAttributes &AccessAttrs, AccessSpecifier &CurAS) {\n  // ...\n  case IEB_Dependent:\n    Diag(Result.KeywordLoc, diag::warn_microsoft_dependent_exists) << Result.IsIfExists;"},{"clang/lib/Parse/ParseInit.cpp",571,"// Return true if a comma (or closing brace) is necessary after the\n// __if_exists/if_not_exists statement.\nbool Parser::ParseMicrosoftIfExistsBraceInitializer(ExprVector &InitExprs, bool &InitExprsOk) {\n  // ...\n  case IEB_Dependent:\n    Diag(Result.KeywordLoc, diag::warn_microsoft_dependent_exists) << Result.IsIfExists;"}},
[f]={"43edb32f1f03",1319495470,"Rework Microsoft __if_exists/__if_not_exists parsing and semantic","Rework Microsoft __if_exists/__if_not_exists parsing and semantic\nanalysis to separate dependent names from non-dependent names. For\ndependent names, we\'ll behave differently from Visual C++:\n\n  - For __if_exists/__if_not_exists at class scope, we\'ll just warn\n    and then ignore them.\n  - For __if_exists/__if_not_exists in statements, we\'ll treat the\n    inner statement as a compound statement, which we only instantiate\n    in templates where the dependent name (after instantiation)\n    exists. This behavior is different from VC++, but it\'s as close as\n    we can get without encroaching ridiculousness.\n\nThe latter part (dependent statements) is not yet implemented.\n\nllvm-svn: 142864"},
[k]={
[h]={{kb,4866,"void Parser::ParseMicrosoftIfExistsClassDeclaration(DeclSpec::TST TagType, ParsedAttributes &AccessAttrs, AccessSpecifier &CurAS) {\n  // ...\n  case IEB_Dependent:\n    Diag(Result.KeywordLoc, diag::warn_microsoft_dependent_exists) << Result.IsIfExists;"},{"clang/lib/Parse/ParseInit.cpp",571,"// Return true if a comma (or closing brace) is necessary after the\n// __if_exists/if_not_exists statement.\nbool Parser::ParseMicrosoftIfExistsBraceInitializer(ExprVector &InitExprs, bool &InitExprsOk) {\n  // ...\n  case IEB_Dependent:\n    Diag(Result.KeywordLoc, diag::warn_microsoft_dependent_exists) << Result.IsIfExists;"}},
[l]={
["clang/test/SemaTemplate/ms-if-exists.cpp"]={"clang/test/SemaTemplate/ms-if-exists.cpp:21:3: warning: dependent __if_exists declarations are ignored [-Wmicrosoft-exists]","clang/test/SemaTemplate/ms-if-exists.cpp:53:5: warning: dependent __if_exists declarations are ignored [-Wmicrosoft-exists]"}
["clang/test/SemaTemplate/ms-if-exists.cpp"]={"clang/test/SemaTemplate/ms-if-exists.cpp:21:3: warning: dependent __if_exists declarations are ignored [-Wmicrosoft-exists]","clang/test/SemaTemplate/ms-if-exists.cpp:53:5: warning: dependent __if_exists declarations are ignored [-Wmicrosoft-exists]"}
}
}
},
},
["warn_microsoft_qualifiers_ignored"]={
["warn_microsoft_qualifiers_ignored"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]="qualifiers after comma in declarator list are ignored",
[c]="warn_microsoft_qualifiers_ignored",
[d]=g,
[d]="qualifiers after comma in declarator list are ignored",
[e]="qualifiers after comma in declarator list are ignored",
[e]=i,
[f]=vb,
[g]="qualifiers after comma in declarator list are ignored",
[b]=v,
[a]=Db,
[a]={"eaaae27bc512",1417735868,"Parse qualifiers after comma in declarator lists as a Microsoft extension","Parse qualifiers after comma in declarator lists as a Microsoft extension\n\nMSVC parses and ignores these with a warning.\n\nllvm-svn: 223413"},
[b]=A,
[h]={{Tb,880,"void Parser::DiagnoseAndSkipExtendedMicrosoftTypeAttributes() {\n  // ...\n  if (EndLoc.isValid()) {\n    // ...\n    Diag(StartLoc, diag::warn_microsoft_qualifiers_ignored) << Range;"}},
[f]={"eaaae27bc512",1417735868,"Parse qualifiers after comma in declarator lists as a Microsoft extension","Parse qualifiers after comma in declarator lists as a Microsoft extension\n\nMSVC parses and ignores these with a warning.\n\nllvm-svn: 223413"},
[k]={
[h]={{Wb,880,"void Parser::DiagnoseAndSkipExtendedMicrosoftTypeAttributes() {\n  // ...\n  if (EndLoc.isValid()) {\n    // ...\n    Diag(StartLoc, diag::warn_microsoft_qualifiers_ignored) << Range;"}},
[l]={
["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:96:35: warning: qualifiers after comma in declarator list are ignored [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:97:44: warning: qualifiers after comma in declarator list are ignored [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:98:44: warning: qualifiers after comma in declarator list are ignored [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:99:44: warning: qualifiers after comma in declarator list are ignored [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:100:44: warning: qualifiers after comma in declarator list are ignored [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:101:44: warning: qualifiers after comma in declarator list are ignored [-Wignored-attributes]"}
["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:96:35: warning: qualifiers after comma in declarator list are ignored [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:97:44: warning: qualifiers after comma in declarator list are ignored [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:98:44: warning: qualifiers after comma in declarator list are ignored [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:99:44: warning: qualifiers after comma in declarator list are ignored [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:100:44: warning: qualifiers after comma in declarator list are ignored [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:101:44: warning: qualifiers after comma in declarator list are ignored [-Wignored-attributes]"}
}
}
},
},
["warn_mig_server_routine_does_not_return_kern_return_t"]={
["warn_mig_server_routine_does_not_return_kern_return_t"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]={{nil,I,"\'mig_server_routine\' attribute only applies to routines that return a kern_return_t"}},
[c]={{nil,x,"warn_mig_server_routine_does_not_return_kern_return_t"}},
[d]=g,
[d]={{nil,x,"\'mig_server_routine\' attribute only applies to routines that return a kern_return_t"}},
[e]="\'mig_server_routine\' attribute only applies to routines that return a kern_return_t",
[e]=i,
[f]=vb,
[g]="\'mig_server_routine\' attribute only applies to routines that return a kern_return_t",
[b]=l,
[a]=Db,
[a]={"c333d775636c",1550707262,"[attributes] Add an attribute for server routines in Mach kernel and extensions.","[attributes] Add an attribute for server routines in Mach kernel and extensions.\n\nThe new __attribute__ ((mig_server_routine)) is going to be used for annotating\nMach Interface Generator (MIG) callback functions as such, so that additional\nstatic analysis could be applied to their implementations. It can also be\napplied to regular functions behavior of which is supposed to be identical to\nthat of a MIG server routine.\n\nDifferential Revision: https://reviews.llvm.org/D58365\n\nllvm-svn: 354530"},
[b]={{nil,x,m}},
[h]={{E,8536,"static void handleMIGServerRoutineAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check that the return type is a `typedef int kern_return_t` or a typedef\n  // around it, because otherwise MIG convention checks make no sense.\n  // BlockDecl doesn\'t store a return type, so it\'s annoying to check,\n  // so let\'s skip it for now.\n  if (!isa<BlockDecl>(D)) {\n    // ...\n    if (!IsKernReturnT || T.getCanonicalType() != S.getASTContext().IntTy) {\n      S.Diag(D->getBeginLoc(), diag::warn_mig_server_routine_does_not_return_kern_return_t);"}},
[f]={"c333d775636c",1550707262,"[attributes] Add an attribute for server routines in Mach kernel and extensions.","[attributes] Add an attribute for server routines in Mach kernel and extensions.\n\nThe new __attribute__ ((mig_server_routine)) is going to be used for annotating\nMach Interface Generator (MIG) callback functions as such, so that additional\nstatic analysis could be applied to their implementations. It can also be\napplied to regular functions behavior of which is supposed to be identical to\nthat of a MIG server routine.\n\nDifferential Revision: https://reviews.llvm.org/D58365\n\nllvm-svn: 354530"},
[k]={
[h]={{N,8536,"static void handleMIGServerRoutineAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check that the return type is a `typedef int kern_return_t` or a typedef\n  // around it, because otherwise MIG convention checks make no sense.\n  // BlockDecl doesn\'t store a return type, so it\'s annoying to check,\n  // so let\'s skip it for now.\n  if (!isa<BlockDecl>(D)) {\n    // ...\n    if (!IsKernReturnT || T.getCanonicalType() != S.getASTContext().IntTy) {\n      S.Diag(D->getBeginLoc(), diag::warn_mig_server_routine_does_not_return_kern_return_t);"}},
[l]={
["clang/test/Sema/attr-mig.c"]={"clang/test/Sema/attr-mig.c:8:1: warning: \'mig_server_routine\' attribute only applies to routines that return a kern_return_t [-Wignored-attributes]","clang/test/Sema/attr-mig.c:9:1: warning: \'mig_server_routine\' attribute only applies to routines that return a kern_return_t [-Wignored-attributes]"}
["clang/test/Sema/attr-mig.c"]={"clang/test/Sema/attr-mig.c:8:1: warning: \'mig_server_routine\' attribute only applies to routines that return a kern_return_t [-Wignored-attributes]","clang/test/Sema/attr-mig.c:9:1: warning: \'mig_server_routine\' attribute only applies to routines that return a kern_return_t [-Wignored-attributes]"}
}
}
},
},
["warn_misleading_indentation"]={
["warn_misleading_indentation"]={
[j]={B,H,"misleading-indentation"},
[k]={K,O,"misleading-indentation"},
[i]="misleading-indentation",
[j]="misleading-indentation",
[c]={{nil,z,"misleading indentation; statement is not part of the previous \'%select{if|else|for|while}0\'"}},
[c]={{nil,q,"warn_misleading_indentation"}},
[d]=g,
[d]={{nil,q,"misleading indentation; statement is not part of the previous \'%select{if|else|for|while}0\'"}},
[e]="misleading indentation; statement is not part of the previous \'(?:if|else|for|while)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmisleading\\-indentation[^\\]]*\\]",
[g]="misleading indentation; statement is not part of the previous \'(?:if|else|for|while)\'",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wmisleading\\-indentation[^\\]]*\\]",
[a]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit\n\nSee\nhttps://docs.google.com/document/d/1xMkTZMKx9llnMPgso0jrx3ankI4cv60xeZ0y4ksf4wc/preview\nfor background discussion.\n\nThis adds a warning, flags and pragmas to limit the number of\npre-processor tokens either at a certain point in a translation unit, or\noverall.\n\nThe idea is that this would allow projects to limit the size of certain\nwidely included headers, or for translation units overall, as a way to\ninsert backstops for header bloat and prevent compile-time regressions.\n\nDifferential revision: https://reviews.llvm.org/D72703"},
[b]={{nil,q,A}},
[f]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit\n\nSee\nhttps://docs.google.com/document/d/1xMkTZMKx9llnMPgso0jrx3ankI4cv60xeZ0y4ksf4wc/preview\nfor background discussion.\n\nThis adds a warning, flags and pragmas to limit the number of\npre-processor tokens either at a certain point in a translation unit, or\noverall.\n\nThe idea is that this would allow projects to limit the size of certain\nwidely included headers, or for translation units overall, as a way to\ninsert backstops for header bloat and prevent compile-time regressions.\n\nDifferential revision: https://reviews.llvm.org/D72703"},
[h]={{nc,1418,"struct MisleadingIndentationChecker {\n  // ...\n  void Check() {\n    // ...\n    if (P.getActions().getDiagnostics().isIgnored(diag::warn_misleading_indentation, Tok.getLocation()) || ShouldSkip || NumDirectives != P.getPreprocessor().getNumDirectives() || Tok.isOneOf(tok::semi, tok::r_brace) || Tok.isAnnotation() || Tok.getLocation().isMacroID() || PrevLoc.isMacroID() || StmtLoc.isMacroID() || (Kind == MSK_else && P.MisleadingIndentationElseLoc.isInvalid())) {"},{nc,1442,"struct MisleadingIndentationChecker {\n  // ...\n  void Check() {\n    // ...\n    if (PrevColNum != 0 && CurColNum != 0 && StmtColNum != 0 && ((PrevColNum > StmtColNum && PrevColNum == CurColNum) || !Tok.isAtStartOfLine()) && SM.getPresumedLineNumber(StmtLoc) != SM.getPresumedLineNumber(Tok.getLocation()) && (Tok.isNot(tok::identifier) || P.getPreprocessor().LookAhead(0).isNot(tok::colon))) {\n      P.Diag(Tok.getLocation(), diag::warn_misleading_indentation) << Kind;"}},
[h]={{nc,1418,"struct MisleadingIndentationChecker {\n  // ...\n  void Check() {\n    // ...\n    if (P.getActions().getDiagnostics().isIgnored(diag::warn_misleading_indentation, Tok.getLocation()) || ShouldSkip || NumDirectives != P.getPreprocessor().getNumDirectives() || Tok.isOneOf(tok::semi, tok::r_brace) || Tok.isAnnotation() || Tok.getLocation().isMacroID() || PrevLoc.isMacroID() || StmtLoc.isMacroID() || (Kind == MSK_else && P.MisleadingIndentationElseLoc.isInvalid())) {"},{nc,1442,"struct MisleadingIndentationChecker {\n  // ...\n  void Check() {\n    // ...\n    if (PrevColNum != 0 && CurColNum != 0 && StmtColNum != 0 && ((PrevColNum > StmtColNum && PrevColNum == CurColNum) || !Tok.isAtStartOfLine()) && SM.getPresumedLineNumber(StmtLoc) != SM.getPresumedLineNumber(Tok.getLocation()) && (Tok.isNot(tok::identifier) || P.getPreprocessor().LookAhead(0).isNot(tok::colon))) {\n      P.Diag(Tok.getLocation(), diag::warn_misleading_indentation) << Kind;"}},
[k]={
[l]={
["clang/test/Parser/warn-misleading-indentation.cpp"]={"clang/test/Parser/warn-misleading-indentation.cpp:18:5: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:29:5: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:42:5: warning: misleading indentation; statement is not part of the previous \'for\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:54:16: warning: misleading indentation; statement is not part of the previous \'while\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:69:5: warning: misleading indentation; statement is not part of the previous \'else\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:94:5: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:105:5: warning: misleading indentation; statement is not part of the previous \'for\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:134:5: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:158:7: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:180:25: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:225:9: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:245:3: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]"}
["clang/test/Parser/warn-misleading-indentation.cpp"]={"clang/test/Parser/warn-misleading-indentation.cpp:18:5: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:29:5: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:42:5: warning: misleading indentation; statement is not part of the previous \'for\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:54:16: warning: misleading indentation; statement is not part of the previous \'while\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:69:5: warning: misleading indentation; statement is not part of the previous \'else\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:94:5: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:105:5: warning: misleading indentation; statement is not part of the previous \'for\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:134:5: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:158:7: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:180:25: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:225:9: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]","clang/test/Parser/warn-misleading-indentation.cpp:245:3: warning: misleading indentation; statement is not part of the previous \'if\' [-Wmisleading-indentation]"}
}
}
},
},
["warn_mismatched_availability"]={
["warn_mismatched_availability"]={
[j]={Zc},
[k]={Zc},
[i]=Zc,
[j]=Zc,
[c]="availability does not match previous declaration",
[c]="warn_mismatched_availability",
[d]=g,
[d]="availability does not match previous declaration",
[e]="availability does not match previous declaration",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]",
[g]="availability does not match previous declaration",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]",
[a]={"2d243bfe2f25",1336334185,"Split mergeAvailabilityAttr out of handleAvailabilityAttr. This is important","Split mergeAvailabilityAttr out of handleAvailabilityAttr. This is important\nfor having a uniform logic for adding attributes to a decl. This in turn\nis needed to fix the FIXME:\n\n  // FIXME: This needs to happen before we merge declarations. Then,\n  // let attribute merging cope with attribute conflicts.\n  ProcessDeclAttributes(S, NewFD, D,\n                        /*NonInheritable=*/false, /*Inheritable=*/true);\n\nThe idea is that mergeAvailabilityAttr will become a method. Once attributes\nare processed before merging, it will be called from handleAvailabilityAttr to\nhandle multiple attributes in one decl:\n\nvoid f(int) __attribute__((availability(ios,deprecated=3.0),\n                          availability(ios,introduced=2.0)));\n\nand from SemaDecl.cpp to handle multiple decls:\n\nvoid f(int) __attribute__((availability(ios,deprecated=3.0)));\nvoid f(int) __attribute__((availability(ios,introduced=2.0)));\n\nAs a bonus, use the new structure to diagnose incompatible availability\nattributes added to different decls (see included testcases).\n\nllvm-svn: 156269"},
[b]=m,
[h]={{E,2550,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  // ...\n  if (D->hasAttrs()) {\n    // ...\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      // ...\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n        // ...\n        } else {\n          Diag(OldAA->getLocation(), diag::warn_mismatched_availability);"}},
[f]={"2d243bfe2f25",1336334185,"Split mergeAvailabilityAttr out of handleAvailabilityAttr. This is important","Split mergeAvailabilityAttr out of handleAvailabilityAttr. This is important\nfor having a uniform logic for adding attributes to a decl. This in turn\nis needed to fix the FIXME:\n\n  // FIXME: This needs to happen before we merge declarations. Then,\n  // let attribute merging cope with attribute conflicts.\n  ProcessDeclAttributes(S, NewFD, D,\n                        /*NonInheritable=*/false, /*Inheritable=*/true);\n\nThe idea is that mergeAvailabilityAttr will become a method. Once attributes\nare processed before merging, it will be called from handleAvailabilityAttr to\nhandle multiple attributes in one decl:\n\nvoid f(int) __attribute__((availability(ios,deprecated=3.0),\n                          availability(ios,introduced=2.0)));\n\nand from SemaDecl.cpp to handle multiple decls:\n\nvoid f(int) __attribute__((availability(ios,deprecated=3.0)));\nvoid f(int) __attribute__((availability(ios,introduced=2.0)));\n\nAs a bonus, use the new structure to diagnose incompatible availability\nattributes added to different decls (see included testcases).\n\nllvm-svn: 156269"},
[k]={
[h]={{N,2550,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  // ...\n  if (D->hasAttrs()) {\n    // ...\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      // ...\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n        // ...\n        } else {\n          Diag(OldAA->getLocation(), diag::warn_mismatched_availability);"}},
[l]={
["clang/test/Sema/attr-availability-tvos.c"]={"clang/test/Sema/attr-availability-tvos.c:31:16: warning: availability does not match previous declaration [-Wavailability]","clang/test/Sema/attr-availability-tvos.c:31:16: warning: availability does not match previous declaration [-Wavailability]"}
["clang/test/Sema/attr-availability-tvos.c"]={"clang/test/Sema/attr-availability-tvos.c:31:16: warning: availability does not match previous declaration [-Wavailability]","clang/test/Sema/attr-availability-tvos.c:31:16: warning: availability does not match previous declaration [-Wavailability]"}
}
}
},
},
["warn_mismatched_availability_override"]={
["warn_mismatched_availability_override"]={
[j]={Zc},
[k]={Zc},
[i]=Zc,
[j]=Zc,
[c]="%select{|overriding }4method %select{introduced after|deprecated before|obsoleted before}0 %select{the protocol method it implements|overridden method}4 on %1 (%2 vs. %3)",
[c]="warn_mismatched_availability_override",
[d]=g,
[d]="%select{|overriding }4method %select{introduced after|deprecated before|obsoleted before}0 %select{the protocol method it implements|overridden method}4 on %1 (%2 vs. %3)",
[e]="(?:|overriding )method (?:introduced after|deprecated before|obsoleted before) (?:the protocol method it implements|overridden method) on (.*?) \\((.*?) vs\\. (.*?)\\)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]",
[g]="(?:|overriding )method (?:introduced after|deprecated before|obsoleted before) (?:the protocol method it implements|overridden method) on (.*?) \\((.*?) vs\\. (.*?)\\)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]",
[a]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an","When checking availability attributes for consistency between an\noverriding and overridden method, allow the overridden method to have\na narrower contract (introduced earlier, deprecated/obsoleted later)\nthan the overriding method. Fixes <rdar://problem/12992023>.\n\nllvm-svn: 172567"},
[b]=m,
[h]={{E,2539,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  // ...\n  if (D->hasAttrs()) {\n    // ...\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      // ...\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n          // ...\n          if (Which == -1) {\n          // ...\n          } else if (Which != 1 && AMK == AMK_OptionalProtocolImplementation) {\n          // ...\n          } else {\n            Diag(OldAA->getLocation(), diag::warn_mismatched_availability_override) << Which << AvailabilityAttr::getPrettyPlatformName(Platform->getName()) << FirstVersion.getAsString() << SecondVersion.getAsString() << (AMK == AMK_Override);"}},
[f]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an","When checking availability attributes for consistency between an\noverriding and overridden method, allow the overridden method to have\na narrower contract (introduced earlier, deprecated/obsoleted later)\nthan the overriding method. Fixes <rdar://problem/12992023>.\n\nllvm-svn: 172567"},
[k]={
[h]={{N,2539,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  // ...\n  if (D->hasAttrs()) {\n    // ...\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      // ...\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n          // ...\n          if (Which == -1) {\n          // ...\n          } else if (Which != 1 && AMK == AMK_OptionalProtocolImplementation) {\n          // ...\n          } else {\n            Diag(OldAA->getLocation(), diag::warn_mismatched_availability_override) << Which << AvailabilityAttr::getPrettyPlatformName(Platform->getName()) << FirstVersion.getAsString() << SecondVersion.getAsString() << (AMK == AMK_Override);"}},
[l]={
["clang/test/SemaObjC/override-opt-prop-availability.m"]={"clang/test/SemaObjC/override-opt-prop-availability.m:27:50: warning: method introduced after the protocol method it implements on iOS (13.0 vs. 12.0) [-Wavailability]","clang/test/SemaObjC/override-opt-prop-availability.m:27:50: warning: method introduced after the protocol method it implements on iOS (13.0 vs. 12.0) [-Wavailability]","clang/test/SemaObjC/override-opt-prop-availability.m:29:60: warning: method deprecated before the protocol method it implements on iOS (12.0 vs. 10.0) [-Wavailability]"}
["clang/test/SemaObjC/override-opt-prop-availability.m"]={"clang/test/SemaObjC/override-opt-prop-availability.m:27:50: warning: method introduced after the protocol method it implements on iOS (13.0 vs. 12.0) [-Wavailability]","clang/test/SemaObjC/override-opt-prop-availability.m:27:50: warning: method introduced after the protocol method it implements on iOS (13.0 vs. 12.0) [-Wavailability]","clang/test/SemaObjC/override-opt-prop-availability.m:29:60: warning: method deprecated before the protocol method it implements on iOS (12.0 vs. 10.0) [-Wavailability]"}
}
}
},
},
["warn_mismatched_availability_override_unavail"]={
["warn_mismatched_availability_override_unavail"]={
[j]={Zc},
[k]={Zc},
[i]=Zc,
[j]=Zc,
[c]="%select{|overriding }1method cannot be unavailable on %0 when %select{the protocol method it implements|its overridden method}1 is available",
[c]="warn_mismatched_availability_override_unavail",
[d]=g,
[d]="%select{|overriding }1method cannot be unavailable on %0 when %select{the protocol method it implements|its overridden method}1 is available",
[e]="(?:|overriding )method cannot be unavailable on (.*?) when (?:the protocol method it implements|its overridden method) is available",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]",
[g]="(?:|overriding )method cannot be unavailable on (.*?) when (?:the protocol method it implements|its overridden method) is available",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]",
[a]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an","When checking availability attributes for consistency between an\noverriding and overridden method, allow the overridden method to have\na narrower contract (introduced earlier, deprecated/obsoleted later)\nthan the overriding method. Fixes <rdar://problem/12992023>.\n\nllvm-svn: 172567"},
[b]=m,
[h]={{E,2526,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  // ...\n  if (D->hasAttrs()) {\n    // ...\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      // ...\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n          // ...\n          if (Which == -1) {\n            Diag(OldAA->getLocation(), diag::warn_mismatched_availability_override_unavail) << AvailabilityAttr::getPrettyPlatformName(Platform->getName()) << (AMK == AMK_Override);"}},
[f]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an","When checking availability attributes for consistency between an\noverriding and overridden method, allow the overridden method to have\na narrower contract (introduced earlier, deprecated/obsoleted later)\nthan the overriding method. Fixes <rdar://problem/12992023>.\n\nllvm-svn: 172567"},
[k]={
[h]={{N,2526,"AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, const AttributeCommonInfo &CI, IdentifierInfo *Platform, bool Implicit, VersionTuple Introduced, VersionTuple Deprecated, VersionTuple Obsoleted, bool IsUnavailable, StringRef Message, bool IsStrict, StringRef Replacement, AvailabilityMergeKind AMK, int Priority) {\n  // ...\n  if (D->hasAttrs()) {\n    // ...\n    for (unsigned i = 0, e = Attrs.size(); i != e;) {\n      // ...\n      if (!versionsMatch(OldIntroduced, Introduced, OverrideOrImpl) || !versionsMatch(Deprecated, OldDeprecated, OverrideOrImpl) || !versionsMatch(Obsoleted, OldObsoleted, OverrideOrImpl) || !(OldIsUnavailable == IsUnavailable || (OverrideOrImpl && !OldIsUnavailable && IsUnavailable))) {\n        if (OverrideOrImpl) {\n          // ...\n          if (Which == -1) {\n            Diag(OldAA->getLocation(), diag::warn_mismatched_availability_override_unavail) << AvailabilityAttr::getPrettyPlatformName(Platform->getName()) << (AMK == AMK_Override);"}},
[l]={
["clang/test/SemaObjC/override-opt-prop-availability.m"]={"clang/test/SemaObjC/override-opt-prop-availability.m:33:42: warning: method cannot be unavailable on iOS when the protocol method it implements is available [-Wavailability]"}
["clang/test/SemaObjC/override-opt-prop-availability.m"]={"clang/test/SemaObjC/override-opt-prop-availability.m:33:42: warning: method cannot be unavailable on iOS when the protocol method it implements is available [-Wavailability]"}
}
}
},
},
["warn_mismatched_delete_new"]={
["warn_mismatched_delete_new"]={
[j]={"mismatched-new-delete"},
[k]={"mismatched-new-delete"},
[i]="mismatched-new-delete",
[j]="mismatched-new-delete",
[c]="\'delete%select{|[]}0\' applied to a pointer that was allocated with \'new%select{[]|}0\'; did you mean \'delete%select{[]|}0\'?",
[c]="warn_mismatched_delete_new",
[d]=g,
[d]="\'delete%select{|[]}0\' applied to a pointer that was allocated with \'new%select{[]|}0\'; did you mean \'delete%select{[]|}0\'?",
[e]="\'delete(?:|\\[\\])\' applied to a pointer that was allocated with \'new(?:\\[\\]|)\'; did you mean \'delete(?:\\[\\]|)\'\\?",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-new\\-delete[^\\]]*\\]",
[g]="\'delete(?:|\\[\\])\' applied to a pointer that was allocated with \'new(?:\\[\\]|)\'; did you mean \'delete(?:\\[\\]|)\'\\?",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-new\\-delete[^\\]]*\\]",
[a]={"538ef53c139d",1431620097,"Detect uses of mismatching forms of \'new\' and \'delete\'","Detect uses of mismatching forms of \'new\' and \'delete\'\n\nEmit warning when operand to `delete` is allocated with `new[]` or\noperand to `delete[]` is allocated with `new`.\n\nReviewers: rtrieu, jordan_rose, rsmith\n\nSubscribers: majnemer, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D4661\n\nllvm-svn: 237368"},
[b]=m,
[f]={"538ef53c139d",1431620097,"Detect uses of mismatching forms of \'new\' and \'delete\'","Detect uses of mismatching forms of \'new\' and \'delete\'\n\nEmit warning when operand to `delete` is allocated with `new[]` or\noperand to `delete[]` is allocated with `new`.\n\nReviewers: rtrieu, jordan_rose, rsmith\n\nSubscribers: majnemer, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D4661\n\nllvm-svn: 237368"},
[h]={{"clang/lib/Sema/Sema.cpp",1428,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  if (!Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation())) {"},{bc,3537,"static void DiagnoseMismatchedNewDelete(Sema &SemaRef, SourceLocation DeleteLoc, const MismatchingNewDeleteDetector &Detector) {\n  // ...\n  SemaRef.Diag(DeleteLoc, diag::warn_mismatched_delete_new) << Detector.IsArrayForm << H;"},{bc,3546,"void Sema::AnalyzeDeleteExprMismatch(const CXXDeleteExpr *DE) {\n  if (Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation()))"}},
[h]={{"clang/lib/Sema/Sema.cpp",1428,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  if (!Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation())) {"},{bc,3537,"static void DiagnoseMismatchedNewDelete(Sema &SemaRef, SourceLocation DeleteLoc, const MismatchingNewDeleteDetector &Detector) {\n  // ...\n  SemaRef.Diag(DeleteLoc, diag::warn_mismatched_delete_new) << Detector.IsArrayForm << H;"},{bc,3546,"void Sema::AnalyzeDeleteExprMismatch(const CXXDeleteExpr *DE) {\n  if (Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation()))"}},
[k]={
[l]={
["clang/test/CodeGenCXX/default-arguments.cpp"]={"clang/test/CodeGenCXX/default-arguments.cpp:64:2: warning: \'delete\' applied to a pointer that was allocated with \'new[]\'; did you mean \'delete[]\'? [-Wmismatched-new-delete]"}
["clang/test/CodeGenCXX/default-arguments.cpp"]={"clang/test/CodeGenCXX/default-arguments.cpp:64:2: warning: \'delete\' applied to a pointer that was allocated with \'new[]\'; did you mean \'delete[]\'? [-Wmismatched-new-delete]"}
}
}
},
},
["warn_mismatched_import"]={
["warn_mismatched_import"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]={{nil,mb,"import %select{module|name}0 (%1) does not match the import %select{module|name}0 (%2) of the previous declaration"}},
[c]={{nil,z,"warn_mismatched_import"}},
[d]=g,
[d]={{nil,z,"import %select{module|name}0 (%1) does not match the import %select{module|name}0 (%2) of the previous declaration"}},
[e]="import (?:module|name) \\((.*?)\\) does not match the import (?:module|name) \\((.*?)\\) of the previous declaration",
[e]=i,
[f]=vb,
[g]="import (?:module|name) \\((.*?)\\) does not match the import (?:module|name) \\((.*?)\\) of the previous declaration",
[b]=p,
[a]=Db,
[a]={Bd,1576908663,ud,Ed},
[b]={{nil,z,r}},
[h]={{E,7682,"WebAssemblyImportModuleAttr *Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) {\n  // ...\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportModuleAttr>()) {\n    // ...\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_import) << 0 << ExistingAttr->getImportModule() << AL.getImportModule();"},{E,7702,"WebAssemblyImportNameAttr *Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) {\n  // ...\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportNameAttr>()) {\n    // ...\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_import) << 1 << ExistingAttr->getImportName() << AL.getImportName();"}},
[f]={Ld,1576908663,xd,"[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n  turned out to be ineffective anyway since functions can be defined later\n  in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520"},
[k]={
[h]={{N,7682,"WebAssemblyImportModuleAttr *Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) {\n  // ...\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportModuleAttr>()) {\n    // ...\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_import) << 0 << ExistingAttr->getImportModule() << AL.getImportModule();"},{N,7702,"WebAssemblyImportNameAttr *Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) {\n  // ...\n  if (const auto *ExistingAttr = FD->getAttr<WebAssemblyImportNameAttr>()) {\n    // ...\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_import) << 1 << ExistingAttr->getImportName() << AL.getImportName();"}},
[l]={
["clang/test/Sema/attr-wasm.c"]={"clang/test/Sema/attr-wasm.c:13:34: warning: import name (bar) does not match the import name (foo) of the previous declaration [-Wignored-attributes]","clang/test/Sema/attr-wasm.c:25:36: warning: import module (bar) does not match the import module (foo) of the previous declaration [-Wignored-attributes]"}
["clang/test/Sema/attr-wasm.c"]={"clang/test/Sema/attr-wasm.c:13:34: warning: import name (bar) does not match the import name (foo) of the previous declaration [-Wignored-attributes]","clang/test/Sema/attr-wasm.c:25:36: warning: import module (bar) does not match the import module (foo) of the previous declaration [-Wignored-attributes]"}
}
}
},
},
["warn_mismatched_nullability_attr"]={
["warn_mismatched_nullability_attr"]={
[j]={"nullability"},
[k]={"nullability"},
[i]="nullability",
[j]="nullability",
[c]="nullability specifier %0 conflicts with existing specifier %1",
[c]="warn_mismatched_nullability_attr",
[d]=g,
[d]="nullability specifier %0 conflicts with existing specifier %1",
[e]="nullability specifier (.*?) conflicts with existing specifier (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]",
[g]="nullability specifier (.*?) conflicts with existing specifier (.*?)",
[a]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]",
[b]="Nullability Issue",
[b]="Nullability Issue",
[a]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++.","Introduce type nullability specifiers for C/C++.\n\nIntroduces the type specifiers __nonnull, __nullable, and\n__null_unspecified that describe the nullability of the pointer type\nto which the specifier appertains. Nullability type specifiers improve\non the existing nonnull attributes in a few ways:\n  - They apply to types, so one can represent a pointer to a non-null\n    pointer, use them in function pointer types, etc.\n  - As type specifiers, they are syntactically more lightweight than\n    __attribute__s or [[attribute]]s.\n  - They can express both the notion of \'should never be null\' and\n  also \'it makes sense for this to be null\', and therefore can more\n  easily catch errors of omission where one forgot to annotate the\n  nullability of a particular pointer (this will come in a subsequent\n  patch).\n\nNullability type specifiers are maintained as type sugar, and\ntherefore have no effect on mangling, encoding, overloading,\netc. Nonetheless, they will be used for warnings about, e.g., passing\n\'null\' to a method that does not accept it.\n\nThis is the C/C++ part of rdar://problem/18868820.\n\nllvm-svn: 240146"},
[f]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++.","Introduce type nullability specifiers for C/C++.\n\nIntroduces the type specifiers __nonnull, __nullable, and\n__null_unspecified that describe the nullability of the pointer type\nto which the specifier appertains. Nullability type specifiers improve\non the existing nonnull attributes in a few ways:\n  - They apply to types, so one can represent a pointer to a non-null\n    pointer, use them in function pointer types, etc.\n  - As type specifiers, they are syntactically more lightweight than\n    __attribute__s or [[attribute]]s.\n  - They can express both the notion of \'should never be null\' and\n  also \'it makes sense for this to be null\', and therefore can more\n  easily catch errors of omission where one forgot to annotate the\n  nullability of a particular pointer (this will come in a subsequent\n  patch).\n\nNullability type specifiers are maintained as type sugar, and\ntherefore have no effect on mangling, encoding, overloading,\netc. Nonetheless, they will be used for warnings about, e.g., passing\n\'null\' to a method that does not accept it.\n\nThis is the C/C++ part of rdar://problem/18868820.\n\nllvm-svn: 240146"},
[h]={{D,3419,"static void mergeParamDeclTypes(ParmVarDecl *NewParam, const ParmVarDecl *OldParam, Sema &S) {\n  if (auto Oldnullability = OldParam->getType()->getNullability()) {\n    if (auto Newnullability = NewParam->getType()->getNullability()) {\n      if (*Oldnullability != *Newnullability) {\n        S.Diag(NewParam->getLocation(), diag::warn_mismatched_nullability_attr) << DiagNullabilityKind(*Newnullability, ((NewParam->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0)) << DiagNullabilityKind(*Oldnullability, ((OldParam->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0));"}},
[h]={{M,3419,"static void mergeParamDeclTypes(ParmVarDecl *NewParam, const ParmVarDecl *OldParam, Sema &S) {\n  if (auto Oldnullability = OldParam->getType()->getNullability()) {\n    if (auto Newnullability = NewParam->getType()->getNullability()) {\n      if (*Oldnullability != *Newnullability) {\n        S.Diag(NewParam->getLocation(), diag::warn_mismatched_nullability_attr) << DiagNullabilityKind(*Newnullability, ((NewParam->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0)) << DiagNullabilityKind(*Oldnullability, ((OldParam->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability) != 0));"}},
[k]={
[l]={
["clang/test/Sema/non-null-warning.c"]={"clang/test/Sema/non-null-warning.c:20:27: warning: nullability specifier \'_Nullable\' conflicts with existing specifier \'_Nonnull\' [-Wnullability]","clang/test/Sema/non-null-warning.c:32:26: warning: nullability specifier \'_Nonnull\' conflicts with existing specifier \'_Nullable\' [-Wnullability]"}
["clang/test/Sema/non-null-warning.c"]={"clang/test/Sema/non-null-warning.c:20:27: warning: nullability specifier \'_Nullable\' conflicts with existing specifier \'_Nonnull\' [-Wnullability]","clang/test/Sema/non-null-warning.c:32:26: warning: nullability specifier \'_Nonnull\' conflicts with existing specifier \'_Nullable\' [-Wnullability]"}
}
}
},
},
["warn_mismatched_section"]={
["warn_mismatched_section"]={
[j]={"section"},
[k]={"section"},
[i]="section",
[j]="section",
[c]={{nil,eb,"%select{codeseg|section}0 does not match previous declaration"},{lb,nil,"section does not match previous declaration"}},
[c]="warn_mismatched_section",
[d]=g,
[d]={{nil,D,"%select{codeseg|section}0 does not match previous declaration"},{F,nil,"section does not match previous declaration"}},
[e]="(?:codeseg|section) does not match previous declaration",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wsection[^\\]]*\\]",
[g]="(?:codeseg|section) does not match previous declaration",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wsection[^\\]]*\\]",
[a]={"9869c3a10fdb",1336876962,"Produce a warning for mismatched section attributes. Completest pr9356.","Produce a warning for mismatched section attributes. Completest pr9356.\n\nllvm-svn: 156727"},
[b]=m,
[h]={{D,3282,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  // ...\n  if (NewCSA && !Old->hasAttr<CodeSegAttr>() && !NewCSA->isImplicit() && isa<CXXMethodDecl>(New)) {\n    Diag(New->getLocation(), diag::warn_mismatched_section) << 0 /*codeseg*/;"},{E,3297,"SectionAttr *Sema::mergeSectionAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  // ...\n  if (SectionAttr *ExistingAttr = D->getAttr<SectionAttr>()) {\n    // ...\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_section) << 1 /*section*/;"},{E,3381,"CodeSegAttr *Sema::mergeCodeSegAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  // ...\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    // ...\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_section) << 0 /*codeseg*/;"}},
[f]={"9869c3a10fdb",1336876962,"Produce a warning for mismatched section attributes. Completest pr9356.","Produce a warning for mismatched section attributes. Completest pr9356.\n\nllvm-svn: 156727"},
[k]={
[h]={{M,3282,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  // ...\n  if (NewCSA && !Old->hasAttr<CodeSegAttr>() && !NewCSA->isImplicit() && isa<CXXMethodDecl>(New)) {\n    Diag(New->getLocation(), diag::warn_mismatched_section) << 0 /*codeseg*/;"},{N,3297,"SectionAttr *Sema::mergeSectionAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  // ...\n  if (SectionAttr *ExistingAttr = D->getAttr<SectionAttr>()) {\n    // ...\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_section) << 1 /*section*/;"},{N,3381,"CodeSegAttr *Sema::mergeCodeSegAttr(Decl *D, const AttributeCommonInfo &CI, StringRef Name) {\n  // ...\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    // ...\n    Diag(ExistingAttr->getLocation(), diag::warn_mismatched_section) << 0 /*codeseg*/;"}},
[l]={
["clang/test/SemaCXX/attr-section.cpp"]={"clang/test/SemaCXX/attr-section.cpp:15:21: warning: section does not match previous declaration [-Wsection]","clang/test/SemaCXX/attr-section.cpp:42:18: warning: section does not match previous declaration [-Wsection]"}
["clang/test/SemaCXX/attr-section.cpp"]={"clang/test/SemaCXX/attr-section.cpp:15:21: warning: section does not match previous declaration [-Wsection]","clang/test/SemaCXX/attr-section.cpp:42:18: warning: section does not match previous declaration [-Wsection]"}
}
}
},
},
["warn_misplaced_ellipsis_vararg"]={
["warn_misplaced_ellipsis_vararg"]={
[j]={"ambiguous-ellipsis"},
[k]={"ambiguous-ellipsis"},
[i]="ambiguous-ellipsis",
[j]="ambiguous-ellipsis",
[c]="\'...\' in this location creates a C-style varargs function%select{, not a function parameter pack|}0",
[c]="warn_misplaced_ellipsis_vararg",
[d]=g,
[d]="\'...\' in this location creates a C-style varargs function%select{, not a function parameter pack|}0",
[e]="\'\\.\\.\\.\' in this location creates a C\\-style varargs function(?:, not a function parameter pack|)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wambiguous\\-ellipsis[^\\]]*\\]",
[g]="\'\\.\\.\\.\' in this location creates a C\\-style varargs function(?:, not a function parameter pack|)",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wambiguous\\-ellipsis[^\\]]*\\]",
[a]={"36ee9fb21957",1407799823,"Reject varargs \'...\' in function prototype if there are more parameters after","Reject varargs \'...\' in function prototype if there are more parameters after\nit. Diagnose with recovery if it appears after a function parameter that was\nobviously supposed to be a parameter pack. Otherwise, warn if it immediately\nfollows a function parameter pack, because the user most likely didn\'t intend\nto write a parameter pack followed by a C-style varargs ellipsis.\n\nThis warning can be syntactically disabled by using \", ...\" instead of \"...\".\n\nllvm-svn: 215408"},
[b]=A,
[h]={{Tb,7506,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n      if (!getLangOpts().CPlusPlus) {\n      // ...\n      } else if (ParmDeclarator.getEllipsisLoc().isValid() || Actions.containsUnexpandedParameterPacks(ParmDeclarator)) {\n        // ...\n        Diag(EllipsisLoc, diag::warn_misplaced_ellipsis_vararg) << ParmEllipsis.isValid() << ParmEllipsis;"}},
[f]={"36ee9fb21957",1407799823,"Reject varargs \'...\' in function prototype if there are more parameters after","Reject varargs \'...\' in function prototype if there are more parameters after\nit. Diagnose with recovery if it appears after a function parameter that was\nobviously supposed to be a parameter pack. Otherwise, warn if it immediately\nfollows a function parameter pack, because the user most likely didn\'t intend\nto write a parameter pack followed by a C-style varargs ellipsis.\n\nThis warning can be syntactically disabled by using \", ...\" instead of \"...\".\n\nllvm-svn: 215408"},
[k]={
[h]={{Wb,7506,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n      if (!getLangOpts().CPlusPlus) {\n      // ...\n      } else if (ParmDeclarator.getEllipsisLoc().isValid() || Actions.containsUnexpandedParameterPacks(ParmDeclarator)) {\n        // ...\n        Diag(EllipsisLoc, diag::warn_misplaced_ellipsis_vararg) << ParmEllipsis.isValid() << ParmEllipsis;"}},
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p14.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p14.cpp:24:30: warning: \'...\' in this location creates a C-style varargs function [-Wambiguous-ellipsis]"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p14.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p14.cpp:24:30: warning: \'...\' in this location creates a C-style varargs function [-Wambiguous-ellipsis]"}
}
}
},
},
["warn_missing_braces"]={
["warn_missing_braces"]={
[j]={B,H,"missing-braces",N},
[k]={K,O,"missing-braces",V},
[i]="missing-braces",
[j]="missing-braces",
[c]="suggest braces around initialization of subobject",
[c]="warn_missing_braces",
[d]=g,
[d]="suggest braces around initialization of subobject",
[e]="suggest braces around initialization of subobject",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmissing\\-braces[^\\]]*\\]",
[g]="suggest braces around initialization of subobject",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-braces[^\\]]*\\]",
[a]={"5029d56cc1d2",1267935435,"Implement missing-braces warning and add a test case.","Implement missing-braces warning and add a test case.\n\nllvm-svn: 97893"},
[b]=m,
[h]={{fb,1149,"/// Check whether the range of the initializer \\p ParentIList from element\n/// \\p Index onwards can be used to initialize an object of type \\p T. Update\n/// \\p Index to indicate how many elements of the list were consumed.\n///\n/// This also fills in \\p StructuredList, from element \\p StructuredIndex\n/// onwards, with the fully-braced, desugared form of the initialization.\nvoid InitListChecker::CheckImplicitInitList(const InitializedEntity &Entity, InitListExpr *ParentIList, QualType T, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  // ...\n  if (StructuredSubobjectInitList) {\n    // ...\n    // Complain about missing braces.\n    if (!VerifyOnly && (T->isArrayType() || T->isRecordType()) && !ParentIList->isIdiomaticZeroInitializer(SemaRef.getLangOpts()) && !isIdiomaticBraceElisionEntity(Entity)) {\n      SemaRef.Diag(StructuredSubobjectInitList->getBeginLoc(), diag::warn_missing_braces) << StructuredSubobjectInitList->getSourceRange() << FixItHint::CreateInsertion(StructuredSubobjectInitList->getBeginLoc(), \"{\") << FixItHint::CreateInsertion(SemaRef.getLocForEndOfToken(StructuredSubobjectInitList->getEndLoc()), \"}\");"}},
[f]={"5029d56cc1d2",1267935435,"Implement missing-braces warning and add a test case.","Implement missing-braces warning and add a test case.\n\nllvm-svn: 97893"},
[k]={
[h]={{mb,1149,"/// Check whether the range of the initializer \\p ParentIList from element\n/// \\p Index onwards can be used to initialize an object of type \\p T. Update\n/// \\p Index to indicate how many elements of the list were consumed.\n///\n/// This also fills in \\p StructuredList, from element \\p StructuredIndex\n/// onwards, with the fully-braced, desugared form of the initialization.\nvoid InitListChecker::CheckImplicitInitList(const InitializedEntity &Entity, InitListExpr *ParentIList, QualType T, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  // ...\n  if (StructuredSubobjectInitList) {\n    // ...\n    // Complain about missing braces.\n    if (!VerifyOnly && (T->isArrayType() || T->isRecordType()) && !ParentIList->isIdiomaticZeroInitializer(SemaRef.getLangOpts()) && !isIdiomaticBraceElisionEntity(Entity)) {\n      SemaRef.Diag(StructuredSubobjectInitList->getBeginLoc(), diag::warn_missing_braces) << StructuredSubobjectInitList->getSourceRange() << FixItHint::CreateInsertion(StructuredSubobjectInitList->getBeginLoc(), \"{\") << FixItHint::CreateInsertion(SemaRef.getLocForEndOfToken(StructuredSubobjectInitList->getEndLoc()), \"}\");"}},
[l]={
["clang/test/Sema/warn-missing-braces.c"]={"clang/test/Sema/warn-missing-braces.c:3:17: warning: suggest braces around initialization of subobject [-Wmissing-braces]","clang/test/Sema/warn-missing-braces.c:3:23: warning: suggest braces around initialization of subobject [-Wmissing-braces]"}
["clang/test/Sema/warn-missing-braces.c"]={"clang/test/Sema/warn-missing-braces.c:3:17: warning: suggest braces around initialization of subobject [-Wmissing-braces]","clang/test/Sema/warn-missing-braces.c:3:23: warning: suggest braces around initialization of subobject [-Wmissing-braces]"}
}
}
},
},
["warn_missing_case"]={
["warn_missing_case"]={
[j]={B,H,"switch"},
[k]={K,O,"switch"},
[i]="switch",
[j]="switch",
[c]="%plural{1:enumeration value %1 not handled in switch|2:enumeration values %1 and %2 not handled in switch|3:enumeration values %1, %2, and %3 not handled in switch|:%0 enumeration values not handled in switch: %1, %2, %3...}0",
[c]="warn_missing_case",
[d]=g,
[d]="%plural{1:enumeration value %1 not handled in switch|2:enumeration values %1 and %2 not handled in switch|3:enumeration values %1, %2, and %3 not handled in switch|:%0 enumeration values not handled in switch: %1, %2, %3...}0",
[e]="(?:enumeration value (.*?) not handled in switch|enumeration values (.*?) and (.*?) not handled in switch|enumeration values (.*?), (.*?), and (.*?) not handled in switch|(.*?) enumeration values not handled in switch\\: (.*?), (.*?), (.*?)\\.\\.\\.)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wswitch[^\\]]*\\]",
[g]="(?:enumeration value (.*?) not handled in switch|enumeration values (.*?) and (.*?) not handled in switch|enumeration values (.*?), (.*?), and (.*?) not handled in switch|(.*?) enumeration values not handled in switch\\: (.*?), (.*?), (.*?)\\.\\.\\.)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wswitch[^\\]]*\\]",
[a]={"3a8650af779c",1427476994,"[Sema] Factor diags with %plural. No functionality change intended.","[Sema] Factor diags with %plural. No functionality change intended.\n\nllvm-svn: 233387"},
[b]=m,
[h]={{Cb,1605,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  // ...\n  if (!HasDependentValue) {\n    // ...\n    // If switch has default case, then ignore it.\n    if (!CaseListIsErroneous && !CaseListIsIncomplete && !HasConstantCond && ET && ET->getDecl()->isCompleteDefinition() && !ET->getDecl()->enumerators().empty()) {\n      // ...\n      // Produce a nice diagnostic if multiple values aren\'t handled.\n      if (!UnhandledNames.empty()) {\n        auto DB = Diag(CondExpr->getExprLoc(), TheDefaultStmt ? diag::warn_def_missing_case : diag::warn_missing_case) << CondExpr->getSourceRange() << (int)UnhandledNames.size();"}},
[f]={"3a8650af779c",1427476994,"[Sema] Factor diags with %plural. No functionality change intended.","[Sema] Factor diags with %plural. No functionality change intended.\n\nllvm-svn: 233387"},
[k]={
[h]={{Hb,1605,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  // ...\n  if (!HasDependentValue) {\n    // ...\n    // If switch has default case, then ignore it.\n    if (!CaseListIsErroneous && !CaseListIsIncomplete && !HasConstantCond && ET && ET->getDecl()->isCompleteDefinition() && !ET->getDecl()->enumerators().empty()) {\n      // ...\n      // Produce a nice diagnostic if multiple values aren\'t handled.\n      if (!UnhandledNames.empty()) {\n        auto DB = Diag(CondExpr->getExprLoc(), TheDefaultStmt ? diag::warn_def_missing_case : diag::warn_missing_case) << CondExpr->getSourceRange() << (int)UnhandledNames.size();"}},
[l]={
["clang/test/SemaCXX/enum-attr.cpp"]={"clang/test/SemaCXX/enum-attr.cpp:30:11: warning: enumeration value \'A1\' not handled in switch [-Wswitch]","clang/test/SemaCXX/enum-attr.cpp:43:11: warning: enumeration value \'B1\' not handled in switch [-Wswitch]","clang/test/SemaCXX/enum-attr.cpp:56:11: warning: enumeration value \'C1\' not handled in switch [-Wswitch]","clang/test/SemaCXX/enum-attr.cpp:69:11: warning: enumeration value \'D1\' not handled in switch [-Wswitch]","clang/test/SemaCXX/enum-attr.cpp:83:11: warning: enumeration value \'E1\' not handled in switch [-Wswitch]","clang/test/SemaCXX/enum-attr.cpp:97:11: warning: enumeration value \'F1\' not handled in switch [-Wswitch]"}
["clang/test/SemaCXX/enum-attr.cpp"]={"clang/test/SemaCXX/enum-attr.cpp:30:11: warning: enumeration value \'A1\' not handled in switch [-Wswitch]","clang/test/SemaCXX/enum-attr.cpp:43:11: warning: enumeration value \'B1\' not handled in switch [-Wswitch]","clang/test/SemaCXX/enum-attr.cpp:56:11: warning: enumeration value \'C1\' not handled in switch [-Wswitch]","clang/test/SemaCXX/enum-attr.cpp:69:11: warning: enumeration value \'D1\' not handled in switch [-Wswitch]","clang/test/SemaCXX/enum-attr.cpp:83:11: warning: enumeration value \'E1\' not handled in switch [-Wswitch]","clang/test/SemaCXX/enum-attr.cpp:97:11: warning: enumeration value \'F1\' not handled in switch [-Wswitch]"}
}
}
},
},
["warn_missing_case_for_condition"]={
["warn_missing_case_for_condition"]={
[c]="no case matching constant switch condition \'%0\'",
[c]="warn_missing_case_for_condition",
[d]=g,
[d]="no case matching constant switch condition \'%0\'",
[e]="no case matching constant switch condition \'(.*?)\'",
[e]=i,
[f]=Gb,
[g]="no case matching constant switch condition \'(.*?)\'",
[b]=l,
[a]=Ib,
[a]={"d3dfbd6f4fd7",1274152761,"If a switch condition is constant, don\'t warn about missing enum cases.","If a switch condition is constant, don\'t warn about missing enum cases.\nIf a switch condition is constant, warn if there\'s no case for it.\n\nConstant switch conditions do come up in reasonable template code.\n\nllvm-svn: 104010"},
[b]=m,
[h]={{Cb,1490,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  // ...\n  if (!HasDependentValue) {\n    // ...\n    // Complain if we have a constant condition and we didn\'t find a match.\n    if (!CaseListIsErroneous && !CaseListIsIncomplete && ShouldCheckConstantCond) {\n      // ...\n      Diag(CondExpr->getExprLoc(), diag::warn_missing_case_for_condition) << toString(ConstantCondValue, 10) << CondExpr->getSourceRange();"}},
[f]={"d3dfbd6f4fd7",1274152761,"If a switch condition is constant, don\'t warn about missing enum cases.","If a switch condition is constant, don\'t warn about missing enum cases.\nIf a switch condition is constant, warn if there\'s no case for it.\n\nConstant switch conditions do come up in reasonable template code.\n\nllvm-svn: 104010"},
[k]={
[h]={{Hb,1490,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  // ...\n  if (!HasDependentValue) {\n    // ...\n    // Complain if we have a constant condition and we didn\'t find a match.\n    if (!CaseListIsErroneous && !CaseListIsIncomplete && ShouldCheckConstantCond) {\n      // ...\n      Diag(CondExpr->getExprLoc(), diag::warn_missing_case_for_condition) << toString(ConstantCondValue, 10) << CondExpr->getSourceRange();"}},
[l]={
["clang/test/CodeGen/2008-09-22-bad-switch-type.c"]={"clang/test/CodeGen/2008-09-22-bad-switch-type.c:15:11: warning: no case matching constant switch condition \'0\'","clang/test/CodeGen/2008-09-22-bad-switch-type.c:20:11: warning: no case matching constant switch condition \'0\'","clang/test/CodeGen/2008-09-22-bad-switch-type.c:25:11: warning: no case matching constant switch condition \'0\'"}
["clang/test/CodeGen/2008-09-22-bad-switch-type.c"]={"clang/test/CodeGen/2008-09-22-bad-switch-type.c:15:11: warning: no case matching constant switch condition \'0\'","clang/test/CodeGen/2008-09-22-bad-switch-type.c:20:11: warning: no case matching constant switch condition \'0\'","clang/test/CodeGen/2008-09-22-bad-switch-type.c:25:11: warning: no case matching constant switch condition \'0\'"}
}
}
},
},
["warn_missing_dependent_template_keyword"]={
["warn_missing_dependent_template_keyword"]={
[c]="use \'template\' keyword to treat \'%0\' as a dependent template name",
[c]="warn_missing_dependent_template_keyword",
[d]=g,
[d]="use \'template\' keyword to treat \'%0\' as a dependent template name",
[e]="use \'template\' keyword to treat \'(.*?)\' as a dependent template name",
[e]=i,
[f]=Gb,
[g]="use \'template\' keyword to treat \'(.*?)\' as a dependent template name",
[b]=v,
[a]=Ib,
[a]={"9392165a1734",1303460724,"For consistency, change suffix from war_ to warn_ for some Microsoft warnings I introduced lately.","For consistency, change suffix from war_ to warn_ for some Microsoft warnings I introduced lately.\n\nllvm-svn: 129986"},
[b]=A,
[h]={{cc,527,"/// Parse global scope or nested-name-specifier if present.\n///\n/// Parses a C++ global scope specifier (\'::\') or nested-name-specifier (which\n/// may be preceded by \'::\'). Note that this routine will not parse ::new or\n/// ::delete; it will just leave them in the token stream.\n///\n///      \'::\'[opt] nested-name-specifier\n///      \'::\'\n///\n///      nested-name-specifier:\n///        type-name \'::\'\n///        namespace-name \'::\'\n///        nested-name-specifier identifier \'::\'\n///        nested-name-specifier \'template\'[opt] simple-template-id \'::\'\n///\n///\n/// \\param SS the scope specifier that will be set to the parsed\n/// nested-name-specifier (or empty)\n///\n/// \\param ObjectType if this nested-name-specifier is being parsed following\n/// the \".\" or \"->\" of a member access expression, this parameter provides the\n/// type of the object whose members are being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we will be entering into the context of\n/// the nested-name-specifier after parsing it.\n///\n/// \\param MayBePseudoDestructor When non-NULL, points to a flag that\n/// indicates whether this nested-name-specifier may be part of a\n/// pseudo-destructor name. In this case, the flag will be set false\n/// if we don\'t actually end up parsing a destructor name. Moreover,\n/// if we do end up determining that we are parsing a destructor name,\n/// the last component of the nested-name-specifier is not parsed as\n/// part of the scope specifier.\n///\n/// \\param IsTypename If \\c true, this nested-name-specifier is known to be\n/// part of a type name. This is used to improve error recovery.\n///\n/// \\param LastII When non-NULL, points to an IdentifierInfo* that will be\n/// filled in with the leading identifier in the last component of the\n/// nested-name-specifier, if any.\n///\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n///\n/// \\returns true if there was an error parsing a scope specifier\nbool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool *MayBePseudoDestructor, bool IsTypename, IdentifierInfo **LastII, bool OnlyNamespace, bool InUsingDeclaration) {\n  // ...\n  while (true) {\n    // ...\n    // nested-name-specifier:\n    //  type-name \'<\'\n    if (Next.is(tok::less)) {\n      // ...\n      if (MemberOfUnknownSpecialization && (ObjectType || SS.isSet()) && (IsTypename || isTemplateArgumentList(1) == TPResult::True)) {\n        // If we had errors before, ObjectType can be dependent even without any\n        // templates. Do not report missing template keyword in that case.\n        if (!ObjectHadErrors) {\n          // ...\n          if (getLangOpts().MicrosoftExt)\n            DiagID = diag::warn_missing_dependent_template_keyword;"}},
[f]={"9392165a1734",1303460724,"For consistency, change suffix from war_ to warn_ for some Microsoft warnings I introduced lately.","For consistency, change suffix from war_ to warn_ for some Microsoft warnings I introduced lately.\n\nllvm-svn: 129986"},
[k]={
[h]={{fc,527,"/// Parse global scope or nested-name-specifier if present.\n///\n/// Parses a C++ global scope specifier (\'::\') or nested-name-specifier (which\n/// may be preceded by \'::\'). Note that this routine will not parse ::new or\n/// ::delete; it will just leave them in the token stream.\n///\n///      \'::\'[opt] nested-name-specifier\n///      \'::\'\n///\n///      nested-name-specifier:\n///        type-name \'::\'\n///        namespace-name \'::\'\n///        nested-name-specifier identifier \'::\'\n///        nested-name-specifier \'template\'[opt] simple-template-id \'::\'\n///\n///\n/// \\param SS the scope specifier that will be set to the parsed\n/// nested-name-specifier (or empty)\n///\n/// \\param ObjectType if this nested-name-specifier is being parsed following\n/// the \".\" or \"->\" of a member access expression, this parameter provides the\n/// type of the object whose members are being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we will be entering into the context of\n/// the nested-name-specifier after parsing it.\n///\n/// \\param MayBePseudoDestructor When non-NULL, points to a flag that\n/// indicates whether this nested-name-specifier may be part of a\n/// pseudo-destructor name. In this case, the flag will be set false\n/// if we don\'t actually end up parsing a destructor name. Moreover,\n/// if we do end up determining that we are parsing a destructor name,\n/// the last component of the nested-name-specifier is not parsed as\n/// part of the scope specifier.\n///\n/// \\param IsTypename If \\c true, this nested-name-specifier is known to be\n/// part of a type name. This is used to improve error recovery.\n///\n/// \\param LastII When non-NULL, points to an IdentifierInfo* that will be\n/// filled in with the leading identifier in the last component of the\n/// nested-name-specifier, if any.\n///\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n///\n/// \\returns true if there was an error parsing a scope specifier\nbool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool *MayBePseudoDestructor, bool IsTypename, IdentifierInfo **LastII, bool OnlyNamespace, bool InUsingDeclaration) {\n  // ...\n  while (true) {\n    // ...\n    // nested-name-specifier:\n    //  type-name \'<\'\n    if (Next.is(tok::less)) {\n      // ...\n      if (MemberOfUnknownSpecialization && (ObjectType || SS.isSet()) && (IsTypename || isTemplateArgumentList(1) == TPResult::True)) {\n        // If we had errors before, ObjectType can be dependent even without any\n        // templates. Do not report missing template keyword in that case.\n        if (!ObjectHadErrors) {\n          // ...\n          if (getLangOpts().MicrosoftExt)\n            DiagID = diag::warn_missing_dependent_template_keyword;"}},
[l]={
["clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp"]={"clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:34:42: warning: use \'template\' keyword to treat \'InnerTemplate\' as a dependent template name","clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:38:42: warning: use \'template\' keyword to treat \'InnerTemplate\' as a dependent template name"}
["clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp"]={"clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:34:42: warning: use \'template\' keyword to treat \'InnerTemplate\' as a dependent template name","clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:38:42: warning: use \'template\' keyword to treat \'InnerTemplate\' as a dependent template name"}
}
}
},
},
["warn_missing_explicit_synthesis"]={
["warn_missing_explicit_synthesis"]={
[j]={"objc-missing-property-synthesis"},
[k]={"objc-missing-property-synthesis"},
[i]="objc-missing-property-synthesis",
[j]="objc-missing-property-synthesis",
[c]="auto property synthesis is synthesizing property not explicitly synthesized",
[c]="warn_missing_explicit_synthesis",
[d]=g,
[d]="auto property synthesis is synthesizing property not explicitly synthesized",
[e]="auto property synthesis is synthesizing property not explicitly synthesized",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wobjc\\-missing\\-property\\-synthesis[^\\]]*\\]",
[g]="auto property synthesis is synthesizing property not explicitly synthesized",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-missing\\-property\\-synthesis[^\\]]*\\]",
[a]={"d5f34f9fee08",1336063410,"objective-c: warn for properties being default synthesized","objective-c: warn for properties being default synthesized\nunder -Wobjc-missing-property-synthesis which must be\nopted-in. // rdar://11295716\n\nllvm-svn: 156078"},
[b]=m,
[h]={{Qc,1975,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  // ...\n  for (const auto &PropEntry : PropMap) {\n    // ...\n    if (PIDecl && !Prop->isUnavailable()) {\n      Diag(Prop->getLocation(), diag::warn_missing_explicit_synthesis);"}},
[f]={"d5f34f9fee08",1336063410,"objective-c: warn for properties being default synthesized","objective-c: warn for properties being default synthesized\nunder -Wobjc-missing-property-synthesis which must be\nopted-in. // rdar://11295716\n\nllvm-svn: 156078"},
[k]={
[h]={{Xc,1975,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  // ...\n  for (const auto &PropEntry : PropMap) {\n    // ...\n    if (PIDecl && !Prop->isUnavailable()) {\n      Diag(Prop->getLocation(), diag::warn_missing_explicit_synthesis);"}},
[l]={
["clang/test/SemaObjC/default-synthesize-1.m"]={"clang/test/SemaObjC/default-synthesize-1.m:11:15: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]","clang/test/SemaObjC/default-synthesize-1.m:12:30: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]","clang/test/SemaObjC/default-synthesize-1.m:21:27: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]","clang/test/SemaObjC/default-synthesize-1.m:22:41: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]","clang/test/SemaObjC/default-synthesize-1.m:41:27: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]","clang/test/SemaObjC/default-synthesize-1.m:42:41: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]","clang/test/SemaObjC/default-synthesize-1.m:120:20: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]","clang/test/SemaObjC/default-synthesize-1.m:151:27: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]"}
["clang/test/SemaObjC/default-synthesize-1.m"]={"clang/test/SemaObjC/default-synthesize-1.m:11:15: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]","clang/test/SemaObjC/default-synthesize-1.m:12:30: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]","clang/test/SemaObjC/default-synthesize-1.m:21:27: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]","clang/test/SemaObjC/default-synthesize-1.m:22:41: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]","clang/test/SemaObjC/default-synthesize-1.m:41:27: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]","clang/test/SemaObjC/default-synthesize-1.m:42:41: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]","clang/test/SemaObjC/default-synthesize-1.m:120:20: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]","clang/test/SemaObjC/default-synthesize-1.m:151:27: warning: auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]"}
}
}
},
},
["warn_missing_field_initializers"]={
["warn_missing_field_initializers"]={
[j]={p,B,Fc,"missing-field-initializers"},
[k]={r,K,Ic,"missing-field-initializers"},
[i]="missing-field-initializers",
[j]="missing-field-initializers",
[c]="missing field %0 initializer",
[c]="warn_missing_field_initializers",
[d]=g,
[d]="missing field %0 initializer",
[e]="missing field (.*?) initializer",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmissing\\-field\\-initializers[^\\]]*\\]",
[g]="missing field (.*?) initializer",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-field\\-initializers[^\\]]*\\]",
[a]={"e40b58ec2f66",1268335958,"Implement -Wmissing-field-initializers.  Patch by mikem!","Implement -Wmissing-field-initializers.  Patch by mikem!\n\nllvm-svn: 98275"},
[b]=m,
[h]={{fb,2390,"void InitListChecker::CheckStructUnionTypes(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, CXXRecordDecl::base_class_const_range Bases, RecordDecl::field_iterator Field, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool TopLevelObject) {\n  // ...\n  // Emit warnings for missing struct field initializers.\n  if (!VerifyOnly && InitializedSomething && CheckForMissingFields && Field != FieldEnd && !Field->getType()->isIncompleteArrayType() && !RD->isUnion()) {\n    // It is possible we have one or more unnamed bitfields remaining.\n    // Find first (if any) named field and emit warning.\n    for (RecordDecl::field_iterator it = Field, end = RD->field_end(); it != end; ++it) {\n      if (!it->isUnnamedBitfield() && !it->hasInClassInitializer()) {\n        SemaRef.Diag(IList->getSourceRange().getEnd(), diag::warn_missing_field_initializers) << *it;"}},
[f]={"e40b58ec2f66",1268335958,"Implement -Wmissing-field-initializers.  Patch by mikem!","Implement -Wmissing-field-initializers.  Patch by mikem!\n\nllvm-svn: 98275"},
[k]={
[h]={{mb,2390,"void InitListChecker::CheckStructUnionTypes(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, CXXRecordDecl::base_class_const_range Bases, RecordDecl::field_iterator Field, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool TopLevelObject) {\n  // ...\n  // Emit warnings for missing struct field initializers.\n  if (!VerifyOnly && InitializedSomething && CheckForMissingFields && Field != FieldEnd && !Field->getType()->isIncompleteArrayType() && !RD->isUnion()) {\n    // It is possible we have one or more unnamed bitfields remaining.\n    // Find first (if any) named field and emit warning.\n    for (RecordDecl::field_iterator it = Field, end = RD->field_end(); it != end; ++it) {\n      if (!it->isUnnamedBitfield() && !it->hasInClassInitializer()) {\n        SemaRef.Diag(IList->getSourceRange().getEnd(), diag::warn_missing_field_initializers) << *it;"}},
[l]={
["clang/test/Sema/missing-field-initializers.c"]={"clang/test/Sema/missing-field-initializers.c:7:23: warning: missing field \'b\' initializer [-Wmissing-field-initializers]","clang/test/Sema/missing-field-initializers.c:13:7: warning: missing field \'b\' initializer [-Wmissing-field-initializers]","clang/test/Sema/missing-field-initializers.c:21:1: warning: missing field \'b\' initializer [-Wmissing-field-initializers]","clang/test/Sema/missing-field-initializers.c:44:18: warning: missing field \'b\' initializer [-Wmissing-field-initializers]","clang/test/Sema/missing-field-initializers.c:46:27: warning: missing field \'e\' initializer [-Wmissing-field-initializers]","clang/test/Sema/missing-field-initializers.c:51:7: warning: missing field \'b\' initializer [-Wmissing-field-initializers]"}
["clang/test/Sema/missing-field-initializers.c"]={"clang/test/Sema/missing-field-initializers.c:7:23: warning: missing field \'b\' initializer [-Wmissing-field-initializers]","clang/test/Sema/missing-field-initializers.c:13:7: warning: missing field \'b\' initializer [-Wmissing-field-initializers]","clang/test/Sema/missing-field-initializers.c:21:1: warning: missing field \'b\' initializer [-Wmissing-field-initializers]","clang/test/Sema/missing-field-initializers.c:44:18: warning: missing field \'b\' initializer [-Wmissing-field-initializers]","clang/test/Sema/missing-field-initializers.c:46:27: warning: missing field \'e\' initializer [-Wmissing-field-initializers]","clang/test/Sema/missing-field-initializers.c:51:7: warning: missing field \'b\' initializer [-Wmissing-field-initializers]"}
}
}
},
},
["warn_missing_format_string"]={
["warn_missing_format_string"]={
[j]={B,H,nb,N},
[k]={K,O,rb,V},
[i]=nb,
[j]=rb,
[c]="format string missing",
[c]="warn_missing_format_string",
[d]=g,
[d]="format string missing",
[e]="format string missing",
[e]=i,
[f]=vc,
[g]="format string missing",
[b]=ac,
[a]=yc,
[a]={dd,1279246282,bd,ad},
[b]=dc,
[h]={{r,9913,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // CHECK: printf/scanf-like function is called with no format string.\n  if (format_idx >= Args.size()) {\n    Diag(Loc, diag::warn_missing_format_string) << Range;"}}
[f]={Qc,1279246282,Vc,cd},
[h]={{t,9913,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // CHECK: printf/scanf-like function is called with no format string.\n  if (format_idx >= Args.size()) {\n    Diag(Loc, diag::warn_missing_format_string) << Range;"}}
},
},
["warn_missing_method_return_type"]={
["warn_missing_method_return_type"]={
[j]={p,B,Fc,"missing-method-return-type"},
[k]={r,K,Ic,"missing-method-return-type"},
[i]="missing-method-return-type",
[j]="missing-method-return-type",
[c]="method has no return type specified; defaults to \'id\'",
[c]="warn_missing_method_return_type",
[d]=g,
[d]="method has no return type specified; defaults to \'id\'",
[e]="method has no return type specified; defaults to \'id\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmissing\\-method\\-return\\-type[^\\]]*\\]",
[g]="method has no return type specified; defaults to \'id\'",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-method\\-return\\-type[^\\]]*\\]",
[a]={"b5a52ca0c935",1311267647,"objc - Diagnose missing method return type specifier under","objc - Diagnose missing method return type specifier under\na warning flag. // rdar://9615045\n\nllvm-svn: 135681"},
[b]=m,
[h]={{wc,4754,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  if (ReturnType) {\n  // ...\n  } else { // get the type for \"id\".\n    // ...\n    Diag(MethodLoc, diag::warn_missing_method_return_type) << FixItHint::CreateInsertion(SelectorLocs.front(), \"(id)\");"}},
[f]={"b5a52ca0c935",1311267647,"objc - Diagnose missing method return type specifier under","objc - Diagnose missing method return type specifier under\na warning flag. // rdar://9615045\n\nllvm-svn: 135681"},
[k]={
[h]={{Gc,4754,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  if (ReturnType) {\n  // ...\n  } else { // get the type for \"id\".\n    // ...\n    Diag(MethodLoc, diag::warn_missing_method_return_type) << FixItHint::CreateInsertion(SelectorLocs.front(), \"(id)\");"}},
[l]={
["clang/test/SemaObjC/missing-method-return-type.m"]={"clang/test/SemaObjC/missing-method-return-type.m:5:1: warning: method has no return type specified; defaults to \'id\' [-Wmissing-method-return-type]","clang/test/SemaObjC/missing-method-return-type.m:9:1: warning: method has no return type specified; defaults to \'id\' [-Wmissing-method-return-type]"}
["clang/test/SemaObjC/missing-method-return-type.m"]={"clang/test/SemaObjC/missing-method-return-type.m:5:1: warning: method has no return type specified; defaults to \'id\' [-Wmissing-method-return-type]","clang/test/SemaObjC/missing-method-return-type.m:9:1: warning: method has no return type specified; defaults to \'id\' [-Wmissing-method-return-type]"}
}
}
},
},
["warn_missing_prototype"]={
["warn_missing_prototype"]={
[j]={"missing-prototypes"},
[k]={"missing-prototypes"},
[i]="missing-prototypes",
[j]="missing-prototypes",
[c]="no previous prototype for function %0",
[c]="warn_missing_prototype",
[d]=g,
[d]="no previous prototype for function %0",
[e]="no previous prototype for function (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmissing\\-prototypes[^\\]]*\\]",
[g]="no previous prototype for function (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-prototypes[^\\]]*\\]",
[a]={"f1b876d5dee3",1238517303,"Implement -Wmissing-prototypes. Fixes PR3911.","Implement -Wmissing-prototypes. Fixes PR3911.\n\nllvm-svn: 68110"},
[b]=m,
[h]={{D,15662,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  // ...\n  {\n    // ...\n    if (FD) {\n      // ...\n      if (ShouldWarnAboutMissingPrototype(FD, PossiblePrototype)) {\n        Diag(FD->getLocation(), diag::warn_missing_prototype) << FD;"}},
[f]={"f1b876d5dee3",1238517303,"Implement -Wmissing-prototypes. Fixes PR3911.","Implement -Wmissing-prototypes. Fixes PR3911.\n\nllvm-svn: 68110"},
[k]={
[h]={{M,15662,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  // ...\n  {\n    // ...\n    if (FD) {\n      // ...\n      if (ShouldWarnAboutMissingPrototype(FD, PossiblePrototype)) {\n        Diag(FD->getLocation(), diag::warn_missing_prototype) << FD;"}},
[l]={
["clang/test/SemaCXX/warn-everthing.cpp"]={"clang/test/SemaCXX/warn-everthing.cpp:11:6: warning: no previous prototype for function \'testPR12271\' [-Wmissing-prototypes]"}
["clang/test/SemaCXX/warn-everthing.cpp"]={"clang/test/SemaCXX/warn-everthing.cpp:11:6: warning: no previous prototype for function \'testPR12271\' [-Wmissing-prototypes]"}
}
}
},
},
["warn_missing_sdksettings_for_availability_checking"]={
["warn_missing_sdksettings_for_availability_checking"]={
[j]={"ignored-availability-without-sdk-settings"},
[k]={"ignored-availability-without-sdk-settings"},
[i]="ignored-availability-without-sdk-settings",
[j]="ignored-availability-without-sdk-settings",
[c]={{nil,jb,"%0 availability is ignored without a valid \'SDKSettings.json\' in the SDK"}},
[c]={{nil,I,"warn_missing_sdksettings_for_availability_checking"}},
[d]=g,
[d]={{nil,I,"%0 availability is ignored without a valid \'SDKSettings.json\' in the SDK"}},
[e]="(.*?) availability is ignored without a valid \'SDKSettings\\.json\' in the SDK",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wignored\\-availability\\-without\\-sdk\\-settings[^\\]]*\\]",
[g]="(.*?) availability is ignored without a valid \'SDKSettings\\.json\' in the SDK",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wignored\\-availability\\-without\\-sdk\\-settings[^\\]]*\\]",
[a]={Tc,1615397021,Yc,Mc},
[b]={{nil,I,m}},
[f]={dd,1615397021,bd,ad},
[h]={{"clang/lib/Sema/Sema.cpp",70,"DarwinSDKInfo *Sema::getDarwinSDKInfoForAvailabilityChecking(SourceLocation Loc, StringRef Platform) {\n  // ...\n  if (!SDKInfo && !WarnedDarwinSDKInfoMissing) {\n    Diag(Loc, diag::warn_missing_sdksettings_for_availability_checking) << Platform;"}},
[h]={{"clang/lib/Sema/Sema.cpp",70,"DarwinSDKInfo *Sema::getDarwinSDKInfoForAvailabilityChecking(SourceLocation Loc, StringRef Platform) {\n  // ...\n  if (!SDKInfo && !WarnedDarwinSDKInfoMissing) {\n    Diag(Loc, diag::warn_missing_sdksettings_for_availability_checking) << Platform;"}},
[k]={
[l]={
["clang/test/Sema/attr-availability-iosmac-infer-from-macos-no-sdk-settings.c"]={"clang/test/Sema/attr-availability-iosmac-infer-from-macos-no-sdk-settings.c:3:30: warning: macOS availability is ignored without a valid \'SDKSettings.json\' in the SDK [-Wignored-availability-without-sdk-settings]"}
["clang/test/Sema/attr-availability-iosmac-infer-from-macos-no-sdk-settings.c"]={"clang/test/Sema/attr-availability-iosmac-infer-from-macos-no-sdk-settings.c:3:30: warning: macOS availability is ignored without a valid \'SDKSettings.json\' in the SDK [-Wignored-availability-without-sdk-settings]"}
}
}
},
},
["warn_missing_selector_name"]={
["warn_missing_selector_name"]={
[j]={"missing-selector-name"},
[k]={"missing-selector-name"},
[i]="missing-selector-name",
[j]="missing-selector-name",
[c]="%0 used as the name of the previous parameter rather than as part of the selector",
[c]="warn_missing_selector_name",
[d]=g,
[d]="%0 used as the name of the previous parameter rather than as part of the selector",
[e]="(.*?) used as the name of the previous parameter rather than as part of the selector",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmissing\\-selector\\-name[^\\]]*\\]",
[g]="(.*?) used as the name of the previous parameter rather than as part of the selector",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-selector\\-name[^\\]]*\\]",
[a]={"84f498433116",1347923399,"objective-C: improve on warnings about misplacement of method","objective-C: improve on warnings about misplacement of method\nargument names. // rdar://12263549\n\nllvm-svn: 164077"},
[b]=A,
[f]={"84f498433116",1347923399,"objective-C: improve on warnings about misplacement of method","objective-C: improve on warnings about misplacement of method\nargument names. // rdar://12263549\n\nllvm-svn: 164077"},
[h]={{"clang/lib/Parse/ParseObjc.cpp",1509,"///  objc-method-decl:\n///    objc-selector\n///    objc-keyword-selector objc-parmlist[opt]\n///    objc-type-name objc-selector\n///    objc-type-name objc-keyword-selector objc-parmlist[opt]\n///\n///  objc-keyword-selector:\n///    objc-keyword-decl\n///    objc-keyword-selector objc-keyword-decl\n///\n///  objc-keyword-decl:\n///    objc-selector \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    objc-selector \':\' objc-keyword-attributes[opt] identifier\n///    \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    \':\' objc-keyword-attributes[opt] identifier\n///\n///  objc-parmlist:\n///    objc-parms objc-ellipsis[opt]\n///\n///  objc-parms:\n///    objc-parms , parameter-declaration\n///\n///  objc-ellipsis:\n///    , ...\n///\n///  objc-keyword-attributes:        [OBJC2]\n///    __attribute__((unused))\n///\nDecl *Parser::ParseObjCMethodDecl(SourceLocation mLoc, tok::TokenKind mType, tok::ObjCKeywordKind MethodImplKind, bool MethodDefinition) {\n  // ...\n  while (true) {\n    // ...\n    if (!SelIdent) {\n      // ...\n      if (PP.getLocForEndOfToken(ArgInfo.NameLoc) == ColonLoc) {\n        Diag(ArgInfo.NameLoc, diag::warn_missing_selector_name) << ArgInfo.Name;"}},
[h]={{"clang/lib/Parse/ParseObjc.cpp",1509,"///  objc-method-decl:\n///    objc-selector\n///    objc-keyword-selector objc-parmlist[opt]\n///    objc-type-name objc-selector\n///    objc-type-name objc-keyword-selector objc-parmlist[opt]\n///\n///  objc-keyword-selector:\n///    objc-keyword-decl\n///    objc-keyword-selector objc-keyword-decl\n///\n///  objc-keyword-decl:\n///    objc-selector \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    objc-selector \':\' objc-keyword-attributes[opt] identifier\n///    \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    \':\' objc-keyword-attributes[opt] identifier\n///\n///  objc-parmlist:\n///    objc-parms objc-ellipsis[opt]\n///\n///  objc-parms:\n///    objc-parms , parameter-declaration\n///\n///  objc-ellipsis:\n///    , ...\n///\n///  objc-keyword-attributes:        [OBJC2]\n///    __attribute__((unused))\n///\nDecl *Parser::ParseObjCMethodDecl(SourceLocation mLoc, tok::TokenKind mType, tok::ObjCKeywordKind MethodImplKind, bool MethodDefinition) {\n  // ...\n  while (true) {\n    // ...\n    if (!SelIdent) {\n      // ...\n      if (PP.getLocForEndOfToken(ArgInfo.NameLoc) == ColonLoc) {\n        Diag(ArgInfo.NameLoc, diag::warn_missing_selector_name) << ArgInfo.Name;"}},
[k]={
[l]={
["clang/test/SemaObjC/unused.m"]={"clang/test/SemaObjC/unused.m:32:20: warning: \'x\' used as the name of the previous parameter rather than as part of the selector [-Wmissing-selector-name]","clang/test/SemaObjC/unused.m:36:6: warning: \'y\' used as the name of the previous parameter rather than as part of the selector [-Wmissing-selector-name]"}
["clang/test/SemaObjC/unused.m"]={"clang/test/SemaObjC/unused.m:32:20: warning: \'x\' used as the name of the previous parameter rather than as part of the selector [-Wmissing-selector-name]","clang/test/SemaObjC/unused.m:36:6: warning: \'y\' used as the name of the previous parameter rather than as part of the selector [-Wmissing-selector-name]"}
}
}
},
},
["warn_missing_sentinel"]={
["warn_missing_sentinel"]={
[j]={"sentinel"},
[k]={"sentinel"},
[i]="sentinel",
[j]="sentinel",
[c]="missing sentinel in %select{function call|method dispatch|block call}0",
[c]="warn_missing_sentinel",
[d]=g,
[d]="missing sentinel in %select{function call|method dispatch|block call}0",
[e]="missing sentinel in (?:function call|method dispatch|block call)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wsentinel[^\\]]*\\]",
[g]="missing sentinel in (?:function call|method dispatch|block call)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wsentinel[^\\]]*\\]",
[a]={"9e87721d47fd",1242256850,"Look for and diagnose missing sentinel argument on message","Look for and diagnose missing sentinel argument on message\ndispatch arguments which have sentinel attribute.\n\nllvm-svn: 71737"},
[b]=m,
[h]={{K,500,"/// DiagnoseSentinelCalls - This routine checks whether a call or\n/// message-send is to a declaration with the sentinel attribute, and\n/// if so, it checks that the requirements of the sentinel are\n/// satisfied.\nvoid Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, ArrayRef<Expr *> Args) {\n  // ...\n  if (MissingNilLoc.isInvalid())\n    Diag(Loc, diag::warn_missing_sentinel) << int(calleeType);"},{K,502,"/// DiagnoseSentinelCalls - This routine checks whether a call or\n/// message-send is to a declaration with the sentinel attribute, and\n/// if so, it checks that the requirements of the sentinel are\n/// satisfied.\nvoid Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, ArrayRef<Expr *> Args) {\n  // ...\n  if (MissingNilLoc.isInvalid())\n  // ...\n  else\n    Diag(MissingNilLoc, diag::warn_missing_sentinel) << int(calleeType) << FixItHint::CreateInsertion(MissingNilLoc, \", \" + NullValue);"}},
[f]={"9e87721d47fd",1242256850,"Look for and diagnose missing sentinel argument on message","Look for and diagnose missing sentinel argument on message\ndispatch arguments which have sentinel attribute.\n\nllvm-svn: 71737"},
[k]={
[h]={{S,500,"/// DiagnoseSentinelCalls - This routine checks whether a call or\n/// message-send is to a declaration with the sentinel attribute, and\n/// if so, it checks that the requirements of the sentinel are\n/// satisfied.\nvoid Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, ArrayRef<Expr *> Args) {\n  // ...\n  if (MissingNilLoc.isInvalid())\n    Diag(Loc, diag::warn_missing_sentinel) << int(calleeType);"},{S,502,"/// DiagnoseSentinelCalls - This routine checks whether a call or\n/// message-send is to a declaration with the sentinel attribute, and\n/// if so, it checks that the requirements of the sentinel are\n/// satisfied.\nvoid Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, ArrayRef<Expr *> Args) {\n  // ...\n  if (MissingNilLoc.isInvalid())\n  // ...\n  else\n    Diag(MissingNilLoc, diag::warn_missing_sentinel) << int(calleeType) << FixItHint::CreateInsertion(MissingNilLoc, \", \" + NullValue);"}},
[l]={
["clang/test/SemaObjC/method-sentinel-attr.m"]={"clang/test/SemaObjC/method-sentinel-attr.m:31:15: warning: missing sentinel in method dispatch [-Wsentinel]","clang/test/SemaObjC/method-sentinel-attr.m:34:21: warning: missing sentinel in method dispatch [-Wsentinel]","clang/test/SemaObjC/method-sentinel-attr.m:36:14: warning: missing sentinel in method dispatch [-Wsentinel]"}
["clang/test/SemaObjC/method-sentinel-attr.m"]={"clang/test/SemaObjC/method-sentinel-attr.m:31:15: warning: missing sentinel in method dispatch [-Wsentinel]","clang/test/SemaObjC/method-sentinel-attr.m:34:21: warning: missing sentinel in method dispatch [-Wsentinel]","clang/test/SemaObjC/method-sentinel-attr.m:36:14: warning: missing sentinel in method dispatch [-Wsentinel]"}
}
}
},
},
["warn_missing_submodule"]={
["warn_missing_submodule"]={
[j]={"incomplete-module","incomplete-umbrella"},
[k]={"incomplete-module","incomplete-umbrella"},
[i]="incomplete-umbrella",
[j]="incomplete-umbrella",
[c]="missing submodule \'%0\'",
[c]="warn_missing_submodule",
[d]=g,
[d]="missing submodule \'%0\'",
[e]="missing submodule \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-umbrella[^\\]]*\\]",
[g]="missing submodule \'(.*?)\'",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-umbrella[^\\]]*\\]",
[a]={"98a52db80c80",1324340932,"Detect when mapping a #include/#import over to a submodule ends up","Detect when mapping a #include/#import over to a submodule ends up\nhitting a submodule that was never actually created, e.g., because\nthat header wasn\'t parsed. In such cases, complain (because the\nmodule\'s umbrella headers don\'t cover everything) and fall back to\nincluding the header.\n\nLater, we\'ll add a warning at module-build time to catch all such\ncases. However, this fallback is important to eliminate assertions in\nthe ASTWriter when this happens.\n\nllvm-svn: 146933"},
[b]=r,
[h]={{Xc,2112,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  // ...\n  // Make the named module visible, if it\'s not already part of the module\n  // we are parsing.\n  if (ModuleName != getLangOpts().CurrentModule) {\n    if (!Module->IsFromModuleFile && !MapPrivateSubModToTopLevel) {\n      // ...\n      getDiagnostics().Report(ImportLoc, diag::warn_missing_submodule) << Module->getFullModuleName() << SourceRange(Path.front().second, Path.back().second);"}},
[f]={"98a52db80c80",1324340932,"Detect when mapping a #include/#import over to a submodule ends up","Detect when mapping a #include/#import over to a submodule ends up\nhitting a submodule that was never actually created, e.g., because\nthat header wasn\'t parsed. In such cases, complain (because the\nmodule\'s umbrella headers don\'t cover everything) and fall back to\nincluding the header.\n\nLater, we\'ll add a warning at module-build time to catch all such\ncases. However, this fallback is important to eliminate assertions in\nthe ASTWriter when this happens.\n\nllvm-svn: 146933"},
[k]={
[h]={{Rc,2112,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  // ...\n  // Make the named module visible, if it\'s not already part of the module\n  // we are parsing.\n  if (ModuleName != getLangOpts().CurrentModule) {\n    if (!Module->IsFromModuleFile && !MapPrivateSubModToTopLevel) {\n      // ...\n      getDiagnostics().Report(ImportLoc, diag::warn_missing_submodule) << Module->getFullModuleName() << SourceRange(Path.front().second, Path.back().second);"}},
[l]={
["clang/test/Modules/missing-submodule.m"]={"clang/test/Modules/missing-submodule.m:3:2: warning: missing submodule \'Module.NotInModule\' [-Wincomplete-umbrella]"}
["clang/test/Modules/missing-submodule.m"]={"clang/test/Modules/missing-submodule.m:3:2: warning: missing submodule \'Module.NotInModule\' [-Wincomplete-umbrella]"}
}
}
},
},
["warn_missing_sysroot"]={
["warn_missing_sysroot"]={
[j]={"missing-sysroot"},
[k]={"missing-sysroot"},
[i]="missing-sysroot",
[j]="missing-sysroot",
[c]="no such sysroot directory: \'%0\'",
[c]="warn_missing_sysroot",
[d]=g,
[d]="no such sysroot directory: \'%0\'",
[e]="no such sysroot directory\\: \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmissing\\-sysroot[^\\]]*\\]",
[g]="no such sysroot directory\\: \'(.*?)\'",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-sysroot[^\\]]*\\]",
[a]={"6c2b11cc50e8",1355960510,"[driver] Have -isysroot warn on nonexistent paths.","[driver] Have -isysroot warn on nonexistent paths.\nrdar://12282267\n\nllvm-svn: 170611"},
[b]=r,
[h]={{od,2148,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  // Support allowing the SDKROOT environment variable used by xcrun and other\n  // Xcode tools to define the default sysroot, by making it the default for\n  // isysroot.\n  if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {\n    // Warn if the path does not exist.\n    if (!getVFS().exists(A->getValue()))\n      getDriver().Diag(clang::diag::warn_missing_sysroot) << A->getValue();"},{"clang/lib/Driver/ToolChains/PS4CPU.cpp",268,"toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, StringRef Platform, const char *EnvVar) : Generic_ELF(D, Triple, Args) {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {\n    // ...\n    if (!llvm::sys::fs::exists(SDKRootDir))\n      D.Diag(clang::diag::warn_missing_sysroot) << SDKRootDir;"}},
[f]={"6c2b11cc50e8",1355960510,"[driver] Have -isysroot warn on nonexistent paths.","[driver] Have -isysroot warn on nonexistent paths.\nrdar://12282267\n\nllvm-svn: 170611"},
[k]={
[h]={{qd,2148,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  // Support allowing the SDKROOT environment variable used by xcrun and other\n  // Xcode tools to define the default sysroot, by making it the default for\n  // isysroot.\n  if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {\n    // Warn if the path does not exist.\n    if (!getVFS().exists(A->getValue()))\n      getDriver().Diag(clang::diag::warn_missing_sysroot) << A->getValue();"},{"clang/lib/Driver/ToolChains/PS4CPU.cpp",268,"toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, StringRef Platform, const char *EnvVar) : Generic_ELF(D, Triple, Args) {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {\n    // ...\n    if (!llvm::sys::fs::exists(SDKRootDir))\n      D.Diag(clang::diag::warn_missing_sysroot) << SDKRootDir;"}},
[l]={
["clang/test/Driver/incompatible_sysroot.c"]={"clang: warning: no such sysroot directory: \'SDKs/MacOSX10.9.sdk\' [-Wmissing-sysroot]"}
["clang/test/Driver/incompatible_sysroot.c"]={"clang: warning: no such sysroot directory: \'SDKs/MacOSX10.9.sdk\' [-Wmissing-sysroot]"}
}
}
},
},
["warn_missing_type_specifier"]={
["warn_missing_type_specifier"]={
[j]={B,H,"implicit","implicit-int",N},
[k]={K,O,"implicit","implicit-int",V},
[i]="implicit-int",
[j]="implicit-int",
[c]={{nil,kb,"type specifier missing, defaults to \'int\'"}},
[c]={{nil,C,"warn_missing_type_specifier"}},
[d]=g,
[d]={{nil,C,"type specifier missing, defaults to \'int\'"}},
[e]="type specifier missing, defaults to \'int\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-int[^\\]]*\\]",
[g]="type specifier missing, defaults to \'int\'",
[b]=v,
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-int[^\\]]*\\]",
[a]={Ub,1237025389,Xb,Wb},
[b]={{nil,C,A}},
[h]={{Lc,1256,"/// ParseFunctionDefinition - We parsed and verified that the specified\n/// Declarator is well formed.  If this is a K&R-style function, read the\n/// parameters declaration-list, then start the compound-statement.\n///\n///      function-definition: [C99 6.9.1]\n///        decl-specs      declarator declaration-list[opt] compound-statement\n/// [C90] function-definition: [C99 6.7.1] - implicit int result\n/// [C90]  decl-specs[opt] declarator declaration-list[opt] compound-statement\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator ctor-initializer[opt]\n///        function-body\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator function-try-block\n///\nDecl *Parser::ParseFunctionDefinition(ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, LateParsedAttrList *LateParsedAttrs) {\n  // ...\n  // If this is C89 and the declspecs were completely missing, fudge in an\n  // implicit int.  We do this here because this is the only place where\n  // declaration-specifiers are completely optional in the grammar.\n  if (getLangOpts().isImplicitIntRequired() && D.getDeclSpec().isEmpty()) {\n    Diag(D.getIdentifierLoc(), diag::warn_missing_type_specifier) << D.getDeclSpec().getSourceRange();"},{Jb,1360,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  // ...\n  case DeclSpec::TST_unspecified:\n    // ...\n    // Unspecified typespec defaults to int in C90.  However, the C90 grammar\n    // [C90 6.5] only allows a decl-spec if there was *some* type-specifier,\n    // type-qualifier, or storage-class-specifier.  If not, emit an extwarn.\n    // Note that the one exception to this is function definitions, which are\n    // allowed to be completely missing a declspec.  This is handled in the\n    // parser already though by it pretending to have seen an \'int\' in this\n    // case.\n    if (S.getLangOpts().isImplicitIntRequired()) {\n      S.Diag(DeclLoc, diag::warn_missing_type_specifier) << DS.getSourceRange() << FixItHint::CreateInsertion(DS.getBeginLoc(), \"int\");"}},
[f]={Yb,1237025389,Zb,ac},
[k]={
[h]={{Hc,1256,"/// ParseFunctionDefinition - We parsed and verified that the specified\n/// Declarator is well formed.  If this is a K&R-style function, read the\n/// parameters declaration-list, then start the compound-statement.\n///\n///      function-definition: [C99 6.9.1]\n///        decl-specs      declarator declaration-list[opt] compound-statement\n/// [C90] function-definition: [C99 6.7.1] - implicit int result\n/// [C90]  decl-specs[opt] declarator declaration-list[opt] compound-statement\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator ctor-initializer[opt]\n///        function-body\n/// [C++] function-definition: [C++ 8.4]\n///        decl-specifier-seq[opt] declarator function-try-block\n///\nDecl *Parser::ParseFunctionDefinition(ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, LateParsedAttrList *LateParsedAttrs) {\n  // ...\n  // If this is C89 and the declspecs were completely missing, fudge in an\n  // implicit int.  We do this here because this is the only place where\n  // declaration-specifiers are completely optional in the grammar.\n  if (getLangOpts().isImplicitIntRequired() && D.getDeclSpec().isEmpty()) {\n    Diag(D.getIdentifierLoc(), diag::warn_missing_type_specifier) << D.getDeclSpec().getSourceRange();"},{Nb,1360,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  // ...\n  case DeclSpec::TST_unspecified:\n    // ...\n    // Unspecified typespec defaults to int in C90.  However, the C90 grammar\n    // [C90 6.5] only allows a decl-spec if there was *some* type-specifier,\n    // type-qualifier, or storage-class-specifier.  If not, emit an extwarn.\n    // Note that the one exception to this is function definitions, which are\n    // allowed to be completely missing a declspec.  This is handled in the\n    // parser already though by it pretending to have seen an \'int\' in this\n    // case.\n    if (S.getLangOpts().isImplicitIntRequired()) {\n      S.Diag(DeclLoc, diag::warn_missing_type_specifier) << DS.getSourceRange() << FixItHint::CreateInsertion(DS.getBeginLoc(), \"int\");"}},
[l]={
["clang/test/Sema/implicit-int.c"]={"clang/test/Sema/implicit-int.c:6:1: warning: type specifier missing, defaults to \'int\' [-Wimplicit-int]","clang/test/Sema/implicit-int.c:12:1: warning: type specifier missing, defaults to \'int\' [-Wimplicit-int]","clang/test/Sema/implicit-int.c:17:9: warning: type specifier missing, defaults to \'int\' [-Wimplicit-int]","clang/test/Sema/implicit-int.c:32:3: warning: type specifier missing, defaults to \'int\' [-Wimplicit-int]","clang/test/Sema/implicit-int.c:39:40: warning: type specifier missing, defaults to \'int\' [-Wimplicit-int]"}
["clang/test/Sema/implicit-int.c"]={"clang/test/Sema/implicit-int.c:6:1: warning: type specifier missing, defaults to \'int\' [-Wimplicit-int]","clang/test/Sema/implicit-int.c:12:1: warning: type specifier missing, defaults to \'int\' [-Wimplicit-int]","clang/test/Sema/implicit-int.c:17:9: warning: type specifier missing, defaults to \'int\' [-Wimplicit-int]","clang/test/Sema/implicit-int.c:32:3: warning: type specifier missing, defaults to \'int\' [-Wimplicit-int]","clang/test/Sema/implicit-int.c:39:40: warning: type specifier missing, defaults to \'int\' [-Wimplicit-int]"}
}
}
},
},
["warn_missing_variable_declarations"]={
["warn_missing_variable_declarations"]={
[j]={"missing-variable-declarations"},
[k]={"missing-variable-declarations"},
[i]="missing-variable-declarations",
[j]="missing-variable-declarations",
[c]="no previous extern declaration for non-static variable %0",
[c]="warn_missing_variable_declarations",
[d]=g,
[d]="no previous extern declaration for non-static variable %0",
[e]="no previous extern declaration for non\\-static variable (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wmissing\\-variable\\-declarations[^\\]]*\\]",
[g]="no previous extern declaration for non\\-static variable (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-variable\\-declarations[^\\]]*\\]",
[a]={"7d14b3c9b3f9",1351023572,"Add a new warning -Wmissing-variable-declarations, to warn about variables","Add a new warning -Wmissing-variable-declarations, to warn about variables\ndefined without a previous declaration.  This is similar to\n-Wmissing-prototypes, but for variables instead of functions.\n\nPatch by Ed Schouten.\n\nllvm-svn: 166498"},
[b]=m,
[h]={{D,14070,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  if (var->isThisDeclarationADefinition() && var->getDeclContext()->getRedeclContext()->isFileContext() && var->isExternallyVisible() && var->hasLinkage() && !var->isInline() && !var->getDescribedVarTemplate() && !isa<VarTemplatePartialSpecializationDecl>(var) && !isTemplateInstantiation(var->getTemplateSpecializationKind()) && !getDiagnostics().isIgnored(diag::warn_missing_variable_declarations, var->getLocation())) {"},{D,14078,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  // Warn about externally-visible variables being defined without a\n  // prior declaration.  We only want to do this for global\n  // declarations, but we also specifically need to avoid doing it for\n  // class members because the linkage of an anonymous class can\n  // change if it\'s later given a typedef name.\n  if (var->isThisDeclarationADefinition() && var->getDeclContext()->getRedeclContext()->isFileContext() && var->isExternallyVisible() && var->hasLinkage() && !var->isInline() && !var->getDescribedVarTemplate() && !isa<VarTemplatePartialSpecializationDecl>(var) && !isTemplateInstantiation(var->getTemplateSpecializationKind()) && !getDiagnostics().isIgnored(diag::warn_missing_variable_declarations, var->getLocation())) {\n    // ...\n    if (!prev) {\n      Diag(var->getLocation(), diag::warn_missing_variable_declarations) << var;"}},
[f]={"7d14b3c9b3f9",1351023572,"Add a new warning -Wmissing-variable-declarations, to warn about variables","Add a new warning -Wmissing-variable-declarations, to warn about variables\ndefined without a previous declaration.  This is similar to\n-Wmissing-prototypes, but for variables instead of functions.\n\nPatch by Ed Schouten.\n\nllvm-svn: 166498"},
[k]={
[h]={{M,14070,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  if (var->isThisDeclarationADefinition() && var->getDeclContext()->getRedeclContext()->isFileContext() && var->isExternallyVisible() && var->hasLinkage() && !var->isInline() && !var->getDescribedVarTemplate() && !isa<VarTemplatePartialSpecializationDecl>(var) && !isTemplateInstantiation(var->getTemplateSpecializationKind()) && !getDiagnostics().isIgnored(diag::warn_missing_variable_declarations, var->getLocation())) {"},{M,14078,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  // Warn about externally-visible variables being defined without a\n  // prior declaration.  We only want to do this for global\n  // declarations, but we also specifically need to avoid doing it for\n  // class members because the linkage of an anonymous class can\n  // change if it\'s later given a typedef name.\n  if (var->isThisDeclarationADefinition() && var->getDeclContext()->getRedeclContext()->isFileContext() && var->isExternallyVisible() && var->hasLinkage() && !var->isInline() && !var->getDescribedVarTemplate() && !isa<VarTemplatePartialSpecializationDecl>(var) && !isTemplateInstantiation(var->getTemplateSpecializationKind()) && !getDiagnostics().isIgnored(diag::warn_missing_variable_declarations, var->getLocation())) {\n    // ...\n    if (!prev) {\n      Diag(var->getLocation(), diag::warn_missing_variable_declarations) << var;"}},
[l]={
["clang/test/Sema/warn-missing-variable-declarations.c"]={"clang/test/Sema/warn-missing-variable-declarations.c:7:5: warning: no previous extern declaration for non-static variable \'vbad2\' [-Wmissing-variable-declarations]","clang/test/Sema/warn-missing-variable-declarations.c:15:5: warning: no previous extern declaration for non-static variable \'vbad4\' [-Wmissing-variable-declarations]","clang/test/Sema/warn-missing-variable-declarations.c:3:5: warning: no previous extern declaration for non-static variable \'vbad1\' [-Wmissing-variable-declarations]","clang/test/Sema/warn-missing-variable-declarations.c:12:3: warning: no previous extern declaration for non-static variable \'vbad3\' [-Wmissing-variable-declarations]"}
["clang/test/Sema/warn-missing-variable-declarations.c"]={"clang/test/Sema/warn-missing-variable-declarations.c:7:5: warning: no previous extern declaration for non-static variable \'vbad2\' [-Wmissing-variable-declarations]","clang/test/Sema/warn-missing-variable-declarations.c:15:5: warning: no previous extern declaration for non-static variable \'vbad4\' [-Wmissing-variable-declarations]","clang/test/Sema/warn-missing-variable-declarations.c:3:5: warning: no previous extern declaration for non-static variable \'vbad1\' [-Wmissing-variable-declarations]","clang/test/Sema/warn-missing-variable-declarations.c:12:3: warning: no previous extern declaration for non-static variable \'vbad3\' [-Wmissing-variable-declarations]"}
}
}
},
},
["warn_missing_whitespace_after_macro_name"]={
["warn_missing_whitespace_after_macro_name"]={
[c]="whitespace recommended after macro name",
[c]="warn_missing_whitespace_after_macro_name",
[d]=g,
[d]="whitespace recommended after macro name",
[e]="whitespace recommended after macro name",
[e]=i,
[f]=Gb,
[g]="whitespace recommended after macro name",
[b]=L,
[a]=Ib,
[a]={"2425bcb49ae4",1240021405,"enforce requirements imposed by C90 6.8 TC1, fixing PR3919.","enforce requirements imposed by C90 6.8 TC1, fixing PR3919.\n\nllvm-svn: 69415"},
[b]=T,
[h]={{vd,2877,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // If this is a function-like macro definition, parse the argument list,\n  // marking each of the identifiers as being used as macro arguments.  Also,\n  // check other constraints on the first token of the macro body.\n  if (Tok.is(tok::eod)) {\n  // ...\n  } else if (Tok.hasLeadingSpace()) {\n  // ...\n  } else if (Tok.is(tok::l_paren)) {\n  // ...\n  } else if (LangOpts.C99 || LangOpts.CPlusPlus11) {\n  // ...\n  } else {\n    // ...\n    if (isInvalid)\n    // ...\n    else\n      Diag(Tok, diag::warn_missing_whitespace_after_macro_name);"}},
[f]={"2425bcb49ae4",1240021405,"enforce requirements imposed by C90 6.8 TC1, fixing PR3919.","enforce requirements imposed by C90 6.8 TC1, fixing PR3919.\n\nllvm-svn: 69415"},
[k]={
[h]={{Bd,2877,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // If this is a function-like macro definition, parse the argument list,\n  // marking each of the identifiers as being used as macro arguments.  Also,\n  // check other constraints on the first token of the macro body.\n  if (Tok.is(tok::eod)) {\n  // ...\n  } else if (Tok.hasLeadingSpace()) {\n  // ...\n  } else if (Tok.is(tok::l_paren)) {\n  // ...\n  } else if (LangOpts.C99 || LangOpts.CPlusPlus11) {\n  // ...\n  } else {\n    // ...\n    if (isInvalid)\n    // ...\n    else\n      Diag(Tok, diag::warn_missing_whitespace_after_macro_name);"}},
[l]={
["clang/test/Preprocessor/c90.c"]={"clang/test/Preprocessor/c90.c:8:13: warning: whitespace recommended after macro name"}
["clang/test/Preprocessor/c90.c"]={"clang/test/Preprocessor/c90.c:8:13: warning: whitespace recommended after macro name"}
}
}
},
},
["warn_mixed_decls_code"]={
["warn_mixed_decls_code"]={
[j]={"declaration-after-statement"},
[k]={"declaration-after-statement"},
[i]="declaration-after-statement",
[j]="declaration-after-statement",
[c]={{nil,Q,"mixing declarations and code is incompatible with standards before C99"}},
[c]={{nil,w,"warn_mixed_decls_code"}},
[d]=g,
[d]={{nil,w,"mixing declarations and code is incompatible with standards before C99"}},
[e]="mixing declarations and code is incompatible with standards before C99",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wdeclaration\\-after\\-statement[^\\]]*\\]",
[g]="mixing declarations and code is incompatible with standards before C99",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wdeclaration\\-after\\-statement[^\\]]*\\]",
[a]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
[b]={{nil,w,m}},
[h]={{Cb,419,"StmtResult Sema::ActOnCompoundStmt(SourceLocation L, SourceLocation R, ArrayRef<Stmt *> Elts, bool isStmtExpr) {\n  // ...\n  const unsigned MixedDeclsCodeID = getLangOpts().C99 ? diag::warn_mixed_decls_code : diag::ext_mixed_decls_code;"}},
[f]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
[k]={
[h]={{Hb,419,"StmtResult Sema::ActOnCompoundStmt(SourceLocation L, SourceLocation R, ArrayRef<Stmt *> Elts, bool isStmtExpr) {\n  // ...\n  const unsigned MixedDeclsCodeID = getLangOpts().C99 ? diag::warn_mixed_decls_code : diag::ext_mixed_decls_code;"}},
[l]={
["clang/test/Sema/warn-mixed-decls.c"]={"clang/test/Sema/warn-mixed-decls.c:31:7: warning: mixing declarations and code is incompatible with standards before C99 [-Wdeclaration-after-statement]"}
["clang/test/Sema/warn-mixed-decls.c"]={"clang/test/Sema/warn-mixed-decls.c:31:7: warning: mixing declarations and code is incompatible with standards before C99 [-Wdeclaration-after-statement]"}
}
}
},
},
["warn_mixed_sign_comparison"]={
["warn_mixed_sign_comparison"]={
[j]={p,B,Fc,R,"sign-compare"},
[k]={r,K,Ic,Z,"sign-compare"},
[i]="sign-compare",
[j]="sign-compare",
[c]="comparison of integers of different signs: %0 and %1",
[c]="warn_mixed_sign_comparison",
[d]=g,
[d]="comparison of integers of different signs: %0 and %1",
[e]="comparison of integers of different signs\\: (.*?) and (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wsign\\-compare[^\\]]*\\]",
[g]="comparison of integers of different signs\\: (.*?) and (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wsign\\-compare[^\\]]*\\]",
[a]={"644a4181c947",1257381604,"Implement -Wsign-compare, or at least the actual comparison part of it.","Implement -Wsign-compare, or at least the actual comparison part of it.\nConditional operands are next.\n\nFixes part of rdar://problem/7289584.\n\nllvm-svn: 86083"},
[b]=m,
[h]={{r,14019,"/// Implements -Wsign-compare.\n///\n/// \\param E the binary operator to check for warnings\nstatic void AnalyzeComparison(Sema &S, BinaryOperator *E) {\n  // ...\n  S.DiagRuntimeBehavior(E->getOperatorLoc(), E, S.PDiag(diag::warn_mixed_sign_comparison) << LHS->getType() << RHS->getType() << LHS->getSourceRange() << RHS->getSourceRange());"}},
[f]={"644a4181c947",1257381604,"Implement -Wsign-compare, or at least the actual comparison part of it.","Implement -Wsign-compare, or at least the actual comparison part of it.\nConditional operands are next.\n\nFixes part of rdar://problem/7289584.\n\nllvm-svn: 86083"},
[k]={
[h]={{t,14019,"/// Implements -Wsign-compare.\n///\n/// \\param E the binary operator to check for warnings\nstatic void AnalyzeComparison(Sema &S, BinaryOperator *E) {\n  // ...\n  S.DiagRuntimeBehavior(E->getOperatorLoc(), E, S.PDiag(diag::warn_mixed_sign_comparison) << LHS->getType() << RHS->getType() << LHS->getSourceRange() << RHS->getSourceRange());"}},
[l]={
["clang/test/Frontend/Weverything.c"]={"clang/test/Frontend/Weverything.c:8:12: warning: comparison of integers of different signs: \'int\' and \'unsigned int\' [-Wsign-compare]"}
["clang/test/Frontend/Weverything.c"]={"clang/test/Frontend/Weverything.c:8:12: warning: comparison of integers of different signs: \'int\' and \'unsigned int\' [-Wsign-compare]"}
}
}
},
},
["warn_mmap_incomplete_framework_module_declaration"]={
["warn_mmap_incomplete_framework_module_declaration"]={
[j]={"incomplete-framework-module-declaration"},
[k]={"incomplete-framework-module-declaration"},
[i]="incomplete-framework-module-declaration",
[j]="incomplete-framework-module-declaration",
[c]={{nil,eb,"skipping \'%0\' because module declaration of \'%1\' lacks the \'framework\' qualifier"}},
[c]={{nil,D,"warn_mmap_incomplete_framework_module_declaration"}},
[d]=g,
[d]={{nil,D,"skipping \'%0\' because module declaration of \'%1\' lacks the \'framework\' qualifier"}},
[e]="skipping \'(.*?)\' because module declaration of \'(.*?)\' lacks the \'framework\' qualifier",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-framework\\-module\\-declaration[^\\]]*\\]",
[g]="skipping \'(.*?)\' because module declaration of \'(.*?)\' lacks the \'framework\' qualifier",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-framework\\-module\\-declaration[^\\]]*\\]",
[a]={"9f6020bcc522",1527816378,"[Modules] Warning for module declarations lacking \'framework\' qualifier","[Modules] Warning for module declarations lacking \'framework\' qualifier\n\nWhen a module declaration for a framework lacks the \'framework\'\nqualifier, the listed headers aren\'t found (because there\'s no\ntrigger for the special framework style path lookup) and the module\nis silently not built. This leads to frameworks not being modularized\nby accident, which is pretty bad.\n\nAdd a warning and suggest the user to add the \'framework\' qualifier\nwhen we can prove that it\'s the case.\n\nrdar://problem/39193062\n\nllvm-svn: 333718"},
[b]={{nil,D,T}},
[h]={{ed,247,"OptionalFileEntryRef ModuleMap::findHeader(Module *M, const Module::UnresolvedHeaderDirective &Header, SmallVectorImpl<char> &RelativePathName, bool &NeedsFramework) {\n  // ...\n  if (!NormalHdrFile && Directory->getName().endswith(\".framework\")) {\n    // ...\n    if (GetFrameworkFile()) {\n      Diags.Report(Header.FileNameLoc, diag::warn_mmap_incomplete_framework_module_declaration) << Header.FileName << M->getFullModuleName();"}},
[f]={"9f6020bcc522",1527816378,"[Modules] Warning for module declarations lacking \'framework\' qualifier","[Modules] Warning for module declarations lacking \'framework\' qualifier\n\nWhen a module declaration for a framework lacks the \'framework\'\nqualifier, the listed headers aren\'t found (because there\'s no\ntrigger for the special framework style path lookup) and the module\nis silently not built. This leads to frameworks not being modularized\nby accident, which is pretty bad.\n\nAdd a warning and suggest the user to add the \'framework\' qualifier\nwhen we can prove that it\'s the case.\n\nrdar://problem/39193062\n\nllvm-svn: 333718"},
[k]={
[h]={{Oc,247,"OptionalFileEntryRef ModuleMap::findHeader(Module *M, const Module::UnresolvedHeaderDirective &Header, SmallVectorImpl<char> &RelativePathName, bool &NeedsFramework) {\n  // ...\n  if (!NormalHdrFile && Directory->getName().endswith(\".framework\")) {\n    // ...\n    if (GetFrameworkFile()) {\n      Diags.Report(Header.FileNameLoc, diag::warn_mmap_incomplete_framework_module_declaration) << Header.FileName << M->getFullModuleName();"}},
[l]={
["clang/test/Modules/incomplete-framework-module.m"]={"clang/test/Modules/Inputs/incomplete-framework-module/Foo.framework/Modules/module.modulemap:2:19: warning: skipping \'Foo.h\' because module declaration of \'Foo\' lacks the \'framework\' qualifier [-Wincomplete-framework-module-declaration]","clang/test/Modules/Inputs/incomplete-framework-module/Foo.framework/Modules/module.modulemap:3:10: warning: skipping \'FooB.h\' because module declaration of \'Foo\' lacks the \'framework\' qualifier [-Wincomplete-framework-module-declaration]"}
["clang/test/Modules/incomplete-framework-module.m"]={"clang/test/Modules/Inputs/incomplete-framework-module/Foo.framework/Modules/module.modulemap:2:19: warning: skipping \'Foo.h\' because module declaration of \'Foo\' lacks the \'framework\' qualifier [-Wincomplete-framework-module-declaration]","clang/test/Modules/Inputs/incomplete-framework-module/Foo.framework/Modules/module.modulemap:3:10: warning: skipping \'FooB.h\' because module declaration of \'Foo\' lacks the \'framework\' qualifier [-Wincomplete-framework-module-declaration]"}
}
}
},
},
["warn_mmap_mismatched_private_module_name"]={
["warn_mmap_mismatched_private_module_name"]={
[j]={Dd},
[k]={"private-module"},
[i]=Dd,
[j]="private-module",
[c]={{nil,lb,"expected canonical name for private module \'%0\'"}},
[c]={{nil,F,"warn_mmap_mismatched_private_module_name"}},
[d]=g,
[d]={{nil,F,"expected canonical name for private module \'%0\'"}},
[e]="expected canonical name for private module \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wprivate\\-module[^\\]]*\\]",
[g]="expected canonical name for private module \'(.*?)\'",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wprivate\\-module[^\\]]*\\]",
[a]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings","[Modules] Change private modules rules and warnings\n\nWe used to advertise private modules to be declared as submodules\n(Foo.Private). This has proven to not scale well since private headers\nmight carry several dependencies, introducing unwanted content into the\nmain module and often causing dep cycles.\n\nChange the canonical way to name it to Foo_Private, forcing private\nmodules as top level ones, and provide warnings under -Wprivate-module\nto suggest fixes for other private naming. Update documentation to\nreflect that.\n\nrdar://problem/31173501\n\nllvm-svn: 321337"},
[b]={{nil,F,T}},
[h]={{ed,1879,"/// Private modules are canonicalized as Foo_Private. Clang provides extra\n/// module map search logic to find the appropriate private module when PCH\n/// is used with implicit module maps. Warn when private modules are written\n/// in other ways (FooPrivate and Foo.Private), providing notes and fixits.\nvoid ModuleMapParser::diagnosePrivateModules(SourceLocation ExplicitLoc, SourceLocation FrameworkLoc) {\n  // ...\n  for (auto E = Map.module_begin(); E != Map.module_end(); ++E) {\n    // ...\n    // FooPrivate and whatnots -> Foo_Private\n    if (!ActiveModule->Parent && !M->Parent && M->Name != ActiveModule->Name && ActiveModule->Name != Canonical) {\n      Diags.Report(ActiveModule->DefinitionLoc, diag::warn_mmap_mismatched_private_module_name) << ActiveModule->Name;"},{ed,2114,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (Map.HeaderInfo.getHeaderSearchOpts().ImplicitModuleMaps && !Diags.isIgnored(diag::warn_mmap_mismatched_private_submodule, StartLoc) && !Diags.isIgnored(diag::warn_mmap_mismatched_private_module_name, StartLoc) && ActiveModule->ModuleMapIsPrivate)"}},
[f]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings","[Modules] Change private modules rules and warnings\n\nWe used to advertise private modules to be declared as submodules\n(Foo.Private). This has proven to not scale well since private headers\nmight carry several dependencies, introducing unwanted content into the\nmain module and often causing dep cycles.\n\nChange the canonical way to name it to Foo_Private, forcing private\nmodules as top level ones, and provide warnings under -Wprivate-module\nto suggest fixes for other private naming. Update documentation to\nreflect that.\n\nrdar://problem/31173501\n\nllvm-svn: 321337"},
[k]={
[h]={{Oc,1879,"/// Private modules are canonicalized as Foo_Private. Clang provides extra\n/// module map search logic to find the appropriate private module when PCH\n/// is used with implicit module maps. Warn when private modules are written\n/// in other ways (FooPrivate and Foo.Private), providing notes and fixits.\nvoid ModuleMapParser::diagnosePrivateModules(SourceLocation ExplicitLoc, SourceLocation FrameworkLoc) {\n  // ...\n  for (auto E = Map.module_begin(); E != Map.module_end(); ++E) {\n    // ...\n    // FooPrivate and whatnots -> Foo_Private\n    if (!ActiveModule->Parent && !M->Parent && M->Name != ActiveModule->Name && ActiveModule->Name != Canonical) {\n      Diags.Report(ActiveModule->DefinitionLoc, diag::warn_mmap_mismatched_private_module_name) << ActiveModule->Name;"},{Oc,2114,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (Map.HeaderInfo.getHeaderSearchOpts().ImplicitModuleMaps && !Diags.isIgnored(diag::warn_mmap_mismatched_private_submodule, StartLoc) && !Diags.isIgnored(diag::warn_mmap_mismatched_private_module_name, StartLoc) && ActiveModule->ModuleMapIsPrivate)"}},
[l]={
["clang/test/Modules/implicit-private-with-different-name.m"]={"clang/test/Modules/Inputs/implicit-private-with-different-name/A.framework/Modules/module.private.modulemap:1:18: warning: expected canonical name for private module \'APrivate\' [-Wprivate-module]"}
["clang/test/Modules/implicit-private-with-different-name.m"]={"clang/test/Modules/Inputs/implicit-private-with-different-name/A.framework/Modules/module.private.modulemap:1:18: warning: expected canonical name for private module \'APrivate\' [-Wprivate-module]"}
}
}
},
},
["warn_mmap_mismatched_private_submodule"]={
["warn_mmap_mismatched_private_submodule"]={
[j]={Dd},
[k]={"private-module"},
[i]=Dd,
[j]="private-module",
[c]={{nil,lb,"private submodule \'%0\' in private module map, expected top-level module"}},
[c]={{nil,F,"warn_mmap_mismatched_private_submodule"}},
[d]=g,
[d]={{nil,F,"private submodule \'%0\' in private module map, expected top-level module"}},
[e]="private submodule \'(.*?)\' in private module map, expected top\\-level module",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wprivate\\-module[^\\]]*\\]",
[g]="private submodule \'(.*?)\' in private module map, expected top\\-level module",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wprivate\\-module[^\\]]*\\]",
[a]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings","[Modules] Change private modules rules and warnings\n\nWe used to advertise private modules to be declared as submodules\n(Foo.Private). This has proven to not scale well since private headers\nmight carry several dependencies, introducing unwanted content into the\nmain module and often causing dep cycles.\n\nChange the canonical way to name it to Foo_Private, forcing private\nmodules as top level ones, and provide warnings under -Wprivate-module\nto suggest fixes for other private naming. Update documentation to\nreflect that.\n\nrdar://problem/31173501\n\nllvm-svn: 321337"},
[b]={{nil,F,T}},
[h]={{ed,1856,"/// Private modules are canonicalized as Foo_Private. Clang provides extra\n/// module map search logic to find the appropriate private module when PCH\n/// is used with implicit module maps. Warn when private modules are written\n/// in other ways (FooPrivate and Foo.Private), providing notes and fixits.\nvoid ModuleMapParser::diagnosePrivateModules(SourceLocation ExplicitLoc, SourceLocation FrameworkLoc) {\n  // ...\n  for (auto E = Map.module_begin(); E != Map.module_end(); ++E) {\n    // ...\n    // Foo.Private -> Foo_Private\n    if (ActiveModule->Parent && ActiveModule->Name == \"Private\" && !M->Parent && M->Name == ActiveModule->Parent->Name) {\n      Diags.Report(ActiveModule->DefinitionLoc, diag::warn_mmap_mismatched_private_submodule) << FullName;"},{ed,2112,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (Map.HeaderInfo.getHeaderSearchOpts().ImplicitModuleMaps && !Diags.isIgnored(diag::warn_mmap_mismatched_private_submodule, StartLoc) && !Diags.isIgnored(diag::warn_mmap_mismatched_private_module_name, StartLoc) && ActiveModule->ModuleMapIsPrivate)"}},
[f]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings","[Modules] Change private modules rules and warnings\n\nWe used to advertise private modules to be declared as submodules\n(Foo.Private). This has proven to not scale well since private headers\nmight carry several dependencies, introducing unwanted content into the\nmain module and often causing dep cycles.\n\nChange the canonical way to name it to Foo_Private, forcing private\nmodules as top level ones, and provide warnings under -Wprivate-module\nto suggest fixes for other private naming. Update documentation to\nreflect that.\n\nrdar://problem/31173501\n\nllvm-svn: 321337"},
[k]={
[h]={{Oc,1856,"/// Private modules are canonicalized as Foo_Private. Clang provides extra\n/// module map search logic to find the appropriate private module when PCH\n/// is used with implicit module maps. Warn when private modules are written\n/// in other ways (FooPrivate and Foo.Private), providing notes and fixits.\nvoid ModuleMapParser::diagnosePrivateModules(SourceLocation ExplicitLoc, SourceLocation FrameworkLoc) {\n  // ...\n  for (auto E = Map.module_begin(); E != Map.module_end(); ++E) {\n    // ...\n    // Foo.Private -> Foo_Private\n    if (ActiveModule->Parent && ActiveModule->Name == \"Private\" && !M->Parent && M->Name == ActiveModule->Parent->Name) {\n      Diags.Report(ActiveModule->DefinitionLoc, diag::warn_mmap_mismatched_private_submodule) << FullName;"},{Oc,2112,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (Map.HeaderInfo.getHeaderSearchOpts().ImplicitModuleMaps && !Diags.isIgnored(diag::warn_mmap_mismatched_private_submodule, StartLoc) && !Diags.isIgnored(diag::warn_mmap_mismatched_private_module_name, StartLoc) && ActiveModule->ModuleMapIsPrivate)"}},
[l]={
["clang/test/Modules/implicit-private-with-submodule.m"]={"clang/test/Modules/Inputs/implicit-private-with-submodule/A.framework/Modules/module.private.modulemap:1:20: warning: private submodule \'A.Private\' in private module map, expected top-level module [-Wprivate-module]","clang/test/Modules/Inputs/implicit-private-with-submodule/A.framework/Modules/module.private.modulemap:6:19: warning: private submodule \'B.Private\' in private module map, expected top-level module [-Wprivate-module]","clang/test/Modules/Inputs/implicit-private-with-submodule/A.framework/Modules/module.private.modulemap:9:29: warning: private submodule \'C.Private\' in private module map, expected top-level module [-Wprivate-module]"}
["clang/test/Modules/implicit-private-with-submodule.m"]={"clang/test/Modules/Inputs/implicit-private-with-submodule/A.framework/Modules/module.private.modulemap:1:20: warning: private submodule \'A.Private\' in private module map, expected top-level module [-Wprivate-module]","clang/test/Modules/Inputs/implicit-private-with-submodule/A.framework/Modules/module.private.modulemap:6:19: warning: private submodule \'B.Private\' in private module map, expected top-level module [-Wprivate-module]","clang/test/Modules/Inputs/implicit-private-with-submodule/A.framework/Modules/module.private.modulemap:9:29: warning: private submodule \'C.Private\' in private module map, expected top-level module [-Wprivate-module]"}
}
}
},
},
["warn_mmap_redundant_export_as"]={
["warn_mmap_redundant_export_as"]={
[j]={Dd},
[k]={"private-module"},
[i]=Dd,
[j]="private-module",
[c]={{nil,lb,"module \'%0\' already re-exported as \'%1\'"}},
[c]={{nil,F,"warn_mmap_redundant_export_as"}},
[d]=g,
[d]={{nil,F,"module \'%0\' already re-exported as \'%1\'"}},
[e]="module \'(.*?)\' already re\\-exported as \'(.*?)\'",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wprivate\\-module[^\\]]*\\]",
[g]="module \'(.*?)\' already re\\-exported as \'(.*?)\'",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wprivate\\-module[^\\]]*\\]",
[a]={"f0b11de279e7",1505432324,"[Module map] Introduce a private module re-export directive.","[Module map] Introduce a private module re-export directive.\n\nIntroduce a new \"export_as\" directive for top-level modules, which\nindicates that the current module is a \"private\" module whose symbols\nwill eventually be exported through the named \"public\" module. This is\nin support of a common pattern in the Darwin ecosystem where a single\npublic framework is constructed of several private frameworks, with\n(currently) header duplication and some support from the linker.\n\nAddresses rdar://problem/34438420.\n\nllvm-svn: 313316"},
[b]={{nil,F,T}},
[h]={{ed,2638,"/// Parse a module export_as declaration.\n///\n///  export-as-declaration:\n///    \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  // ...\n  if (!ActiveModule->ExportAsModule.empty()) {\n    if (ActiveModule->ExportAsModule == Tok.getString()) {\n      Diags.Report(Tok.getLocation(), diag::warn_mmap_redundant_export_as) << ActiveModule->Name << Tok.getString();"}}
[f]={"f0b11de279e7",1505432324,"[Module map] Introduce a private module re-export directive.","[Module map] Introduce a private module re-export directive.\n\nIntroduce a new \"export_as\" directive for top-level modules, which\nindicates that the current module is a \"private\" module whose symbols\nwill eventually be exported through the named \"public\" module. This is\nin support of a common pattern in the Darwin ecosystem where a single\npublic framework is constructed of several private frameworks, with\n(currently) header duplication and some support from the linker.\n\nAddresses rdar://problem/34438420.\n\nllvm-svn: 313316"},
[h]={{Oc,2638,"/// Parse a module export_as declaration.\n///\n///  export-as-declaration:\n///    \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  // ...\n  if (!ActiveModule->ExportAsModule.empty()) {\n    if (ActiveModule->ExportAsModule == Tok.getString()) {\n      Diags.Report(Tok.getLocation(), diag::warn_mmap_redundant_export_as) << ActiveModule->Name << Tok.getString();"}}
},
},
["warn_mmap_umbrella_dir_not_found"]={
["warn_mmap_umbrella_dir_not_found"]={
[j]={"incomplete-module","incomplete-umbrella"},
[k]={"incomplete-module","incomplete-umbrella"},
[i]="incomplete-umbrella",
[j]="incomplete-umbrella",
[c]={{nil,nd,"umbrella directory \'%0\' not found"}},
[c]={{nil,Ab,"warn_mmap_umbrella_dir_not_found"}},
[d]=g,
[d]={{nil,Ab,"umbrella directory \'%0\' not found"}},
[e]="umbrella directory \'(.*?)\' not found",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-umbrella[^\\]]*\\]",
[g]="umbrella directory \'(.*?)\' not found",
[b]=L,
[a]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-umbrella[^\\]]*\\]",
[a]={"a0320b97fa70",1492549049,"PR30508: Downgrade error to warning if the umbrella folder doesn\'t exist.","PR30508: Downgrade error to warning if the umbrella folder doesn\'t exist.\n\nPatch by Yuka Takahashi (D32119)!\n\nllvm-svn: 300594"},
[b]={{nil,Ab,T}},
[h]={{ed,2527,"/// Parse an umbrella directory declaration.\n///\n///  umbrella-dir-declaration:\n///    umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  // ...\n  if (!Dir) {\n    Diags.Report(DirNameLoc, diag::warn_mmap_umbrella_dir_not_found) << DirName;"}}
[f]={"a0320b97fa70",1492549049,"PR30508: Downgrade error to warning if the umbrella folder doesn\'t exist.","PR30508: Downgrade error to warning if the umbrella folder doesn\'t exist.\n\nPatch by Yuka Takahashi (D32119)!\n\nllvm-svn: 300594"},
[h]={{Oc,2527,"/// Parse an umbrella directory declaration.\n///\n///  umbrella-dir-declaration:\n///    umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  // ...\n  if (!Dir) {\n    Diags.Report(DirNameLoc, diag::warn_mmap_umbrella_dir_not_found) << DirName;"}}
},
},
["warn_mmap_unknown_attribute"]={
["warn_mmap_unknown_attribute"]={
[j]={ub,J},
[k]={zb,R},
[i]=J,
[j]=R,
[c]="unknown attribute \'%0\'",
[c]="warn_mmap_unknown_attribute",
[d]=g,
[d]="unknown attribute \'%0\'",
[e]="unknown attribute \'(.*?)\'",
[e]=i,
[f]=vb,
[g]="unknown attribute \'(.*?)\'",
[b]=L,
[a]=Db,
[a]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a","Introduce module attributes into the module map grammar, along with a\nsingle attribute (\"system\") that allows us to mark a module as being a\n\"system\" module. Each of the headers that makes up a system module is\nconsidered to be a system header, so that we (for example) suppress\nwarnings there.\n\nIf a module is being inferred for a framework, and that framework\ndirectory is within a system frameworks directory, infer it as a\nsystem framework.\n\nllvm-svn: 149143"},
[b]=T,
[h]={{ed,2997,"/// Parse optional attributes.\n///\n///  attributes:\n///    attribute attributes\n///    attribute\n///\n///  attribute:\n///    [ identifier ]\n///\n/// \\param Attrs Will be filled in with the parsed attributes.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool ModuleMapParser::parseOptionalAttributes(Attributes &Attrs) {\n  // ...\n  while (Tok.is(MMToken::LSquare)) {\n    // ...\n    case AT_unknown:\n      Diags.Report(Tok.getLocation(), diag::warn_mmap_unknown_attribute) << Tok.getString();"}}
[f]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a","Introduce module attributes into the module map grammar, along with a\nsingle attribute (\"system\") that allows us to mark a module as being a\n\"system\" module. Each of the headers that makes up a system module is\nconsidered to be a system header, so that we (for example) suppress\nwarnings there.\n\nIf a module is being inferred for a framework, and that framework\ndirectory is within a system frameworks directory, infer it as a\nsystem framework.\n\nllvm-svn: 149143"},
[h]={{Oc,2997,"/// Parse optional attributes.\n///\n///  attributes:\n///    attribute attributes\n///    attribute\n///\n///  attribute:\n///    [ identifier ]\n///\n/// \\param Attrs Will be filled in with the parsed attributes.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool ModuleMapParser::parseOptionalAttributes(Attributes &Attrs) {\n  // ...\n  while (Tok.is(MMToken::LSquare)) {\n    // ...\n    case AT_unknown:\n      Diags.Report(Tok.getLocation(), diag::warn_mmap_unknown_attribute) << Tok.getString();"}}
},
},
["warn_modifying_shadowing_decl"]={
["warn_modifying_shadowing_decl"]={
[j]={"shadow",Gd,Gd,"shadow-field-in-constructor","shadow-field-in-constructor-modified"},
[k]={"shadow","shadow-all","shadow-all","shadow-field-in-constructor","shadow-field-in-constructor-modified"},
[i]="shadow-field-in-constructor-modified",
[j]="shadow-field-in-constructor-modified",
[c]="modifying constructor parameter %0 that shadows a field of %1",
[c]="warn_modifying_shadowing_decl",
[d]=g,
[d]="modifying constructor parameter %0 that shadows a field of %1",
[e]="modifying constructor parameter (.*?) that shadows a field of (.*?)",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wshadow\\-field\\-in\\-constructor\\-modified[^\\]]*\\]",
[g]="modifying constructor parameter (.*?) that shadows a field of (.*?)",
[b]=l,
[a]=" \\[(?:\\-Werror,)?\\-Wshadow\\-field\\-in\\-constructor\\-modified[^\\]]*\\]",
[a]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields","Avoid -Wshadow warnings about constructor parameters named after fields\n\nUsually these parameters are used solely to initialize the field in the\ninitializer list, and there is no real shadowing confusion.\n\nThere is a new warning under -Wshadow called\n-Wshadow-field-in-constructor-modified. It attempts to find\nmodifications of such constructor parameters that probably intended to\nmodify the field.\n\nIt has some false negatives, though, so there is another warning group,\n-Wshadow-field-in-constructor, which always warns on this special case.\nFor users who just want the old behavior and don\'t care about these fine\ngrained groups, we have a new warning group called -Wshadow-all that\nactivates everything.\n\nFixes PR16088.\n\nReviewers: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D18271\n\nllvm-svn: 267957"},
[b]=m,
[h]={{D,8385,"/// Check if \'E\', which is an expression that is about to be modified, refers\n/// to a constructor parameter that shadows a field.\nvoid Sema::CheckShadowingDeclModification(Expr *E, SourceLocation Loc) {\n  // ...\n  Diag(Loc, diag::warn_modifying_shadowing_decl) << D << OldDC;"}},
[f]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields","Avoid -Wshadow warnings about constructor parameters named after fields\n\nUsually these parameters are used solely to initialize the field in the\ninitializer list, and there is no real shadowing confusion.\n\nThere is a new warning under -Wshadow called\n-Wshadow-field-in-constructor-modified. It attempts to find\nmodifications of such constructor parameters that probably intended to\nmodify the field.\n\nIt has some false negatives, though, so there is another warning group,\n-Wshadow-field-in-constructor, which always warns on this special case.\nFor users who just want the old behavior and don\'t care about these fine\ngrained groups, we have a new warning group called -Wshadow-all that\nactivates everything.\n\nFixes PR16088.\n\nReviewers: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D18271\n\nllvm-svn: 267957"},
[k]={
[h]={{M,8385,"/// Check if \'E\', which is an expression that is about to be modified, refers\n/// to a constructor parameter that shadows a field.\nvoid Sema::CheckShadowingDeclModification(Expr *E, SourceLocation Loc) {\n  // ...\n  Diag(Loc, diag::warn_modifying_shadowing_decl) << D << OldDC;"}},
[l]={
["clang/test/SemaCXX/warn-shadow.cpp"]={"clang/test/SemaCXX/warn-shadow.cpp:53:8: warning: modifying constructor parameter \'f1\' that shadows a field of \'A\' [-Wshadow-field-in-constructor-modified]","clang/test/SemaCXX/warn-shadow.cpp:55:7: warning: modifying constructor parameter \'f2\' that shadows a field of \'A\' [-Wshadow-field-in-constructor-modified]","clang/test/SemaCXX/warn-shadow.cpp:56:5: warning: modifying constructor parameter \'f3\' that shadows a field of \'A\' [-Wshadow-field-in-constructor-modified]","clang/test/SemaCXX/warn-shadow.cpp:57:8: warning: modifying constructor parameter \'f4\' that shadows a field of \'A\' [-Wshadow-field-in-constructor-modified]"}
["clang/test/SemaCXX/warn-shadow.cpp"]={"clang/test/SemaCXX/warn-shadow.cpp:53:8: warning: modifying constructor parameter \'f1\' that shadows a field of \'A\' [-Wshadow-field-in-constructor-modified]","clang/test/SemaCXX/warn-shadow.cpp:55:7: warning: modifying constructor parameter \'f2\' that shadows a field of \'A\' [-Wshadow-field-in-constructor-modified]","clang/test/SemaCXX/warn-shadow.cpp:56:5: warning: modifying constructor parameter \'f3\' that shadows a field of \'A\' [-Wshadow-field-in-constructor-modified]","clang/test/SemaCXX/warn-shadow.cpp:57:8: warning: modifying constructor parameter \'f4\' that shadows a field of \'A\' [-Wshadow-field-in-constructor-modified]"}
}
}
},
},
["warn_module_config_macro_undef"]={
["warn_module_config_macro_undef"]={
[j]={"config-macros"},
[k]={"config-macros"},
[i]="config-macros",
[j]="config-macros",
[c]="%select{definition|#undef}0 of configuration macro \'%1\' has no effect on the import of \'%2\'; pass \'%select{-D%1=...|-U%1}0\' on the command line to configure the module",
[c]="warn_module_config_macro_undef",
[d]=g,
[d]="%select{definition|#undef}0 of configuration macro \'%1\' has no effect on the import of \'%2\'; pass \'%select{-D%1=...|-U%1}0\' on the command line to configure the module",
[e]="(?:definition|\\#undef) of configuration macro \'(.*?)\' has no effect on the import of \'(.*?)\'; pass \'(?:\\-D(.*?)\\=\\.\\.\\.|\\-U(.*?))\' on the command line to configure the module",
[e]=i,
[f]=" \\[(?:\\-Werror,)?\\-Wconfig\\-macros[^\\]]*\\]",
[g]="(?:definition|\\#undef) of configuration macro \'(.*?)\' has no effect on the import of \'(.*?)\'; pass \'(?:\\-D(.*?)\\=\\.\\.\\.|\\-U(.*?))\' on the command line to configure the module",
[b]=p,
[a]=" \\[(?:\\-Werror,)?\\-Wconfig\\-macros[^\\]]*\\]",
[a]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps.","<rdar://problem/10796651> Introduce configuration macros into module maps.\n\nConfiguration macros are macros that are intended to alter how a\nmodule works, such that we need to build different module variants\nfor different values of these macros. A module can declare its\nconfiguration macros, in which case we will complain if the definition\nof a configation macro on the command line (or lack thereof) differs\nfrom the current preprocessor state at the point where the module is\nimported. This should eliminate some surprises when enabling modules,\nbecause \"#define CONFIG_MACRO ...\" followed by \"#include\n<module/header.h>\" would silently ignore the CONFIG_MACRO setting. At\nleast it will no longer be silent about it.\n\nConfiguration macros are eventually intended to help reduce the number\nof module variants that need to be built. When the list of\nconfiguration macros for a module is exhaustive, we only need to\nconsider the settings for those macros when building/finding the\nmodule, which can help isolate modules for various project-specific -D\nflags that should never affect how modules are build (but currently do).\n\nllvm-svn: 177466"},
[b]=r,
[h]={{Xc,1552,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  // ...\n  if (CurrentDefinition == CmdLineDefinition) {\n  // ...\n  } else if (!CurrentDefinition) {\n    // ...\n    PP.Diag(ImportLoc, diag::warn_module_config_macro_undef) << true << ConfigMacro << Mod->getFullModuleName();"},{Xc,1563,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  // ...\n  if (CurrentDefinition == CmdLineDefinition) {\n  // ...\n  } else if (!CurrentDefinition) {\n  // ...\n  } else if (!CmdLineDefinition) {\n    // ...\n    PP.Diag(ImportLoc, diag::warn_module_config_macro_undef) << false << ConfigMacro << Mod->getFullModuleName();"},{Xc,1571,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  // ...\n  if (CurrentDefinition == CmdLineDefinition) {\n  // ...\n  } else if (!CurrentDefinition) {\n  // ...\n  } else if (!CmdLineDefinition) {\n  // ...\n  } else if (!CurrentDefinition->isIdenticalTo(*CmdLineDefinition, PP,\n    // ...\n    PP.Diag(ImportLoc, diag::warn_module_config_macro_undef) << false << ConfigMacro << Mod->getFullModuleName();"}},
[f]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps.","<rdar://problem/10796651> Introduce configuration macros into module maps.\n\nConfiguration macros are macros that are intended to alter how a\nmodule works, such that we need to build different module variants\nfor different values of these macros. A module can declare its\nconfiguration macros, in which case we will complain if the definition\nof a configation macro on the command line (or lack thereof) differs\nfrom the current preprocessor state at the point where the module is\nimported. This should eliminate some surprises when enabling modules,\nbecause \"#define CONFIG_MACRO ...\" followed by \"#include\n<module/header.h>\" would silently ignore the CONFIG_MACRO setting. At\nleast it will no longer be silent about it.\n\nConfiguration macros are eventually intended to help reduce the number\nof module variants that need to be built. When the list of\nconfiguration macros for a module is exhaustive, we only need to\nconsider the settings for those macros when building/finding the\nmodule, which can help isolate modules for various project-specific -D\nflags that should never affect how modules are build (but currently do).\n\nllvm-svn: 177466"},
[k]={
[h]={{Rc,1552,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  // ...\n  if (CurrentDefinition == CmdLineDefinition) {\n  // ...\n  } else if (!CurrentDefinition) {\n    // ...\n    PP.Diag(ImportLoc, diag::warn_module_config_macro_undef) << true << ConfigMacro << Mod->getFullModuleName();"},{Rc,1563,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  // ...\n  if (CurrentDefinition == CmdLineDefinition) {\n  // ...\n  } else if (!CurrentDefinition) {\n  // ...\n  } else if (!CmdLineDefinition) {\n    // ...\n    PP.Diag(ImportLoc, diag::warn_module_config_macro_undef) << false << ConfigMacro << Mod->getFullModuleName();"},{Rc,1571,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  // ...\n  if (CurrentDefinition == CmdLineDefinition) {\n  // ...\n  } else if (!CurrentDefinition) {\n  // ...\n  } else if (!CmdLineDefinition) {\n  // ...\n  } else if (!CurrentDefinition->isIdenticalTo(*CmdLineDefinition, PP,\n    // ...\n    PP.Diag(ImportLoc, diag::warn_module_config_macro_undef) << false << ConfigMacro << Mod->getFullModuleName();"}},
[l]={
["clang/test/Modules/config_macros.m"]={"clang/test/Modules/config_macros.m:13:2: warning: #undef of configuration macro \'WANT_FOO\' has no effect on the import of \'config\'; pass \'-UWANT_FOO\' on the command line to configure the module [-Wconfig-macros]","clang/test/Modules/config_macros.m:16:2: warning: definition of configuration macro \'WANT_FOO\' has no effect on the import of \'config\'; pass \'-DWANT_FOO=...\' on the command line to configure the module [-Wconfig-macros]","clang/test/Modules/config_macros.m:23:2: warning: definition of configuration macro \'WANT_BAR\' has no effect on the import of \'config\'; pass \'-DWANT_BAR=...\' on the command line to configure the module [-Wconfig-macros]"}
["clang/test/Modules/config_macros.m"]={"clang/test/Modules/config_macros.m:13:2: warning: #undef of configuration macro \'WANT_FOO\' has no effect on the import of \'config\'; pass \'-UWANT_FOO\' on the command line to configure the module [-Wconfig-macros]","clang/test/Modules/config_macros.m:16:2: warning: definition of configuration macro \'WANT_FOO\' has no effect on the import of \'config\'; pass \'-DWANT_FOO=...\' on the command line to configure the module [-Wconfig-macros]","clang/test/Modules/config_macros.m:23:2: warning: definition of configuration macro \'WANT_BAR\' has no effect on the import of \'config\'; pass \'-DWANT_BAR=...\' on the command line to configure the module [-Wconfig-macros]"}
}
}
}
}
};
};
Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,507

edits

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

Navigation menu