Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557
edits
Timo.stripf (talk | contribs) No edit summary |
Timo.stripf (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
local a=" | local a="regex3"; | ||
local b=" | local b="prefix"; | ||
local c=" | local c="type"; | ||
local d=" | local d="commit"; | ||
local e=" | local e="regex2"; | ||
local f=" | local f="category"; | ||
local g=" | local g="title"; | ||
local h=" | local h="message"; | ||
local i=" | local i="regex1"; | ||
local j=" | local j="source"; | ||
local k=" | local k="warning: "; | ||
local l=" | local l="Warning"; | ||
local m=" | local m="(?:warning|error|fatal error)\\: "; | ||
local n=" | local n="maingroup"; | ||
local o=" | local o="groups"; | ||
local p="tests2"; | local p="tests2"; | ||
local q="defaultactive"; | local q="defaultactive"; | ||
Line 35: | Line 35: | ||
local I="clang/lib/Sema/SemaDecl.cpp"; | local I="clang/lib/Sema/SemaDecl.cpp"; | ||
local J="clang/lib/Sema/SemaDeclAttr.cpp"; | local J="clang/lib/Sema/SemaDeclAttr.cpp"; | ||
local K=" | local K="c++1z-compat"; | ||
local L="c++ | local L="c++17-compat"; | ||
local M=" | local M="all"; | ||
local N="[clang] New __attribute__((__clang_arm_mve_alias))."; | local N="[clang] New __attribute__((__clang_arm_mve_alias))."; | ||
local O="ignored-attributes"; | local O="ignored-attributes"; | ||
Line 43: | Line 43: | ||
local Q="Lexical or Preprocessor Issue"; | local Q="Lexical or Preprocessor Issue"; | ||
local R="documentation"; | local R="documentation"; | ||
local S=" | local S="most"; | ||
local T=" | local T="Implement P2361 Unevaluated string literals"; | ||
local U="c++ | local U="c++2a-compat-pedantic"; | ||
local V="c++ | local V="c++20-compat-pedantic"; | ||
local W="pre-c++17-compat"; | local W="pre-c++17-compat"; | ||
local X="non-gcc"; | local X="non-gcc"; | ||
local Y="clang/lib/Driver/ToolChains/Clang.cpp"; | local Y="clang/lib/Driver/ToolChains/Clang.cpp"; | ||
local Z | local Z="Implement -Wc++98-compat warnings for the parser."; | ||
local ab="c++20-compat"; | |||
local | local bb="option-ignored"; | ||
local | local cb="conversion"; | ||
local db="pre-c++20-compat-pedantic"; | local db="pre-c++20-compat-pedantic"; | ||
local eb="Update tablegen diagnostic files to be in sync with the def files. | local eb="Value Conversion Issue"; | ||
local fb="Update tablegen diagnostic files to be in sync with the def files."; | |||
local gb="deprecated"; | local gb="deprecated"; | ||
local hb="c++98-c++11-c++14-c++17-compat-pedantic"; | local hb="c++98-c++11-c++14-c++17-compat-pedantic"; | ||
local ib="clang/lib/Parse/ParseDeclCXX.cpp"; | local ib="pre-c++23-compat"; | ||
local | local jb="clang/lib/Parse/ParseDeclCXX.cpp"; | ||
local | local kb=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+20\\-compat[^\\]]*\\]"; | ||
local | local lb="Deprecations"; | ||
local | local mb="clang/lib/Sema/AnalysisBasedWarnings.cpp"; | ||
local | local nb="clang/lib/Sema/SemaInit.cpp"; | ||
local | local ob="c++98-c++11-c++14-c++17-compat"; | ||
local | local pb="AMDGPU: Teach toolchain to link rocm device libs"; | ||
local qb="-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 1."; | |||
local rb="format"; | local rb="format"; | ||
local sb="[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths."; | local sb="[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths."; | ||
local tb="unused-command-line-argument | local tb="Documentation Issue"; | ||
local ub="unused-command-line-argument"; | |||
local vb="c++2a-compat"; | local vb="c++2a-compat"; | ||
local wb="pre-c++14-compat"; | local wb="pre-c++14-compat"; | ||
local xb=" \\[(?:\\-Werror,)?\\-Wignored\\-attributes[^\\]]*\\]"; | local xb=" \\[(?:\\-Werror,)?\\-Wignored\\-attributes[^\\]]*\\]"; | ||
local yb | local yb="clang/lib/AST/CommentSema.cpp"; | ||
local zb="pre-c++17-compat-pedantic"; | |||
local Ab="7c11da0cfd33"; | |||
local | local Bb="attributes"; | ||
local Cb="clang/lib/ | local Cb="clang/lib/Sema/SemaStmt.cpp"; | ||
local Db | local Db="clang/lib/Lex/Lexer.cpp"; | ||
local Eb="clang/lib/Sema/SemaTemplate.cpp"; | |||
local | local Fb="invalid-command-line-argument"; | ||
local | local Gb="c++98-c++11-c++14-compat-pedantic"; | ||
local | local Hb="95f50964fbf5"; | ||
local Ib="(?: \\[(?:\\-Werror)?[^\\]]*\\])?"; | local Ib="(?: \\[(?:\\-Werror)?[^\\]]*\\])?"; | ||
local Jb="clang/lib/Sema/SemaType.cpp"; | local Jb="clang/lib/Sema/SemaType.cpp"; | ||
local Kb=" | local Kb=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+17\\-compat[^\\]]*\\]"; | ||
local Lb=" \\[(?:\\-Werror,)?\\-Wdocumentation[^\\]]*\\]"; | local Lb=" \\[(?:\\-Werror,)?\\-Wdocumentation[^\\]]*\\]"; | ||
local Mb=" | local Mb="c++98-c++11-c++14-compat"; | ||
local Nb | local Nb="Add -Wc++98-compat warnings for uses of the new keywords \'alignof\', \'char16_t\',"; | ||
local Ob="thread-safety-analysis"; | |||
local Pb="clang/lib/Driver/Driver.cpp"; | |||
local | local Qb="5d164bc5e005"; | ||
local Rb="Reland [clang] Check unsupported types in expressions"; | local Rb="Reland [clang] Check unsupported types in expressions"; | ||
local Sb | local Sb="Add most of the boilerplate support for scanf format string checking. This includes"; | ||
local Tb="5a8987ca5113"; | |||
local Ub=" \\[(?:\\-Werror,)?\\-Woption\\-ignored[^\\]]*\\]"; | local Ub=" \\[(?:\\-Werror,)?\\-Woption\\-ignored[^\\]]*\\]"; | ||
local Vb="clang/lib/Parse/ParseDecl.cpp"; | local Vb="clang/lib/Parse/ParseDecl.cpp"; | ||
local Wb=" | local Wb="pre-c++23-compat-pedantic"; | ||
local Xb="Format String Issue"; | local Xb="Format String Issue"; | ||
local Yb=" | local Yb="-Wc++98-compat warnings for the lexer."; | ||
local Zb=" | local Zb="[C++20][Modules] Adjust handling of exports of namespaces and using-decls."; | ||
local ac=" | local ac="clang/lib/Sema/SemaExprCXX.cpp"; | ||
local bc=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+23\\-compat[^\\]]*\\]"; | local bc=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+23\\-compat[^\\]]*\\]"; | ||
local cc=" | local cc="clang/lib/Parse/ParseExprCXX.cpp"; | ||
local dc="clang/ | local dc="clang/test/Sema/warn-documentation.cpp"; | ||
local ec="4593e4131aff"; | local ec="4593e4131aff"; | ||
local fc=" | local fc="0bf8a492fd75"; | ||
local gc=" | local gc="clang/lib/Parse/ParseStmt.cpp"; | ||
local hc=" | local hc="0687578728ea"; | ||
local ic=" | local ic="clang/test/SemaCXX/cxx17-compat.cpp"; | ||
local jc=" | local jc="[C++20][Modules][3/8] Initial handling for module partitions."; | ||
local kc=" | local kc="return-type"; | ||
local lc=" | local lc="pre-c++14-compat-pedantic"; | ||
local mc=" | local mc="clang/lib/Sema/DeclSpec.cpp"; | ||
local nc="clang | local nc="[WebAssembly] Improve clang diagnostics for wasm attributes"; | ||
local oc=" | local oc="c++98-c++11-compat-pedantic"; | ||
local pc=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+14\\-compat[^\\]]*\\]"; | local pc=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+14\\-compat[^\\]]*\\]"; | ||
local qc | local qc=" \\[(?:\\-Werror,)?\\-Wformat[^\\]]*\\]"; | ||
local rc="c++98-c++11-compat"; | |||
local sc=" | local sc="Enable comment parsing and semantic analysis to emit diagnostics. A few"; | ||
local tc=" \\[(?:\\-Werror,)?\\-Wunused\\-command\\-line\\-argument[^\\]]*\\] | local tc="C++1y constexpr extensions, round 1: Allow most forms of declaration and"; | ||
local uc=" \\[(?:\\-Werror,)?\\-Wunused\\-command\\-line\\-argument[^\\]]*\\]"; | |||
local vc=" | local vc="thread-safety"; | ||
local wc=" | local wc="Implement -Wconversion. Off by default, in the non-gcc group. There\'s"; | ||
local xc=" | local xc="clang/lib/Sema/SemaDeclObjC.cpp"; | ||
local yc=" | local yc="fortify-source"; | ||
local zc="gcc-compat"; | local zc="gcc-compat"; | ||
local Ac=" | local Ac="empty-body"; | ||
local Bc=" | local Bc="deprecated-volatile"; | ||
local Cc=" | local Cc="[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"; | ||
local Dc=" | local Dc="avr-rtlib-linking-quirks"; | ||
local Ec | local Ec="clang/lib/Frontend/CompilerInvocation.cpp"; | ||
local Fc=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-pedantic[^\\]]*\\]"; | |||
local | local Gc=" \\[(?:\\-Werror,)?\\-Wc\\+\\+20\\-compat[^\\]]*\\]"; | ||
local | local Hc="clang/test/SemaCXX/cxx11-compat.cpp"; | ||
local Ic="clang/lib/Parse/Parser.cpp"; | |||
local | local Jc="extra"; | ||
local Kc="clang/lib/ | local Kc="clang/lib/Parse/ParseExpr.cpp"; | ||
local Lc="b15c11c81907"; | local Lc="b15c11c81907"; | ||
local Mc=" | local Mc="clang/lib/Frontend/CompilerInstance.cpp"; | ||
local Nc=" | local Nc="availability"; | ||
local Oc=" | local Oc="documentation-html"; | ||
local Pc | local Pc="Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)"; | ||
local Qc="Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"; | |||
local Rc="3dbcea8b957a"; | |||
local Sc="[clang] Implement objc_non_runtime_protocol to remove protocol metadata"; | local Sc="deprecated-declarations"; | ||
local | local Tc="-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 2."; | ||
local Uc="[clang] Implement objc_non_runtime_protocol to remove protocol metadata"; | |||
local Vc=" \\[(?:\\-Werror,)?\\-Winvalid\\-command\\-line\\-argument[^\\]]*\\]"; | |||
local Wc | local Wc="Lambda Issue"; | ||
local Xc="clang/lib/Sema/SemaObjCProperty.cpp"; | |||
local | local Yc="clang/lib/Sema/SemaExprObjC.cpp"; | ||
local Zc="Introduce -Wreserved-identifier"; | |||
local | local ad="clang/lib/Lex/ModuleMap.cpp"; | ||
local bd=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]"; | |||
local cd="0208793e4101"; | |||
local | local dd="clang/lib/AST/ExprConstant.cpp"; | ||
local | local ed="clang/lib/Lex/LiteralSupport.cpp"; | ||
local | local fd="clang/lib/Driver/ToolChains/Darwin.cpp"; | ||
local | local gd="implicit-float-conversion"; | ||
local | local hd="acd4d3d52abb"; | ||
local | local id="clang/test/SemaCXX/cxx98-compat-pedantic.cpp"; | ||
local | local jd="pedantic"; | ||
local | local kd=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat[^\\]]*\\]"; | ||
local | local ld="f60dc3caa673"; | ||
local md=" | local md="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp..."; | ||
local nd=" | local nd="(.*?)"; | ||
local od=" | local od="Add missing -Wc++11-compat / -Wc++14-compat warnings for:"; | ||
local pd=" | local pd="literal-range"; | ||
local qd=" | local qd="%0"; | ||
local rd=" | local rd="serialized-diagnostics"; | ||
local sd=" | local sd="[OPENMP]Fix PR49366: crash on VLAs in task untied regions."; | ||
local td=" | local td="Add missing -Wc++98-compat warnings for initializer list initializations which"; | ||
local ud=" | local ud="b1c4d5507fad"; | ||
local vd=" | local vd="clang/lib/Lex/PPDirectives.cpp"; | ||
local wd="unknown-argument"; | local wd="unknown-argument"; | ||
local xd=" | local xd="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomplete) test conversions of the existing def files to this format."; | ||
local yd="clang/lib/Driver/SanitizerArgs.cpp"; | |||
local zd="The C++98/03 standard is disturbingly silent about out-of-scope"; | |||
local | local Ad="Add -Wc++98-compat diagnostics for jumps which bypass initialization of non-POD"; | ||
local | local Bd="dangling"; | ||
local | local Cd="c++11-narrowing"; | ||
local Dd="sign-conversion"; | |||
local | local Ed="Comment parsing: add support for \\tparam command on all levels."; | ||
local | local Fd="private-module"; | ||
local | local Gd="Backend Issue"; | ||
local | local Hd="Wired-up the new LLVM diagnostic system into clang diagnostic system."; | ||
local | local Id="clang/lib/Driver/ToolChains/Arch/ARM.cpp"; | ||
local | local Jd=" \\[(?:\\-Werror,)?\\-Wreturn\\-type[^\\]]*\\]"; | ||
local | local Kd="cuda-compat"; | ||
local | local Ld="shadow-all"; | ||
local | local Md="format-non-iso"; | ||
local | local Nd="931fcd3ba011"; | ||
return { | return { | ||
["warn_conv_to_void_not_used"]={ | ["warn_conv_to_void_not_used"]={ | ||
[ | [g]="conversion function converting A to B will never be used [-Wclass-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"class-conversion"}, | |||
[n]="class-conversion", | |||
[h]="conversion function converting %0 to %1 will never be used", | |||
[i]=m, | [i]=m, | ||
[ | [e]="conversion function converting (.*?) to (.*?) will never be used", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wclass\\-conversion[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Tb,1237025389,fb,fb}, | |||
[j]={{H,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 215: | Line 215: | ||
}, | }, | ||
["warn_coroutine_handle_address_invalid_return_type"]={ | ["warn_coroutine_handle_address_invalid_return_type"]={ | ||
[ | [g]="return type of \'coroutine_handle<>::address should be \'void*\' (have A) in order to get capability with existing async C API. [-Wcoroutine]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"coroutine"}, | |||
[n]="coroutine", | |||
[h]="return type of \'coroutine_handle<>::address should be \'void*\' (have %0) in order to get capability with existing async C API.", | |||
[i]=m, | [i]=m, | ||
[ | [e]="return type of \'coroutine_handle\\<\\>\\:\\:address should be \'void\\*\' \\(have (.*?)\\) in order to get capability with existing async C API\\.", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wcoroutine[^\\]]*\\]", | |||
[f]="Coroutines Issue", | |||
[d]={"14f6bfcb52e7",1582847864,Uc,Uc}, | |||
[j]={{"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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 232: | Line 232: | ||
}, | }, | ||
["warn_coroutine_promise_unhandled_exception_required_with_exceptions"]={ | ["warn_coroutine_promise_unhandled_exception_required_with_exceptions"]={ | ||
[ | [g]="A is required to declare the member \'unhandled_exception()\' when exceptions are enabled [-Wcoroutine-missing-unhandled-exception]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"coroutine","coroutine-missing-unhandled-exception"}, | |||
[n]="coroutine-missing-unhandled-exception", | |||
[h]="%0 is required to declare the member \'unhandled_exception()\' when exceptions are enabled", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) is required to declare the member \'unhandled_exception\\(\\)\' when exceptions are enabled", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wcoroutine\\-missing\\-unhandled\\-exception[^\\]]*\\]", | |||
[f]="Coroutines Issue", | |||
[d]={"a9fdb346dbc6",1490229213,"[coroutines] Implement unhandled_exception changes.","[coroutines] Implement unhandled_exception changes."}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 249: | Line 249: | ||
}, | }, | ||
["warn_correct_comment_command_name"]={ | ["warn_correct_comment_command_name"]={ | ||
[ | [g]="unknown command tag name \'A\'; did you mean \'B\'? [-Wdocumentation-unknown-command]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"documentation-pedantic","documentation-unknown-command"}, | |||
[n]="documentation-unknown-command", | |||
[h]="unknown command tag name \'%0\'; did you mean \'%1\'?", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unknown command tag name \'(.*?)\'; did you mean \'(.*?)\'\\?", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-unknown\\-command[^\\]]*\\]", | |||
[f]=tb, | |||
[d]={"6c7a16666dbb",1368040860,"documentation parsing. Patch to do typo correction for ","documentation parsing. Patch to do typo correction for "}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 267: | Line 267: | ||
}, | }, | ||
["warn_cstruct_memaccess"]={ | ["warn_cstruct_memaccess"]={ | ||
[ | [g]="... this A call is a pointer to record B that is not trivial to ... [-Wnontrivial-memaccess]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"nontrivial-memaccess","suspicious-memaccess"}, | |||
[n]="nontrivial-memaccess", | |||
[h]="%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", | |||
[i]=m, | [i]=m, | ||
[ | [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)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wnontrivial\\-memaccess[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"2be0441e770d",1523992421,"[Sema] Warn about memcpy\'ing non-trivial C structs.","[Sema] Warn about memcpy\'ing non-trivial C structs."}, | |||
[j]={{x,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);"},{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 284: | Line 284: | ||
}, | }, | ||
["warn_cstyle_param"]={ | ["warn_cstyle_param"]={ | ||
[ | [g]="use of C-style parameters in Objective-C method declarations is deprecated [-Wdeprecated-declarations]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,Sc}, | |||
[n]=Sc, | |||
[h]="use of C-style parameters in Objective-C method declarations is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use of C\\-style parameters in Objective\\-C method declarations is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"45337f53df65",1340304188,"objective-c: deprecated C-like parameters in Objective-C ","objective-c: deprecated C-like parameters in Objective-C "}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 301: | Line 301: | ||
}, | }, | ||
["warn_ctad_maybe_unsupported"]={ | ["warn_ctad_maybe_unsupported"]={ | ||
[ | [g]="A may not intend to support class template argument deduction [-Wctad-maybe-unsupported]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"ctad-maybe-unsupported"}, | |||
[n]="ctad-maybe-unsupported", | |||
[h]="%0 may not intend to support class template argument deduction", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) may not intend to support class template argument deduction", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wctad\\-maybe\\-unsupported[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{nb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 319: | Line 319: | ||
}, | }, | ||
["warn_ctor_parm_shadows_field"]={ | ["warn_ctor_parm_shadows_field"]={ | ||
[ | [g]="constructor parameter A shadows the field B of C [-Wshadow-field-in-constructor]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={Ld,"shadow-field-in-constructor"}, | |||
[n]="shadow-field-in-constructor", | |||
[h]="constructor parameter %0 shadows the field %1 of %2", | |||
[i]=m, | [i]=m, | ||
[ | [e]="constructor parameter (.*?) shadows the field (.*?) of (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wshadow\\-field\\-in\\-constructor[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields","Avoid -Wshadow warnings about constructor parameters named after fields"}, | |||
[j]={{I,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());"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 337: | Line 337: | ||
}, | }, | ||
["warn_ctu_incompat_triple"]={ | ["warn_ctu_incompat_triple"]={ | ||
[ | [g]="imported AST from \'A\' had been generated for a different target, current: B, imported: C [-Wctu]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"ctu"}, | |||
[n]="ctu", | |||
[h]="imported AST from \'%0\' had been generated for a different target, current: %1, imported: %2", | |||
[i]=m, | [i]=m, | ||
[ | [e]="imported AST from \'(.*?)\' had been generated for a different target, current\\: (.*?), imported\\: (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wctu[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"32aff2eb793c",1544200363,"[CTU] Add triple/lang mismatch handling","[CTU] Add triple/lang mismatch handling"}, | |||
[j]={{"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"]={ | ||
[ | [g]="nvcc does not allow \'__A__\' to appear after the parameter list in lambdas [-Wcuda-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Kd}, | |||
[n]=Kd, | |||
[h]="nvcc does not allow \'__%0__\' to appear after the parameter list in lambdas", | |||
[i]=m, | [i]=m, | ||
[ | [e]="nvcc does not allow \'__(.*?)__\' to appear after the parameter list in lambdas", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]", | |||
[f]=B, | |||
[d]={"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 \'(...)\'."}, | |||
[j]={{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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 368: | Line 368: | ||
}, | }, | ||
["warn_cxx11_compat_binary_literal"]={ | ["warn_cxx11_compat_binary_literal"]={ | ||
[ | [g]="binary integer literals are incompatible with C++ standards before C++14 [-Wc++98-c++11-compat-binary-literal]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"binary-literal",u,"c++98-c++11-compat-binary-literal",oc,s,lc}, | |||
[n]="c++98-c++11-compat-binary-literal", | |||
[h]="binary integer literals are incompatible with C++ standards before C++14", | |||
[i]=m, | [i]=m, | ||
[ | [e]="binary integer literals are incompatible with C\\+\\+ standards before C\\+\\+14", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-c\\+\\+11\\-compat\\-binary\\-literal[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={"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)"}, | |||
[j]={{ed,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 386: | Line 386: | ||
}, | }, | ||
["warn_cxx11_compat_constexpr_body_invalid_stmt"]={ | ["warn_cxx11_compat_constexpr_body_invalid_stmt"]={ | ||
[ | [g]="use of this statement in a constexpr ... is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,rc,oc,t,s,s,wb,lc}, | |||
[n]=wb, | |||
[h]="use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use of this statement in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+14", | ||
[a]=pc, | |||
[f]=r, | |||
[d]={"d9f663b510c4",1366644711,tc,tc}, | |||
[j]={{H,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"]={ | ||
[ | [g]="multiple return statements in constexpr function is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,rc,oc,t,s,s,wb,lc}, | |||
[n]=wb, | |||
[h]="multiple return statements in constexpr function is incompatible with C++ standards before C++14", | |||
[i]=m, | [i]=m, | ||
[ | [e]="multiple return statements in constexpr function is incompatible with C\\+\\+ standards before C\\+\\+14", | ||
[a]=pc, | |||
[f]=r, | |||
[d]={"d9f663b510c4",1366644711,tc,tc}, | |||
[j]={{H,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"]={ | ||
[ | [g]="constexpr function with no return statements is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,rc,oc,t,s,s,wb,lc}, | |||
[n]=wb, | |||
[h]="constexpr function with no return statements is incompatible with C++ standards before C++14", | |||
[i]=m, | [i]=m, | ||
[ | [e]="constexpr function with no return statements is incompatible with C\\+\\+ standards before C\\+\\+14", | ||
[a]=pc, | |||
[f]=r, | |||
[d]={"d9f663b510c4",1366644711,tc,tc}, | |||
[j]={{H,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"]={ | ||
[ | [g]="variable declaration in a constexpr ... is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,rc,oc,t,s,s,wb,lc}, | |||
[n]=wb, | |||
[h]="variable declaration in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", | |||
[i]=m, | [i]=m, | ||
[ | [e]="variable declaration in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+14", | ||
[a]=pc, | |||
[f]=r, | |||
[d]={"d9f663b510c4",1366644711,tc,tc}, | |||
[j]={{H,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"]={ | ||
[ | [g]="type definition in a constexpr ... is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,rc,oc,t,s,s,wb,lc}, | |||
[n]=wb, | |||
[h]="type definition in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", | |||
[i]=m, | [i]=m, | ||
[ | [e]="type definition in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+14", | ||
[a]=pc, | |||
[f]=r, | |||
[d]={"d9f663b510c4",1366644711,tc,tc}, | |||
[j]={{H,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"]={ | ||
[ | [g]="\'decltype(auto)\' type specifier is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,rc,oc,t,s,s,wb,lc}, | |||
[n]=wb, | |||
[h]="\'decltype(auto)\' type specifier is incompatible with C++ standards before C++14", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'decltype\\(auto\\)\' type specifier is incompatible with C\\+\\+ standards before C\\+\\+14", | ||
[a]=pc, | |||
[f]=B, | |||
[d]={"74aeef50a0cc",1366992935,"Implement C++1y decltype(auto).","Implement C++1y decltype(auto)."}, | |||
[j]={{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [Hc]={"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"]={ | ||
[ | [g]="return type deduction is incompatible with C++ standards before C++14 [-Wpre-c++14-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,rc,oc,t,s,s,wb,lc}, | |||
[n]=wb, | |||
[h]="return type deduction is incompatible with C++ standards before C++14", | |||
[i]=m, | [i]=m, | ||
[ | [e]="return type deduction is incompatible with C\\+\\+ standards before C\\+\\+14", | ||
[a]=pc, | |||
[f]=r, | |||
[d]={"218538ebe952",1535656595,od,od}, | |||
[j]={{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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [Hc]={"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"]={ | ||
[ | [g]="digit separators are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,rc,oc,t,s,s,wb,lc}, | |||
[n]=wb, | |||
[h]="digit separators are incompatible with C++ standards before C++14", | |||
[i]=m, | [i]=m, | ||
[ | [e]="digit separators are incompatible with C\\+\\+ standards before C\\+\\+14", | ||
[a]=pc, | |||
[f]=Q, | |||
[d]={"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"}, | |||
[j]={{Db,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:410:21: warning: digit separators are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:410:21: warning: digit separators are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]"} | ||
Line 515: | Line 515: | ||
}, | }, | ||
["warn_cxx11_compat_generic_lambda"]={ | ["warn_cxx11_compat_generic_lambda"]={ | ||
[ | [g]="generic lambdas are incompatible with C++11 [-Wpre-c++14-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,rc,oc,t,s,s,wb,lc}, | |||
[n]=wb, | |||
[h]="generic lambdas are incompatible with C++11", | |||
[i]=m, | [i]=m, | ||
[ | [e]="generic lambdas are incompatible with C\\+\\+11", | ||
[a]=pc, | |||
[f]=Wc, | |||
[d]={"218538ebe952",1535656595,od,od}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [Hc]={"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"]={ | ||
[ | [g]="initialized lambda captures are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,rc,oc,t,s,s,wb,lc}, | |||
[n]=wb, | |||
[h]="initialized lambda captures are incompatible with C++ standards before C++14", | |||
[i]=m, | [i]=m, | ||
[ | [e]="initialized lambda captures are incompatible with C\\+\\+ standards before C\\+\\+14", | ||
[a]=pc, | |||
[f]=Wc, | |||
[d]={"5b013f505068",1380346707,"Add compat/extension warnings for init captures.","Add compat/extension warnings for init captures."}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [Hc]={"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"]={ | ||
[ | [g]="identifier after literal will be treated as a reserved user-defined literal suffix in C++11 [-Wc++11-compat-reserved-user-defined-literal]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,"c++11-compat-reserved-user-defined-literal","reserved-user-defined-literal"}, | |||
[n]="c++11-compat-reserved-user-defined-literal", | |||
[h]="identifier after literal will be treated as a reserved user-defined literal suffix in C++11", | |||
[i]=m, | [i]=m, | ||
[ | [e]="identifier after literal will be treated as a reserved user\\-defined literal suffix in C\\+\\+11", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat\\-reserved\\-user\\-defined\\-literal[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={"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"}, | |||
[j]={{Db,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), \" \");"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 569: | Line 569: | ||
}, | }, | ||
["warn_cxx11_compat_user_defined_literal"]={ | ["warn_cxx11_compat_user_defined_literal"]={ | ||
[ | [g]="identifier after literal will be treated as a user-defined literal suffix in C++11 [-Wc++11-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u}, | |||
[n]=y, | |||
[h]="identifier after literal will be treated as a user-defined literal suffix in C++11", | |||
[i]=m, | [i]=m, | ||
[ | [e]="identifier after literal will be treated as a user\\-defined literal suffix in C\\+\\+11", | ||
[a]=kd, | |||
[f]=Q, | |||
[d]={"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"}, | |||
[j]={{Db,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), \" \");"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [Hc]={"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"]={ | ||
[ | [g]="variable templates are incompatible with C++ standards before C++14 [-Wpre-c++14-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,rc,oc,t,s,s,wb,lc}, | |||
[n]=wb, | |||
[h]="variable templates are incompatible with C++ standards before C++14", | |||
[i]=m, | [i]=m, | ||
[ | [e]="variable templates are incompatible with C\\+\\+ standards before C\\+\\+14", | ||
[a]=pc, | |||
[f]=r, | |||
[d]={"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..."}, | |||
[j]={{I,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 605: | Line 605: | ||
}, | }, | ||
["warn_cxx11_gnu_attribute_on_type"]={ | ["warn_cxx11_gnu_attribute_on_type"]={ | ||
[ | [g]="attribute A ignored, because it cannot be applied to a type [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="attribute %0 ignored, because it cannot be applied to a type", | |||
[i]=m, | [i]=m, | ||
[ | [e]="attribute (.*?) ignored, because it cannot be applied to a type", | ||
[a]=xb, | |||
[f]=r, | |||
[d]={"368ca52cd91b",1358149981,"Accept [[gnu::*]] for all __attribute__((*))s which are:","Accept [[gnu::*]] for all __attribute__((*))s which are:"}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 622: | Line 622: | ||
}, | }, | ||
["warn_cxx11_keyword"]={ | ["warn_cxx11_keyword"]={ | ||
[ | [g]="\'A\' is a keyword in C++11 [-Wc++11-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u}, | |||
[n]=y, | |||
[h]="\'%0\' is a keyword in C++11", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' is a keyword in C\\+\\+11", | ||
[a]=kd, | |||
[f]=Q, | |||
[d]={"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"}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 640: | Line 640: | ||
}, | }, | ||
["warn_cxx11_right_shift_in_template_arg"]={ | ["warn_cxx11_right_shift_in_template_arg"]={ | ||
[ | [g]="use of right-shift operator (\'>>\') in template argument will require parentheses in C++11 [-Wc++11-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={A,y,u}, | |||
[n]=y, | |||
[h]="use of right-shift operator (\'>>\') in template argument will require parentheses in C++11", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use of right\\-shift operator \\(\'\\>\\>\'\\) in template argument will require parentheses in C\\+\\+11", | ||
[a]=kd, | |||
[f]=B, | |||
[d]={ud,1236199783,md,xd}, | |||
[j]={{Kc,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()));"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 657: | Line 657: | ||
}, | }, | ||
["warn_cxx14_compat_class_template_argument_deduction"]={ | ["warn_cxx14_compat_class_template_argument_deduction"]={ | ||
[ | [g]="class template argument deduction is incompatible with C++ standards before C++17... [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="class template argument deduction is incompatible with C++ standards before C++17%select{|; for compatibility, use explicit type name %1}0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="class template argument deduction is incompatible with C\\+\\+ standards before C\\+\\+17(?:|; for compatibility, use explicit type name (.*?))", | ||
[a]=Kb, | |||
[f]=r, | |||
[d]={"218538ebe952",1535656595,od,od}, | |||
[j]={{nb,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;"},{nb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 675: | Line 675: | ||
}, | }, | ||
["warn_cxx14_compat_constexpr_if"]={ | ["warn_cxx14_compat_constexpr_if"]={ | ||
[ | [g]="constexpr if is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="constexpr if is incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="constexpr if is incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=B, | |||
[d]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature.","Implement p0292r2 (constexpr if), a likely C++1z feature."}, | |||
[j]={{gc,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"]={ | ||
[ | [g]="\'constexpr\' non-static member function will not be implicitly \'const\' in C++14; add \'const\' to avoid a change in behavior [-Wconstexpr-not-const]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"constexpr-not-const"}, | |||
[n]="constexpr-not-const", | |||
[h]="\'constexpr\' non-static member function will not be implicitly \'const\' in C++14; add \'const\' to avoid a change in behavior", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'constexpr\' non\\-static member function will not be implicitly \'const\' in C\\+\\+14; add \'const\' to avoid a change in behavior", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wconstexpr\\-not\\-const[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{I,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\");"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 707: | Line 707: | ||
}, | }, | ||
["warn_cxx14_compat_constexpr_on_lambda"]={ | ["warn_cxx14_compat_constexpr_on_lambda"]={ | ||
[ | [g]="constexpr on lambda expressions is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="constexpr on lambda expressions is incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="constexpr on lambda expressions is incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=B, | |||
[d]={"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"}, | |||
[j]={{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);"}} | |||
[ | |||
[ | |||
[ | |||
[ | |||
}, | }, | ||
["warn_cxx14_compat_decomp_decl"]={ | ["warn_cxx14_compat_decomp_decl"]={ | ||
[ | [g]="decomposition declarations are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="decomposition declarations are incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="decomposition declarations are incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=r, | |||
[d]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z","P0217R3: Parsing support and framework for AST representation of C++1z"}, | |||
[j]={{H,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"]={ | ||
[ | [g]="pack fold expression is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="pack fold expression is incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="pack fold expression is incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=B, | |||
[d]={"0f0af19b0581",1415423236,"[c++1z] N4295: fold-expressions.","[c++1z] N4295: fold-expressions."}, | |||
[j]={{Kc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 755: | Line 755: | ||
}, | }, | ||
["warn_cxx14_compat_init_statement"]={ | ["warn_cxx14_compat_init_statement"]={ | ||
[ | [g]="... initialization statements are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="%select{if|switch}0 initialization statements are incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:if|switch) initialization statements are incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=B, | |||
[d]={"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."}, | |||
[j]={{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); };"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 773: | Line 773: | ||
}, | }, | ||
["warn_cxx14_compat_inline_variable"]={ | ["warn_cxx14_compat_inline_variable"]={ | ||
[ | [g]="inline variables are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="inline variables are incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="inline variables are incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=r, | |||
[d]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a","Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a"}, | |||
[j]={{I,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 791: | Line 791: | ||
}, | }, | ||
["warn_cxx14_compat_nested_namespace_definition"]={ | ["warn_cxx14_compat_nested_namespace_definition"]={ | ||
[ | [g]="nested namespace definition is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="nested namespace definition is incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="nested namespace definition is incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=B, | |||
[d]={"13307f5f2429",1415425054,"[c++1z] Implement nested-namespace-definitions.","[c++1z] Implement nested-namespace-definitions."}, | |||
[j]={{jb,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);"},{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 809: | Line 809: | ||
}, | }, | ||
["warn_cxx14_compat_ns_enum_attribute"]={ | ["warn_cxx14_compat_ns_enum_attribute"]={ | ||
[ | [g]="attributes on ... declaration are incompatible with C++ standards before C++17 [-Wpre-c++17-compat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={u,w,Gb,s,zb}, | |||
[n]=zb, | |||
[h]="attributes on %select{a namespace|an enumerator}0 declaration are incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="attributes on (?:a namespace|an enumerator) declaration are incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+17\\-compat\\-pedantic[^\\]]*\\]", | |||
[f]=B, | |||
[d]={"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."}, | |||
[j]={{Vb,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*/;"},{jb,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*/;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 827: | Line 827: | ||
}, | }, | ||
["warn_cxx14_compat_star_this_lambda_capture"]={ | ["warn_cxx14_compat_star_this_lambda_capture"]={ | ||
[ | [g]="by value capture of \'*this\' is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="by value capture of \'*this\' is incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="by value capture of \'\\*this\' is incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=Wc, | |||
[d]={"dc6b596ebbd3",1458552337,"[Cxx1z] Implement Lambda Capture of *this by Value as [=,*this] (P0018R3)","[Cxx1z] Implement Lambda Capture of *this by Value as [=,*this] (P0018R3)"}, | |||
[j]={{"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"]={ | ||
[ | [g]="\'static_assert\' with no message is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="\'static_assert\' with no message is incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'static_assert\' with no message is incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=B, | |||
[d]={"085a64ffc5d4",1403294232,"[C++1z] Implement N3928: message in static_assert is optional.","[C++1z] Implement N3928: message in static_assert is optional."}, | |||
[j]={{jb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 860: | Line 860: | ||
}, | }, | ||
["warn_cxx14_compat_template_nontype_parm_auto_type"]={ | ["warn_cxx14_compat_template_nontype_parm_auto_type"]={ | ||
[ | [g]="non-type template parameters declared with A are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="non-type template parameters declared with %0 are incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="non\\-type template parameters declared with (.*?) are incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 878: | Line 878: | ||
}, | }, | ||
["warn_cxx14_compat_template_template_param_typename"]={ | ["warn_cxx14_compat_template_template_param_typename"]={ | ||
[ | [g]="template template parameter using \'typename\' is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="template template parameter using \'typename\' is incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="template template parameter using \'typename\' is incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=B, | |||
[d]={"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."}, | |||
[j]={{"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"]={ | ||
[ | [g]="unicode literals are incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="unicode literals are incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unicode literals are incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=Q, | |||
[d]={"3e3a705062fe",1415426922,"[c++1z] Support for u8 character literals.","[c++1z] Support for u8 character literals."}, | |||
[j]={{Db,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"]={ | ||
[ | [g]="default scope specifier for attributes is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="default scope specifier for attributes is incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="default scope specifier for attributes is incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=B, | |||
[d]={"b7d7a046d8e0",1466770512,"Using for attributes voted into C++17.","Using for attributes voted into C++17."}, | |||
[j]={{jb,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"]={ | ||
[ | [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 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="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]=m, | [i]=m, | ||
[ | [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", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{P,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"]={ | ||
[ | [g]="aggregate initialization of type A from a parenthesized list of values is a C++20 extension [-Wc++20-extensions]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"c++20-extensions","c++2a-extensions"}, | |||
[n]="c++20-extensions", | |||
[h]="aggregate initialization of type %0 from a parenthesized list of values is a C++20 extension", | |||
[i]=m, | [i]=m, | ||
[ | [e]="aggregate initialization of type (.*?) from a parenthesized list of values is a C\\+\\+20 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+20\\-extensions[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{nb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 956: | Line 956: | ||
}, | }, | ||
["warn_cxx17_compat_bitfield_member_init"]={ | ["warn_cxx17_compat_bitfield_member_init"]={ | ||
[ | [g]="default member initializer for bit-field is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="default member initializer for bit-field is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="default member initializer for bit\\-field is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=B, | |||
[d]={"6b8e3c02ca44",1503880094,"[c++2a] P0683R1: Permit default member initializers for bit-fields.","[c++2a] P0683R1: Permit default member initializers for bit-fields."}, | |||
[j]={{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [ic]={"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"]={ | ||
[ | [g]="captured structured bindings are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="captured structured bindings are incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="captured structured bindings are incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{P,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 992: | Line 992: | ||
}, | }, | ||
["warn_cxx17_compat_constexpr_body_invalid_stmt"]={ | ["warn_cxx17_compat_constexpr_body_invalid_stmt"]={ | ||
[ | [g]="use of this statement in a constexpr ... is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use of this statement in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={"5c1399a58237",1544468592,"[constexpr][c++2a] Try-catch blocks in constexpr functions","[constexpr][c++2a] Try-catch blocks in constexpr functions"}, | |||
[j]={{H,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"]={ | ||
[ | [g]="constexpr constructor that does not initialize all members is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="constexpr constructor that does not initialize all members is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="constexpr constructor that does not initialize all members is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{H,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"]={ | ||
[ | [g]="function try block in constexpr ... is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="function try block in constexpr %select{function|constructor}0 is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="function try block in constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={"5c1399a58237",1544468592,"[constexpr][c++2a] Try-catch blocks in constexpr functions","[constexpr][c++2a] Try-catch blocks in constexpr functions"}, | |||
[j]={{H,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"]={ | ||
[ | [g]="uninitialized variable in a constexpr ... is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="uninitialized variable in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="uninitialized variable in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{H,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"]={ | ||
[ | [g]="constexpr union constructor that does not initialize any member is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="constexpr union constructor that does not initialize any member is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="constexpr union constructor that does not initialize any member is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{H,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"]={ | ||
[ | [g]="virtual constexpr functions are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="virtual constexpr functions are incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="virtual constexpr functions are incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={"5c5be6b2f7fc",1557733330,"[c++20] P1064R0: Allow virtual function calls in constant expression","[c++20] P1064R0: Allow virtual function calls in constant expression"}, | |||
[j]={{H,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [ic]={"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"]={ | ||
[ | [g]="decomposition declaration declared \'A\' is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="decomposition declaration declared %plural{1:\'%1\'|:with \'%1\' specifiers}0 is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="decomposition declaration declared (?:\'(.*?)\'|with \'(.*?)\' specifiers) is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={"13bf9892dc2a",1558554775,"Part of P1091R3: permit structured bindings to be declared \'static\' and","Part of P1091R3: permit structured bindings to be declared \'static\' and"}, | |||
[j]={{H,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [ic]={"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"]={ | ||
[ | [g]="defaulted comparison operators are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="defaulted comparison operators are incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="defaulted comparison operators are incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{H,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [ic]={"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"]={ | ||
[ | [g]="explicitly defaulting this ... with a type different from the implicit type is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="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]=m, | [i]=m, | ||
[ | [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", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={"9b2c5e7c44fd",1538097403,"[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only","[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only"}, | |||
[j]={{H,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [ic]={"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"]={ | ||
[ | [g]="designated initializers are incompatible with C++ standards before C++20 [-Wpre-c++20-compat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={u,w,z,hb,s,db}, | |||
[n]=db, | |||
[h]="designated initializers are incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="designated initializers are incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+20\\-compat\\-pedantic[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated","[c++20] Implement semantic restrictions for C++20 designated"}, | |||
[j]={{P,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"]={ | ||
[ | [g]="explicit capture of \'this\' with a capture default of \'=\' is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="explicit capture of \'this\' with a capture default of \'=\' is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="explicit capture of \'this\' with a capture default of \'\\=\' is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=Wc, | |||
[d]={"8194a3e975e5",1503114187,"[c++2a] Implement P0409R2 - Allow lambda capture [=,this] (by hamzasood)","[c++2a] Implement P0409R2 - Allow lambda capture [=,this] (by hamzasood)"}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [ic]={"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"]={ | ||
[ | [g]="mangled name of A will change in C++17 due to non-throwing exception specification in function signature [-Wc++17-compat-mangling]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={L,"c++17-compat-mangling",z,K,"c++1z-compat-mangling","noexcept-type"}, | |||
[n]="c++17-compat-mangling", | |||
[h]="mangled name of %0 will change in C++17 due to non-throwing exception specification in function signature", | |||
[i]=m, | [i]=m, | ||
[ | [e]="mangled name of (.*?) will change in C\\+\\+17 due to non\\-throwing exception specification in function signature", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+17\\-compat\\-mangling[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{I,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,189: | Line 1,189: | ||
}, | }, | ||
["warn_cxx17_compat_explicit_bool"]={ | ["warn_cxx17_compat_explicit_bool"]={ | ||
[ | [g]="explicit(bool) is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="explicit(bool) is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="explicit\\(bool\\) is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=B, | |||
[d]={"739b410f1ff5",1570627358,Qc,Qc}, | |||
[j]={{Vb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,207: | Line 1,207: | ||
}, | }, | ||
["warn_cxx17_compat_for_range_init_stmt"]={ | ["warn_cxx17_compat_for_range_init_stmt"]={ | ||
[ | [g]="range-based for loop initialization statements are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="range-based for loop initialization statements are incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="range\\-based for loop initialization statements are incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=B, | |||
[d]={"8baa50013c86",1538160249,"[cxx2a] P0614R1: Support init-statements in range-based for loops.","[cxx2a] P0614R1: Support init-statements in range-based for loops."}, | |||
[j]={{gc,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());"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [ic]={"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"]={ | ||
[ | [g]="use of implicit \'typename\' is incompatible with C++ standards before C++20 [-Wc++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={ab,V,vb,U}, | |||
[n]=ab, | |||
[h]="use of implicit \'typename\' is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use of implicit \'typename\' is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=Gc, | |||
[f]=r, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{I,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"]={ | ||
[ | [g]="initialized lambda capture packs are incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="initialized lambda capture packs are incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="initialized lambda capture packs are incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=Wc, | |||
[d]={"b2997f579a8b",1558469450,"[c++20] P0780R2: Support pack-expansion of init-captures.","[c++20] P0780R2: Support pack-expansion of init-captures."}, | |||
[j]={{"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"]={ | ||
[ | [g]="inline nested namespace definition is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="inline nested namespace definition is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="inline nested namespace definition is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=B, | |||
[d]={"53f391dcb323",1542043188,"Implement P1094R2 (nested inline namespaces)","Implement P1094R2 (nested inline namespaces)"}, | |||
[j]={{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,273: | Line 1,273: | ||
}, | }, | ||
["warn_cxx17_compat_lambda_def_ctor_assign"]={ | ["warn_cxx17_compat_lambda_def_ctor_assign"]={ | ||
[ | [g]="... of lambda is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="%select{default construction|assignment}0 of lambda is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:default construction|assignment) of lambda is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=Wc, | |||
[d]={"864949bda1db",1538088424,"[cxx2a] P0624R2: Lambdas with no capture-default are","[cxx2a] P0624R2: Lambdas with no capture-default are"}, | |||
[j]={{P,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [ic]={"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"]={ | ||
[ | [g]="explicit template parameter list for lambdas is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="explicit template parameter list for lambdas is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="explicit template parameter list for lambdas is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=B, | |||
[d]={"8205a814a691",1556966986,"[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas","[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas"}, | |||
[j]={{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);"}} | |||
[ | |||
[ | |||
[ | |||
[ | |||
}, | }, | ||
["warn_cxx17_compat_missing_varargs_arg"]={ | ["warn_cxx17_compat_missing_varargs_arg"]={ | ||
[ | [g]="passing no argument for the \'...\' parameter of a variadic macro is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="passing no argument for the \'...\' parameter of a variadic macro is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="passing no argument for the \'\\.\\.\\.\' parameter of a variadic macro is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=Q, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,324: | Line 1,324: | ||
}, | }, | ||
["warn_cxx17_compat_multi_using_declaration"]={ | ["warn_cxx17_compat_multi_using_declaration"]={ | ||
[ | [g]="use of multiple declarators in a single using declaration is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="use of multiple declarators in a single using declaration is incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use of multiple declarators in a single using declaration is incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=B, | |||
[d]={"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."}, | |||
[j]={{jb,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"]={ | ||
[ | [g]="invoking a pointer to a \'const &\' member function on an rvalue is incompatible with C++ standards before C++20 [-Wpre-c++20-compat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={u,w,z,hb,s,db}, | |||
[n]=db, | |||
[h]="invoking a pointer to a \'const &\' member function on an rvalue is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="invoking a pointer to a \'const &\' member function on an rvalue is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+20\\-compat\\-pedantic[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{ac,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [ic]={"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"]={ | ||
[ | [g]="\'<=>\' operator is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="\'<=>\' operator is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'\\<\\=\\>\' operator is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=Q, | |||
[d]={"edbf5972a4c9",1512090430,"[c++2a] P0515R3: lexer support for new <=> token.","[c++2a] P0515R3: lexer support for new <=> token."}, | |||
[j]={{Db,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [ic]={"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"]={ | ||
[ | [g]="non-type template parameter of type A is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="non-type template parameter of type %0 is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="non\\-type template parameter of type (.*?) is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types"}, | |||
[j]={{Eb,1488,"QualType Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {\n // ...\n Diag(Loc, diag::warn_cxx17_compat_template_nontype_parm_type) << T;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [ic]={"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"]={ | ||
[ | [g]="\'char8_t\' type specifier is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="\'char8_t\' type specifier is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'char8_t\' type specifier is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type.","Implement P0482R2, support for char8_t type."}, | |||
[j]={{mc,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"]={ | ||
[ | [g]="member using declaration naming a non-member enumerator is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="member using declaration naming a non-member enumerator is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="member using declaration naming a non\\-member enumerator is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={Rc,1615397021,Rb,Rb}, | |||
[j]={{H,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"]={ | ||
[ | [g]="member using declaration naming non-class \'A\' enumerator is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="member using declaration naming non-class \'%0\' enumerator is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="member using declaration naming non\\-class \'(.*?)\' enumerator is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={Rc,1615397021,Rb,Rb}, | |||
[j]={{H,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();"},{H,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"]={ | ||
[ | [g]="using declaration naming a scoped enumerator is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="using declaration naming a scoped enumerator is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="using declaration naming a scoped enumerator is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=r, | |||
[d]={Rc,1615397021,Rb,Rb}, | |||
[j]={{H,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"]={ | ||
[ | [g]="pack expansion using declaration is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="pack expansion using declaration is incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="pack expansion using declaration is incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=B, | |||
[d]={"22a250cd5d8e",1482120533,"[c++1z] P0195R2: Support pack-expansion of using-declarations.","[c++1z] P0195R2: Support pack-expansion of using-declarations."}, | |||
[j]={{jb,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"]={ | ||
[ | [g]="using enum declaration is incompatible with C++ standards before C++20 [-Wpre-c++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ob,hb,t,s,s,F,db}, | |||
[n]=F, | |||
[h]="using enum declaration is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="using enum declaration is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=kb, | |||
[f]=B, | |||
[d]={"69350e569dc4",1612659633,jc,jc}, | |||
[j]={{jb,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"]={ | ||
[ | [g]="hexadecimal floating literals are incompatible with C++ standards before C++17 [-Wpre-c++17-compat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={u,w,Gb,s,zb}, | |||
[n]=zb, | |||
[h]="hexadecimal floating literals are incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="hexadecimal floating literals are incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+17\\-compat\\-pedantic[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={"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."}, | |||
[j]={{ed,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"]={ | ||
[ | [g]="alias declaration in this context is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ab,V,V,vb,U,U,t,s,s,ib,Wb}, | |||
[n]=ib, | |||
[h]="alias declaration in this context is incompatible with C++ standards before C++23", | |||
[i]=m, | [i]=m, | ||
[ | [e]="alias declaration in this context is incompatible with C\\+\\+ standards before C\\+\\+23", | ||
[a]=bc, | |||
[f]=B, | |||
[d]={"69350e569dc4",1612659633,jc,jc}, | |||
[j]={{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);"}} | |||
[ | |||
[ | |||
[ | |||
[ | |||
}, | }, | ||
["warn_cxx20_compat_aggregate_init_with_ctors"]={ | ["warn_cxx20_compat_aggregate_init_with_ctors"]={ | ||
[ | [g]="aggregate initialization of type A with user-declared constructors is incompatible with C++20 [-Wc++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={ab,V,vb,U}, | |||
[n]=ab, | |||
[h]="aggregate initialization of type %0 with user-declared constructors is incompatible with C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="aggregate initialization of type (.*?) with user\\-declared constructors is incompatible with C\\+\\+20", | ||
[a]=Gc, | |||
[f]=r, | |||
[d]={"79c88c31056f",1537988416,"P1008R1 Classes with user-declared constructors are never aggregates in","P1008R1 Classes with user-declared constructors are never aggregates in"}, | |||
[j]={{nb,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;"},{nb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,531: | Line 1,531: | ||
}, | }, | ||
["warn_cxx20_compat_auto_expr"]={ | ["warn_cxx20_compat_auto_expr"]={ | ||
[ | [g]="\'auto\' as a functional-style cast is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ab,V,V,vb,U,U,t,s,s,ib,Wb}, | |||
[n]=ib, | |||
[h]="\'auto\' as a functional-style cast is incompatible with C++ standards before C++23", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'auto\' as a functional\\-style cast is incompatible with C\\+\\+ standards before C\\+\\+23", | ||
[a]=bc, | |||
[f]=r, | |||
[d]={ld,1620118562,Zb,Zb}, | |||
[j]={{ac,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,549: | Line 1,549: | ||
}, | }, | ||
["warn_cxx20_compat_consteval"]={ | ["warn_cxx20_compat_consteval"]={ | ||
[ | [g]="\'consteval\' specifier is incompatible with C++ standards before C++20 [-Wc++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={ab,V,vb,U}, | |||
[n]=ab, | |||
[h]="\'consteval\' specifier is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'consteval\' specifier is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=Gc, | |||
[f]=B, | |||
[d]={"796ed03b8412",1560502580,"[C++20] add Basic consteval specifier","[C++20] add Basic consteval specifier"}, | |||
[j]={{cc,1242,"static void addConstevalToLambdaDeclSpecifier(Parser &P, SourceLocation ConstevalLoc, DeclSpec &DS) {\n if (ConstevalLoc.isValid()) {\n P.Diag(ConstevalLoc, diag::warn_cxx20_compat_consteval);"},{mc,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"]={ | ||
[ | [g]="consteval if is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ab,V,V,vb,U,U,t,s,s,ib,Wb}, | |||
[n]=ib, | |||
[h]="consteval if is incompatible with C++ standards before C++23", | |||
[i]=m, | [i]=m, | ||
[ | [e]="consteval if is incompatible with C\\+\\+ standards before C\\+\\+23", | ||
[a]=bc, | |||
[f]=B, | |||
[d]={"69350e569dc4",1612659633,jc,jc}, | |||
[j]={{gc,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"]={ | ||
[ | [g]="use of this statement in a constexpr ... is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ab,V,V,vb,U,U,t,s,s,ib,Wb}, | |||
[n]=ib, | |||
[h]="use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++23", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use of this statement in a constexpr (?:function|constructor) is incompatible with C\\+\\+ standards before C\\+\\+23", | ||
[a]=bc, | |||
[f]=r, | |||
[d]={ld,1620118562,Zb,Zb}, | |||
[j]={{H,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,597: | Line 1,597: | ||
}, | }, | ||
["warn_cxx20_compat_constexpr_var"]={ | ["warn_cxx20_compat_constexpr_var"]={ | ||
[ | [g]="definition of a ... in a constexpr ... is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ab,V,V,vb,U,U,t,s,s,ib,Wb}, | |||
[n]=ib, | |||
[h]="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", | |||
[i]=m, | [i]=m, | ||
[ | [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", | ||
[a]=bc, | |||
[f]=r, | |||
[d]={ld,1620118562,Zb,Zb}, | |||
[j]={{H,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);"},{H,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),"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,615: | Line 1,615: | ||
}, | }, | ||
["warn_cxx20_compat_constinit"]={ | ["warn_cxx20_compat_constinit"]={ | ||
[ | [g]="\'constinit\' specifier is incompatible with C++ standards before C++20 [-Wc++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={ab,V,vb,U}, | |||
[n]=ab, | |||
[h]="\'constinit\' specifier is incompatible with C++ standards before C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'constinit\' specifier is incompatible with C\\+\\+ standards before C\\+\\+20", | ||
[a]=Gc, | |||
[f]=r, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{mc,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"]={ | ||
[ | [g]="... in this position is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ab,V,V,vb,U,U,t,s,s,ib,Wb}, | |||
[n]=ib, | |||
[h]="%select{an attribute specifier sequence|%1}0 in this position is incompatible with C++ standards before C++23", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:an attribute specifier sequence|(.*?)) in this position is incompatible with C\\+\\+ standards before C\\+\\+23", | ||
[a]=bc, | |||
[f]=B, | |||
[d]={"69350e569dc4",1612659633,jc,jc}, | |||
[j]={{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();"}} | |||
[ | |||
[ | |||
[ | |||
[ | |||
}, | }, | ||
["warn_cxx20_compat_explicit_bool"]={ | ["warn_cxx20_compat_explicit_bool"]={ | ||
[ | [g]="this expression will be parsed as explicit(bool) in C++20 [-Wc++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={ab,V,vb,U}, | |||
[n]=ab, | |||
[h]="this expression will be parsed as explicit(bool) in C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="this expression will be parsed as explicit\\(bool\\) in C\\+\\+20", | ||
[a]=Gc, | |||
[f]=B, | |||
[d]={"5fe2ddbdf47d",1556928540,"[clang] adding explicit(bool) from c++2a","[clang] adding explicit(bool) from c++2a"}, | |||
[j]={{Vb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,663: | Line 1,663: | ||
}, | }, | ||
["warn_cxx20_compat_label_end_of_compound_statement"]={ | ["warn_cxx20_compat_label_end_of_compound_statement"]={ | ||
[ | [g]="label at end of compound statement is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ab,V,V,vb,U,U,t,s,s,ib,Wb}, | |||
[n]=ib, | |||
[h]="label at end of compound statement is incompatible with C++ standards before C++23", | |||
[i]=m, | [i]=m, | ||
[ | [e]="label at end of compound statement is incompatible with C\\+\\+ standards before C\\+\\+23", | ||
[a]=bc, | |||
[f]=B, | |||
[d]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl.","[HLSL] Support cbuffer/tbuffer for hlsl."}, | |||
[j]={{gc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,681: | Line 1,681: | ||
}, | }, | ||
["warn_cxx20_compat_operator_overload_static"]={ | ["warn_cxx20_compat_operator_overload_static"]={ | ||
[ | [g]="declaring overloaded A as \'static\' is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ab,V,V,vb,U,U,t,s,s,ib,Wb}, | |||
[n]=ib, | |||
[h]="declaring overloaded %0 as \'static\' is incompatible with C++ standards before C++23", | |||
[i]=m, | [i]=m, | ||
[ | [e]="declaring overloaded (.*?) as \'static\' is incompatible with C\\+\\+ standards before C\\+\\+23", | ||
[a]=bc, | |||
[f]=r, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{H,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,699: | Line 1,699: | ||
}, | }, | ||
["warn_cxx20_compat_size_t_suffix"]={ | ["warn_cxx20_compat_size_t_suffix"]={ | ||
[ | [g]="\'size_t\' suffix for literals is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ab,V,V,vb,U,U,t,s,s,ib,Wb}, | |||
[n]=ib, | |||
[h]="\'size_t\' suffix for literals is incompatible with C++ standards before C++23", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'size_t\' suffix for literals is incompatible with C\\+\\+ standards before C\\+\\+23", | ||
[a]=bc, | |||
[f]=v, | |||
[d]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals","[C++2b] Support size_t literals"}, | |||
[j]={{"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);"},{P,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,717: | Line 1,717: | ||
}, | }, | ||
["warn_cxx20_compat_spaceship"]={ | ["warn_cxx20_compat_spaceship"]={ | ||
[ | [g]="\'<=>\' is a single token in C++20; add a space to avoid a change in behavior [-Wc++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={ab,V,vb,U}, | |||
[n]=ab, | |||
[h]="\'<=>\' is a single token in C++20; add a space to avoid a change in behavior", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'\\<\\=\\>\' is a single token in C\\+\\+20; add a space to avoid a change in behavior", | ||
[a]=Gc, | |||
[f]=Q, | |||
[d]={"edbf5972a4c9",1512090430,"[c++2a] P0515R3: lexer support for new <=> token.","[c++2a] P0515R3: lexer support for new <=> token."}, | |||
[j]={{Db,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), \" \");"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [ic]={"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"]={ | ||
[ | [g]="static lambdas are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ab,V,V,vb,U,U,t,s,s,ib,Wb}, | |||
[n]=ib, | |||
[h]="static lambdas are incompatible with C++ standards before C++23", | |||
[i]=m, | [i]=m, | ||
[ | [e]="static lambdas are incompatible with C\\+\\+ standards before C\\+\\+23", | ||
[a]=bc, | |||
[f]=B, | |||
[d]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()","[Clang] P1169R4: static operator()"}, | |||
[j]={{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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,752: | Line 1,752: | ||
}, | }, | ||
["warn_cxx20_compat_use_of_unaddressable_function"]={ | ["warn_cxx20_compat_use_of_unaddressable_function"]={ | ||
[ | [g]="taking address of non-addressable standard library function is incompatible with C++20 [-Wc++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={ab,V,vb,U}, | |||
[n]=ab, | |||
[h]="taking address of non-addressable standard library function is incompatible with C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="taking address of non\\-addressable standard library function is incompatible with C\\+\\+20", | ||
[a]=Gc, | |||
[f]=r, | |||
[d]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs"}, | |||
[j]={{P,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,769: | Line 1,769: | ||
}, | }, | ||
["warn_cxx20_compat_utf8_string"]={ | ["warn_cxx20_compat_utf8_string"]={ | ||
[ | [g]="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]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={ab,V,vb,U}, | |||
[n]=ab, | |||
[h]="type of UTF-8 string literal will change from array of const char to array of const char8_t in C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="type of UTF\\-8 string literal will change from array of const char to array of const char8_t in C\\+\\+20", | ||
[a]=Gc, | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{P,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,787: | Line 1,787: | ||
}, | }, | ||
["warn_cxx20_keyword"]={ | ["warn_cxx20_keyword"]={ | ||
[ | [g]="\'A\' is a keyword in C++20 [-Wc++20-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={ab,V,vb,U}, | |||
[n]=ab, | |||
[h]="\'%0\' is a keyword in C++20", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' is a keyword in C\\+\\+20", | ||
[a]=Gc, | |||
[f]=Q, | |||
[d]={"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."}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,805: | Line 1,805: | ||
}, | }, | ||
["warn_cxx23_compat_defaulted_comparison_constexpr_mismatch"]={ | ["warn_cxx23_compat_defaulted_comparison_constexpr_mismatch"]={ | ||
[ | [g]="defaulted definition of ... that is declared ... but... invokes a non-constexpr comparison function is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ab,V,V,vb,U,U,t,s,s,ib,Wb}, | |||
[n]=ib, | |||
[h]="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", | |||
[i]=m, | [i]=m, | ||
[ | [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", | ||
[a]=bc, | |||
[f]=r, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{H,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"]={ | ||
[ | [g]="use of a \'#...\' directive is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ab,V,V,vb,U,U,t,s,s,ib,Wb}, | |||
[n]=ib, | |||
[h]="use of a \'#%select{<BUG IF SEEN>|elifdef|elifndef}0\' directive is incompatible with C++ standards before C++23", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use of a \'\\#(?:elifdef|elifndef)\' directive is incompatible with C\\+\\+ standards before C\\+\\+23", | ||
[a]=bc, | |||
[f]=Q, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,838: | Line 1,838: | ||
}, | }, | ||
["warn_cxx23_compat_warning_directive"]={ | ["warn_cxx23_compat_warning_directive"]={ | ||
[ | [g]="#warning is incompatible with C++ standards before C++23 [-Wpre-c++23-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ab,V,V,vb,U,U,t,s,s,ib,Wb}, | |||
[n]=ib, | |||
[h]="#warning is incompatible with C++ standards before C++23", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\\#warning is incompatible with C\\+\\+ standards before C\\+\\+23", | ||
[a]=bc, | |||
[f]=Q, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,856: | Line 1,856: | ||
}, | }, | ||
["warn_cxx23_delimited_escape_sequence"]={ | ["warn_cxx23_delimited_escape_sequence"]={ | ||
[ | [g]="... escape sequences are incompatible with C++ standards before C++23 [-Wpre-c++23-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,L,z,z,K,ab,V,V,vb,U,U,t,s,s,ib,Wb}, | |||
[n]=ib, | |||
[h]="%select{delimited|named}0 escape sequences are incompatible with C++ standards before C++23", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:delimited|named) escape sequences are incompatible with C\\+\\+ standards before C\\+\\+23", | ||
[a]=bc, | |||
[f]=Q, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{Db,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);"},{Db,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);"},{ed,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);"},{ed,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 1,874: | Line 1,874: | ||
}, | }, | ||
["warn_cxx98_compat_alias_declaration"]={ | ["warn_cxx98_compat_alias_declaration"]={ | ||
[ | [g]="alias declarations are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="alias declarations are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="alias declarations are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 1,892: | Line 1,892: | ||
}, | }, | ||
["warn_cxx98_compat_alignas"]={ | ["warn_cxx98_compat_alignas"]={ | ||
[ | [g]="\'alignas\' is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="\'alignas\' is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'alignas\' is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={"f679b5b6a6cb",1318625307,"-Wc++98-compat: warn on C++11 attributes and alignas.","-Wc++98-compat: warn on C++11 attributes and alignas."}, | |||
[j]={{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:26:1: warning: \'alignas\' is incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:26:1: warning: \'alignas\' is incompatible with C++98 [-Wc++98-compat]"} | ||
Line 1,910: | Line 1,910: | ||
}, | }, | ||
["warn_cxx98_compat_alignof"]={ | ["warn_cxx98_compat_alignof"]={ | ||
[ | [g]="alignof expressions are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="alignof expressions are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="alignof expressions are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Lc,1318892780,Nb,Nb}, | |||
[j]={{Kc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:146:22: warning: alignof expressions are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:146:22: warning: alignof expressions are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 1,928: | Line 1,928: | ||
}, | }, | ||
["warn_cxx98_compat_array_size_conversion"]={ | ["warn_cxx98_compat_array_size_conversion"]={ | ||
[ | [g]="implicit conversion from array size expression of type A to ... type B is incompatible with C++98 [-Wc++98-compat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={s}, | |||
[n]=s, | |||
[h]="implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion from array size expression of type (.*?) to (?:integral|enumeration) type (.*?) is incompatible with C\\+\\+98", | ||
[a]=Fc, | |||
[f]=r, | |||
[d]={fc,1318970984,qb,qb}, | |||
[j]={{ac,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\'\";"},{ac,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; }"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [id]={"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"]={ | ||
[ | [g]="[[]] attributes are incompatible with C++ standards before C++11 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="[[]] attributes are incompatible with C++ standards before C++11", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\\[\\[\\]\\] attributes are incompatible with C\\+\\+ standards before C\\+\\+11", | ||
[a]=C, | |||
[f]=B, | |||
[d]={"f679b5b6a6cb",1318625307,"-Wc++98-compat: warn on C++11 attributes and alignas.","-Wc++98-compat: warn on C++11 attributes and alignas."}, | |||
[j]={{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:27:20: warning: [[]] attributes are incompatible with C++ standards before C++11 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:27:20: warning: [[]] attributes are incompatible with C++ standards before C++11 [-Wc++98-compat]"} | ||
Line 1,964: | Line 1,964: | ||
}, | }, | ||
["warn_cxx98_compat_auto_type_specifier"]={ | ["warn_cxx98_compat_auto_type_specifier"]={ | ||
[ | [g]="\'auto\' type specifier is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="\'auto\' type specifier is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'auto\' type specifier is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"e41fac231c9d",1318657321,"Add -Wc++98-compat warning for deduced \'auto\' type specifier.","Add -Wc++98-compat warning for deduced \'auto\' type specifier."}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 1,982: | Line 1,982: | ||
}, | }, | ||
["warn_cxx98_compat_cast_fn_obj"]={ | ["warn_cxx98_compat_cast_fn_obj"]={ | ||
[ | [g]="cast between pointer-to-function and pointer-to-object is incompatible with C++98 [-Wc++98-compat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={s}, | |||
[n]=s, | |||
[h]="cast between pointer-to-function and pointer-to-object is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="cast between pointer\\-to\\-function and pointer\\-to\\-object is incompatible with C\\+\\+98", | ||
[a]=Fc, | |||
[f]=r, | |||
[d]={fc,1318970984,qb,qb}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [id]={"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"]={ | ||
[ | [g]="\'constexpr\' specifier is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="\'constexpr\' specifier is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'constexpr\' specifier is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={Lc,1318892780,Nb,Nb}, | |||
[j]={{mc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,018: | Line 2,018: | ||
}, | }, | ||
["warn_cxx98_compat_ctor_list_init"]={ | ["warn_cxx98_compat_ctor_list_init"]={ | ||
[ | [g]="constructor call from initializer list is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="constructor call from initializer list is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="constructor call from initializer list is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"2b349aee5b6f",1334818680,td,td}, | |||
[j]={{nb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,036: | Line 2,036: | ||
}, | }, | ||
["warn_cxx98_compat_decltype"]={ | ["warn_cxx98_compat_decltype"]={ | ||
[ | [g]="\'decltype\' type specifier is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="\'decltype\' type specifier is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'decltype\' type specifier is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Lc,1318892780,Nb,Nb}, | |||
[j]={{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,054: | Line 2,054: | ||
}, | }, | ||
["warn_cxx98_compat_defaulted_deleted_function"]={ | ["warn_cxx98_compat_defaulted_deleted_function"]={ | ||
[ | [g]="... function definitions are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="%select{defaulted|deleted}0 function definitions are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:defaulted|deleted) function definitions are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select.","Merge some similar diagnostics using %select."}, | |||
[j]={{"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 */;"},{Ic,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 */;"},{Ic,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 */;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,072: | Line 2,072: | ||
}, | }, | ||
["warn_cxx98_compat_delegating_ctor"]={ | ["warn_cxx98_compat_delegating_ctor"]={ | ||
[ | [g]="delegating constructors are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="delegating constructors are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="delegating constructors are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={fc,1318970984,qb,qb}, | |||
[j]={{H,4622,"MemInitResult Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init, CXXRecordDecl *ClassDecl) {\n // ...\n Diag(NameLoc, diag::warn_cxx98_compat_delegating_ctor);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:170:20: warning: delegating constructors are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:170:20: warning: delegating constructors are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,090: | Line 2,090: | ||
}, | }, | ||
["warn_cxx98_compat_empty_fnmacro_arg"]={ | ["warn_cxx98_compat_empty_fnmacro_arg"]={ | ||
[ | [g]="empty macro arguments are incompatible with C++98 [-Wc++98-compat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={s}, | |||
[n]=s, | |||
[h]="empty macro arguments are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="empty macro arguments are incompatible with C\\+\\+98", | ||
[a]=Fc, | |||
[f]=Q, | |||
[d]={hd,1318641536,Yb,Yb}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [id]={"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"]={ | ||
[ | [g]="scalar initialized from empty initializer list is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="scalar initialized from empty initializer list is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="scalar initialized from empty initializer list is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"c82397332d13",1318973940,Tc,Tc}, | |||
[j]={{nb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,126: | Line 2,126: | ||
}, | }, | ||
["warn_cxx98_compat_empty_sizeless_initializer"]={ | ["warn_cxx98_compat_empty_sizeless_initializer"]={ | ||
[ | [g]="initializing A from an empty initializer list is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="initializing %0 from an empty initializer list is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="initializing (.*?) from an empty initializer list is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={Nd,1576908663,nc,nc}, | |||
[j]={{nb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 2,144: | Line 2,144: | ||
}, | }, | ||
["warn_cxx98_compat_enum_fixed_underlying_type"]={ | ["warn_cxx98_compat_enum_fixed_underlying_type"]={ | ||
[ | [g]="enumeration types with a fixed underlying type are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="enumeration types with a fixed underlying type are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="enumeration types with a fixed underlying type are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{Vb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:89:16: warning: enumeration types with a fixed underlying type are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:89:16: warning: enumeration types with a fixed underlying type are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,162: | Line 2,162: | ||
}, | }, | ||
["warn_cxx98_compat_enum_friend"]={ | ["warn_cxx98_compat_enum_friend"]={ | ||
[ | [g]="befriending enumeration type A is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="befriending enumeration type %0 is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="befriending enumeration type (.*?) is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"c82397332d13",1318973940,Tc,Tc}, | |||
[j]={{H,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:223:3: warning: befriending enumeration type \'enum ::Enum\' is incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:223:3: warning: befriending enumeration type \'enum ::Enum\' is incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,180: | Line 2,180: | ||
}, | }, | ||
["warn_cxx98_compat_enum_nested_name_spec"]={ | ["warn_cxx98_compat_enum_nested_name_spec"]={ | ||
[ | [g]="enumeration type in nested name specifier is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="enumeration type in nested name specifier is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="enumeration type in nested name specifier is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"91c7bbde4b6d",1319081327,"Add -Wc++98-compat warning for enumerations in nested name specifiers.","Add -Wc++98-compat warning for enumerations in nested name specifiers."}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,198: | Line 2,198: | ||
}, | }, | ||
["warn_cxx98_compat_enumerator_list_comma"]={ | ["warn_cxx98_compat_enumerator_list_comma"]={ | ||
[ | [g]="commas at the end of enumerator lists are incompatible with C++98 [-Wc++98-compat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={s}, | |||
[n]=s, | |||
[h]="commas at the end of enumerator lists are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="commas at the end of enumerator lists are incompatible with C\\+\\+98", | ||
[a]=Fc, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{Vb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [id]={"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"]={ | ||
[ | [g]="explicit conversion functions are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="explicit conversion functions are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="explicit conversion functions are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={fc,1318970984,qb,qb}, | |||
[j]={{H,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());"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:217:3: warning: explicit conversion functions are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:217:3: warning: explicit conversion functions are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,234: | Line 2,234: | ||
}, | }, | ||
["warn_cxx98_compat_extern_template"]={ | ["warn_cxx98_compat_extern_template"]={ | ||
[ | [g]="extern templates are incompatible with C++98 [-Wc++98-compat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={s}, | |||
[n]=s, | |||
[h]="extern templates are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="extern templates are incompatible with C\\+\\+98", | ||
[a]=Fc, | |||
[f]=B, | |||
[d]={"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"}, | |||
[j]={{Ic,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [id]={"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"]={ | ||
[ | [g]="range-based for loop is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="range-based for loop is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="range\\-based for loop is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{gc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,270: | Line 2,270: | ||
}, | }, | ||
["warn_cxx98_compat_friend_is_member"]={ | ["warn_cxx98_compat_friend_is_member"]={ | ||
[ | [g]="friend declaration naming a member of the declaring class is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="friend declaration naming a member of the declaring class is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="friend declaration naming a member of the declaring class is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={fc,1318970984,qb,qb}, | |||
[j]={{H,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,288: | Line 2,288: | ||
}, | }, | ||
["warn_cxx98_compat_generalized_initializer_lists"]={ | ["warn_cxx98_compat_generalized_initializer_lists"]={ | ||
[ | [g]="generalized initializer lists are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="generalized initializer lists are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="generalized initializer lists are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[ | [j]={{"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);"},{Vb,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);"},{Vb,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);"},{jb,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);"},{Kc,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());"},{Kc,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);"},{Kc,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);"},{Kc,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);"},{gc,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]= | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,306: | Line 2,306: | ||
}, | }, | ||
["warn_cxx98_compat_goto_into_protected_scope"]={ | ["warn_cxx98_compat_goto_into_protected_scope"]={ | ||
[ | [g]="jump from this goto statement to its label is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="jump from this goto statement to its label is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="jump from this goto statement to its label is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"fe2750db42c0",1319146932,Ad,Ad}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,324: | Line 2,324: | ||
}, | }, | ||
["warn_cxx98_compat_indirect_goto_in_protected_scope"]={ | ["warn_cxx98_compat_indirect_goto_in_protected_scope"]={ | ||
[ | [g]="jump from this ... goto statement to one of its possible targets is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="jump from this %select{indirect|asm}0 goto statement to one of its possible targets is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="jump from this (?:indirect|asm) goto statement to one of its possible targets is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"fe2750db42c0",1319146932,Ad,Ad}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,342: | Line 2,342: | ||
}, | }, | ||
["warn_cxx98_compat_initializer_list_init"]={ | ["warn_cxx98_compat_initializer_list_init"]={ | ||
[ | [g]="initialization of initializer_list object is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="initialization of initializer_list object is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="initialization of initializer_list object is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"2b349aee5b6f",1334818680,td,td}, | |||
[j]={{nb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,360: | Line 2,360: | ||
}, | }, | ||
["warn_cxx98_compat_inline_namespace"]={ | ["warn_cxx98_compat_inline_namespace"]={ | ||
[ | [g]="inline namespaces are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="inline namespaces are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="inline namespaces are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:140:1: warning: inline namespaces are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:140:1: warning: inline namespaces are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,378: | Line 2,378: | ||
}, | }, | ||
["warn_cxx98_compat_lambda"]={ | ["warn_cxx98_compat_lambda"]={ | ||
[ | [g]="lambda expressions are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="lambda expressions are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="lambda expressions are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,396: | Line 2,396: | ||
}, | }, | ||
["warn_cxx98_compat_less_colon_colon"]={ | ["warn_cxx98_compat_less_colon_colon"]={ | ||
[ | [g]="\'<::\' is treated as digraph \'<:\' (aka \'[\') followed by \':\' in C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="\'<::\' is treated as digraph \'<:\' (aka \'[\') followed by \':\' in C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'\\<\\:\\:\' is treated as digraph \'\\<\\:\' \\(aka \'\\[\'\\) followed by \'\\:\' in C\\+\\+98", | ||
[a]=C, | |||
[f]=Q, | |||
[d]={hd,1318641536,Yb,Yb}, | |||
[j]={{Db,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:45:4: warning: \'<::\' is treated as digraph \'<:\' (aka \'[\') followed by \':\' in C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:45:4: warning: \'<::\' is treated as digraph \'<:\' (aka \'[\') followed by \':\' in C++98 [-Wc++98-compat]"} | ||
Line 2,414: | Line 2,414: | ||
}, | }, | ||
["warn_cxx98_compat_literal_operator"]={ | ["warn_cxx98_compat_literal_operator"]={ | ||
[ | [g]="literal operators are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="literal operators are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="literal operators are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{cc,2726,"#include \"clang/Basic/OperatorKinds.def\"\n // ...\n if (getLangOpts().CPlusPlus11 && isTokenStringLiteral()) {\n Diag(Tok.getLocation(), diag::warn_cxx98_compat_literal_operator);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:87:13: warning: literal operators are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:87:13: warning: literal operators are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,432: | Line 2,432: | ||
}, | }, | ||
["warn_cxx98_compat_literal_ucn_control_character"]={ | ["warn_cxx98_compat_literal_ucn_control_character"]={ | ||
[ | [g]="universal character name referring to a control character is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="universal character name referring to a control character is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="universal character name referring to a control character is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=Q, | |||
[d]={"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"}, | |||
[j]={{ed,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,450: | Line 2,450: | ||
}, | }, | ||
["warn_cxx98_compat_literal_ucn_escape_basic_scs"]={ | ["warn_cxx98_compat_literal_ucn_escape_basic_scs"]={ | ||
[ | [g]="specifying character \'A\' with a universal character name is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="specifying character \'%0\' with a universal character name is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="specifying character \'(.*?)\' with a universal character name is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=Q, | |||
[d]={"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"}, | |||
[j]={{ed,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,468: | Line 2,468: | ||
}, | }, | ||
["warn_cxx98_compat_longlong"]={ | ["warn_cxx98_compat_longlong"]={ | ||
[ | [g]="\'long long\' is incompatible with C++98 [-Wc++98-compat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={s}, | |||
[n]=s, | |||
[h]="\'long long\' is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'long long\' is incompatible with C\\+\\+98", | ||
[a]=Fc, | |||
[f]=v, | |||
[d]={hd,1318641536,Yb,Yb}, | |||
[j]={{"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);"},{P,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 2,486: | Line 2,486: | ||
}, | }, | ||
["warn_cxx98_compat_no_newline_eof"]={ | ["warn_cxx98_compat_no_newline_eof"]={ | ||
[ | [g]="C++98 requires newline at end of file [-Wc++98-compat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={s}, | |||
[n]=s, | |||
[h]="C++98 requires newline at end of file", | |||
[i]=m, | [i]=m, | ||
[ | [e]="C\\+\\+98 requires newline at end of file", | ||
[a]=Fc, | |||
[f]=Q, | |||
[d]={"e83c731cad30",1334288603,"Support -Wc++98-compat-pedantic as requested:","Support -Wc++98-compat-pedantic as requested:"}, | |||
[j]={{Db,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)) {"},{Db,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 2,504: | Line 2,504: | ||
}, | }, | ||
["warn_cxx98_compat_noexcept_decl"]={ | ["warn_cxx98_compat_noexcept_decl"]={ | ||
[ | [g]="noexcept specifications are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="noexcept specifications are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="noexcept specifications are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Lc,1318892780,Nb,Nb}, | |||
[j]={{jb,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);"},{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:152:18: warning: noexcept specifications are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:152:18: warning: noexcept specifications are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,522: | Line 2,522: | ||
}, | }, | ||
["warn_cxx98_compat_noexcept_expr"]={ | ["warn_cxx98_compat_noexcept_expr"]={ | ||
[ | [g]="noexcept expressions are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="noexcept expressions are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="noexcept expressions are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Lc,1318892780,Nb,Nb}, | |||
[j]={{Kc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:153:23: warning: noexcept expressions are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:153:23: warning: noexcept expressions are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,540: | Line 2,540: | ||
}, | }, | ||
["warn_cxx98_compat_non_static_member_use"]={ | ["warn_cxx98_compat_non_static_member_use"]={ | ||
[ | [g]="use of non-static data member A in an unevaluated context is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="use of non-static data member %0 in an unevaluated context is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use of non\\-static data member (.*?) in an unevaluated context is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{"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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,558: | Line 2,558: | ||
}, | }, | ||
["warn_cxx98_compat_nonclass_type_friend"]={ | ["warn_cxx98_compat_nonclass_type_friend"]={ | ||
[ | [g]="non-class friend type A is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="non-class friend type %0 is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="non\\-class friend type (.*?) is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"c82397332d13",1318973940,Tc,Tc}, | |||
[j]={{H,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:224:3: warning: non-class friend type \'int\' is incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:224:3: warning: non-class friend type \'int\' is incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,576: | Line 2,576: | ||
}, | }, | ||
["warn_cxx98_compat_nonstatic_member_init"]={ | ["warn_cxx98_compat_nonstatic_member_init"]={ | ||
[ | [g]="default member initializer for non-static data members is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="default member initializer for non-static data members is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="default member initializer for non\\-static data members is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,594: | Line 2,594: | ||
}, | }, | ||
["warn_cxx98_compat_nontrivial_union_or_anon_struct_member"]={ | ["warn_cxx98_compat_nontrivial_union_or_anon_struct_member"]={ | ||
[ | [g]="... member A with a non-trivial ... is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="%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", | |||
[i]=m, | [i]=m, | ||
[ | [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", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{I,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,612: | Line 2,612: | ||
}, | }, | ||
["warn_cxx98_compat_nullptr"]={ | ["warn_cxx98_compat_nullptr"]={ | ||
[ | [g]="\'nullptr\' is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="\'nullptr\' is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'nullptr\' is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Lc,1318892780,Nb,Nb}, | |||
[j]={{Kc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:154:14: warning: \'nullptr\' is incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:154:14: warning: \'nullptr\' is incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,630: | Line 2,630: | ||
}, | }, | ||
["warn_cxx98_compat_override_control_keyword"]={ | ["warn_cxx98_compat_override_control_keyword"]={ | ||
[ | [g]="\'A\' keyword is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="\'%0\' keyword is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' keyword is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{jb,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);"},{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,648: | Line 2,648: | ||
}, | }, | ||
["warn_cxx98_compat_pass_non_pod_arg_to_vararg"]={ | ["warn_cxx98_compat_pass_non_pod_arg_to_vararg"]={ | ||
[ | [g]="passing object of trivial but non-POD type A through variadic ... is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="passing object of trivial but non-POD type %0 through variadic %select{function|block|method|constructor}1 is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="passing object of trivial but non\\-POD type (.*?) through variadic (?:function|block|method|constructor) is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={fc,1318970984,qb,qb}, | |||
[j]={{P,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,666: | Line 2,666: | ||
}, | }, | ||
["warn_cxx98_compat_pp_line_too_big"]={ | ["warn_cxx98_compat_pp_line_too_big"]={ | ||
[ | [g]="#line number greater than 32767 is incompatible with C++98 [-Wc++98-compat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={s}, | |||
[n]=s, | |||
[h]="#line number greater than 32767 is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\\#line number greater than 32767 is incompatible with C\\+\\+98", | ||
[a]=Fc, | |||
[f]=Q, | |||
[d]={hd,1318641536,Yb,Yb}, | |||
[j]={{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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [id]={"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"]={ | ||
[ | [g]="raw string literals are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="raw string literals are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="raw string literals are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=Q, | |||
[d]={hd,1318641536,Yb,Yb}, | |||
[j]={{Db,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,702: | Line 2,702: | ||
}, | }, | ||
["warn_cxx98_compat_ref_qualifier"]={ | ["warn_cxx98_compat_ref_qualifier"]={ | ||
[ | [g]="reference qualifiers on functions are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="reference qualifiers on functions are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="reference qualifiers on functions are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{Vb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:102:12: warning: reference qualifiers on functions are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:102:12: warning: reference qualifiers on functions are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,720: | Line 2,720: | ||
}, | }, | ||
["warn_cxx98_compat_reference_list_init"]={ | ["warn_cxx98_compat_reference_list_init"]={ | ||
[ | [g]="reference initialized from initializer list is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="reference initialized from initializer list is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="reference initialized from initializer list is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"2b349aee5b6f",1334818680,td,td}, | |||
[j]={{nb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,738: | Line 2,738: | ||
}, | }, | ||
["warn_cxx98_compat_rvalue_reference"]={ | ["warn_cxx98_compat_rvalue_reference"]={ | ||
[ | [g]="rvalue references are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="rvalue references are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="rvalue references are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{Vb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:100:5: warning: rvalue references are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:100:5: warning: rvalue references are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,756: | Line 2,756: | ||
}, | }, | ||
["warn_cxx98_compat_scoped_enum"]={ | ["warn_cxx98_compat_scoped_enum"]={ | ||
[ | [g]="scoped enumerations are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="scoped enumerations are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="scoped enumerations are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{Vb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:92:6: warning: scoped enumerations are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:92:6: warning: scoped enumerations are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,774: | Line 2,774: | ||
}, | }, | ||
["warn_cxx98_compat_sfinae_access_control"]={ | ["warn_cxx98_compat_sfinae_access_control"]={ | ||
[ | [g]="substitution failure due to access control is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="substitution failure due to access control is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="substitution failure due to access control is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:233:34: warning: substitution failure due to access control is incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:233:34: warning: substitution failure due to access control is incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,792: | Line 2,792: | ||
}, | }, | ||
["warn_cxx98_compat_static_assert"]={ | ["warn_cxx98_compat_static_assert"]={ | ||
[ | [g]="\'static_assert\' declarations are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="\'static_assert\' declarations are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'static_assert\' declarations are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Lc,1318892780,Nb,Nb}, | |||
[j]={{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:155:1: warning: \'static_assert\' declarations are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:155:1: warning: \'static_assert\' declarations are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,810: | Line 2,810: | ||
}, | }, | ||
["warn_cxx98_compat_static_data_member_in_union"]={ | ["warn_cxx98_compat_static_data_member_in_union"]={ | ||
[ | [g]="static data member A in union is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="static data member %0 in union is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="static data member (.*?) in union is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{I,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,828: | Line 2,828: | ||
}, | }, | ||
["warn_cxx98_compat_switch_into_protected_scope"]={ | ["warn_cxx98_compat_switch_into_protected_scope"]={ | ||
[ | [g]="jump from switch statement to this case label is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="jump from switch statement to this case label is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="jump from switch statement to this case label is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"fe2750db42c0",1319146932,Ad,Ad}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,846: | Line 2,846: | ||
}, | }, | ||
["warn_cxx98_compat_temp_copy"]={ | ["warn_cxx98_compat_temp_copy"]={ | ||
[ | [g]="... of type A when binding a reference to a temporary would ... in C++98 [-Wc++98-compat-bind-to-temporary-copy]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"bind-to-temporary-copy","c++98-compat-bind-to-temporary-copy",s}, | |||
[n]="c++98-compat-bind-to-temporary-copy", | |||
[h]="%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", | |||
[i]=m, | [i]=m, | ||
[ | [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", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-bind\\-to\\-temporary\\-copy[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{nb,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))"},{nb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 2,864: | Line 2,864: | ||
}, | }, | ||
["warn_cxx98_compat_template_arg_extra_parens"]={ | ["warn_cxx98_compat_template_arg_extra_parens"]={ | ||
[ | [g]="redundant parentheses surrounding address non-type template argument are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="redundant parentheses surrounding address non-type template argument are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="redundant parentheses surrounding address non\\-type template argument are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={fc,1318970984,qb,qb}, | |||
[j]={{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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,882: | Line 2,882: | ||
}, | }, | ||
["warn_cxx98_compat_template_arg_local_type"]={ | ["warn_cxx98_compat_template_arg_local_type"]={ | ||
[ | [g]="local type A as template argument is incompatible with C++98 [-Wc++98-compat-local-type-template-args]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,"c++98-compat-local-type-template-args",s,"local-type-template-args"}, | |||
[n]="c++98-compat-local-type-template-args", | |||
[h]="local type %0 as template argument is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="local type (.*?) as template argument is incompatible with C\\+\\+98", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-local\\-type\\-template\\-args[^\\]]*\\]", | |||
[f]=r, | |||
[d]={fc,1318970984,qb,qb}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 2,900: | Line 2,900: | ||
}, | }, | ||
["warn_cxx98_compat_template_arg_null"]={ | ["warn_cxx98_compat_template_arg_null"]={ | ||
[ | [g]="use of null pointer as non-type template argument is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="use of null pointer as non-type template argument is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use of null pointer as non\\-type template argument is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,918: | Line 2,918: | ||
}, | }, | ||
["warn_cxx98_compat_template_arg_object_internal"]={ | ["warn_cxx98_compat_template_arg_object_internal"]={ | ||
[ | [g]="non-type template argument referring to ... A with internal linkage is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="non-type template argument referring to %select{function|object}0 %1 with internal linkage is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="non\\-type template argument referring to (?:function|object) (.*?) with internal linkage is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,936: | Line 2,936: | ||
}, | }, | ||
["warn_cxx98_compat_template_arg_unnamed_type"]={ | ["warn_cxx98_compat_template_arg_unnamed_type"]={ | ||
[ | [g]="unnamed type as template argument is incompatible with C++98 [-Wc++98-compat-unnamed-type-template-args]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s,"c++98-compat-unnamed-type-template-args","unnamed-type-template-args"}, | |||
[n]="c++98-compat-unnamed-type-template-args", | |||
[h]="unnamed type as template argument is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unnamed type as template argument is incompatible with C\\+\\+98", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-unnamed\\-type\\-template\\-args[^\\]]*\\]", | |||
[f]=r, | |||
[d]={fc,1318970984,qb,qb}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 2,954: | Line 2,954: | ||
}, | }, | ||
["warn_cxx98_compat_template_outside_of_template"]={ | ["warn_cxx98_compat_template_outside_of_template"]={ | ||
[ | [g]="use of \'template\' keyword outside of a template is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="use of \'template\' keyword outside of a template is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use of \'template\' keyword outside of a template is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={fc,1318970984,qb,qb}, | |||
[j]={{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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 2,972: | Line 2,972: | ||
}, | }, | ||
["warn_cxx98_compat_template_parameter_default_in_function_template"]={ | ["warn_cxx98_compat_template_parameter_default_in_function_template"]={ | ||
[ | [g]="default template arguments for a function template are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="default template arguments for a function template are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="default template arguments for a function template are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={fc,1318970984,qb,qb}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:174:14: warning: default template arguments for a function template are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:174:14: warning: default template arguments for a function template are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 2,990: | Line 2,990: | ||
}, | }, | ||
["warn_cxx98_compat_top_level_semi"]={ | ["warn_cxx98_compat_top_level_semi"]={ | ||
[ | [g]="extra \';\' outside of a function is incompatible with C++98 [-Wc++98-compat-extra-semi]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"c++98-compat-extra-semi",s,"extra-semi"}, | |||
[n]="c++98-compat-extra-semi", | |||
[h]="extra \';\' outside of a function is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="extra \';\' outside of a function is incompatible with C\\+\\+98", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+98\\-compat\\-extra\\-semi[^\\]]*\\]", | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{Ic,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));"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,008: | Line 3,008: | ||
}, | }, | ||
["warn_cxx98_compat_trailing_return_type"]={ | ["warn_cxx98_compat_trailing_return_type"]={ | ||
[ | [g]="trailing return types are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="trailing return types are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="trailing return types are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{Vb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:105:10: warning: trailing return types are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:105:10: warning: trailing return types are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 3,026: | Line 3,026: | ||
}, | }, | ||
["warn_cxx98_compat_two_right_angle_brackets"]={ | ["warn_cxx98_compat_two_right_angle_brackets"]={ | ||
[ | [g]="consecutive right angle brackets are incompatible with C++98 (use \'> >\') [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="consecutive right angle brackets are incompatible with C++98 (use \'> >\')", | |||
[i]=m, | [i]=m, | ||
[ | [e]="consecutive right angle brackets are incompatible with C\\+\\+98 \\(use \'\\> \\>\'\\)", | ||
[a]=C, | |||
[f]=B, | |||
[d]={Qb,1318655374,Z,Z}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:46:14: warning: consecutive right angle brackets are incompatible with C++98 (use \'> >\') [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:46:14: warning: consecutive right angle brackets are incompatible with C++98 (use \'> >\') [-Wc++98-compat]"} | ||
Line 3,044: | Line 3,044: | ||
}, | }, | ||
["warn_cxx98_compat_typename_outside_of_template"]={ | ["warn_cxx98_compat_typename_outside_of_template"]={ | ||
[ | [g]="use of \'typename\' outside of a template is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="use of \'typename\' outside of a template is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use of \'typename\' outside of a template is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={fc,1318970984,qb,qb}, | |||
[j]={{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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:203:1: warning: use of \'typename\' outside of a template is incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:203:1: warning: use of \'typename\' outside of a template is incompatible with C++98 [-Wc++98-compat]"} | ||
Line 3,062: | Line 3,062: | ||
}, | }, | ||
["warn_cxx98_compat_unelaborated_friend_type"]={ | ["warn_cxx98_compat_unelaborated_friend_type"]={ | ||
[ | [g]="befriending A without \'...\' keyword is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="befriending %1 without \'%select{struct|interface|union|class|enum}0\' keyword is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="befriending (.*?) without \'(?:struct|interface|union|class|enum)\' keyword is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={"c82397332d13",1318973940,Tc,Tc}, | |||
[j]={{H,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:225:10: warning: befriending \'Struct\' without \'struct\' keyword is incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:225:10: warning: befriending \'Struct\' without \'struct\' keyword is incompatible with C++98 [-Wc++98-compat]"} | ||
Line 3,080: | Line 3,080: | ||
}, | }, | ||
["warn_cxx98_compat_unicode_literal"]={ | ["warn_cxx98_compat_unicode_literal"]={ | ||
[ | [g]="unicode literals are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="unicode literals are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unicode literals are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=Q, | |||
[d]={hd,1318641536,Yb,Yb}, | |||
[j]={{Db,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);"},{Db,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,098: | Line 3,098: | ||
}, | }, | ||
["warn_cxx98_compat_unicode_type"]={ | ["warn_cxx98_compat_unicode_type"]={ | ||
[ | [g]="\'A\' type specifier is incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="\'%0\' type specifier is incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' type specifier is incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={Lc,1318892780,Nb,Nb}, | |||
[j]={{mc,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\");"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,116: | Line 3,116: | ||
}, | }, | ||
["warn_cxx98_compat_using_decl_constructor"]={ | ["warn_cxx98_compat_using_decl_constructor"]={ | ||
[ | [g]="inheriting constructors are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="inheriting constructors are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="inheriting constructors are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=r, | |||
[d]={fc,1318970984,qb,qb}, | |||
[j]={{H,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"clang/test/SemaCXX/cxx98-compat.cpp:161:22: warning: inheriting constructors are incompatible with C++98 [-Wc++98-compat]"} | [E]={"clang/test/SemaCXX/cxx98-compat.cpp:161:22: warning: inheriting constructors are incompatible with C++98 [-Wc++98-compat]"} | ||
Line 3,134: | Line 3,134: | ||
}, | }, | ||
["warn_cxx98_compat_variadic_macro"]={ | ["warn_cxx98_compat_variadic_macro"]={ | ||
[ | [g]="variadic macros are incompatible with C++98 [-Wc++98-compat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={s}, | |||
[n]=s, | |||
[h]="variadic macros are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="variadic macros are incompatible with C\\+\\+98", | ||
[a]=Fc, | |||
[f]=Q, | |||
[d]={hd,1318641536,Yb,Yb}, | |||
[j]={{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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [id]={"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"]={ | ||
[ | [g]="variadic templates are incompatible with C++98 [-Wc++98-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={t,s}, | |||
[n]=t, | |||
[h]="variadic templates are incompatible with C++98", | |||
[i]=m, | [i]=m, | ||
[ | [e]="variadic templates are incompatible with C\\+\\+98", | ||
[a]=C, | |||
[f]=B, | |||
[d]={"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"}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[E]={"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]"} | [E]={"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]"} | ||
Line 3,170: | Line 3,170: | ||
}, | }, | ||
["warn_cxx_ms_struct"]={ | ["warn_cxx_ms_struct"]={ | ||
[ | [g]="ms_struct may not produce Microsoft-compatible layouts for classes with base classes or virtual functions [-Wincompatible-ms-struct]", | ||
[ | [b]="error: ", | ||
[ | [c]="Downgradable Error", | ||
[ | [o]={"incompatible-ms-struct"}, | ||
[ | [n]="incompatible-ms-struct", | ||
[ | [h]="ms_struct may not produce Microsoft-compatible layouts for classes with base classes or virtual functions", | ||
[ | [i]="(?:error|warning|fatal error)\\: ", | ||
[ | [e]="ms_struct may not produce Microsoft\\-compatible layouts for classes with base classes or virtual functions", | ||
[ | [a]=" \\[[^\\]]*\\-Wincompatible\\-ms\\-struct[^\\]]*\\]", | ||
[ | [f]=r, | ||
[ | [d]={"95833f33bda6",1393533049,"Diagnose attempts to apply ms_struct to records with base classes","Diagnose attempts to apply ms_struct to records with base classes"}, | ||
[ | [j]={{H,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);"}}, | ||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,187: | Line 3,187: | ||
}, | }, | ||
["warn_dangling_else"]={ | ["warn_dangling_else"]={ | ||
[ | [g]="add explicit braces to avoid dangling else [-Wdangling-else]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,"dangling-else","parentheses"}, | |||
[n]="dangling-else", | |||
[h]="add explicit braces to avoid dangling else", | |||
[i]=m, | [i]=m, | ||
[ | [e]="add explicit braces to avoid dangling else", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdangling\\-else[^\\]]*\\]", | |||
[f]=B, | |||
[ | [d]={"3cef10814aed",1324596377,"Add -Wdangling-else.","Add -Wdangling-else."}, | ||
[j]={{gc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,204: | Line 3,204: | ||
}, | }, | ||
["warn_dangling_lifetime_pointer"]={ | ["warn_dangling_lifetime_pointer"]={ | ||
[ | [g]="object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bd,"dangling-gsl"}, | |||
[n]="dangling-gsl", | |||
[h]="object backing the pointer will be destroyed at the end of the full-expression", | |||
[i]=m, | [i]=m, | ||
[ | [e]="object backing the pointer will be destroyed at the end of the full\\-expression", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdangling\\-gsl[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"e5e10b526f2f",1565118809,"Teach some warnings to respect gsl::Pointer and gsl::Owner attributes","Teach some warnings to respect gsl::Pointer and gsl::Owner attributes"}, | |||
[j]={{nb,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;"},{nb,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;"},{nb,8329,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n // ...\n bool EnableLifetimeWarnings = !getDiagnostics().isIgnored(diag::warn_dangling_lifetime_pointer, SourceLocation());"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,221: | Line 3,221: | ||
}, | }, | ||
["warn_dangling_lifetime_pointer_member"]={ | ["warn_dangling_lifetime_pointer_member"]={ | ||
[ | [g]="initializing pointer member A to point to a temporary object whose lifetime is shorter than the lifetime of the constructed object [-Wdangling-gsl]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bd,"dangling-gsl"}, | |||
[n]="dangling-gsl", | |||
[h]="initializing pointer member %0 to point to a temporary object whose lifetime is shorter than the lifetime of the constructed object", | |||
[i]=m, | [i]=m, | ||
[ | [e]="initializing pointer member (.*?) to point to a temporary object whose lifetime is shorter than the lifetime of the constructed object", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdangling\\-gsl[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"e5e10b526f2f",1565118809,"Teach some warnings to respect gsl::Pointer and gsl::Owner attributes","Teach some warnings to respect gsl::Pointer and gsl::Owner attributes"}, | |||
[j]={{nb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,238: | Line 3,238: | ||
}, | }, | ||
["warn_dangling_member"]={ | ["warn_dangling_member"]={ | ||
[ | [g]="... ...member A ... a temporary object whose lifetime is shorter than the lifetime of the constructed object [-Wdangling-field]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bd,"dangling-field"}, | |||
[n]="dangling-field", | |||
[h]="%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", | |||
[i]=m, | [i]=m, | ||
[ | [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", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdangling\\-field[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{nb,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"]={ | ||
[ | [g]="... ...will be destroyed at the end of the full-expression [-Wdangling]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bd}, | |||
[n]=Bd, | |||
[h]="%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", | |||
[i]=m, | [i]=m, | ||
[ | [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", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdangling[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{nb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,269: | Line 3,269: | ||
}, | }, | ||
["warn_dealloc_in_category"]={ | ["warn_dealloc_in_category"]={ | ||
[ | [g]="-dealloc is being overridden in a category [-Wdealloc-in-category]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"dealloc-in-category"}, | |||
[n]="dealloc-in-category", | |||
[h]="-dealloc is being overridden in a category", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\\-dealloc is being overridden in a category", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdealloc\\-in\\-category[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"7e350d23b215",1387320268,"Objctive-C. warn if dealloc is being overridden in","Objctive-C. warn if dealloc is being overridden in"}, | |||
[j]={{xc,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,286: | Line 3,286: | ||
}, | }, | ||
["warn_debug_compression_unavailable"]={ | ["warn_debug_compression_unavailable"]={ | ||
[ | [g]="cannot compress debug sections (A not enabled) [-Wdebug-compression-unavailable]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"debug-compression-unavailable"}, | |||
[n]="debug-compression-unavailable", | |||
[h]="cannot compress debug sections (%0 not enabled)", | |||
[i]=m, | [i]=m, | ||
[ | [e]="cannot compress debug sections \\((.*?) not enabled\\)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdebug\\-compression\\-unavailable[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"24bbfed22185",1396308578,"Warn when requesting compress-debug-sections and zlib is not available","Warn when requesting compress-debug-sections and zlib is not available"}, | |||
[j]={{Y,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\";"},{Y,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"]={ | ||
[ | [g]="declaration of A will not be visible outside of this function [-Wvisibility]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"visibility"}, | |||
[n]="visibility", | |||
[h]="declaration of %0 will not be visible outside of this function", | |||
[i]=m, | [i]=m, | ||
[ | [e]="declaration of (.*?) will not be visible outside of this function", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wvisibility[^\\]]*\\]", | |||
[f]=r, | |||
[d]={ud,1236199783,md,xd}, | |||
[j]={{I,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,317: | Line 3,317: | ||
}, | }, | ||
["warn_decl_shadow"]={ | ["warn_decl_shadow"]={ | ||
[ | [g]="declaration shadows a ... [-Wshadow]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"shadow",Ld}, | |||
[n]="shadow", | |||
[h]="declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2|typedef in %2|type alias in %2|structured binding}1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="declaration shadows a (?:local variable|variable in (.*?)|static data member of (.*?)|field of (.*?)|typedef in (.*?)|type alias in (.*?)|structured binding)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wshadow[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"a2a3f7dc115d",1268776098,"Implement -Wshadow. Based on a patch by Mike M.!","Implement -Wshadow. Based on a patch by Mike M.!"}, | |||
[j]={{I,8138,"/// Enum describing the %select options in diag::warn_decl_shadow."},{I,8182,"static bool shouldWarnIfShadowedDecl(const DiagnosticsEngine &Diags, const LookupResult &R) {\n // ...\n return !Diags.isIgnored(diag::warn_decl_shadow, R.getNameLoc());"},{I,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;"},{I,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;"},{I,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()))"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,335: | Line 3,335: | ||
}, | }, | ||
["warn_decl_shadow_uncaptured_local"]={ | ["warn_decl_shadow_uncaptured_local"]={ | ||
[ | [g]="declaration shadows a ... [-Wshadow-uncaptured-local]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={Ld,"shadow-uncaptured-local"}, | |||
[n]="shadow-uncaptured-local", | |||
[h]="declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2|typedef in %2|type alias in %2|structured binding}1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="declaration shadows a (?:local variable|variable in (.*?)|static data member of (.*?)|field of (.*?)|typedef in (.*?)|type alias in (.*?)|structured binding)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wshadow\\-uncaptured\\-local[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"175388c00d0a",1478687937,"[Sema] Avoid -Wshadow warnings for shadowed variables that aren\'t captured","[Sema] Avoid -Wshadow warnings for shadowed variables that aren\'t captured"}, | |||
[j]={{I,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;"},{I,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"]={ | ||
[ | [g]="ignoring __declspec(allocator) because the function return type A is not a pointer or reference type [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="ignoring __declspec(allocator) because the function return type %0 is not a pointer or reference type", | |||
[i]=m, | [i]=m, | ||
[ | [e]="ignoring __declspec\\(allocator\\) because the function return type (.*?) is not a pointer or reference type", | ||
[a]=xb, | |||
[f]=r, | |||
[d]={"1181c9f45db1",1553556018,"[MS] Add frontend support for __declspec(allocator)","[MS] Add frontend support for __declspec(allocator)"}, | |||
[j]={{J,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,367: | Line 3,367: | ||
}, | }, | ||
["warn_declspec_attribute_ignored"]={ | ["warn_declspec_attribute_ignored"]={ | ||
[ | [g]="attribute A is ignored, place it after \"...\" to apply attribute to type declaration [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="attribute %0 is ignored, place it after \"%select{class|struct|interface|union|enum|enum class|enum struct}1\" to apply attribute to type declaration", | |||
[i]=m, | [i]=m, | ||
[ | [e]="attribute (.*?) is ignored, place it after \"(?:class|struct|interface|union|enum|enum class|enum struct)\" to apply attribute to type declaration", | ||
[a]=xb, | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{I,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);"},{I,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,384: | Line 3,384: | ||
}, | }, | ||
["warn_deep_exception_specs_differ"]={ | ["warn_deep_exception_specs_differ"]={ | ||
[ | [g]="exception specifications of ... types differ [-Wincompatible-exception-spec]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"incompatible-exception-spec"}, | |||
[n]="incompatible-exception-spec", | |||
[h]="exception specifications of %select{return|argument}0 types differ", | |||
[i]=m, | [i]=m, | ||
[ | [e]="exception specifications of (?:return|argument) types differ", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-exception\\-spec[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"1be59c510612",1477099939,"[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for","[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for"}, | |||
[j]={{"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"]={ | ||
[ | [g]="enumeration value A not explicitly handled in switch [-Wswitch-enum]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"switch-enum"}, | |||
[n]="switch-enum", | |||
[h]="%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", | |||
[i]=m, | [i]=m, | ||
[ | [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\\: (.*?), (.*?), (.*?)\\.\\.\\.)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wswitch\\-enum[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"3a8650af779c",1427476994,"[Sema] Factor diags with %plural. No functionality change intended.","[Sema] Factor diags with %plural. No functionality change intended."}, | |||
[j]={{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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,416: | Line 3,416: | ||
}, | }, | ||
["warn_default_atomic_custom_getter_setter"]={ | ["warn_default_atomic_custom_getter_setter"]={ | ||
[ | [g]="atomic by default property A has a user defined ... (property should be marked \'atomic\' if this is intended) [-Wcustom-atomic-properties]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"atomic-properties","custom-atomic-properties"}, | |||
[n]="custom-atomic-properties", | |||
[h]="atomic by default property %0 has a user defined %select{getter|setter}1 (property should be marked \'atomic\' if this is intended)", | |||
[i]=m, | [i]=m, | ||
[ | [e]="atomic by default property (.*?) has a user defined (?:getter|setter) \\(property should be marked \'atomic\' if this is intended\\)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wcustom\\-atomic\\-properties[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,434: | Line 3,434: | ||
}, | }, | ||
["warn_defaulted_comparison_deleted"]={ | ["warn_defaulted_comparison_deleted"]={ | ||
[ | [g]="explicitly defaulted ... comparison operator is implicitly deleted [-Wdefaulted-function-deleted]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"defaulted-function-deleted"}, | |||
[n]="defaulted-function-deleted", | |||
[h]="explicitly defaulted %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator is implicitly deleted", | |||
[i]=m, | [i]=m, | ||
[ | [e]="explicitly defaulted (?:equality|three\\-way|equality|relational) comparison operator is implicitly deleted", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdefaulted\\-function\\-deleted[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"5253d9138eb3",1573070592,"[c++20] Determine whether a defaulted comparison should be deleted or","[c++20] Determine whether a defaulted comparison should be deleted or"}, | |||
[j]={{H,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,451: | Line 3,451: | ||
}, | }, | ||
["warn_defaulted_method_deleted"]={ | ["warn_defaulted_method_deleted"]={ | ||
[ | [g]="explicitly defaulted ... is implicitly deleted [-Wdefaulted-function-deleted]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"defaulted-function-deleted"}, | |||
[n]="defaulted-function-deleted", | |||
[h]="explicitly defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 is implicitly deleted", | |||
[i]=m, | [i]=m, | ||
[ | [e]="explicitly defaulted (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) is implicitly deleted", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdefaulted\\-function\\-deleted[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"9b2c5e7c44fd",1538097403,"[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only","[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only"}, | |||
[j]={{H,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,468: | Line 3,468: | ||
}, | }, | ||
["warn_defined_in_function_type_macro"]={ | ["warn_defined_in_function_type_macro"]={ | ||
[ | [g]="macro expansion producing \'defined\' has undefined behavior [-Wexpansion-to-defined]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"expansion-to-defined",jd}, | |||
[n]="expansion-to-defined", | |||
[h]="macro expansion producing \'defined\' has undefined behavior", | |||
[i]=m, | [i]=m, | ||
[ | [e]="macro expansion producing \'defined\' has undefined behavior", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wexpansion\\-to\\-defined[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={"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."}, | |||
[ | [j]={{"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);"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,486: | Line 3,486: | ||
}, | }, | ||
["warn_defined_in_object_type_macro"]={ | ["warn_defined_in_object_type_macro"]={ | ||
[ | [g]="macro expansion producing \'defined\' has undefined behavior [-Wexpansion-to-defined]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"expansion-to-defined"}, | |||
[n]="expansion-to-defined", | |||
[h]="macro expansion producing \'defined\' has undefined behavior", | |||
[i]=m, | [i]=m, | ||
[ | [e]="macro expansion producing \'defined\' has undefined behavior", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wexpansion\\-to\\-defined[^\\]]*\\]", | |||
[f]=Q, | |||
[ | [d]={"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."}, | ||
[j]={{"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"]={ | ||
[ | [g]="constructor for A creates a delegation cycle [-Wdelegating-ctor-cycles]", | ||
[ | [b]="error: ", | ||
[ | [c]="Downgradable Error", | ||
[ | [o]={"delegating-ctor-cycles"}, | ||
[ | [n]="delegating-ctor-cycles", | ||
[ | [h]="constructor for %0 creates a delegation cycle", | ||
[ | [i]="(?:error|warning|fatal error)\\: ", | ||
[ | [e]="constructor for (.*?) creates a delegation cycle", | ||
[ | [a]=" \\[[^\\]]*\\-Wdelegating\\-ctor\\-cycles[^\\]]*\\]", | ||
[ | [f]=r, | ||
[ | [d]={"e262299b72ea",1304553947,"Change cycle detection to be based off of a warning flag.","Change cycle detection to be based off of a warning flag."}, | ||
[ | [j]={{"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()))"},{H,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;"}}, | ||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,517: | Line 3,517: | ||
}, | }, | ||
["warn_delete_abstract_non_virtual_dtor"]={ | ["warn_delete_abstract_non_virtual_dtor"]={ | ||
[ | [g]="... called on A that is abstract but has non-virtual destructor [-Wdelete-abstract-non-virtual-dtor]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,"delete-abstract-non-virtual-dtor","delete-non-virtual-dtor",S}, | |||
[n]="delete-abstract-non-virtual-dtor", | |||
[h]="%select{delete|destructor}0 called on %1 that is abstract but has non-virtual destructor", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:delete|destructor) called on (.*?) that is abstract but has non\\-virtual destructor", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdelete\\-abstract\\-non\\-virtual\\-dtor[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{ac,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,534: | Line 3,534: | ||
}, | }, | ||
["warn_delete_array_type"]={ | ["warn_delete_array_type"]={ | ||
[ | [g]="\'delete\' applied to a pointer-to-array type A treated as \'delete[]\'", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="\'delete\' applied to a pointer-to-array type %0 treated as \'delete[]\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'delete\' applied to a pointer\\-to\\-array type (.*?) treated as \'delete\\[\\]\'", | ||
[a]=Ib, | |||
[f]=r, | |||
[ | [d]={"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[]\'."}, | ||
[ | [j]={{ac,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), \"[]\");"}}, | ||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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[]\'"} | ||
Line 3,549: | Line 3,549: | ||
}, | }, | ||
["warn_delete_incomplete"]={ | ["warn_delete_incomplete"]={ | ||
[ | [g]="deleting pointer to incomplete type A may cause undefined behavior [-Wdelete-incomplete]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"delete-incomplete"}, | |||
[n]="delete-incomplete", | |||
[h]="deleting pointer to incomplete type %0 may cause undefined behavior", | |||
[i]=m, | [i]=m, | ||
[ | [e]="deleting pointer to incomplete type (.*?) may cause undefined behavior", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdelete\\-incomplete[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Tb,1237025389,fb,fb}, | |||
[j]={{ac,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())) {"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,566: | Line 3,566: | ||
}, | }, | ||
["warn_delete_non_virtual_dtor"]={ | ["warn_delete_non_virtual_dtor"]={ | ||
[ | [g]="... called on non-final A that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={G,M,"delete-non-abstract-non-virtual-dtor","delete-non-virtual-dtor",S}, | |||
[n]="delete-non-abstract-non-virtual-dtor", | |||
[h]="%select{delete|destructor}0 called on non-final %1 that has virtual functions but non-virtual destructor", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:delete|destructor) called on non\\-final (.*?) that has virtual functions but non\\-virtual destructor", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdelete\\-non\\-abstract\\-non\\-virtual\\-dtor[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{ac,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,584: | Line 3,584: | ||
}, | }, | ||
["warn_delimited_ucn_empty"]={ | ["warn_delimited_ucn_empty"]={ | ||
[ | [g]="empty delimited universal character name; treating as \'\\\' \'A\' \'{\' \'}\' [-Wunicode]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"unicode"}, | |||
[n]="unicode", | |||
[h]="empty delimited universal character name; treating as \'\\\' \'%0\' \'{\' \'}\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="empty delimited universal character name; treating as \'\\\\\' \'(.*?)\' \'\\{\' \'\\}\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunicode[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{Db,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);"},{Db,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,601: | Line 3,601: | ||
}, | }, | ||
["warn_delimited_ucn_incomplete"]={ | ["warn_delimited_ucn_incomplete"]={ | ||
[ | [g]="incomplete delimited universal character name; treating as \'\\\' \'A\' \'{\' identifier [-Wunicode]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"unicode"}, | |||
[n]="unicode", | |||
[h]="incomplete delimited universal character name; treating as \'\\\' \'%0\' \'{\' identifier", | |||
[i]=m, | [i]=m, | ||
[ | [e]="incomplete delimited universal character name; treating as \'\\\\\' \'(.*?)\' \'\\{\' identifier", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunicode[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{Db,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);"},{Db,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,618: | Line 3,618: | ||
}, | }, | ||
["warn_depr_array_comparison"]={ | ["warn_depr_array_comparison"]={ | ||
[ | [g]="comparison between two arrays is deprecated; to compare array addresses, use unary \'+\' to decay operands to pointers [-Wdeprecated-array-compare]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,"deprecated-array-compare"}, | |||
[n]="deprecated-array-compare", | |||
[h]="comparison between two arrays is deprecated; to compare array addresses, use unary \'+\' to decay operands to pointers", | |||
[i]=m, | [i]=m, | ||
[ | [e]="comparison between two arrays is deprecated; to compare array addresses, use unary \'\\+\' to decay operands to pointers", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-array\\-compare[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles."}, | |||
[j]={{P,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,635: | Line 3,635: | ||
}, | }, | ||
["warn_deprecated"]={ | ["warn_deprecated"]={ | ||
[ | [g]="A is deprecated [-Wdeprecated-declarations]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,Sc}, | |||
[n]=Sc, | |||
[h]="%0 is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={Tb,1237025389,fb,fb}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,652: | Line 3,652: | ||
}, | }, | ||
["warn_deprecated_altivec_src_compat"]={ | ["warn_deprecated_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 [-Wdeprecated-altivec-src-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"deprecated-altivec-src-compat"}, | |||
[n]="deprecated-altivec-src-compat", | |||
[h]="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", | |||
[i]=m, | [i]=m, | ||
[ | [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", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-altivec\\-src\\-compat[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Rc,1615397021,Rb,Rb}, | |||
[j]={{P,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,669: | Line 3,669: | ||
}, | }, | ||
["warn_deprecated_anonymous_namespace"]={ | ["warn_deprecated_anonymous_namespace"]={ | ||
[ | [g]="\'deprecated\' attribute on anonymous namespace ignored [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="\'deprecated\' attribute on anonymous namespace ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'deprecated\' attribute on anonymous namespace ignored", | ||
[a]=xb, | |||
[f]=r, | |||
[ | [d]={"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."}, | ||
[f]= | [j]={{J,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);"}}, | ||
[d | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,686: | Line 3,686: | ||
}, | }, | ||
["warn_deprecated_builtin"]={ | ["warn_deprecated_builtin"]={ | ||
[ | [g]="builtin A is deprecated; use B instead [-Wdeprecated-builtins]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,"deprecated-builtins"}, | |||
[n]="deprecated-builtins", | |||
[h]="builtin %0 is deprecated; use %1 instead", | |||
[i]=m, | [i]=m, | ||
[ | [e]="builtin (.*?) is deprecated; use (.*?) instead", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-builtins[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{ac,5558,"void DiagnoseBuiltinDeprecation(Sema &S, TypeTrait Kind, SourceLocation KWLoc) {\n // ...\n S.Diag(KWLoc, diag::warn_deprecated_builtin) << getTraitSpelling(Kind) << getTraitSpelling(Replacement);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,703: | Line 3,703: | ||
}, | }, | ||
["warn_deprecated_comma_subscript"]={ | ["warn_deprecated_comma_subscript"]={ | ||
[ | [g]="top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23 [-Wdeprecated-comma-subscript]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,"deprecated-comma-subscript"}, | |||
[n]="deprecated-comma-subscript", | |||
[h]="top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23", | |||
[i]=m, | [i]=m, | ||
[ | [e]="top\\-level comma expression in array subscript is deprecated in C\\+\\+20 and unsupported in C\\+\\+23", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-comma\\-subscript[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"6a3820503910",1563615147,"[c++20] P1161R3: a[b,c] is deprecated.","[c++20] P1161R3: a[b,c] is deprecated."}, | |||
[j]={{P,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,720: | Line 3,720: | ||
}, | }, | ||
["warn_deprecated_copy"]={ | ["warn_deprecated_copy"]={ | ||
[ | [g]="definition of implicit copy ... for A is deprecated because it has a user-declared copy ... [-Wdeprecated-copy]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={v,G,gb,"deprecated-copy",Jc}, | |||
[n]="deprecated-copy", | |||
[h]="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", | |||
[i]=m, | [i]=m, | ||
[ | [e]="definition of implicit copy (?:constructor|assignment operator) for (.*?) is deprecated because it has a user\\-declared copy (?:assignment operator|constructor)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-copy[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"b83b23275b74",1607502387,Zc,Zc}, | |||
[j]={{H,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,738: | Line 3,738: | ||
}, | }, | ||
["warn_deprecated_copy_with_dtor"]={ | ["warn_deprecated_copy_with_dtor"]={ | ||
[ | [g]="definition of implicit copy ... for A is deprecated because it has a user-declared destructor [-Wdeprecated-copy-with-dtor]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={gb,"deprecated-copy-dtor","deprecated-copy-with-dtor"}, | |||
[n]="deprecated-copy-with-dtor", | |||
[h]="definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-declared destructor", | |||
[i]=m, | [i]=m, | ||
[ | [e]="definition of implicit copy (?:constructor|assignment operator) for (.*?) is deprecated because it has a user\\-declared destructor", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-copy\\-with\\-dtor[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"b83b23275b74",1607502387,Zc,Zc}, | |||
[j]={{H,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,756: | Line 3,756: | ||
}, | }, | ||
["warn_deprecated_copy_with_user_provided_copy"]={ | ["warn_deprecated_copy_with_user_provided_copy"]={ | ||
[ | [g]="definition of implicit copy ... for A is deprecated because it has a user-provided copy ... [-Wdeprecated-copy-with-user-provided-copy]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={v,G,gb,"deprecated-copy","deprecated-copy-with-user-provided-copy",Jc}, | |||
[n]="deprecated-copy-with-user-provided-copy", | |||
[h]="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", | |||
[i]=m, | [i]=m, | ||
[ | [e]="definition of implicit copy (?:constructor|assignment operator) for (.*?) is deprecated because it has a user\\-provided copy (?:assignment operator|constructor)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-copy\\-with\\-user\\-provided\\-copy[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"b83b23275b74",1607502387,Zc,Zc}, | |||
[j]={{H,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,774: | Line 3,774: | ||
}, | }, | ||
["warn_deprecated_copy_with_user_provided_dtor"]={ | ["warn_deprecated_copy_with_user_provided_dtor"]={ | ||
[ | [g]="definition of implicit copy ... for A is deprecated because it has a user-provided destructor [-Wdeprecated-copy-with-user-provided-dtor]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={gb,"deprecated-copy-dtor","deprecated-copy-with-dtor","deprecated-copy-with-user-provided-dtor"}, | |||
[n]="deprecated-copy-with-user-provided-dtor", | |||
[h]="definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-provided destructor", | |||
[i]=m, | [i]=m, | ||
[ | [e]="definition of implicit copy (?:constructor|assignment operator) for (.*?) is deprecated because it has a user\\-provided destructor", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-copy\\-with\\-user\\-provided\\-dtor[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"b83b23275b74",1607502387,Zc,Zc}, | |||
[j]={{H,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,792: | Line 3,792: | ||
}, | }, | ||
["warn_deprecated_def"]={ | ["warn_deprecated_def"]={ | ||
[ | [g]="implementing deprecated ... [-Wdeprecated-implementations]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"deprecated-implementations"}, | |||
[n]="deprecated-implementations", | |||
[h]="implementing deprecated %select{method|class|category}0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implementing deprecated (?:method|class|category)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-implementations[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"0c87d36d9d93",1297815251,"Fix typo (per Chris\'s comment).","Fix typo (per Chris\'s comment)."}, | |||
[j]={{xc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,810: | Line 3,810: | ||
}, | }, | ||
["warn_deprecated_for_co_await"]={ | ["warn_deprecated_for_co_await"]={ | ||
[ | [g]="\'for co_await\' belongs to CoroutineTS instead of C++20, which is deprecated [-Wdeprecated-coroutine]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"coroutine","deprecated-coroutine"}, | |||
[n]="deprecated-coroutine", | |||
[h]="\'for co_await\' belongs to CoroutineTS instead of C++20, which is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'for co_await\' belongs to CoroutineTS instead of C\\+\\+20, which is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-coroutine[^\\]]*\\]", | |||
[f]="Coroutines Issue", | |||
[d]={"69350e569dc4",1612659633,jc,jc}, | |||
[j]={{gc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,827: | Line 3,827: | ||
}, | }, | ||
["warn_deprecated_fwdclass_message"]={ | ["warn_deprecated_fwdclass_message"]={ | ||
[ | [g]="A may be deprecated because the receiver type is unknown [-Wdeprecated-declarations]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,Sc}, | |||
[n]=Sc, | |||
[h]="%0 may be deprecated because the receiver type is unknown", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) may be deprecated because the receiver type is unknown", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"7d6e11a1923a",1292892241,"Warn when message is sent to receiver of","Warn when message is sent to receiver of"}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,844: | Line 3,844: | ||
}, | }, | ||
["warn_deprecated_ignored_on_using"]={ | ["warn_deprecated_ignored_on_using"]={ | ||
[ | [g]="A currently has no effect on a using declaration [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="%0 currently has no effect on a using declaration", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) currently has no effect on a using declaration", | ||
[a]=xb, | |||
[f]=r, | |||
[d]={Rc,1615397021,Rb,Rb}, | |||
[j]={{J,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;"},{J,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,861: | Line 3,861: | ||
}, | }, | ||
["warn_deprecated_increment_decrement_volatile"]={ | ["warn_deprecated_increment_decrement_volatile"]={ | ||
[ | [g]="... of object of volatile-qualified type A is deprecated [-Wdeprecated-volatile]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,Bc}, | |||
[n]=Bc, | |||
[h]="%select{decrement|increment}0 of object of volatile-qualified type %1 is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:decrement|increment) of object of volatile\\-qualified type (.*?) is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{P,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,878: | Line 3,878: | ||
}, | }, | ||
["warn_deprecated_lax_vec_conv_all"]={ | ["warn_deprecated_lax_vec_conv_all"]={ | ||
[ | [g]="Implicit conversion between vector types (\'A\' and \'B\') is deprecated. In the future, the behavior implied by \'-fno-lax-vector-conversions\' will be the default. [-Wdeprecate-lax-vec-conv-all]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"deprecate-lax-vec-conv-all"}, | |||
[n]="deprecate-lax-vec-conv-all", | |||
[h]="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.", | |||
[i]=m, | [i]=m, | ||
[ | [e]="Implicit conversion between vector types \\(\'(.*?)\' and \'(.*?)\'\\) is deprecated\\. In the future, the behavior implied by \'\\-fno\\-lax\\-vector\\-conversions\' will be the default\\.", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecate\\-lax\\-vec\\-conv\\-all[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={Hb,1625925174,T,T}, | ||
[j]={{P,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;"},{P,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;"},{P,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;"}}, | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,895: | Line 3,895: | ||
}, | }, | ||
["warn_deprecated_literal_operator_id"]={ | ["warn_deprecated_literal_operator_id"]={ | ||
[ | [g]="identifier A preceded by whitespace in a literal operator declaration is deprecated [-Wdeprecated-literal-operator]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={gb,"deprecated-literal-operator"}, | |||
[n]="deprecated-literal-operator", | |||
[h]="identifier %0 preceded by whitespace in a literal operator declaration is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="identifier (.*?) preceded by whitespace in a literal operator declaration is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-literal\\-operator[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages"}, | |||
[j]={{ac,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,913: | Line 3,913: | ||
}, | }, | ||
["warn_deprecated_message"]={ | ["warn_deprecated_message"]={ | ||
[ | [g]="A is deprecated: B [-Wdeprecated-declarations]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,Sc}, | |||
[n]=Sc, | |||
[h]="%0 is deprecated: %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) is deprecated\\: (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-declarations[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"55106310aeaf",1286399924,"Add message to attribute(deprecated).","Add message to attribute(deprecated)."}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,930: | Line 3,930: | ||
}, | }, | ||
["warn_deprecated_noreturn_spelling"]={ | ["warn_deprecated_noreturn_spelling"]={ | ||
[ | [g]="the \'[[_Noreturn]]\' attribute spelling is deprecated in C2x; use \'[[noreturn]]\' instead [-Wdeprecated-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,"deprecated-attributes"}, | |||
[n]="deprecated-attributes", | |||
[h]="the \'[[_Noreturn]]\' attribute spelling is deprecated in C2x; use \'[[noreturn]]\' instead", | |||
[i]=m, | [i]=m, | ||
[ | [e]="the \'\\[\\[_Noreturn\\]\\]\' attribute spelling is deprecated in C2x; use \'\\[\\[noreturn\\]\\]\' instead", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-attributes[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"f9c3310d32c6",1616787805,sd,sd}, | |||
[j]={{J,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,947: | Line 3,947: | ||
}, | }, | ||
["warn_deprecated_redundant_constexpr_static_def"]={ | ["warn_deprecated_redundant_constexpr_static_def"]={ | ||
[ | [g]="out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated [-Wdeprecated-redundant-constexpr-static-def]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={gb,"deprecated-redundant-constexpr-static-def"}, | |||
[n]="deprecated-redundant-constexpr-static-def", | |||
[h]="out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="out\\-of\\-line definition of constexpr static data member is redundant in C\\+\\+17 and is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-redundant\\-constexpr\\-static\\-def[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a","Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a"}, | |||
[j]={{I,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,965: | Line 3,965: | ||
}, | }, | ||
["warn_deprecated_register"]={ | ["warn_deprecated_register"]={ | ||
[ | [g]="\'register\' storage class specifier is deprecated and incompatible with C++17 [-Wdeprecated-register]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={L,z,K,gb,"deprecated-register","register"}, | |||
[n]="deprecated-register", | |||
[h]="\'register\' storage class specifier is deprecated and incompatible with C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'register\' storage class specifier is deprecated and incompatible with C\\+\\+17", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-register[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"8ca78a16f4a5",1371088971,"Add -Wdeprecated warnings and fixits for things deprecated in C++11:","Add -Wdeprecated warnings and fixits for things deprecated in C++11:"}, | |||
[j]={{I,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());"},{I,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());"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,982: | Line 3,982: | ||
}, | }, | ||
["warn_deprecated_simple_assign_volatile"]={ | ["warn_deprecated_simple_assign_volatile"]={ | ||
[ | [g]="use of result of assignment to object of volatile-qualified type A is deprecated [-Wdeprecated-volatile]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,Bc}, | |||
[n]=Bc, | |||
[h]="use of result of assignment to object of volatile-qualified type %0 is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use of result of assignment to object of volatile\\-qualified type (.*?) is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{P,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 3,999: | Line 3,999: | ||
}, | }, | ||
["warn_deprecated_string_literal_conversion"]={ | ["warn_deprecated_string_literal_conversion"]={ | ||
[ | [g]="conversion from string literal to A is deprecated [-Wc++11-compat-deprecated-writable-strings]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={A,y,"c++11-compat-deprecated-writable-strings",u,gb,"deprecated-writable-strings","writable-strings","write-strings"}, | |||
[n]="c++11-compat-deprecated-writable-strings", | |||
[h]="conversion from string literal to %0 is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="conversion from string literal to (.*?) is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat\\-deprecated\\-writable\\-strings[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"e489a7d3d397",1267381825,"Warn about the deprecated string literal -> char* conversion. Fixes PR6428.","Warn about the deprecated string literal -> char* conversion. Fixes PR6428."}, | |||
[j]={{ac,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,016: | Line 4,016: | ||
}, | }, | ||
["warn_deprecated_this_capture"]={ | ["warn_deprecated_this_capture"]={ | ||
[ | [g]="implicit capture of \'this\' with a capture default of \'=\' is deprecated [-Wdeprecated-this-capture]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,"deprecated-this-capture"}, | |||
[n]="deprecated-this-capture", | |||
[h]="implicit capture of \'this\' with a capture default of \'=\' is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit capture of \'this\' with a capture default of \'\\=\' is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-this\\-capture[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"d82201e7c66b",1530943128,"P0806R2 Implicit capture of this with a capture-default of [=] is","P0806R2 Implicit capture of this with a capture-default of [=] is"}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,033: | Line 4,033: | ||
}, | }, | ||
["warn_deprecated_volatile_param"]={ | ["warn_deprecated_volatile_param"]={ | ||
[ | [g]="volatile-qualified parameter type A is deprecated [-Wdeprecated-volatile]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,Bc}, | |||
[n]=Bc, | |||
[h]="volatile-qualified parameter type %0 is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="volatile\\-qualified parameter type (.*?) is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,050: | Line 4,050: | ||
}, | }, | ||
["warn_deprecated_volatile_return"]={ | ["warn_deprecated_volatile_return"]={ | ||
[ | [g]="volatile-qualified return type A is deprecated [-Wdeprecated-volatile]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,Bc}, | |||
[n]=Bc, | |||
[h]="volatile-qualified return type %0 is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="volatile\\-qualified return type (.*?) is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,067: | Line 4,067: | ||
}, | }, | ||
["warn_deprecated_volatile_structured_binding"]={ | ["warn_deprecated_volatile_structured_binding"]={ | ||
[ | [g]="volatile qualifier in structured binding declaration is deprecated [-Wdeprecated-volatile]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,Bc}, | |||
[n]=Bc, | |||
[h]="volatile qualifier in structured binding declaration is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="volatile qualifier in structured binding declaration is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-volatile[^\\]]*\\]", | |||
[f]=lb, | |||
[ | [d]={Ab,1567434909,N,N}, | ||
[j]={{H,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,084: | Line 4,084: | ||
}, | }, | ||
["warn_dereference_of_noderef_type"]={ | ["warn_dereference_of_noderef_type"]={ | ||
[ | [g]="dereferencing A; was declared with a \'noderef\' type [-Wnoderef]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"noderef"}, | |||
[n]="noderef", | |||
[h]="dereferencing %0; was declared with a \'noderef\' type", | |||
[i]=m, | [i]=m, | ||
[ | [e]="dereferencing (.*?); was declared with a \'noderef\' type", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wnoderef[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute","[Sema/Attribute] Check for noderef attribute"}, | |||
[j]={{P,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,101: | Line 4,101: | ||
}, | }, | ||
["warn_dereference_of_noderef_type_no_decl"]={ | ["warn_dereference_of_noderef_type_no_decl"]={ | ||
[ | [g]="dereferencing expression marked as \'noderef\' [-Wnoderef]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"noderef"}, | |||
[n]="noderef", | |||
[h]="dereferencing expression marked as \'noderef\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="dereferencing expression marked as \'noderef\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wnoderef[^\\]]*\\]", | |||
[f]=v, | |||
[ | [d]={"ad7ac964e5cf",1544058354,"[Sema/Attribute] Check for noderef attribute","[Sema/Attribute] Check for noderef attribute"}, | ||
[j]={{P,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,118: | Line 4,118: | ||
}, | }, | ||
["warn_diagnose_if_succeeded"]={ | ["warn_diagnose_if_succeeded"]={ | ||
[ | [g]="A [-Wuser-defined-warnings]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,S,"user-defined-warnings"}, | |||
[n]="user-defined-warnings", | |||
[h]=qd, | |||
[i]=m, | [i]=m, | ||
[ | [e]=nd, | ||
[ | [a]=" \\[(?:\\-Werror,)?\\-Wuser\\-defined\\-warnings[^\\]]*\\]", | ||
[f]=r, | |||
[d]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang.","Add the diagnose_if attribute to clang."}, | |||
[j]={{"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();"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,135: | Line 4,135: | ||
}, | }, | ||
["warn_direct_initialize_call"]={ | ["warn_direct_initialize_call"]={ | ||
[ | [g]="explicit call to +initialize results in duplicate call to +initialize [-Wexplicit-initialize-call]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"explicit-initialize-call"}, | |||
[n]="explicit-initialize-call", | |||
[h]="explicit call to +initialize results in duplicate call to +initialize", | |||
[i]=m, | [i]=m, | ||
[ | [e]="explicit call to \\+initialize results in duplicate call to \\+initialize", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wexplicit\\-initialize\\-call[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"78e9debf68d4",1408726646,"Objective-C. Warn if user has made explicit call","Objective-C. Warn if user has made explicit call"}, | |||
[j]={{Yc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,152: | Line 4,152: | ||
}, | }, | ||
["warn_direct_ivar_access"]={ | ["warn_direct_ivar_access"]={ | ||
[ | [g]="instance variable A is being directly accessed [-Wdirect-ivar-access]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"direct-ivar-access"}, | |||
[n]="direct-ivar-access", | |||
[h]="instance variable %0 is being directly accessed", | |||
[i]=m, | [i]=m, | ||
[ | [e]="instance variable (.*?) is being directly accessed", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdirect\\-ivar\\-access[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"14f1aa70a9fa",1344297051,"objective-c: Implement gcc\'s -Wdirect-ivar-access option.","objective-c: Implement gcc\'s -Wdirect-ivar-access option."}, | |||
[j]={{P,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,170: | Line 4,170: | ||
}, | }, | ||
["warn_direct_super_initialize_call"]={ | ["warn_direct_super_initialize_call"]={ | ||
[ | [g]="explicit call to [super initialize] should only be in implementation of +initialize [-Wexplicit-initialize-call]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"explicit-initialize-call"}, | |||
[n]="explicit-initialize-call", | |||
[h]="explicit call to [super initialize] should only be in implementation of +initialize", | |||
[i]=m, | [i]=m, | ||
[ | [e]="explicit call to \\[super initialize\\] should only be in implementation of \\+initialize", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wexplicit\\-initialize\\-call[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"422922838920",1409002058,"Objective-C. Allow [super initialize] in an +initialize","Objective-C. Allow [super initialize] in an +initialize"}, | |||
[j]={{Yc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,187: | Line 4,187: | ||
}, | }, | ||
["warn_dispatch_body_ignored"]={ | ["warn_dispatch_body_ignored"]={ | ||
[ | [g]="body of cpu_dispatch function will be ignored [-Wfunction-multiversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"function-multiversion"}, | |||
[n]="function-multiversion", | |||
[h]="body of cpu_dispatch function will be ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="body of cpu_dispatch function will be ignored", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfunction\\-multiversion[^\\]]*\\]", | |||
[f]=v, | |||
[ | [d]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning"}, | ||
[j]={{I,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,204: | Line 4,204: | ||
}, | }, | ||
["warn_division_sizeof_array"]={ | ["warn_division_sizeof_array"]={ | ||
[ | [g]="expression does not compute the number of elements in this array; element type is A, not B [-Wsizeof-array-div]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"sizeof-array-div"}, | |||
[n]="sizeof-array-div", | |||
[h]="expression does not compute the number of elements in this array; element type is %0, not %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="expression does not compute the number of elements in this array; element type is (.*?), not (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wsizeof\\-array\\-div[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{P,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,221: | Line 4,221: | ||
}, | }, | ||
["warn_division_sizeof_ptr"]={ | ["warn_division_sizeof_ptr"]={ | ||
[ | [g]="\'A\' will return the size of the pointer, not the array itself [-Wsizeof-pointer-div]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"sizeof-pointer-div"}, | |||
[n]="sizeof-pointer-div", | |||
[h]="\'%0\' will return the size of the pointer, not the array itself", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' will return the size of the pointer, not the array itself", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wsizeof\\-pointer\\-div[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"b8dc05260c7d",1541089570,"[Diagnostics] Implement -Wsizeof-pointer-div ","[Diagnostics] Implement -Wsizeof-pointer-div "}, | |||
[j]={{P,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,238: | Line 4,238: | ||
}, | }, | ||
["warn_dllimport_dropped_from_inline_function"]={ | ["warn_dllimport_dropped_from_inline_function"]={ | ||
[ | [g]="A redeclared inline; B attribute ignored [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="%q0 redeclared inline; %1 attribute ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) redeclared inline; (.*?) attribute ignored", | ||
[a]=xb, | |||
[f]=r, | |||
[d]={"606bd6dcc547",1415024685,"Don\'t dllimport inline functions when targeting MinGW (PR21366)","Don\'t dllimport inline functions when targeting MinGW (PR21366)"}, | |||
[j]={{I,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,255: | Line 4,255: | ||
}, | }, | ||
["warn_doc_api_container_decl_mismatch"]={ | ["warn_doc_api_container_decl_mismatch"]={ | ||
[ | [g]="\'......\' command should not be used in a comment attached to a non-... declaration [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="\'%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", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(?:\\\\|@)(?:class|interface|protocol|struct|union)\' command should not be used in a comment attached to a non\\-(?:class|interface|protocol|struct|union) declaration", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"a649eee9e877",1362699191,"HeaderDoc: Support more of HeaderDoc documentation ","HeaderDoc: Support more of HeaderDoc documentation "}, | |||
[j]={{yb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,273: | Line 4,273: | ||
}, | }, | ||
["warn_doc_block_command_duplicate"]={ | ["warn_doc_block_command_duplicate"]={ | ||
[ | [g]="duplicated command \'...A\' [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="duplicated command \'%select{\\|@}0%1\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="duplicated command \'(?:\\\\|@)(.*?)\'", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"5ec0c7536a98",1344272907,"Comment diagnostics: warn on duplicate \\brief and \\return commands.","Comment diagnostics: warn on duplicate \\brief and \\return commands."}, | |||
[j]={{yb,623,"void Sema::checkBlockCommandDuplicate(const BlockCommandComment *Command) {\n // ...\n Diag(Command->getLocation(), diag::warn_doc_block_command_duplicate) << Command->getCommandMarker() << CommandName << Command->getSourceRange();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [dc]={"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"]={ | ||
[ | [g]="empty paragraph passed to \'...A\' command [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="empty paragraph passed to \'%select{\\|@}0%1\' command", | |||
[i]=m, | [i]=m, | ||
[ | [e]="empty paragraph passed to \'(?:\\\\|@)(.*?)\' command", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"f26054f0fb53",1342042719,sc,sc}, | |||
[j]={{yb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,309: | Line 4,309: | ||
}, | }, | ||
["warn_doc_container_decl_mismatch"]={ | ["warn_doc_container_decl_mismatch"]={ | ||
[ | [g]="\'......\' command should not be used in a comment attached to a non-container declaration [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="\'%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", | |||
[i]=m, | [i]=m, | ||
[ | [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", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"a649eee9e877",1362699191,"HeaderDoc: Support more of HeaderDoc documentation ","HeaderDoc: Support more of HeaderDoc documentation "}, | |||
[j]={{yb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,327: | Line 4,327: | ||
}, | }, | ||
["warn_doc_deprecated_not_sync"]={ | ["warn_doc_deprecated_not_sync"]={ | ||
[ | [g]="declaration is marked with \'...deprecated\' command but does not have a deprecation attribute [-Wdocumentation-deprecated-sync]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R,"documentation-deprecated-sync"}, | |||
[n]="documentation-deprecated-sync", | |||
[h]="declaration is marked with \'%select{\\|@}0deprecated\' command but does not have a deprecation attribute", | |||
[i]=m, | [i]=m, | ||
[ | [e]="declaration is marked with \'(?:\\\\|@)deprecated\' command but does not have a deprecation attribute", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-deprecated\\-sync[^\\]]*\\]", | |||
[f]=tb, | |||
[d]={"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"}, | |||
[j]={{yb,655,"void Sema::checkDeprecatedCommand(const BlockCommandComment *Command) {\n // ...\n Diag(Command->getLocation(), diag::warn_doc_deprecated_not_sync) << Command->getSourceRange() << Command->getCommandMarker();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,345: | Line 4,345: | ||
}, | }, | ||
["warn_doc_function_method_decl_mismatch"]={ | ["warn_doc_function_method_decl_mismatch"]={ | ||
[ | [g]="\'......\' command should be used in a comment attached to ... declaration [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="\'%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", | |||
[i]=m, | [i]=m, | ||
[ | [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", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"41bb7131b39a",1362591411,"say objective-C in the warning and streamline","say objective-C in the warning and streamline"}, | |||
[j]={{yb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,363: | Line 4,363: | ||
}, | }, | ||
["warn_doc_html_end_forbidden"]={ | ["warn_doc_html_end_forbidden"]={ | ||
[ | [g]="HTML end tag \'A\' is forbidden [-Wdocumentation-html]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R,Oc}, | |||
[n]=Oc, | |||
[h]="HTML end tag \'%0\' is forbidden", | |||
[i]=m, | [i]=m, | ||
[ | [e]="HTML end tag \'(.*?)\' is forbidden", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-html[^\\]]*\\]", | |||
[f]=tb, | |||
[d]={"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."}, | |||
[j]={{yb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [dc]={"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"]={ | ||
[ | [g]="HTML end tag does not match any start tag [-Wdocumentation-html]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R,Oc}, | |||
[n]=Oc, | |||
[h]="HTML end tag does not match any start tag", | |||
[i]=m, | [i]=m, | ||
[ | [e]="HTML end tag does not match any start tag", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-html[^\\]]*\\]", | |||
[f]=tb, | |||
[d]={"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."}, | |||
[ | [j]={{yb,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();"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [dc]={"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"]={ | ||
[ | [g]="HTML tag \'A\' requires an end tag [-Wdocumentation-html]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R,Oc}, | |||
[n]=Oc, | |||
[h]="HTML tag \'%0\' requires an end tag", | |||
[i]=m, | [i]=m, | ||
[ | [e]="HTML tag \'(.*?)\' requires an end tag", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-html[^\\]]*\\]", | |||
[f]=tb, | |||
[d]={"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"}, | |||
[j]={{yb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [dc]={"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"]={ | ||
[ | [g]="HTML start tag \'A\' closed by \'B\' [-Wdocumentation-html]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R,Oc}, | |||
[n]=Oc, | |||
[h]="HTML start tag \'%0\' closed by \'%1\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="HTML start tag \'(.*?)\' closed by \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-html[^\\]]*\\]", | |||
[f]=tb, | |||
[d]={"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."}, | |||
[j]={{yb,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();"},{yb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [dc]={"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"]={ | ||
[ | [g]="HTML start tag prematurely ended, expected attribute name or \'>\' [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="HTML start tag prematurely ended, expected attribute name or \'>\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="HTML start tag prematurely ended, expected attribute name or \'\\>\'", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"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."}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [dc]={"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"]={ | ||
[ | [g]="expected quoted string after equals sign [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="expected quoted string after equals sign", | |||
[i]=m, | [i]=m, | ||
[ | [e]="expected quoted string after equals sign", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"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."}, | |||
[ | [j]={{"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());"}}, | ||
[f]= | |||
[d | |||
[ | |||
[p]={ | [p]={ | ||
[ | [dc]={"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"]={ | ||
[ | [g]="\'...A\' command has no word argumentB, expected C [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="\'%select{\\|@}0%1\' command has %plural{0:no|:%2}2 word argument%s2, expected %3", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(?:\\\\|@)(.*?)\' command has (?:no|(.*?)) word argument(.*?), expected (.*?)", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"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"}, | |||
[j]={{"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());"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [dc]={"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"]={ | ||
[ | [g]="parameter \'A\' is already documented [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="parameter \'%0\' is already documented", | |||
[i]=m, | [i]=m, | ||
[ | [e]="parameter \'(.*?)\' is already documented", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"8f0f1b0c41cd",1343166256,"Comment diagnostics: add warning for multiple \\param commands with duplicate","Comment diagnostics: add warning for multiple \\param commands with duplicate"}, | |||
[j]={{yb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [dc]={"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"]={ | ||
[ | [g]="unrecognized parameter passing direction, valid directions are \'[in]\', \'[out]\' and \'[in,out]\' [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="unrecognized parameter passing direction, valid directions are \'[in]\', \'[out]\' and \'[in,out]\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unrecognized parameter passing direction, valid directions are \'\\[in\\]\', \'\\[out\\]\' and \'\\[in,out\\]\'", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"f26054f0fb53",1342042719,sc,sc}, | |||
[j]={{yb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [dc]={"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"]={ | ||
[ | [g]="\'...param\' command used in a comment that is not attached to a function declaration [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="\'%select{\\|@}0param\' command used in a comment that is not attached to a function declaration", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(?:\\\\|@)param\' command used in a comment that is not attached to a function declaration", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"f26054f0fb53",1342042719,sc,sc}, | |||
[j]={{yb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [dc]={"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"]={ | ||
[ | [g]="parameter \'A\' not found in the function declaration [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="parameter \'%0\' not found in the function declaration", | |||
[i]=m, | [i]=m, | ||
[ | [e]="parameter \'(.*?)\' not found in the function declaration", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"f26054f0fb53",1342042719,sc,sc}, | |||
[j]={{yb,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;"},{I,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()))"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,561: | Line 4,561: | ||
}, | }, | ||
["warn_doc_param_spaces_in_direction"]={ | ["warn_doc_param_spaces_in_direction"]={ | ||
[ | [g]="whitespace is not allowed in parameter passing direction [-Wdocumentation-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"documentation-pedantic"}, | |||
[n]="documentation-pedantic", | |||
[h]="whitespace is not allowed in parameter passing direction", | |||
[i]=m, | [i]=m, | ||
[ | [e]="whitespace is not allowed in parameter passing direction", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-pedantic[^\\]]*\\]", | |||
[f]=tb, | |||
[d]={"f26054f0fb53",1342042719,sc,sc}, | |||
[ | [j]={{yb,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);"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [dc]={"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"]={ | ||
[ | [g]="\'...A\' command used in a comment that is attached to a ... [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="\'%select{\\|@}0%1\' command used in a comment that is attached to a %select{function returning void|constructor|destructor|method returning void}2", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(?:\\\\|@)(.*?)\' command used in a comment that is attached to a (?:function returning void|constructor|destructor|method returning void)", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"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"}, | |||
[j]={{yb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,597: | Line 4,597: | ||
}, | }, | ||
["warn_doc_returns_not_attached_to_a_function_decl"]={ | ["warn_doc_returns_not_attached_to_a_function_decl"]={ | ||
[ | [g]="\'...A\' command used in a comment that is not attached to a function or method declaration [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="\'%select{\\|@}0%1\' command used in a comment that is not attached to a function or method declaration", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(?:\\\\|@)(.*?)\' command used in a comment that is not attached to a function or method declaration", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"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"}, | |||
[j]={{yb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,615: | Line 4,615: | ||
}, | }, | ||
["warn_doc_tparam_duplicate"]={ | ["warn_doc_tparam_duplicate"]={ | ||
[ | [g]="template parameter \'A\' is already documented [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="template parameter \'%0\' is already documented", | |||
[i]=m, | [i]=m, | ||
[ | [e]="template parameter \'(.*?)\' is already documented", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"34df220410b3",1343774226,Ed,Ed}, | |||
[j]={{yb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [dc]={"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"]={ | ||
[ | [g]="\'...tparam\' command used in a comment that is not attached to a template declaration [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="\'%select{\\|@}0tparam\' command used in a comment that is not attached to a template declaration", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(?:\\\\|@)tparam\' command used in a comment that is not attached to a template declaration", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"34df220410b3",1343774226,Ed,Ed}, | |||
[j]={{yb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,651: | Line 4,651: | ||
}, | }, | ||
["warn_doc_tparam_not_found"]={ | ["warn_doc_tparam_not_found"]={ | ||
[ | [g]="template parameter \'A\' not found in the template declaration [-Wdocumentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={R}, | |||
[n]=R, | |||
[h]="template parameter \'%0\' not found in the template declaration", | |||
[i]=m, | [i]=m, | ||
[ | [e]="template parameter \'(.*?)\' not found in the template declaration", | ||
[a]=Lb, | |||
[f]=tb, | |||
[d]={"34df220410b3",1343774226,Ed,Ed}, | |||
[j]={{yb,332,"void Sema::actOnTParamCommandParamNameArg(TParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n // ...\n Diag(ArgLocBegin, diag::warn_doc_tparam_not_found) << Arg << ArgRange;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,669: | Line 4,669: | ||
}, | }, | ||
["warn_double_const_requires_fp64"]={ | ["warn_double_const_requires_fp64"]={ | ||
[ | [g]="double precision constant requires ..., casting to single precision", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="double precision constant requires %select{cl_khr_fp64|cl_khr_fp64 and __opencl_c_fp64}0, casting to single precision", | |||
[i]=m, | [i]=m, | ||
[ | [e]="double precision constant requires (?:cl_khr_fp64|cl_khr_fp64 and __opencl_c_fp64), casting to single precision", | ||
[a]=Ib, | |||
[f]=r, | |||
[ | [d]={"c77f85b4b0fe",1299871499,"OpenCL: if double precision floating point constant encountered","OpenCL: if double precision floating point constant encountered"}, | ||
[ | [j]={{P,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);"}}, | ||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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"} | ||
Line 4,684: | Line 4,684: | ||
}, | }, | ||
["warn_double_lock"]={ | ["warn_double_lock"]={ | ||
[ | [g]="acquiring A \'B\' that is already held [-Wthread-safety-analysis]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={vc,Ob}, | |||
[n]=Ob, | |||
[h]="acquiring %0 \'%1\' that is already held", | |||
[i]=m, | [i]=m, | ||
[ | [e]="acquiring (.*?) \'(.*?)\' that is already held", | ||
[a]=bd, | |||
[f]=r, | |||
[d]={"afbbd8e5adac",1314125194,"Thread-safety analysis: adding in a basic lockset tracking system. This","Thread-safety analysis: adding in a basic lockset tracking system. This"}, | |||
[j]={{mb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,702: | Line 4,702: | ||
}, | }, | ||
["warn_drv_assuming_mfloat_abi_is"]={ | ["warn_drv_assuming_mfloat_abi_is"]={ | ||
[ | [g]="unknown platform, assuming -mfloat-abi=A", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="unknown platform, assuming -mfloat-abi=%0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unknown platform, assuming \\-mfloat\\-abi\\=(.*?)", | ||
[a]=Ib, | |||
[f]=v, | |||
[ | [d]={"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."}, | ||
[ | [j]={{Id,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\";"}}, | ||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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"} | ||
Line 4,717: | Line 4,717: | ||
}, | }, | ||
["warn_drv_avr_family_linking_stdlibs_not_implemented"]={ | ["warn_drv_avr_family_linking_stdlibs_not_implemented"]={ | ||
[ | [g]="support for linking stdlibs for microcontroller \'A\' is not implemented [-Wavr-rtlib-linking-quirks]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Dc}, | |||
[n]=Dc, | |||
[h]="support for linking stdlibs for microcontroller \'%0\' is not implemented", | |||
[i]=m, | [i]=m, | ||
[ | [e]="support for linking stdlibs for microcontroller \'(.*?)\' is not implemented", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]", | |||
[f]=v, | |||
[d]={ec,1534346725,pb,pb}, | |||
[j]={{"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"]={ | ||
[ | [g]="no avr-libc installation can be found on the system, cannot link standard libraries [-Wavr-rtlib-linking-quirks]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Dc}, | |||
[n]=Dc, | |||
[h]="no avr-libc installation can be found on the system, cannot link standard libraries", | |||
[i]=m, | [i]=m, | ||
[ | [e]="no avr\\-libc installation can be found on the system, cannot link standard libraries", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]", | |||
[f]=v, | |||
[d]={ec,1534346725,pb,pb}, | |||
[j]={{"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"]={ | ||
[ | [g]="support for passing the data section address to the linker for microcontroller \'A\' is not implemented [-Wavr-rtlib-linking-quirks]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Dc}, | |||
[n]=Dc, | |||
[h]="support for passing the data section address to the linker for microcontroller \'%0\' is not implemented", | |||
[i]=m, | [i]=m, | ||
[ | [e]="support for passing the data section address to the linker for microcontroller \'(.*?)\' is not implemented", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"0175999805cf",1585492323,Cc,Cc}, | |||
[j]={{"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"]={ | ||
[ | [g]="no target microcontroller specified on command line, cannot link standard libraries, please pass -mmcu=<mcu name> [-Wavr-rtlib-linking-quirks]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Dc}, | |||
[n]=Dc, | |||
[h]="no target microcontroller specified on command line, cannot link standard libraries, please pass -mmcu=<mcu name>", | |||
[i]=m, | [i]=m, | ||
[ | [e]="no target microcontroller specified on command line, cannot link standard libraries, please pass \\-mmcu\\=\\<mcu name\\>", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]", | |||
[f]=v, | |||
[d]={ec,1534346725,pb,pb}, | |||
[j]={{"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"]={ | ||
[ | [g]="standard library not linked and so no interrupt vector table or compiler runtime routines will be linked [-Wavr-rtlib-linking-quirks]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Dc}, | |||
[n]=Dc, | |||
[h]="standard library not linked and so no interrupt vector table or compiler runtime routines will be linked", | |||
[i]=m, | [i]=m, | ||
[ | [e]="standard library not linked and so no interrupt vector table or compiler runtime routines will be linked", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wavr\\-rtlib\\-linking\\-quirks[^\\]]*\\]", | |||
[f]=v, | |||
[ | [d]={ec,1534346725,pb,pb}, | ||
[j]={{"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"]={ | ||
[ | [g]="the clang compiler does not support \'A\'", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="the clang compiler does not support \'%0\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="the clang compiler does not support \'(.*?)\'", | ||
[a]=Ib, | |||
[f]=v, | |||
[ | [d]={"513d500fda01",1239131904,"Driver: Explicitly warn that -pg isn\'t supported (even though we","Driver: Explicitly warn that -pg isn\'t supported (even though we"}, | ||
[ | [j]={{Y,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"]={ | ||
[ | [g]="SDK settings were ignored as \'SDKSettings.json\' could not be parsed [-Wdarwin-sdk-settings]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"darwin-sdk-settings"}, | |||
[n]="darwin-sdk-settings", | |||
[h]="SDK settings were ignored as \'SDKSettings.json\' could not be parsed", | |||
[i]=m, | [i]=m, | ||
[ | [e]="SDK settings were ignored as \'SDKSettings\\.json\' could not be parsed", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdarwin\\-sdk\\-settings[^\\]]*\\]", | |||
[f]=v, | |||
[d]={ec,1534346725,pb,pb}, | |||
[j]={{fd,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"]={ | ||
[ | [g]="argument \'A\' is deprecated, use \'B\' instead [-Wdeprecated]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb}, | |||
[n]=gb, | |||
[h]="argument \'%0\' is deprecated, use \'%1\' instead", | |||
[i]=m, | [i]=m, | ||
[ | [e]="argument \'(.*?)\' is deprecated, use \'(.*?)\' instead", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"aa716577495a",1352164322,"Per discussion on cfe-commits, treat -faddress-sanitizer,","Per discussion on cfe-commits, treat -faddress-sanitizer,"}, | |||
[j]={{yd,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\";"},{yd,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\""},{yd,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\""},{yd,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"]={ | ||
[ | [g]="argument \'A\' requires profile-guided optimization information [-Wunused-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={ub}, | |||
[n]=ub, | |||
[h]="argument \'%0\' requires profile-guided optimization information", | |||
[i]=m, | [i]=m, | ||
[ | [e]="argument \'(.*?)\' requires profile\\-guided optimization information", | ||
[a]=v, | |||
[f]=v, | |||
[d]={"dc6fa5d1f678",1498884278,"[Driver] Add -fdiagnostics-hotness-threshold","[Driver] Add -fdiagnostics-hotness-threshold"}, | |||
[j]={{Ec,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\";"},{Ec,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=\";"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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"} | ||
Line 4,844: | Line 4,844: | ||
}, | }, | ||
["warn_drv_diagnostics_misexpect_requires_pgo"]={ | ["warn_drv_diagnostics_misexpect_requires_pgo"]={ | ||
[ | [g]="argument \'A\' requires profile-guided optimization information [-Wunused-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={ub}, | |||
[n]=ub, | |||
[h]="argument \'%0\' requires profile-guided optimization information", | |||
[i]=m, | [i]=m, | ||
[ | [e]="argument \'(.*?)\' requires profile\\-guided optimization information", | ||
[a]=uc, | |||
[f]=v, | |||
[d]={"c5e5b54350fe",1645456106,"[CUDA] Add driver support for compiling CUDA with the new driver","[CUDA] Add driver support for compiling CUDA with the new driver"}, | |||
[j]={{Ec,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"]={ | ||
[ | [g]="implicitly disabling vptr sanitizer because rtti wasn\'t enabled [-Wauto-disable-vptr-sanitizer]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"auto-disable-vptr-sanitizer"}, | |||
[n]="auto-disable-vptr-sanitizer", | |||
[h]="implicitly disabling vptr sanitizer because rtti wasn\'t enabled", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicitly disabling vptr sanitizer because rtti wasn\'t enabled", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wauto\\-disable\\-vptr\\-sanitizer[^\\]]*\\]", | |||
[f]=v, | |||
[ | [d]={"28f353c7d0d3",1422575803,"Add some more PS4 driver settings related to rtti and exceptions.","Add some more PS4 driver settings related to rtti and exceptions."}, | ||
[j]={{yd,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"]={ | ||
[ | [g]="debug information option \'A\' is not supported; requires DWARF-B but target \'C\' only provides DWARF-D [-Wunsupported-target-opt]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"unsupported-target-opt"}, | |||
[n]="unsupported-target-opt", | |||
[h]="debug information option \'%0\' is not supported; requires DWARF-%2 but target \'%1\' only provides DWARF-%3", | |||
[i]=m, | [i]=m, | ||
[ | [e]="debug information option \'(.*?)\' is not supported; requires DWARF\\-(.*?) but target \'(.*?)\' only provides DWARF\\-(.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-target\\-opt[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"0175999805cf",1585492323,Cc,Cc}, | |||
[j]={{Y,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"]={ | ||
[ | [g]="dxv not found. Resulting DXIL will not be validated or signed for use in release environments. [-Wdxil-validation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"dxil-validation"}, | |||
[n]="dxil-validation", | |||
[h]="dxv not found. Resulting DXIL will not be validated or signed for use in release environments.", | |||
[i]=m, | [i]=m, | ||
[ | [e]="dxv not found\\. Resulting DXIL will not be validated or signed for use in release environments\\.", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdxil\\-validation[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"d5a7439e220c",1673633136,"[HLSL] [Dirver] add dxv as a VerifyDebug Job","[HLSL] [Dirver] add dxv as a VerifyDebug Job"}, | |||
[j]={{"clang/lib/Driver/ToolChains/HLSL.cpp",266,"bool HLSLToolChain::requiresValidation(DerivedArgList &Args) const {\n // ...\n getDriver().Diag(diag::warn_drv_dxc_missing_dxv);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 4,903: | Line 4,903: | ||
}, | }, | ||
["warn_drv_empty_joined_argument"]={ | ["warn_drv_empty_joined_argument"]={ | ||
[ | [g]="joined argument expects additional value: \'A\' [-Wunused-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={ub}, | |||
[n]=ub, | |||
[h]="joined argument expects additional value: \'%0\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="joined argument expects additional value\\: \'(.*?)\'", | ||
[a]=uc, | |||
[f]=v, | |||
[d]={"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"}, | |||
[j]={{Pb,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);"},{Pb,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;"},{Pb,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"]={ | ||
[ | [g]="option \'-ffine-grained-bitfield-accesses\' cannot be enabled together with a sanitizer; flag ignored [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="option \'-ffine-grained-bitfield-accesses\' cannot be enabled together with a sanitizer; flag ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="option \'\\-ffine\\-grained\\-bitfield\\-accesses\' cannot be enabled together with a sanitizer; flag ignored", | ||
[a]=v, | |||
[f]=v, | |||
[d]={"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."}, | |||
[j]={{Ec,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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"} | ||
Line 4,934: | Line 4,934: | ||
}, | }, | ||
["warn_drv_fjmc_for_elf_only"]={ | ["warn_drv_fjmc_for_elf_only"]={ | ||
[ | [g]="-fjmc works only for ELF; option ignored [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="-fjmc works only for ELF; option ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\\-fjmc works only for ELF; option ignored", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={hc,1610286626,sb,sb}, | |||
[j]={{Y,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"]={ | ||
[ | [g]="\'-fuse-ld=\' taking a path is deprecated; use \'--ld-path=\' instead [-Wfuse-ld-path]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={v,G,Jc,"fuse-ld-path"}, | |||
[n]="fuse-ld-path", | |||
[h]="\'-fuse-ld=\' taking a path is deprecated; use \'--ld-path=\' instead", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'\\-fuse\\-ld\\=\' taking a path is deprecated; use \'\\-\\-ld\\-path\\=\' instead", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfuse\\-ld\\-path[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"0175999805cf",1585492323,Cc,Cc}, | |||
[j]={{"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"]={ | ||
[ | [g]="-fglobal-isel support for the \'A\' architecture is incomplete [-Wglobal-isel]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"global-isel"}, | |||
[n]="global-isel", | |||
[h]="-fglobal-isel support for the \'%0\' architecture is incomplete", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\\-fglobal\\-isel support for the \'(.*?)\' architecture is incomplete", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wglobal\\-isel[^\\]]*\\]", | |||
[f]=v, | |||
[d]={ec,1534346725,pb,pb}, | |||
[j]={{Y,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"]={ | ||
[ | [g]="-fglobal-isel support is incomplete for this architecture at the current optimization level [-Wglobal-isel]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"global-isel"}, | |||
[n]="global-isel", | |||
[h]="-fglobal-isel support is incomplete for this architecture at the current optimization level", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\\-fglobal\\-isel support is incomplete for this architecture at the current optimization level", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wglobal\\-isel[^\\]]*\\]", | |||
[f]=v, | |||
[d]={ec,1534346725,pb,pb}, | |||
[j]={{Y,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"]={ | ||
[ | [g]="A: \'B\' input unused... [-Wunused-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={ub}, | |||
[n]=ub, | |||
[h]="%0: \'%1\' input unused%select{ when \'%3\' is present|}2", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?)\\: \'(.*?)\' input unused(?: when \'(.*?)\' is present|)", | ||
[a]=uc, | |||
[f]=v, | |||
[d]={Tb,1237025389,fb,fb}, | |||
[j]={{Pb,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) {"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,008: | Line 5,008: | ||
}, | }, | ||
["warn_drv_input_file_unused_by_cpp"]={ | ["warn_drv_input_file_unused_by_cpp"]={ | ||
[ | [g]="A: \'B\' input unused in cpp mode [-Wunused-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={ub}, | |||
[n]=ub, | |||
[h]="%0: \'%1\' input unused in cpp mode", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?)\\: \'(.*?)\' input unused in cpp mode", | ||
[a]=uc, | |||
[f]=v, | |||
[d]={"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"}, | |||
[j]={{Pb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,025: | Line 5,025: | ||
}, | }, | ||
["warn_drv_invalid_arch_name_with_suggestion"]={ | ["warn_drv_invalid_arch_name_with_suggestion"]={ | ||
[ | [g]="ignoring invalid /arch: argument \'A\'; for ...-bit expected one of B [-Wunused-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={ub}, | |||
[n]=ub, | |||
[h]="ignoring invalid /arch: argument \'%0\'; for %select{64|32}1-bit expected one of %2", | |||
[i]=m, | [i]=m, | ||
[ | [e]="ignoring invalid \\/arch\\: argument \'(.*?)\'; for (?:64|32)\\-bit expected one of (.*?)", | ||
[a]=uc, | |||
[f]=v, | |||
[d]={hc,1610286626,sb,sb}, | |||
[j]={{"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"]={ | ||
[ | [g]="A requires debug info. Use B or debug options that enable debugger\'s stepping function; option ignored [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="%0 requires debug info. Use %1 or debug options that enable debugger\'s stepping function; option ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) requires debug info\\. Use (.*?) or debug options that enable debugger\'s stepping function; option ignored", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={hc,1610286626,sb,sb}, | |||
[j]={{Y,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\""},{Y,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"]={ | ||
[ | [g]="include path for libstdc++ headers not found; pass \'-stdlib=libc++\' on the command line to use the libc++ standard library instead [-Wstdlibcxx-not-found]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"stdlibcxx-not-found"}, | |||
[n]="stdlibcxx-not-found", | |||
[h]="include path for libstdc++ headers not found; pass \'-stdlib=libc++\' on the command line to use the libc++ standard library instead", | |||
[i]=m, | [i]=m, | ||
[ | [e]="include path for libstdc\\+\\+ headers not found; pass \'\\-stdlib\\=libc\\+\\+\' on the command line to use the libc\\+\\+ standard library instead", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wstdlibcxx\\-not\\-found[^\\]]*\\]", | |||
[f]=v, | |||
[d]={ec,1534346725,pb,pb}, | |||
[j]={{fd,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"]={ | ||
[ | [g]="ignoring \'A\' as it conflicts with that implied by \'B\' (C) [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="ignoring \'%0\' as it conflicts with that implied by \'%1\' (%2)", | |||
[i]=m, | [i]=m, | ||
[ | [e]="ignoring \'(.*?)\' as it conflicts with that implied by \'(.*?)\' \\((.*?)\\)", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={"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"}, | |||
[j]={{"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"]={ | ||
[ | [g]="no multilib found matching flags: A [-Wmissing-multilib]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"missing-multilib"}, | |||
[n]="missing-multilib", | |||
[h]="no multilib found matching flags: %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="no multilib found matching flags\\: (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-multilib[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"dc8cbbd55f80",1688026032,"[Clang][Driver] Change missing multilib error to warning","[Clang][Driver] Change missing multilib error to warning"}, | |||
[j]={{"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"]={ | ||
[ | [g]="missing plugin argument for plugin A in B [-Winvalid-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Fb}, | |||
[n]=Fb, | |||
[h]="missing plugin argument for plugin %0 in %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="missing plugin argument for plugin (.*?) in (.*?)", | ||
[a]=Vc, | |||
[f]=v, | |||
[d]={hc,1610286626,sb,sb}, | |||
[j]={{Y,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"]={ | ||
[ | [g]="missing plugin name in A [-Winvalid-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Fb}, | |||
[n]=Fb, | |||
[h]="missing plugin name in %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="missing plugin name in (.*?)", | ||
[a]=Vc, | |||
[f]=v, | |||
[d]={hc,1610286626,sb,sb}, | |||
[j]={{Y,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"]={ | ||
[ | [g]="\'A\' does not support \'-B\'; flag ignored [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="\'%0\' does not support \'-%1\'; flag ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' does not support \'\\-(.*?)\'; flag ignored", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={"0175999805cf",1585492323,Cc,Cc}, | |||
[j]={{Y,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"]={ | ||
[ | [g]="\'A\' does not support \'-moutline\'; flag ignored [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="\'%0\' does not support \'-moutline\'; flag ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' does not support \'\\-moutline\'; flag ignored", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={"a67abc83b733",1530050988,"[MachineOutliner] Emit a warning when using -moutline on unsupported targets","[MachineOutliner] Emit a warning when using -moutline on unsupported targets"}, | |||
[j]={{"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"]={ | ||
[ | [g]="the given MCU supports A hardware multiply, but \'-mhwmult\' is set to B [-Winvalid-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Fb}, | |||
[n]=Fb, | |||
[h]="the given MCU supports %0 hardware multiply, but \'-mhwmult\' is set to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="the given MCU supports (.*?) hardware multiply, but \'\\-mhwmult\' is set to (.*?)", | ||
[a]=Vc, | |||
[f]=v, | |||
[d]={ec,1534346725,pb,pb}, | |||
[j]={{"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"]={ | ||
[ | [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 [-Winvalid-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Fb}, | |||
[n]=Fb, | |||
[h]="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]=m, | [i]=m, | ||
[ | [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", | ||
[a]=Vc, | |||
[f]=v, | |||
[d]={ec,1534346725,pb,pb}, | |||
[j]={{"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"]={ | ||
[ | [g]="the given MCU does not support hardware multiply, but \'-mhwmult\' is set to A [-Winvalid-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Fb}, | |||
[n]=Fb, | |||
[h]="the given MCU does not support hardware multiply, but \'-mhwmult\' is set to %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="the given MCU does not support hardware multiply, but \'\\-mhwmult\' is set to (.*?)", | ||
[a]=Vc, | |||
[f]=v, | |||
[d]={ec,1534346725,pb,pb}, | |||
[j]={{"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"]={ | ||
[ | [g]="unable to find a Visual Studio installation; try running Clang from a developer command prompt [-Wmsvc-not-found]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"msvc-not-found"}, | |||
[n]="msvc-not-found", | |||
[h]="unable to find a Visual Studio installation; try running Clang from a developer command prompt", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unable to find a Visual Studio installation; try running Clang from a developer command prompt", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmsvc\\-not\\-found[^\\]]*\\]", | |||
[f]=v, | |||
[ | [d]={"f6302523490c",1489594055,"Update clang-cl driver for MSVC 2017.","Update clang-cl driver for MSVC 2017."}, | ||
[j]={{"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"]={ | ||
[ | [g]="multiple A architectures are detected: B; only the first one is used for \'C\' [-Wmulti-gpu]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"multi-gpu"}, | |||
[n]="multi-gpu", | |||
[h]="multiple %0 architectures are detected: %1; only the first one is used for \'%2\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="multiple (.*?) architectures are detected\\: (.*?); only the first one is used for \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmulti\\-gpu[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"91b9bdeb9256",1688572615,"[AMDGPU] Support -mcpu=native for OpenCL","[AMDGPU] Support -mcpu=native for OpenCL"}, | |||
[j]={{"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"]={ | ||
[ | [g]="A requires HVX, use -mhvx/-mhvx= to enable it [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="%0 requires HVX, use -mhvx/-mhvx= to enable it", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) requires HVX, use \\-mhvx\\/\\-mhvx\\= to enable it", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={hc,1610286626,sb,sb}, | |||
[j]={{"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"]={ | ||
[ | [g]="CUDA versionA is newer than the latest... supported version B [-Wunknown-cuda-version]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"unknown-cuda-version"}, | |||
[n]="unknown-cuda-version", | |||
[h]="CUDA version%0 is newer than the latest%select{| partially}1 supported version %2", | |||
[i]=m, | [i]=m, | ||
[ | [e]="CUDA version(.*?) is newer than the latest(?:| partially) supported version (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-cuda\\-version[^\\]]*\\]", | |||
[f]=v, | |||
[d]={hc,1610286626,sb,sb}, | |||
[j]={{"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"]={ | ||
[ | [g]="\'A\': selected processor lacks floating point registers [-Wunsupported-abi]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"unsupported-abi"}, | |||
[n]="unsupported-abi", | |||
[h]="\'%0\': selected processor lacks floating point registers", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\'\\: selected processor lacks floating point registers", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-abi[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"1d511e1864f1",1684763280,"[ARM][Driver] Warn if -mhard-float is incompatible","[ARM][Driver] Warn if -mhard-float is incompatible"}, | |||
[j]={{Id,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,266: | Line 5,266: | ||
}, | }, | ||
["warn_drv_object_size_disabled_O0"]={ | ["warn_drv_object_size_disabled_O0"]={ | ||
[ | [g]="the object size sanitizer has no effect at -O0, but is explicitly enabled: A [-Winvalid-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Fb}, | |||
[n]=Fb, | |||
[h]="the object size sanitizer has no effect at -O0, but is explicitly enabled: %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="the object size sanitizer has no effect at \\-O0, but is explicitly enabled\\: (.*?)", | ||
[a]=Vc, | |||
[f]=v, | |||
[d]={"7aacb659dad5",1498259724,"[ubsan] Disable the object size check at -O0","[ubsan] Disable the object size check at -O0"}, | |||
[j]={{yd,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"]={ | ||
[ | [g]="OpenMP offloading target \'A\' is similar to target \'B\' already specified; will be ignored [-Wopenmp-target]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"openmp","openmp-target"}, | |||
[n]="openmp-target", | |||
[h]="OpenMP offloading target \'%0\' is similar to target \'%1\' already specified; will be ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="OpenMP offloading target \'(.*?)\' is similar to target \'(.*?)\' already specified; will be ignored", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wopenmp\\-target[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"39f9da2a8752",1477586285,"[Driver][OpenMP] Create tool chains for OpenMP offloading kind.","[Driver][OpenMP] Create tool chains for OpenMP offloading kind."}, | |||
[j]={{Pb,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"]={ | ||
[ | [g]="optimization level \'A\' is not supported; using \'BC\' instead [-Winvalid-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Fb}, | |||
[n]=Fb, | |||
[h]="optimization level \'%0\' is not supported; using \'%1%2\' instead", | |||
[i]=m, | [i]=m, | ||
[ | [e]="optimization level \'(.*?)\' is not supported; using \'(.*?)(.*?)\' instead", | ||
[a]=v, | |||
[f]=v, | |||
[d]={"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"}, | |||
[j]={{Ec,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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"} | ||
Line 5,311: | Line 5,311: | ||
}, | }, | ||
["warn_drv_overriding_flag_option"]={ | ["warn_drv_overriding_flag_option"]={ | ||
[ | [g]="overriding \'A\' option with \'B\' [-Woverriding-t-option]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"overriding-t-option"}, | |||
[n]="overriding-t-option", | |||
[h]="overriding \'%0\' option with \'%1\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="overriding \'(.*?)\' option with \'(.*?)\'", | ||
[ | [a]=" \\[(?:\\-Werror,)?\\-Woverriding\\-t\\-option[^\\]]*\\]", | ||
[f]=v, | |||
[ | [d]={"d9ad0681fad9",1378917521,"clang-cl: Warn about overriding /MD with /MT etc.","clang-cl: Warn about overriding /MD with /MT etc."}, | ||
[ | [j]={{Pb,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();"},{Y,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\";"},{Y,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);"},{Y,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\";"},{Y,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\";"},{Y,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);"},{Y,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;"},{Y,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);"},{fd,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;"}}, | ||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,328: | Line 5,328: | ||
}, | }, | ||
["warn_drv_partially_supported_cuda_version"]={ | ["warn_drv_partially_supported_cuda_version"]={ | ||
[ | [g]="CUDA version A is only partially supported [-Wunknown-cuda-version]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"unknown-cuda-version"}, | |||
[n]="unknown-cuda-version", | |||
[h]="CUDA version %0 is only partially supported", | |||
[i]=m, | [i]=m, | ||
[ | [e]="CUDA version (.*?) is only partially supported", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-cuda\\-version[^\\]]*\\]", | |||
[f]=v, | |||
[d]={hc,1610286626,sb,sb}, | |||
[j]={{"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"]={ | ||
[ | [g]="precompiled header \'A\' was ignored because \'B\' is not first \'-include\'", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="precompiled header \'%0\' was ignored because \'%1\' is not first \'-include\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="precompiled header \'(.*?)\' was ignored because \'(.*?)\' is not first \'\\-include\'", | ||
[a]=Ib, | |||
[f]=v, | |||
[ | [d]={"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."}, | ||
[ | [j]={{Y,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"]={ | ||
[ | [g]="joined argument treated as \'A\'; did you mean \'B\'? [-Wunknown-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={wd}, | |||
[n]=wd, | |||
[h]="joined argument treated as \'%0\'; did you mean \'%1\'?", | |||
[i]=m, | [i]=m, | ||
[ | [e]="joined argument treated as \'(.*?)\'; did you mean \'(.*?)\'\\?", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-argument[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"5aba68960719",1665085845,"[Clang] Emit a warning for ambiguous joined \'-o\' arguments","[Clang] Emit a warning for ambiguous joined \'-o\' arguments"}, | |||
[j]={{Pb,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"]={ | ||
[ | [g]="A: previously preprocessed input... [-Wunused-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={ub}, | |||
[n]=ub, | |||
[h]="%0: previously preprocessed input%select{ unused when \'%2\' is present|}1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?)\\: previously preprocessed input(?: unused when \'(.*?)\' is present|)", | ||
[a]=uc, | |||
[f]=v, | |||
[d]={"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"}, | |||
[j]={{Pb,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"]={ | ||
[ | [g]="option \'A\' was ignored by the B toolchain, using \'-fPIC\' [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="option \'%0\' was ignored by the %1 toolchain, using \'-fPIC\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="option \'(.*?)\' was ignored by the (.*?) toolchain, using \'\\-fPIC\'", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={"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"}, | |||
[j]={{"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"]={ | ||
[ | [g]="diagnostic formatting in SARIF mode is currently unstable [-Wsarif-format-unstable]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"sarif-format-unstable"}, | |||
[n]="sarif-format-unstable", | |||
[h]="diagnostic formatting in SARIF mode is currently unstable", | |||
[i]=m, | [i]=m, | ||
[ | [e]="diagnostic formatting in SARIF mode is currently unstable", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wsarif\\-format\\-unstable[^\\]]*\\]", | |||
[f]=v, | |||
[ | [d]={"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"}, | ||
[j]={{Y,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,413: | Line 5,413: | ||
}, | }, | ||
["warn_drv_treating_input_as_cxx"]={ | ["warn_drv_treating_input_as_cxx"]={ | ||
[ | [g]="treating \'A\' input as \'B\' when in C++ mode, this behavior is deprecated [-Wdeprecated]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb}, | |||
[n]=gb, | |||
[h]="treating \'%0\' input as \'%1\' when in C++ mode, this behavior is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="treating \'(.*?)\' input as \'(.*?)\' when in C\\+\\+ mode, this behavior is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"0ac9445098f7",1266438778,"PR5803: clang++: Treat untyped \'C\' inputs as C++.","PR5803: clang++: Treat untyped \'C\' inputs as C++."}, | |||
[j]={{Pb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,430: | Line 5,430: | ||
}, | }, | ||
["warn_drv_unable_to_find_directory_expected"]={ | ["warn_drv_unable_to_find_directory_expected"]={ | ||
[ | [g]="unable to find A directory, expected to be in \'B\' found via C [-Winvalid-or-nonexistent-directory]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"invalid-or-nonexistent-directory"}, | |||
[n]="invalid-or-nonexistent-directory", | |||
[h]="unable to find %0 directory, expected to be in \'%1\' found via %2", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unable to find (.*?) directory, expected to be in \'(.*?)\' found via (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-or\\-nonexistent\\-directory[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"c52c30a78e7c",1443132412,"This patch adds missing pieces to clang, including the PS4 toolchain","This patch adds missing pieces to clang, including the PS4 toolchain"}, | |||
[j]={{"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"]={ | ||
[ | [g]="unknown argument ignored in clang-cl: \'A\' [-Wunknown-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={wd}, | |||
[n]=wd, | |||
[h]="unknown argument ignored in clang-cl: \'%0\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unknown argument ignored in clang\\-cl\\: \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-argument[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"d851833c9a76",1453756492,"[MSVC Compat] Only warn for unknown clang-cl arguments","[MSVC Compat] Only warn for unknown clang-cl arguments"}, | |||
[j]={{Pb,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"]={ | ||
[ | [g]="unknown argument ignored in clang-cl \'A\'; did you mean \'B\'? [-Wunknown-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={wd}, | |||
[n]=wd, | |||
[h]="unknown argument ignored in clang-cl \'%0\'; did you mean \'%1\'?", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unknown argument ignored in clang\\-cl \'(.*?)\'; did you mean \'(.*?)\'\\?", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-argument[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"24910765e266",1515198340,"[Driver] Suggest correctly spelled driver options","[Driver] Suggest correctly spelled driver options"}, | |||
[j]={{Pb,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"]={ | ||
[ | [g]="debug information option \'A\' is not supported for target \'B\' [-Wunsupported-target-opt]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"unsupported-target-opt"}, | |||
[n]="unsupported-target-opt", | |||
[h]="debug information option \'%0\' is not supported for target \'%1\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="debug information option \'(.*?)\' is not supported for target \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-target\\-opt[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"b83b4e40fe43",1532720714,"[DEBUGINFO] Disable unsupported debug info options for NVPTX target.","[DEBUGINFO] Disable unsupported debug info options for NVPTX target."}, | |||
[j]={{Y,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"]={ | ||
[ | [g]="The warning option \'-A\' is not supported [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="The warning option \'-%0\' is not supported", | |||
[i]=m, | [i]=m, | ||
[ | [e]="The warning option \'\\-(.*?)\' is not supported", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={"ce3a1c59e180",1677017374,"[flang] Handle unsupported warning flags","[flang] Handle unsupported warning flags"}, | |||
[j]={{"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"]={ | ||
[ | [g]="float ABI \'A\' is not supported by current library [-Wunsupported-abi]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"unsupported-abi"}, | |||
[n]="unsupported-abi", | |||
[h]="float ABI \'%0\' is not supported by current library", | |||
[i]=m, | [i]=m, | ||
[ | [e]="float ABI \'(.*?)\' is not supported by current library", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-abi[^\\]]*\\]", | |||
[f]=v, | |||
[d]={hc,1610286626,sb,sb}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,518: | Line 5,518: | ||
}, | }, | ||
["warn_drv_unsupported_gpopt"]={ | ["warn_drv_unsupported_gpopt"]={ | ||
[ | [g]="ignoring \'-mgpopt\' option as it cannot be used with ...-mabicalls [-Wunsupported-gpopt]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"unsupported-gpopt"}, | |||
[n]="unsupported-gpopt", | |||
[h]="ignoring \'-mgpopt\' option as it cannot be used with %select{|the implicit usage of }0-mabicalls", | |||
[i]=m, | [i]=m, | ||
[ | [e]="ignoring \'\\-mgpopt\' option as it cannot be used with (?:|the implicit usage of )\\-mabicalls", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-gpopt[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"e435e41e01b6",1500460683,"[mips] Teach the driver to accept -m(no-)gpopt.","[mips] Teach the driver to accept -m(no-)gpopt."}, | |||
[j]={{Y,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"]={ | ||
[ | [g]="ignoring \'-mlong-calls\' option as it is not currently supported with ...-mabicalls [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="ignoring \'-mlong-calls\' option as it is not currently supported with %select{|the implicit usage of }0-mabicalls", | |||
[i]=m, | [i]=m, | ||
[ | [e]="ignoring \'\\-mlong\\-calls\' option as it is not currently supported with (?:|the implicit usage of )\\-mabicalls", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={"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"}, | |||
[j]={{"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"]={ | ||
[ | [g]="optimization flag \'A\' is not supported for target \'B\' [-Wignored-optimization-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"ignored-optimization-argument",Fb}, | |||
[n]="ignored-optimization-argument", | |||
[h]="optimization flag \'%0\' is not supported for target \'%1\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="optimization flag \'(.*?)\' is not supported for target \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wignored\\-optimization\\-argument[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"c0f6c9b8c16d",1471975978,"ARM-Darwin: ignore and diagnose attempts to omit frame pointer.","ARM-Darwin: ignore and diagnose attempts to omit frame pointer."}, | |||
[j]={{"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;"},{fd,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"]={ | ||
[ | [g]="the argument \'A\' is not supported for option \'B\'. Mapping to \'CD\' [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="the argument \'%0\' is not supported for option \'%1\'. Mapping to \'%1%2\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="the argument \'(.*?)\' is not supported for option \'(.*?)\'\\. Mapping to \'(.*?)(.*?)\'", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={"1f67dc8b7c22",1666243490,"[Driver] Enable nested configuration files","[Driver] Enable nested configuration files"}, | |||
[j]={{"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"]={ | ||
[ | [g]="ignoring \'A\' option for offload arch \'B\' as it is not currently supported there. Use it with an offload arch containing \'C\' instead [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="ignoring \'%0\' option for offload arch \'%1\' as it is not currently supported there. Use it with an offload arch containing \'%2\' instead", | |||
[i]=m, | [i]=m, | ||
[ | [e]="ignoring \'(.*?)\' option for offload arch \'(.*?)\' as it is not currently supported there\\. Use it with an offload arch containing \'(.*?)\' instead", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={hc,1610286626,sb,sb}, | |||
[j]={{"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"]={ | ||
[ | [g]="ignoring \'A\' option as it is not currently supported for processor \'B\' [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="ignoring \'%0\' option as it is not currently supported for processor \'%1\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="ignoring \'(.*?)\' option as it is not currently supported for processor \'(.*?)\'", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={"6adb9a0602bc",1678065956,"[AMDGPU] Emit predefined macro `__AMDGCN_CUMODE__`","[AMDGPU] Emit predefined macro `__AMDGCN_CUMODE__`"}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,605: | Line 5,605: | ||
}, | }, | ||
["warn_drv_unsupported_option_for_target"]={ | ["warn_drv_unsupported_option_for_target"]={ | ||
[ | [g]="ignoring \'A\' option as it is not currently supported for target \'B\' [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="ignoring \'%0\' option as it is not currently supported for target \'%1\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="ignoring \'(.*?)\' option as it is not currently supported for target \'(.*?)\'", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={hc,1610286626,sb,sb}, | |||
[j]={{Y,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,622: | Line 5,622: | ||
}, | }, | ||
["warn_drv_unsupported_pic_with_mabicalls"]={ | ["warn_drv_unsupported_pic_with_mabicalls"]={ | ||
[ | [g]="ignoring \'A\' option as it cannot be used with ... -mabicalls and the N64 ABI [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="ignoring \'%0\' option as it cannot be used with %select{implicit usage of|}1 -mabicalls and the N64 ABI", | |||
[i]=m, | [i]=m, | ||
[ | [e]="ignoring \'(.*?)\' option as it cannot be used with (?:implicit usage of|) \\-mabicalls and the N64 ABI", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={"f9b3fc5e2bc7",1525702794,"[mips] Improve handling of -fno-[pic/PIC] option","[mips] Improve handling of -fno-[pic/PIC] option"}, | |||
[j]={{"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"]={ | ||
[ | [g]="ignoring \'-msmall-data-limit=\' with -mcmodel=large for -fpic or RV64 [-Woption-ignored]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={bb}, | |||
[n]=bb, | |||
[h]="ignoring \'-msmall-data-limit=\' with -mcmodel=large for -fpic or RV64", | |||
[i]=m, | [i]=m, | ||
[ | [e]="ignoring \'\\-msmall\\-data\\-limit\\=\' with \\-mcmodel\\=large for \\-fpic or RV64", | ||
[a]=Ub, | |||
[f]=v, | |||
[d]={ec,1534346725,pb,pb}, | |||
[j]={{Y,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);"},{Y,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);"},{Y,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,653: | Line 5,653: | ||
}, | }, | ||
["warn_drv_unused_argument"]={ | ["warn_drv_unused_argument"]={ | ||
[ | [g]="argument unused during compilation: \'A\' [-Wunused-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={ub}, | |||
[n]=ub, | |||
[h]="argument unused during compilation: \'%0\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="argument unused during compilation\\: \'(.*?)\'", | ||
[a]=uc, | |||
[f]=v, | |||
[d]={"1889b6e21958",1237113751,"Keep diagnostic td in sync with r67015.","Keep diagnostic td in sync with r67015."}, | |||
[j]={{Pb,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());"},{Id,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);"},{Id,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);"},{Id,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);"},{Id,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);"},{Y,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);"},{Y,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,670: | Line 5,670: | ||
}, | }, | ||
["warn_drv_unused_x"]={ | ["warn_drv_unused_x"]={ | ||
[ | [g]="\'-x A\' after last input file has no effect [-Wunused-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={ub}, | |||
[n]=ub, | |||
[h]="\'-x %0\' after last input file has no effect", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'\\-x (.*?)\' after last input file has no effect", | ||
[a]=uc, | |||
[f]=v, | |||
[d]={hc,1610286626,sb,sb}, | |||
[j]={{Pb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,687: | Line 5,687: | ||
}, | }, | ||
["warn_drv_yc_multiple_inputs_clang_cl"]={ | ["warn_drv_yc_multiple_inputs_clang_cl"]={ | ||
[ | [g]="support for \'/Yc\' with more than one source file not implemented yet; flag ignored [-Wclang-cl-pch]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"clang-cl-pch"}, | |||
[n]="clang-cl-pch", | |||
[h]="support for \'/Yc\' with more than one source file not implemented yet; flag ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="support for \'\\/Yc\' with more than one source file not implemented yet; flag ignored", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wclang\\-cl\\-pch[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"2ca4be97de0f",1456874204,"clang-cl: Implement initial limited support for precompiled headers.","clang-cl: Implement initial limited support for precompiled headers."}, | |||
[j]={{Pb,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"]={ | ||
[ | [g]="support for \'/Yc\' and \'/Yu\' with different filenames not implemented yet; flags ignored [-Wclang-cl-pch]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"clang-cl-pch"}, | |||
[n]="clang-cl-pch", | |||
[h]="support for \'/Yc\' and \'/Yu\' with different filenames not implemented yet; flags ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="support for \'\\/Yc\' and \'\\/Yu\' with different filenames not implemented yet; flags ignored", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wclang\\-cl\\-pch[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"2ca4be97de0f",1456874204,"clang-cl: Implement initial limited support for precompiled headers.","clang-cl: Implement initial limited support for precompiled headers."}, | |||
[j]={{Pb,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"]={ | ||
[ | [g]="duplicate definition of category A on interface B [-Wobjc-duplicate-category-definition]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"objc-duplicate-category-definition"}, | |||
[n]="objc-duplicate-category-definition", | |||
[h]="duplicate definition of category %1 on interface %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="duplicate definition of category (.*?) on interface (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-duplicate\\-category\\-definition[^\\]]*\\]", | |||
[f]=v, | |||
[d]={ud,1236199783,md,xd}, | |||
[j]={{xc,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,732: | Line 5,732: | ||
}, | }, | ||
["warn_duplicate_attribute"]={ | ["warn_duplicate_attribute"]={ | ||
[ | [g]="attribute A is already applied with different arguments [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="attribute %0 is already applied with different arguments", | |||
[i]=m, | [i]=m, | ||
[ | [e]="attribute (.*?) is already applied with different arguments", | ||
[a]=xb, | |||
[f]=r, | |||
[d]={"bcffcdfd18fd",1341871561,"Patch by Anton Lokhmotov to add OpenCL work group size attributes.","Patch by Anton Lokhmotov to add OpenCL work group size attributes."}, | |||
[j]={{J,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;"},{J,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;"},{J,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;"},{J,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;"},{J,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;"},{J,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,749: | Line 5,749: | ||
}, | }, | ||
["warn_duplicate_attribute_exact"]={ | ["warn_duplicate_attribute_exact"]={ | ||
[ | [g]="attribute A is already applied [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="attribute %0 is already applied", | |||
[i]=m, | [i]=m, | ||
[ | [e]="attribute (.*?) is already applied", | ||
[a]=xb, | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,766: | Line 5,766: | ||
}, | }, | ||
["warn_duplicate_codeseg_attribute"]={ | ["warn_duplicate_codeseg_attribute"]={ | ||
[ | [g]="duplicate code segment specifiers [-Wsection]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"section"}, | |||
[n]="section", | |||
[h]="duplicate code segment specifiers", | |||
[i]=m, | [i]=m, | ||
[ | [e]="duplicate code segment specifiers", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wsection[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))","Add support for __declspec(code_seg(\"segname\"))"}, | ||
[j]={{J,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,783: | Line 5,783: | ||
}, | }, | ||
["warn_duplicate_declspec"]={ | ["warn_duplicate_declspec"]={ | ||
[ | [g]="duplicate \'A\' declaration specifier [-Wduplicate-decl-specifier]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"duplicate-decl-specifier"}, | |||
[n]="duplicate-decl-specifier", | |||
[h]="duplicate \'%0\' declaration specifier", | |||
[i]=m, | [i]=m, | ||
[ | [e]="duplicate \'(.*?)\' declaration specifier", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-decl\\-specifier[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"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."}, | |||
[j]={{mc,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;"},{mc,861,"bool DeclSpec::SetTypeSpecSat(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n // Cannot set twice\n if (TypeSpecSat) {\n DiagID = diag::warn_duplicate_declspec;"},{mc,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;"},{mc,1013,"bool DeclSpec::setFunctionSpecForceInline(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n if (FS_forceinline_specified) {\n DiagID = diag::warn_duplicate_declspec;"},{mc,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;"},{mc,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;"},{mc,1080,"bool DeclSpec::SetFriendSpec(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n if (Friend_specified) {\n // ...\n DiagID = diag::warn_duplicate_declspec;"},{J,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();"}} | |||
[ | |||
[ | |||
[ | |||
[ | |||
}, | }, | ||
["warn_duplicate_enum_values"]={ | ["warn_duplicate_enum_values"]={ | ||
[ | [g]="element A has been implicitly assigned B which another element has been assigned [-Wduplicate-enum]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"duplicate-enum"}, | |||
[n]="duplicate-enum", | |||
[h]="element %0 has been implicitly assigned %1 which another element has been assigned", | |||
[i]=m, | [i]=m, | ||
[ | [e]="element (.*?) has been implicitly assigned (.*?) which another element has been assigned", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-enum[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{I,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()))"},{I,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,815: | Line 5,815: | ||
}, | }, | ||
["warn_duplicate_method_decl"]={ | ["warn_duplicate_method_decl"]={ | ||
[ | [g]="multiple declarations of method A found and ignored [-Wduplicate-method-match]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"duplicate-method-match"}, | |||
[n]="duplicate-method-match", | |||
[h]="multiple declarations of method %0 found and ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="multiple declarations of method (.*?) found and ignored", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-method\\-match[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"c17c86b56ca6",1323805234,"objc: diagnose duplicate declaration of methods","objc: diagnose duplicate declaration of methods"}, | |||
[j]={{xc,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();"},{xc,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,833: | Line 5,833: | ||
}, | }, | ||
["warn_duplicate_module_file_extension"]={ | ["warn_duplicate_module_file_extension"]={ | ||
[ | [g]="duplicate module file extension block name \'A\' [-Wmodule-file-extension]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"module-file-extension"}, | |||
[n]="module-file-extension", | |||
[h]="duplicate module file extension block name \'%0\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="duplicate module file extension block name \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmodule\\-file\\-extension[^\\]]*\\]", | |||
[f]="AST Deserialization Issue", | |||
[d]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files.","Introduce module file extensions to piggy-back data onto module files."}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,850: | Line 5,850: | ||
}, | }, | ||
["warn_duplicate_protocol_def"]={ | ["warn_duplicate_protocol_def"]={ | ||
[ | [g]="duplicate protocol definition of A is ignored [-Wduplicate-protocol]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"duplicate-protocol"}, | |||
[n]="duplicate-protocol", | |||
[h]="duplicate protocol definition of %0 is ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="duplicate protocol definition of (.*?) is ignored", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-protocol[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"54d569c51d23",1239061412,"Warn instead of error on duplicate protocol definitions.","Warn instead of error on duplicate protocol definitions."}, | |||
[j]={{xc,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,867: | Line 5,867: | ||
}, | }, | ||
["warn_dyn_class_memaccess"]={ | ["warn_dyn_class_memaccess"]={ | ||
[ | [g]="... this A call is a pointer to ...dynamic class B; vtable pointer will be ... [-Wdynamic-class-memaccess]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"dynamic-class-memaccess","suspicious-memaccess"}, | |||
[n]="dynamic-class-memaccess", | |||
[h]="%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", | |||
[i]=m, | [i]=m, | ||
[ | [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)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdynamic\\-class\\-memaccess[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"3bb2a8153910",1304455053,"Extend -Wnon-pod-memset to also encompass memcpy() and memmove(),","Extend -Wnon-pod-memset to also encompass memcpy() and memmove(),"}, | |||
[j]={{x,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());"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,884: | Line 5,884: | ||
}, | }, | ||
["warn_eagerly_load_for_standard_cplusplus_modules"]={ | ["warn_eagerly_load_for_standard_cplusplus_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 [-Weager-load-cxx-named-modules]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"eager-load-cxx-named-modules"}, | |||
[n]="eager-load-cxx-named-modules", | |||
[h]="the form \'-fmodule-file=<BMI-path>\' is deprecated for standard C++ named modules;consider to use \'-fmodule-file=<module-name>=<BMI-path>\' instead", | |||
[i]=m, | [i]=m, | ||
[ | [e]="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[^\\]]*\\]", | |||
[f]="AST Deserialization Issue", | |||
[d]={"ba6e747f9b05",1670524276,"[clang] Set ShowInSystemHeader for module-build and module-import remarks","[clang] Set ShowInSystemHeader for module-build and module-import remarks"}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,901: | Line 5,901: | ||
}, | }, | ||
["warn_empty_for_body"]={ | ["warn_empty_for_body"]={ | ||
[ | [g]="for loop has empty body [-Wempty-body]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Ac}, | |||
[n]=Ac, | |||
[h]="for loop has empty body", | |||
[i]=m, | [i]=m, | ||
[ | [e]="for loop has empty body", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"800ddf3dda7b",1329257672,Pc,Pc}, | ||
[j]={{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,918: | Line 5,918: | ||
}, | }, | ||
["warn_empty_format_string"]={ | ["warn_empty_format_string"]={ | ||
[ | [g]="format string is empty [-Wformat-zero-length]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,rb,"format-zero-length",S}, | |||
[n]="format-zero-length", | |||
[h]="format string is empty", | |||
[i]=m, | [i]=m, | ||
[ | [e]="format string is empty", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-zero\\-length[^\\]]*\\]", | |||
[f]=Xb, | |||
[ | [d]={cd,1279246282,Sb,Sb}, | ||
[j]={{x,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(),"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,935: | Line 5,935: | ||
}, | }, | ||
["warn_empty_if_body"]={ | ["warn_empty_if_body"]={ | ||
[ | [g]="if statement has empty body [-Wempty-body]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Ac}, | |||
[n]=Ac, | |||
[h]="if statement has empty body", | |||
[i]=m, | [i]=m, | ||
[ | [e]="if statement has empty body", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={Tb,1237025389,fb,fb}, | ||
[j]={{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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,952: | Line 5,952: | ||
}, | }, | ||
["warn_empty_init_statement"]={ | ["warn_empty_init_statement"]={ | ||
[ | [g]="empty initialization statement of \'...\' has no effect [-Wempty-init-stmt]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={v,G,"empty-init-stmt",Jc,"extra-semi-stmt"}, | |||
[n]="empty-init-stmt", | |||
[h]="empty initialization statement of \'%select{if|switch|range-based for}0\' has no effect", | |||
[i]=m, | [i]=m, | ||
[ | [e]="empty initialization statement of \'(?:if|switch|range\\-based for)\' has no effect", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wempty\\-init\\-stmt[^\\]]*\\]", | |||
[ | [f]=B, | ||
[d]={"377748fd7bbf",1542740345,"[clang][Parse] Diagnose useless null statements / empty init-statements","[clang][Parse] Diagnose useless null statements / empty init-statements"}, | |||
[ | [j]={{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);"},{gc,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);"}}, | ||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,970: | Line 5,970: | ||
}, | }, | ||
["warn_empty_parens_are_function_decl"]={ | ["warn_empty_parens_are_function_decl"]={ | ||
[ | [g]="empty parentheses interpreted as a function declaration [-Wvexing-parse]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"vexing-parse"}, | |||
[n]="vexing-parse", | |||
[h]="empty parentheses interpreted as a function declaration", | |||
[i]=m, | [i]=m, | ||
[ | [e]="empty parentheses interpreted as a function declaration", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wvexing\\-parse[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"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"}, | ||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 5,987: | Line 5,987: | ||
}, | }, | ||
["warn_empty_range_based_for_body"]={ | ["warn_empty_range_based_for_body"]={ | ||
[ | [g]="range-based for loop has empty body [-Wempty-body]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Ac}, | |||
[n]=Ac, | |||
[h]="range-based for loop has empty body", | |||
[i]=m, | [i]=m, | ||
[ | [e]="range\\-based for loop has empty body", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"800ddf3dda7b",1329257672,Pc,Pc}, | |||
[j]={{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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,004: | Line 6,004: | ||
}, | }, | ||
["warn_empty_switch_body"]={ | ["warn_empty_switch_body"]={ | ||
[ | [g]="switch statement has empty body [-Wempty-body]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Ac}, | |||
[n]=Ac, | |||
[h]="switch statement has empty body", | |||
[i]=m, | [i]=m, | ||
[ | [e]="switch statement has empty body", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"800ddf3dda7b",1329257672,Pc,Pc}, | ||
[j]={{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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,021: | Line 6,021: | ||
}, | }, | ||
["warn_empty_while_body"]={ | ["warn_empty_while_body"]={ | ||
[ | [g]="while loop has empty body [-Wempty-body]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Ac}, | |||
[n]=Ac, | |||
[h]="while loop has empty body", | |||
[i]=m, | [i]=m, | ||
[ | [e]="while loop has empty body", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wempty\\-body[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"800ddf3dda7b",1329257672,Pc,Pc}, | ||
[j]={{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,038: | Line 6,038: | ||
}, | }, | ||
["warn_enum_constant_in_bool_context"]={ | ["warn_enum_constant_in_bool_context"]={ | ||
[ | [g]="converting the enum constant to a boolean [-Wint-in-bool-context]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={G,M,"int-in-bool-context",S}, | |||
[n]="int-in-bool-context", | |||
[h]="converting the enum constant to a boolean", | |||
[i]=m, | [i]=m, | ||
[ | [e]="converting the enum constant to a boolean", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wint\\-in\\-bool\\-context[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Ab,1567434909,N,N}, | |||
[ | [j]={{P,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);"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,056: | Line 6,056: | ||
}, | }, | ||
["warn_enum_value_overflow"]={ | ["warn_enum_value_overflow"]={ | ||
[ | [g]="overflow in enumeration value", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="overflow in enumeration value", | |||
[i]=m, | [i]=m, | ||
[ | [e]="overflow in enumeration value", | ||
[ | [a]=Ib, | ||
[f]= | [f]=r, | ||
[d]={ud,1236199783,md,xd}, | |||
[d | [j]={{I,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"]={ | ||
[ | [g]="equality comparison with extraneous parentheses [-Wparentheses-equality]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,"parentheses","parentheses-equality"}, | |||
[n]="parentheses-equality", | |||
[h]="equality comparison with extraneous parentheses", | |||
[i]=m, | [i]=m, | ||
[ | [e]="equality comparison with extraneous parentheses", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wparentheses\\-equality[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"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."}, | ||
[j]={{P,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,085: | Line 6,085: | ||
}, | }, | ||
["warn_exception_caught_by_earlier_handler"]={ | ["warn_exception_caught_by_earlier_handler"]={ | ||
[ | [g]="exception of type A will be caught by earlier handler [-Wexceptions]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"exceptions"}, | |||
[n]="exceptions", | |||
[h]="exception of type %0 will be caught by earlier handler", | |||
[i]=m, | [i]=m, | ||
[ | [e]="exception of type (.*?) will be caught by earlier handler", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wexceptions[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,102: | Line 6,102: | ||
}, | }, | ||
["warn_exception_spec_deprecated"]={ | ["warn_exception_spec_deprecated"]={ | ||
[ | [g]="dynamic exception specifications are deprecated [-Wdeprecated-dynamic-exception-spec]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={gb,"deprecated-dynamic-exception-spec","dynamic-exception-spec"}, | |||
[n]="deprecated-dynamic-exception-spec", | |||
[h]="dynamic exception specifications are deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="dynamic exception specifications are deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-dynamic\\-exception\\-spec[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={"8ca78a16f4a5",1371088971,"Add -Wdeprecated warnings and fixits for things deprecated in C++11:","Add -Wdeprecated warnings and fixits for things deprecated in C++11:"}, | |||
[ | [j]={{jb,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;"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,120: | Line 6,120: | ||
}, | }, | ||
["warn_exit_time_destructor"]={ | ["warn_exit_time_destructor"]={ | ||
[ | [g]="declaration requires an exit-time destructor [-Wexit-time-destructors]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"exit-time-destructors"}, | |||
[n]="exit-time-destructors", | |||
[h]="declaration requires an exit-time destructor", | |||
[i]=m, | [i]=m, | ||
[ | [e]="declaration requires an exit\\-time destructor", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wexit\\-time\\-destructors[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"98766db78583",1300928501,"Add a new warning for exit-time destructors.","Add a new warning for exit-time destructors."}, | |||
[j]={{H,15897,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n // ...\n Diag(VD->getLocation(), diag::warn_exit_time_destructor);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,138: | Line 6,138: | ||
}, | }, | ||
["warn_expected_consistent_version_separator"]={ | ["warn_expected_consistent_version_separator"]={ | ||
[ | [g]="use same version number separators \'_\' or \'.\'; as in \'major[.minor[.subminor]]\' [-Wavailability]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Nc}, | |||
[n]=Nc, | |||
[h]="use same version number separators \'_\' or \'.\'; as in \'major[.minor[.subminor]]\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use same version number separators \'_\' or \'\\.\'; as in \'major\\[\\.minor\\[\\.subminor\\]\\]\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]", | |||
[f]=B, | |||
[d]={"ce72e63d1156",1412272646,"Diagnose mixed use of \'_\' and \'.\' as version","Diagnose mixed use of \'_\' and \'.\' as version"}, | |||
[j]={{Vb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,155: | Line 6,155: | ||
}, | }, | ||
["warn_expected_qualified_after_typename"]={ | ["warn_expected_qualified_after_typename"]={ | ||
[ | [g]="expected a qualified name after \'typename\'", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="expected a qualified name after \'typename\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="expected a qualified name after \'typename\'", | ||
[ | [a]=Ib, | ||
[f]=B, | |||
[d]={"dd876125df22",1303644253,"Downgrade unnecessary \"typename\" from error to warning in Microsoft mode. ","Downgrade unnecessary \"typename\" from error to warning in Microsoft mode. "}, | |||
[ | [j]={{Ic,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);"},{Ic,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;"}}, | ||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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\'"} | ||
Line 6,170: | Line 6,170: | ||
}, | }, | ||
["warn_expecting_lock_held_on_loop"]={ | ["warn_expecting_lock_held_on_loop"]={ | ||
[ | [g]="expecting A \'B\' to be held at start of each loop [-Wthread-safety-analysis]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={vc,Ob}, | |||
[n]=Ob, | |||
[h]="expecting %0 \'%1\' to be held at start of each loop", | |||
[i]=m, | [i]=m, | ||
[ | [e]="expecting (.*?) \'(.*?)\' to be held at start of each loop", | ||
[a]=bd, | |||
[f]=r, | |||
[d]={"afbbd8e5adac",1314125194,"Thread-safety analysis: adding in a basic lockset tracking system. This","Thread-safety analysis: adding in a basic lockset tracking system. This"}, | |||
[j]={{mb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,188: | Line 6,188: | ||
}, | }, | ||
["warn_expecting_locked"]={ | ["warn_expecting_locked"]={ | ||
[ | [g]="expecting A \'B\' to be held at the end of function [-Wthread-safety-analysis]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={vc,Ob}, | |||
[n]=Ob, | |||
[h]="expecting %0 \'%1\' to be held at the end of function", | |||
[i]=m, | [i]=m, | ||
[ | [e]="expecting (.*?) \'(.*?)\' to be held at the end of function", | ||
[a]=bd, | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{mb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,206: | Line 6,206: | ||
}, | }, | ||
["warn_experimental_header_unit"]={ | ["warn_experimental_header_unit"]={ | ||
[ | [g]="the implementation of header units is in an experimental phase [-Wexperimental-header-units]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"experimental-header-units"}, | |||
[n]="experimental-header-units", | |||
[h]="the implementation of header units is in an experimental phase", | |||
[i]=m, | [i]=m, | ||
[ | [e]="the implementation of header units is in an experimental phase", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wexperimental\\-header\\-units[^\\]]*\\]", | |||
[f]="Modules Issue", | |||
[ | [d]={Hb,1625925174,T,T}, | ||
[j]={{"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"]={ | ||
[ | [g]="explicit instantiation of A that occurs after an explicit specialization has no effect [-Winstantiation-after-specialization]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"instantiation-after-specialization"}, | |||
[n]="instantiation-after-specialization", | |||
[h]="explicit instantiation of %0 that occurs after an explicit specialization has no effect", | |||
[i]=m, | [i]=m, | ||
[ | [e]="explicit instantiation of (.*?) that occurs after an explicit specialization has no effect", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winstantiation\\-after\\-specialization[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"e4caa48dbb74",1472685805,"DR259: Demote the pedantic error for an explicit instantiation after an","DR259: Demote the pedantic error for an explicit instantiation after an"}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,237: | Line 6,237: | ||
}, | }, | ||
["warn_explicit_instantiation_inline_0x"]={ | ["warn_explicit_instantiation_inline_0x"]={ | ||
[ | [g]="explicit instantiation cannot be \'inline\' [-Wc++11-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u}, | |||
[n]=y, | |||
[h]="explicit instantiation cannot be \'inline\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="explicit instantiation cannot be \'inline\'", | ||
[a]=kd, | |||
[f]=r, | |||
[d]={"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."}, | |||
[ | [j]={{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());"}}, | ||
[f]= | |||
[d | |||
[ | |||
[p]={ | [p]={ | ||
[ | [Hc]={"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"]={ | ||
[ | [g]="explicit instantiation of A must occur at global scope [-Wc++11-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u}, | |||
[n]=y, | |||
[h]="explicit instantiation of %0 must occur at global scope", | |||
[i]=m, | [i]=m, | ||
[ | [e]="explicit instantiation of (.*?) must occur at global scope", | ||
[a]=kd, | |||
[f]=r, | |||
[d]={"c97d7a2c6a3a",1273599574,zd,zd}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [Hc]={"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"]={ | ||
[ | [g]="explicit instantiation of A not in a namespace enclosing B [-Wc++11-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u}, | |||
[n]=y, | |||
[h]="explicit instantiation of %0 not in a namespace enclosing %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="explicit instantiation of (.*?) not in a namespace enclosing (.*?)", | ||
[a]=kd, | |||
[f]=r, | |||
[d]={"c97d7a2c6a3a",1273599574,zd,zd}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [Hc]={"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"]={ | ||
[ | [g]="explicit instantiation of A must occur in namespace B [-Wc++11-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u}, | |||
[n]=y, | |||
[h]="explicit instantiation of %q0 must occur in namespace %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="explicit instantiation of (.*?) must occur in namespace (.*?)", | ||
[a]=kd, | |||
[f]=r, | |||
[d]={"c97d7a2c6a3a",1273599574,zd,zd}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
[ | [Hc]={"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"]={ | ||
[ | [g]="[[]] attributes are a C2x extension [-Wc2x-extensions]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"c2x-extensions",jd}, | |||
[n]="c2x-extensions", | |||
[h]="[[]] attributes are a C2x extension", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\\[\\[\\]\\] attributes are a C2x extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc2x\\-extensions[^\\]]*\\]", | |||
[f]=B, | |||
[d]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives"}, | |||
[j]={{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,327: | Line 6,327: | ||
}, | }, | ||
["warn_ext_cxx11_attributes"]={ | ["warn_ext_cxx11_attributes"]={ | ||
[ | [g]="[[]] attributes are a C++11 extension [-Wc++11-extensions]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"c++0x-extensions","c++11-extensions",jd}, | |||
[n]="c++11-extensions", | |||
[h]="[[]] attributes are a C++11 extension", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\\[\\[\\]\\] attributes are a C\\+\\+11 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-extensions[^\\]]*\\]", | |||
[f]=B, | |||
[d]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives"}, | |||
[j]={{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,345: | Line 6,345: | ||
}, | }, | ||
["warn_ext_int_deprecated"]={ | ["warn_ext_int_deprecated"]={ | ||
[ | [g]="\'_ExtInt\' is deprecated; use \'_BitInt\' instead [-Wdeprecated-type]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={gb,"deprecated-type"}, | |||
[n]="deprecated-type", | |||
[h]="\'_ExtInt\' is deprecated; use \'_BitInt\' instead", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'_ExtInt\' is deprecated; use \'_BitInt\' instead", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-type[^\\]]*\\]", | |||
[f]=lb, | |||
[ | [d]={"69350e569dc4",1612659633,jc,jc}, | ||
[j]={{Vb,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"]={ | ||
[ | [g]="\'extern\' variable has an initializer [-Wextern-initializer]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"extern-initializer"}, | |||
[n]="extern-initializer", | |||
[h]="\'extern\' variable has an initializer", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'extern\' variable has an initializer", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wextern\\-initializer[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={Tb,1237025389,fb,fb}, | ||
[j]={{I,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,376: | Line 6,376: | ||
}, | }, | ||
["warn_extra_semi_after_mem_fn_def"]={ | ["warn_extra_semi_after_mem_fn_def"]={ | ||
[ | [g]="extra \';\' after member function definition [-Wextra-semi]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"extra-semi"}, | |||
[n]="extra-semi", | |||
[h]="extra \';\' after member function definition", | |||
[i]=m, | [i]=m, | ||
[ | [e]="extra \';\' after member function definition", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wextra\\-semi[^\\]]*\\]", | |||
[f]=B, | |||
[d]={"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"}, | |||
[ | [j]={{Ic,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"]={ | ||
[ | [g]="non-void coroutine does not return a value [-Wreturn-type]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,S,kc}, | |||
[n]=kc, | |||
[h]="non-void coroutine does not return a value", | |||
[i]=m, | [i]=m, | ||
[ | [e]="non\\-void coroutine does not return a value", | ||
[a]=Jd, | |||
[f]=r, | |||
[d]={"709d1b30ab9e",1477553431,"[coroutines] Build fallthrough and set_exception statements.","[coroutines] Build fallthrough and set_exception statements."}, | |||
[j]={{mb,588,"struct CheckFallThroughDiagnostics {\n // ...\n static CheckFallThroughDiagnostics MakeForCoroutine(const Decl *Func) {\n // ...\n D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_coroutine;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,408: | Line 6,408: | ||
}, | }, | ||
["warn_falloff_nonvoid_function"]={ | ["warn_falloff_nonvoid_function"]={ | ||
[ | [g]="non-void function does not return a value [-Wreturn-type]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,S,kc}, | |||
[n]=kc, | |||
[h]="non-void function does not return a value", | |||
[i]=m, | [i]=m, | ||
[ | [e]="non\\-void function does not return a value", | ||
[a]=Jd, | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{mb,557,"struct CheckFallThroughDiagnostics {\n // ...\n static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n // ...\n D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_function;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,425: | Line 6,425: | ||
}, | }, | ||
["warn_falloff_nonvoid_lambda"]={ | ["warn_falloff_nonvoid_lambda"]={ | ||
[ | [g]="non-void lambda does not return a value [-Wreturn-type]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,S,kc}, | |||
[n]=kc, | |||
[h]="non-void lambda does not return a value", | |||
[i]=m, | [i]=m, | ||
[ | [e]="non\\-void lambda does not return a value", | ||
[a]=Jd, | |||
[f]=Wc, | |||
[ | [d]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions.","Specialize noreturn diagnostics for lambda expressions."}, | ||
[f]= | [j]={{mb,618,"struct CheckFallThroughDiagnostics {\n // ...\n static CheckFallThroughDiagnostics MakeForLambda() {\n // ...\n D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::warn_falloff_nonvoid_lambda;"}}, | ||
[d | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,442: | Line 6,442: | ||
}, | }, | ||
["warn_falloff_noreturn_function"]={ | ["warn_falloff_noreturn_function"]={ | ||
[ | [g]="function declared \'noreturn\' should not return [-Winvalid-noreturn]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"invalid-noreturn"}, | |||
[n]="invalid-noreturn", | |||
[h]="function declared \'noreturn\' should not return", | |||
[i]=m, | [i]=m, | ||
[ | [e]="function declared \'noreturn\' should not return", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-noreturn[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"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."}, | ||
[j]={{mb,551,"struct CheckFallThroughDiagnostics {\n // ...\n static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n // ...\n D.diag_MaybeFallThrough_HasNoReturn = diag::warn_falloff_noreturn_function;"},{mb,555,"struct CheckFallThroughDiagnostics {\n // ...\n static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n // ...\n D.diag_AlwaysFallThrough_HasNoReturn = diag::warn_falloff_noreturn_function;"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,459: | Line 6,459: | ||
}, | }, | ||
["warn_fe_backend_frame_larger_than"]={ | ["warn_fe_backend_frame_larger_than"]={ | ||
[ | [g]="A [-Wframe-larger-than]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"frame-larger-than","frame-larger-than="}, | |||
[n]="frame-larger-than", | |||
[h]=qd, | |||
[i]=m, | [i]=m, | ||
[ | [e]=nd, | ||
[ | [a]=" \\[(?:\\-Werror,)?\\-Wframe\\-larger\\-than[^\\]]*\\]", | ||
[f]=Gd, | |||
[d]={"728c5540eef2",1391711443,Hd,Hd}, | |||
[j]={{"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))"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,476: | Line 6,476: | ||
}, | }, | ||
["warn_fe_backend_invalid_feature_flag"]={ | ["warn_fe_backend_invalid_feature_flag"]={ | ||
[ | [g]="feature flag \'A\' must start with either \'+\' to enable the feature or \'-\' to disable it; flag ignored [-Winvalid-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Fb}, | |||
[n]=Fb, | |||
[h]="feature flag \'%0\' must start with either \'+\' to enable the feature or \'-\' to disable it; flag ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="feature flag \'(.*?)\' must start with either \'\\+\' to enable the feature or \'\\-\' to disable it; flag ignored", | ||
[a]=Vc, | |||
[f]=v, | |||
[d]={"910ad36e1a25",1664072190,"[Clang] Improve diagnostics about the invalid target feature.","[Clang] Improve diagnostics about the invalid target feature."}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,493: | Line 6,493: | ||
}, | }, | ||
["warn_fe_backend_optimization_failure"]={ | ["warn_fe_backend_optimization_failure"]={ | ||
[ | [g]="A [-Wpass-failed]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"pass-failed"}, | |||
[n]="pass-failed", | |||
[h]=qd, | |||
[i]=m, | [i]=m, | ||
[ | [e]=nd, | ||
[ | [a]=" \\[(?:\\-Werror,)?\\-Wpass\\-failed[^\\]]*\\]", | ||
[f]=Gd, | |||
[d]={"f8a767df67f3",1405712419,"Recommit: Handle diagnostic warnings in Frontend diagnostic handler.","Recommit: Handle diagnostic warnings in Frontend diagnostic handler."}, | |||
[j]={{"clang/lib/CodeGen/CodeGenAction.cpp",844,"void BackendConsumer::OptimizationFailureHandler(const llvm::DiagnosticInfoOptimizationFailure &D) { EmitOptimizationMessage(D, diag::warn_fe_backend_optimization_failure); }"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,510: | Line 6,510: | ||
}, | }, | ||
["warn_fe_backend_plugin"]={ | ["warn_fe_backend_plugin"]={ | ||
[ | [g]="A [-Wbackend-plugin]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"backend-plugin"}, | |||
[n]="backend-plugin", | |||
[h]=qd, | |||
[i]=m, | [i]=m, | ||
[ | [e]=nd, | ||
[ | [a]=" \\[(?:\\-Werror,)?\\-Wbackend\\-plugin[^\\]]*\\]", | ||
[f]=Gd, | |||
[d]={"728c5540eef2",1391711443,Hd,Hd} | |||
[ | |||
[ | |||
}, | }, | ||
["warn_fe_backend_readonly_feature_flag"]={ | ["warn_fe_backend_readonly_feature_flag"]={ | ||
[ | [g]="feature flag \'A\' is ignored since the feature is read only [-Winvalid-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Fb}, | |||
[n]=Fb, | |||
[h]="feature flag \'%0\' is ignored since the feature is read only", | |||
[i]=m, | [i]=m, | ||
[ | [e]="feature flag \'(.*?)\' is ignored since the feature is read only", | ||
[a]=Vc, | |||
[f]=v, | |||
[d]={"c0f0d50653e1",1684947541,"[HIP] emit macro `__HIP_NO_IMAGE_SUPPORT`","[HIP] emit macro `__HIP_NO_IMAGE_SUPPORT`"}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,540: | Line 6,540: | ||
}, | }, | ||
["warn_fe_backend_resource_limit"]={ | ["warn_fe_backend_resource_limit"]={ | ||
[ | [g]="A (B) exceeds limit (C) in \'D\' [-Wbackend-plugin]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"backend-plugin"}, | |||
[n]="backend-plugin", | |||
[h]="%0 (%1) exceeds limit (%2) in \'%3\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) \\((.*?)\\) exceeds limit \\((.*?)\\) in \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wbackend\\-plugin[^\\]]*\\]", | |||
[f]=Gd, | |||
[d]={"a033dbbe5c43",1666225776,"[Clang] Give Clang the ability to use a shared stat cache","[Clang] Give Clang the ability to use a shared stat cache"} | |||
[ | |||
[ | |||
[ | |||
}, | }, | ||
["warn_fe_backend_unsupported_fp_exceptions"]={ | ["warn_fe_backend_unsupported_fp_exceptions"]={ | ||
[ | [g]="overriding currently unsupported use of floating point exceptions on this target [-Wunsupported-floating-point-opt]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"unsupported-floating-point-opt"}, | |||
[n]="unsupported-floating-point-opt", | |||
[h]="overriding currently unsupported use of floating point exceptions on this target", | |||
[i]=m, | [i]=m, | ||
[ | [e]="overriding currently unsupported use of floating point exceptions on this target", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-floating\\-point\\-opt[^\\]]*\\]", | |||
[f]=v, | |||
[ | [d]={"39d2ae0afb23",1594050762,"[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support.","[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support."}, | ||
[j]={{Mc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,570: | Line 6,570: | ||
}, | }, | ||
["warn_fe_backend_unsupported_fp_rounding"]={ | ["warn_fe_backend_unsupported_fp_rounding"]={ | ||
[ | [g]="overriding currently unsupported rounding mode on this target [-Wunsupported-floating-point-opt]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"unsupported-floating-point-opt"}, | |||
[n]="unsupported-floating-point-opt", | |||
[h]="overriding currently unsupported rounding mode on this target", | |||
[i]=m, | [i]=m, | ||
[ | [e]="overriding currently unsupported rounding mode on this target", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-floating\\-point\\-opt[^\\]]*\\]", | |||
[f]=v, | |||
[ | [d]={"39d2ae0afb23",1594050762,"[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support.","[FPEnv][Clang][Driver] Disable constrained floating point on targets lacking support."}, | ||
[j]={{Mc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,587: | Line 6,587: | ||
}, | }, | ||
["warn_fe_backend_warning_attr"]={ | ["warn_fe_backend_warning_attr"]={ | ||
[ | [g]="call to \'A\' declared with \'warning\' attribute: B [-Wattribute-warning]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"attribute-warning"}, | |||
[n]="attribute-warning", | |||
[h]="call to \'%0\' declared with \'warning\' attribute: %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="call to \'(.*?)\' declared with \'warning\' attribute\\: (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wattribute\\-warning[^\\]]*\\]", | |||
[f]=Gd, | |||
[d]={"846e562dcc6a",1629911893,"[Clang] add support for error+warning fn attrs","[Clang] add support for error+warning fn attrs"}, | |||
[j]={{"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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,604: | Line 6,604: | ||
}, | }, | ||
["warn_fe_cc_log_diagnostics_failure"]={ | ["warn_fe_cc_log_diagnostics_failure"]={ | ||
[ | [g]="unable to open CC_LOG_DIAGNOSTICS file: A (using stderr)", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="unable to open CC_LOG_DIAGNOSTICS file: %0 (using stderr)", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unable to open CC_LOG_DIAGNOSTICS file\\: (.*?) \\(using stderr\\)", | ||
[a]=Ib, | |||
[f]=v, | |||
[ | [d]={"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."}, | ||
[ | [j]={{Mc,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"]={ | ||
[ | [g]="unable to open CC_PRINT_HEADERS file: A (using stderr)", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="unable to open CC_PRINT_HEADERS file: %0 (using stderr)", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unable to open CC_PRINT_HEADERS file\\: (.*?) \\(using stderr\\)", | ||
[a]=Ib, | |||
[f]=v, | |||
[ | [d]={"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"}, | ||
[ | [j]={{"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"]={ | ||
[ | [g]="stack frame size (A) exceeds limit (B) in \'C\' [-Wframe-larger-than]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"frame-larger-than","frame-larger-than="}, | |||
[n]="frame-larger-than", | |||
[h]="stack frame size (%0) exceeds limit (%1) in \'%2\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="stack frame size \\((.*?)\\) exceeds limit \\((.*?)\\) in \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wframe\\-larger\\-than[^\\]]*\\]", | |||
[f]=Gd, | |||
[d]={"fb8d02b17973",1402006259,"Implement -Wframe-larger-than backend diagnostic","Implement -Wframe-larger-than backend diagnostic"}, | |||
[j]={{"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());"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,645: | Line 6,645: | ||
}, | }, | ||
["warn_fe_inline_asm"]={ | ["warn_fe_inline_asm"]={ | ||
[ | [g]="A [-Winline-asm]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"inline-asm"}, | |||
[n]="inline-asm", | |||
[h]=qd, | |||
[i]=m, | [i]=m, | ||
[ | [e]=nd, | ||
[ | [a]=" \\[(?:\\-Werror,)?\\-Winline\\-asm[^\\]]*\\]", | ||
[f]="Inline Assembly Issue", | |||
[d]={"728c5540eef2",1391711443,Hd,Hd}, | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,661: | Line 6,661: | ||
}, | }, | ||
["warn_fe_linking_module"]={ | ["warn_fe_linking_module"]={ | ||
[ | [g]="linking module \'A\': B [-Wlinker-warnings]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"linker-warnings"}, | |||
[n]="linker-warnings", | |||
[h]="linking module \'%0\': %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="linking module \'(.*?)\'\\: (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wlinker\\-warnings[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"1c829ce1e362",1629504872,"[clang][codegen] Set CurLinkModule in CodeGenAction::ExecuteAction","[clang][codegen] Set CurLinkModule in CodeGenAction::ExecuteAction"} | |||
[ | |||
[ | |||
[ | |||
}, | }, | ||
["warn_fe_macro_contains_embedded_newline"]={ | ["warn_fe_macro_contains_embedded_newline"]={ | ||
[ | [g]="macro \'A\' contains embedded newline; text after the newline is ignored", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="macro \'%0\' contains embedded newline; text after the newline is ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="macro \'(.*?)\' contains embedded newline; text after the newline is ignored", | ||
[a]=Ib, | |||
[f]=v, | |||
[ | [d]={"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."}, | ||
[ | [j]={{"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;"}}, | ||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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"} | ||
Line 6,689: | Line 6,689: | ||
}, | }, | ||
["warn_fe_override_module"]={ | ["warn_fe_override_module"]={ | ||
[ | [g]="overriding the module target triple with A [-Woverride-module]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"override-module"}, | |||
[n]="override-module", | |||
[h]="overriding the module target triple with %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="overriding the module target triple with (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Woverride\\-module[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"6cf2df29e702",1422512759,"Make a codegen warning a real warning instead of a getCustomDiagID().","Make a codegen warning a real warning instead of a getCustomDiagID()."}, | |||
[j]={{"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"]={ | ||
[ | [g]="unable to open file A for serializing diagnostics (B) [-Wserialized-diagnostics]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={rd}, | |||
[n]=rd, | |||
[h]="unable to open file %0 for serializing diagnostics (%1)", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unable to open file (.*?) for serializing diagnostics \\((.*?)\\)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wserialized\\-diagnostics[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"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."}, | |||
[j]={{"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"]={ | ||
[ | [g]="Received warning after diagnostic serialization teardown was underway: A [-Wserialized-diagnostics]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={rd}, | |||
[n]=rd, | |||
[h]="Received warning after diagnostic serialization teardown was underway: %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="Received warning after diagnostic serialization teardown was underway\\: (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wserialized\\-diagnostics[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"00c9a504aeed",1594351623,"CrashTracer: clang at clang: llvm::BitstreamWriter::ExitBlock","CrashTracer: clang at clang: llvm::BitstreamWriter::ExitBlock"}, | |||
[j]={{"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"]={ | ||
[ | [g]="unable to merge a subprocess\'s serialized diagnostics [-Wserialized-diagnostics]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={rd}, | |||
[n]=rd, | |||
[h]="unable to merge a subprocess\'s serialized diagnostics", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unable to merge a subprocess\'s serialized diagnostics", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wserialized\\-diagnostics[^\\]]*\\]", | |||
[f]=v, | |||
[ | [d]={"5a6a2fcdeef3",1414102811,"Driver: Include driver diagnostics when we --serialize-diagnostics","Driver: Include driver diagnostics when we --serialize-diagnostics"}, | ||
[j]={{"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"]={ | ||
[ | [g]="A [-Wsource-mgr]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"source-mgr"}, | |||
[n]="source-mgr", | |||
[h]=qd, | |||
[i]=m, | [i]=m, | ||
[ | [e]=nd, | ||
[ | [a]=" \\[(?:\\-Werror,)?\\-Wsource\\-mgr[^\\]]*\\]", | ||
[f]="SourceMgr Reported Issue", | |||
[d]={"b714f73defc8",1611802254,"Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock","Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock"} | |||
[ | |||
[ | |||
}, | }, | ||
["warn_fe_unable_to_open_stats_file"]={ | ["warn_fe_unable_to_open_stats_file"]={ | ||
[ | [g]="unable to open statistics output file \'A\': \'B\' [-Wunable-to-open-stats-file]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"unable-to-open-stats-file"}, | |||
[n]="unable-to-open-stats-file", | |||
[h]="unable to open statistics output file \'%0\': \'%1\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unable to open statistics output file \'(.*?)\'\\: \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunable\\-to\\-open\\-stats\\-file[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"abb6eea19ce3",1474916014,"CC1: Add -save-stats option","CC1: Add -save-stats option"}, | |||
[j]={{Mc,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,775: | Line 6,775: | ||
}, | }, | ||
["warn_field_is_uninit"]={ | ["warn_field_is_uninit"]={ | ||
[ | [g]="field A is uninitialized when used here [-Wuninitialized]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,S,"uninitialized"}, | |||
[n]="uninitialized", | |||
[h]="field %0 is uninitialized when used here", | |||
[i]=m, | [i]=m, | ||
[ | [e]="field (.*?) is uninitialized when used here", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wuninitialized[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"e22a04aba9bc",1257375760,"Diagnose using a field to initialize itself. Patch by Brandon Pearcy!","Diagnose using a field to initialize itself. Patch by Brandon Pearcy!"}, | |||
[j]={{H,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;"},{H,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())) {"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,792: | Line 6,792: | ||
}, | }, | ||
["warn_final_dtor_non_final_class"]={ | ["warn_final_dtor_non_final_class"]={ | ||
[ | [g]="class with destructor marked \'...\' cannot be inherited from [-Wfinal-dtor-non-final-class]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"final-dtor-non-final-class"}, | |||
[n]="final-dtor-non-final-class", | |||
[h]="class with destructor marked \'%select{final|sealed}0\' cannot be inherited from", | |||
[i]=m, | [i]=m, | ||
[ | [e]="class with destructor marked \'(?:final|sealed)\' cannot be inherited from", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfinal\\-dtor\\-non\\-final\\-class[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"94f3f3e7f46a",1567276544,"[NFC] Fix for rL370594","[NFC] Fix for rL370594"}, | |||
[j]={{H,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\"));"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,809: | Line 6,809: | ||
}, | }, | ||
["warn_fixedpoint_constant_overflow"]={ | ["warn_fixedpoint_constant_overflow"]={ | ||
[ | [g]="overflow in expression; result is A with type B [-Wfixed-point-overflow]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"fixed-point-overflow"}, | |||
[n]="fixed-point-overflow", | |||
[h]="overflow in expression; result is %0 with type %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="overflow in expression; result is (.*?) with type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfixed\\-point\\-overflow[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"474177c05381",1579695612,"[AST] Improve overflow diagnostics for fixed-point constant evaluation.","[AST] Improve overflow diagnostics for fixed-point constant evaluation."}, | |||
[j]={{dd,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();"},{dd,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();"},{dd,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();"},{dd,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,826: | Line 6,826: | ||
}, | }, | ||
["warn_fixit_no_changes"]={ | ["warn_fixit_no_changes"]={ | ||
[ | [g]="FIX-IT detected errors it could not fix; no output will be generated", | ||
[ | [b]="note: ", | ||
[ | [c]="Note", | ||
[ | [h]="FIX-IT detected errors it could not fix; no output will be generated", | ||
[ | [i]="note\\: ", | ||
[ | [e]="FIX\\-IT detected errors it could not fix; no output will be generated", | ||
[ | [a]=v, | ||
[ | [f]=v, | ||
[ | [d]={"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"}, | ||
[ | [j]={{"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"]={ | ||
[ | [g]="enumeration value A is out of range of flags in enumeration type B [-Wflag-enum]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"flag-enum"}, | |||
[n]="flag-enum", | |||
[h]="enumeration value %0 is out of range of flags in enumeration type %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="enumeration value (.*?) is out of range of flags in enumeration type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wflag\\-enum[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"724f14e75c50",1417136000,"Create a new \'flag_enum\' attribute.","Create a new \'flag_enum\' attribute."}, | |||
[j]={{I,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,855: | Line 6,855: | ||
}, | }, | ||
["warn_float_compare_literal"]={ | ["warn_float_compare_literal"]={ | ||
[ | [g]="floating-point comparison is always ...; constant cannot be represented exactly in type A [-Wliteral-range]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={pd,X}, | |||
[n]=pd, | |||
[h]="floating-point comparison is always %select{true|false}0; constant cannot be represented exactly in type %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="floating\\-point comparison is always (?:true|false); constant cannot be represented exactly in type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wliteral\\-range[^\\]]*\\]", | |||
[f]=r, | |||
[d]={ld,1620118562,Zb,Zb}, | |||
[j]={{x,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,872: | Line 6,872: | ||
}, | }, | ||
["warn_float_overflow"]={ | ["warn_float_overflow"]={ | ||
[ | [g]="magnitude of floating-point constant too large for type A; maximum is B [-Wliteral-range]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={pd,X}, | |||
[n]=pd, | |||
[h]="magnitude of floating-point constant too large for type %0; maximum is %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="magnitude of floating\\-point constant too large for type (.*?); maximum is (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wliteral\\-range[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{P,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,889: | Line 6,889: | ||
}, | }, | ||
["warn_float_underflow"]={ | ["warn_float_underflow"]={ | ||
[ | [g]="magnitude of floating-point constant too small for type A; minimum is B [-Wliteral-range]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={pd,X}, | |||
[n]=pd, | |||
[h]="magnitude of floating-point constant too small for type %0; minimum is %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="magnitude of floating\\-point constant too small for type (.*?); minimum is (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wliteral\\-range[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{P,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,906: | Line 6,906: | ||
}, | }, | ||
["warn_floatingpoint_eq"]={ | ["warn_floatingpoint_eq"]={ | ||
[ | [g]="comparing floating point with == or != is unsafe [-Wfloat-equal]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"float-equal"}, | |||
[n]="float-equal", | |||
[h]="comparing floating point with == or != is unsafe", | |||
[i]=m, | [i]=m, | ||
[ | [e]="comparing floating point with \\=\\= or \\!\\= is unsafe", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfloat\\-equal[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Tb,1237025389,fb,fb}, | |||
[j]={{x,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,924: | Line 6,924: | ||
}, | }, | ||
["warn_for_range_begin_end_types_differ"]={ | ["warn_for_range_begin_end_types_differ"]={ | ||
[ | [g]="\'begin\' and \'end\' returning different types (A and B) is incompatible with C++ standards before C++17 [-Wpre-c++17-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,y,u,u,D,w,w,Mb,Gb,t,s,s,W,zb}, | |||
[n]=W, | |||
[h]="\'begin\' and \'end\' returning different types (%0 and %1) is incompatible with C++ standards before C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'begin\' and \'end\' returning different types \\((.*?) and (.*?)\\) is incompatible with C\\+\\+ standards before C\\+\\+17", | ||
[a]=Kb, | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{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;"}} | |||
[ | |||
[ | |||
[ | |||
[ | |||
}, | }, | ||
["warn_for_range_const_ref_binds_temp_built_from_ref"]={ | ["warn_for_range_const_ref_binds_temp_built_from_ref"]={ | ||
[ | [g]="loop variable A of type B binds to a temporary constructed from type C [-Wrange-loop-construct]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={G,M,"loop-analysis",S,"range-loop-analysis","range-loop-construct"}, | |||
[n]="range-loop-construct", | |||
[h]="loop variable %0 %diff{of type $ binds to a temporary constructed from type $|binds to a temporary constructed from a different type}1,2", | |||
[i]=m, | [i]=m, | ||
[ | [e]="loop variable (.*?) (?:of type (.*?) binds to a temporary constructed from type (.*?)|binds to a temporary constructed from a different type)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wrange\\-loop\\-construct[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Nd,1576908663,nc,nc}, | |||
[j]={{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())) {"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,957: | Line 6,957: | ||
}, | }, | ||
["warn_for_range_copy"]={ | ["warn_for_range_copy"]={ | ||
[ | [g]="loop variable A creates a copy from type B [-Wrange-loop-construct]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={G,M,"loop-analysis",S,"range-loop-analysis","range-loop-construct"}, | |||
[n]="range-loop-construct", | |||
[h]="loop variable %0 creates a copy from type %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="loop variable (.*?) creates a copy from type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wrange\\-loop\\-construct[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{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())) {"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,975: | Line 6,975: | ||
}, | }, | ||
["warn_for_range_ref_binds_ret_temp"]={ | ["warn_for_range_ref_binds_ret_temp"]={ | ||
[ | [g]="loop variable A binds to a temporary value produced by a range of type B [-Wrange-loop-bind-reference]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"loop-analysis","range-loop-analysis","range-loop-bind-reference"}, | |||
[n]="range-loop-bind-reference", | |||
[h]="loop variable %0 binds to a temporary value produced by a range of type %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="loop variable (.*?) binds to a temporary value produced by a range of type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wrange\\-loop\\-bind\\-reference[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Nd,1576908663,nc,nc}, | |||
[j]={{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())) {"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 6,993: | Line 6,993: | ||
}, | }, | ||
["warn_format_P_no_precision"]={ | ["warn_format_P_no_precision"]={ | ||
[ | [g]="using \'%P\' format specifier without precision [-Wformat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,rb,S}, | |||
[n]=rb, | |||
[h]="using \'%%P\' format specifier without precision", | |||
[i]=m, | [i]=m, | ||
[ | [e]="using \'%P\' format specifier without precision", | ||
[a]=qc, | |||
[f]=Xb, | |||
[ | [d]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]","Add support for __builtin_os_log_format[_buffer_size]"}, | ||
[f]= | [j]={{x,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),"}}, | ||
[d | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,010: | Line 7,010: | ||
}, | }, | ||
["warn_format_argument_needs_cast"]={ | ["warn_format_argument_needs_cast"]={ | ||
[ | [g]="... \'A\' should not be used as format arguments; add an explicit cast to B instead [-Wformat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,rb,S}, | |||
[n]=rb, | |||
[h]="%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", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:values of type|enum values with underlying type) \'(.*?)\' should not be used as format arguments; add an explicit cast to (.*?) instead", | ||
[a]=qc, | |||
[f]=Xb, | |||
[d]={"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."}, | |||
[j]={{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,027: | Line 7,027: | ||
}, | }, | ||
["warn_format_argument_needs_cast_pedantic"]={ | ["warn_format_argument_needs_cast_pedantic"]={ | ||
[ | [g]="... \'A\' should not be used as format arguments; add an explicit cast to B instead [-Wformat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"format-pedantic"}, | |||
[n]="format-pedantic", | |||
[h]="%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", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:values of type|enum values with underlying type) \'(.*?)\' should not be used as format arguments; add an explicit cast to (.*?) instead", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-pedantic[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"ec7d7f312e5c",1529704480,"[Sema] -Wformat-pedantic only for NSInteger/NSUInteger %zu/%zi on Darwin","[Sema] -Wformat-pedantic only for NSInteger/NSUInteger %zu/%zi on Darwin"}, | |||
[j]={{x,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"]={ | ||
[ | [g]="using \'A\' format specifier, but argument has boolean value [-Wformat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,rb,S}, | |||
[n]=rb, | |||
[h]="using \'%0\' format specifier, but argument has boolean value", | |||
[i]=m, | [i]=m, | ||
[ | [e]="using \'(.*?)\' format specifier, but argument has boolean value", | ||
[a]=qc, | |||
[f]=Xb, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,059: | Line 7,059: | ||
}, | }, | ||
["warn_format_conversion_argument_type_mismatch"]={ | ["warn_format_conversion_argument_type_mismatch"]={ | ||
[ | [g]="format specifies type A but the argument has ... B [-Wformat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,rb,S}, | |||
[n]=rb, | |||
[h]="format specifies type %0 but the argument has %select{type|underlying type}2 %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="format specifies type (.*?) but the argument has (?:type|underlying type) (.*?)", | ||
[a]=qc, | |||
[f]=Xb, | |||
[d]={"bc53ed1ee624",1401509534,"Format strings: check against an enum\'s underlying type.","Format strings: check against an enum\'s underlying type."}, | |||
[j]={{x,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));"},{x,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));"},{x,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;"},{x,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);"},{x,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;"},{x,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);"},{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,076: | Line 7,076: | ||
}, | }, | ||
["warn_format_conversion_argument_type_mismatch_confusion"]={ | ["warn_format_conversion_argument_type_mismatch_confusion"]={ | ||
[ | [g]="format specifies type A but the argument has ... B [-Wformat-type-confusion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"format-type-confusion"}, | |||
[n]="format-type-confusion", | |||
[h]="format specifies type %0 but the argument has %select{type|underlying type}2 %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="format specifies type (.*?) but the argument has (?:type|underlying type) (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-type\\-confusion[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{x,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;"},{x,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"]={ | ||
[ | [g]="format specifies type A but the argument has ... B [-Wformat-pedantic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"format-pedantic",jd}, | |||
[n]="format-pedantic", | |||
[h]="format specifies type %0 but the argument has %select{type|underlying type}2 %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="format specifies type (.*?) but the argument has (?:type|underlying type) (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-pedantic[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"b480296e6cb4",1425438730,"Add a format warning for \"%p\" with non-void* args","Add a format warning for \"%p\" with non-void* args"}, | |||
[j]={{x,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;"},{x,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;"},{x,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"]={ | ||
[ | [g]="using \'A\' format specifier annotation outside of os_log()/os_trace() [-Wformat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,rb,S}, | |||
[n]=rb, | |||
[h]="using \'%0\' format specifier annotation outside of os_log()/os_trace()", | |||
[i]=m, | [i]=m, | ||
[ | [e]="using \'(.*?)\' format specifier annotation outside of os_log\\(\\)\\/os_trace\\(\\)", | ||
[a]=qc, | |||
[f]=Xb, | |||
[d]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]","Add support for __builtin_os_log_format[_buffer_size]"}, | |||
[j]={{x,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()),"},{x,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()),"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,123: | Line 7,123: | ||
}, | }, | ||
["warn_format_invalid_conversion"]={ | ["warn_format_invalid_conversion"]={ | ||
[ | [g]="invalid conversion specifier \'A\' [-Wformat-invalid-specifier]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,rb,"format-invalid-specifier",S}, | |||
[n]="format-invalid-specifier", | |||
[h]="invalid conversion specifier \'%0\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="invalid conversion specifier \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-invalid\\-specifier[^\\]]*\\]", | |||
[f]=Xb, | |||
[d]={"ce81542d6107",1279574757,"Hook up \'invalid conversion\' warning for scanf format strings.","Hook up \'invalid conversion\' warning for scanf format strings."}, | |||
[j]={{x,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,"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,140: | Line 7,140: | ||
}, | }, | ||
["warn_format_invalid_positional_specifier"]={ | ["warn_format_invalid_positional_specifier"]={ | ||
[ | [g]="invalid position specified for ... [-Wformat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,rb,S}, | |||
[n]=rb, | |||
[h]="invalid position specified for %select{field width|field precision}0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="invalid position specified for (?:field width|field precision)", | ||
[a]=qc, | |||
[f]=Xb, | |||
[d]={cd,1279246282,Sb,Sb}, | |||
[j]={{x,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"]={ | ||
[ | [g]="cannot mix positional and non-positional arguments in format string [-Wformat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,rb,S}, | |||
[n]=rb, | |||
[h]="cannot mix positional and non-positional arguments in format string", | |||
[i]=m, | [i]=m, | ||
[ | [e]="cannot mix positional and non\\-positional arguments in format string", | ||
[a]=qc, | |||
[f]=Xb, | |||
[d]={cd,1279246282,Sb,Sb}, | |||
[j]={{x,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)); }"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,171: | Line 7,171: | ||
}, | }, | ||
["warn_format_non_standard"]={ | ["warn_format_non_standard"]={ | ||
[ | [g]="\'A\' ... is not supported by ISO C [-Wformat-non-iso]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={Md}, | |||
[n]=Md, | |||
[h]="\'%0\' %select{length modifier|conversion specifier}1 is not supported by ISO C", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' (?:length modifier|conversion specifier) is not supported by ISO C", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-non\\-iso[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"c9dd94685283",1329905821,"Warn about non-standard format strings (pr12017)","Warn about non-standard format strings (pr12017)"}, | |||
[j]={{x,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()),"},{x,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()),"},{x,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()),"},{x,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()),"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,189: | Line 7,189: | ||
}, | }, | ||
["warn_format_non_standard_conversion_spec"]={ | ["warn_format_non_standard_conversion_spec"]={ | ||
[ | [g]="using length modifier \'A\' with conversion specifier \'B\' is not supported by ISO C [-Wformat-non-iso]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={Md}, | |||
[n]=Md, | |||
[h]="using length modifier \'%0\' with conversion specifier \'%1\' is not supported by ISO C", | |||
[i]=m, | [i]=m, | ||
[ | [e]="using length modifier \'(.*?)\' with conversion specifier \'(.*?)\' is not supported by ISO C", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-non\\-iso[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"c9dd94685283",1329905821,"Warn about non-standard format strings (pr12017)","Warn about non-standard format strings (pr12017)"}, | |||
[j]={{x,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);"},{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,207: | Line 7,207: | ||
}, | }, | ||
["warn_format_non_standard_positional_arg"]={ | ["warn_format_non_standard_positional_arg"]={ | ||
[ | [g]="positional arguments are not supported by ISO C [-Wformat-non-iso]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={Md}, | |||
[n]=Md, | |||
[h]="positional arguments are not supported by ISO C", | |||
[i]=m, | [i]=m, | ||
[ | [e]="positional arguments are not supported by ISO C", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-non\\-iso[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"aa8c61cf94b7",1331287854,"-Wformat-non-iso: warn about positional arguments (pr12017)","-Wformat-non-iso: warn about positional arguments (pr12017)"}, | |||
[ | [j]={{x,10216,"void CheckFormatHandler::HandlePosition(const char *startPos, unsigned posLen) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard_positional_arg), getLocationOfByte(startPos),"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,225: | Line 7,225: | ||
}, | }, | ||
["warn_format_nonliteral"]={ | ["warn_format_nonliteral"]={ | ||
[ | [g]="format string is not a string literal [-Wformat-nonliteral]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"format-nonliteral","format=2"}, | |||
[n]="format-nonliteral", | |||
[h]="format string is not a string literal", | |||
[i]=m, | [i]=m, | ||
[ | [e]="format string is not a string literal", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-nonliteral[^\\]]*\\]", | |||
[f]=r, | |||
[d]={cd,1279246282,Sb,Sb}, | |||
[ | [j]={{x,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();"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,243: | Line 7,243: | ||
}, | }, | ||
["warn_format_nonliteral_noargs"]={ | ["warn_format_nonliteral_noargs"]={ | ||
[ | [g]="format string is not a string literal (potentially insecure) [-Wformat-security]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,rb,"format-security","format=2",S}, | |||
[n]="format-security", | |||
[h]="format string is not a string literal (potentially insecure)", | |||
[i]=m, | [i]=m, | ||
[ | [e]="format string is not a string literal \\(potentially insecure\\)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wformat\\-security[^\\]]*\\]", | |||
[f]=Xb, | |||
[d]={cd,1279246282,Sb,Sb}, | |||
[j]={{x,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,260: | Line 7,260: | ||
}, | }, | ||
["warn_format_nonsensical_length"]={ | ["warn_format_nonsensical_length"]={ | ||
[ | [g]="length modifier \'A\' results in undefined behavior or no effect with \'B\' conversion specifier [-Wformat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,rb,S}, | |||
[n]=rb, | |||
[h]="length modifier \'%0\' results in undefined behavior or no effect with \'%1\' conversion specifier", | |||
[i]=m, | [i]=m, | ||
[ | [e]="length modifier \'(.*?)\' results in undefined behavior or no effect with \'(.*?)\' conversion specifier", | ||
[a]=qc, | |||
[f]=Xb, | |||
[d]={"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."}, | |||
[j]={{x,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)"},{x,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);"},{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,277: | Line 7,277: | ||
}, | }, | ||
["warn_format_string_is_wide_literal"]={ | ["warn_format_string_is_wide_literal"]={ | ||
[ | [g]="format string should not be a wide string [-Wformat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,rb,S}, | |||
[n]=rb, | |||
[h]="format string should not be a wide string", | |||
[i]=m, | [i]=m, | ||
[ | [e]="format string should not be a wide string", | ||
[a]=qc, | |||
[f]=Xb, | |||
[ | [d]={cd,1279246282,Sb,Sb}, | ||
[f]= | [j]={{x,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(),"}}, | ||
[d | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,294: | Line 7,294: | ||
}, | }, | ||
["warn_format_zero_positional_specifier"]={ | ["warn_format_zero_positional_specifier"]={ | ||
[ | [g]="position arguments in format strings start counting at 1 (not 0) [-Wformat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,rb,S}, | |||
[n]=rb, | |||
[h]="position arguments in format strings start counting at 1 (not 0)", | |||
[i]=m, | [i]=m, | ||
[ | [e]="position arguments in format strings start counting at 1 \\(not 0\\)", | ||
[a]=qc, | |||
[f]=Xb, | |||
[d]={cd,1279246282,Sb,Sb}, | |||
[j]={{x,10233,"void CheckFormatHandler::HandleZeroPosition(const char *startPos, unsigned posLen) {\n EmitFormatDiagnostic(S.PDiag(diag::warn_format_zero_positional_specifier), getLocationOfByte(startPos),"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,311: | Line 7,311: | ||
}, | }, | ||
["warn_fortify_scanf_overflow"]={ | ["warn_fortify_scanf_overflow"]={ | ||
[ | [g]="\'A\' may overflow; destination buffer in argument B has size C, but the corresponding specifier may require size D [-Wfortify-source]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={yc}, | |||
[n]=yc, | |||
[h]="\'%0\' may overflow; destination buffer in argument %1 has size %2, but the corresponding specifier may require size %3", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' may overflow; destination buffer in argument (.*?) has size (.*?), but the corresponding specifier may require size (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"f9c3310d32c6",1616787805,sd,sd}, | |||
[j]={{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,328: | Line 7,328: | ||
}, | }, | ||
["warn_fortify_source_format_overflow"]={ | ["warn_fortify_source_format_overflow"]={ | ||
[ | [g]="\'A\' will always overflow; destination buffer has size B, but format string expands to at least C [-Wfortify-source]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={yc}, | |||
[n]=yc, | |||
[h]="\'%0\' will always overflow; destination buffer has size %1, but format string expands to at least %2", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' will always overflow; destination buffer has size (.*?), but format string expands to at least (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","Improve static checks for sprintf and __builtin___sprintf_chk"}, | |||
[j]={{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,345: | Line 7,345: | ||
}, | }, | ||
["warn_fortify_source_overflow"]={ | ["warn_fortify_source_overflow"]={ | ||
[ | [g]="\'A\' will always overflow; destination buffer has size B, but size argument is C [-Wfortify-source]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={yc}, | |||
[n]=yc, | |||
[h]="\'%0\' will always overflow; destination buffer has size %1, but size argument is %2", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' will always overflow; destination buffer has size (.*?), but size argument is (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics","[Sema] Add some compile time _FORTIFY_SOURCE diagnostics"}, | |||
[j]={{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,362: | Line 7,362: | ||
}, | }, | ||
["warn_fortify_source_size_mismatch"]={ | ["warn_fortify_source_size_mismatch"]={ | ||
[ | [g]="\'A\' size argument is too large; destination buffer has size B, but size argument is C [-Wfortify-source]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={yc}, | |||
[n]=yc, | |||
[h]="\'%0\' size argument is too large; destination buffer has size %1, but size argument is %2", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' size argument is too large; destination buffer has size (.*?), but size argument is (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"b6e16ea006a2",1552937025,"[Sema] Add some compile time _FORTIFY_SOURCE diagnostics","[Sema] Add some compile time _FORTIFY_SOURCE diagnostics"}, | |||
[j]={{x,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;"},{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,379: | Line 7,379: | ||
}, | }, | ||
["warn_fortify_strlen_overflow"]={ | ["warn_fortify_strlen_overflow"]={ | ||
[ | [g]="\'A\' will always overflow; destination buffer has size B, but the source string has length C (including NUL byte) [-Wfortify-source]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={yc}, | |||
[n]=yc, | |||
[h]="\'%0\' will always overflow; destination buffer has size %1, but the source string has length %2 (including NUL byte)", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' will always overflow; destination buffer has size (.*?), but the source string has length (.*?) \\(including NUL byte\\)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfortify\\-source[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Rc,1615397021,Rb,Rb}, | |||
[j]={{x,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;"},{x,1166,"void Sema::checkFortifiedBuiltinMemoryFunction(FunctionDecl *FD, CallExpr *TheCall) {\n // ...\n case Builtin::BI__builtin___strcpy_chk: {\n DiagID = diag::warn_fortify_strlen_overflow;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,396: | Line 7,396: | ||
}, | }, | ||
["warn_forward_class_redefinition"]={ | ["warn_forward_class_redefinition"]={ | ||
[ | [g]="redefinition of forward class A of a typedef name of an object type is ignored [-Wobjc-forward-class-redefinition]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"objc-forward-class-redefinition"}, | |||
[n]="objc-forward-class-redefinition", | |||
[h]="redefinition of forward class %0 of a typedef name of an object type is ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="redefinition of forward class (.*?) of a typedef name of an object type is ignored", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-forward\\-class\\-redefinition[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"04c4455dd443",1327365615,"objective-c: Ignore with warning forward class declaration whose name","objective-c: Ignore with warning forward class declaration whose name"}, | |||
[j]={{xc,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];"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,413: | Line 7,413: | ||
}, | }, | ||
["warn_four_char_character_literal"]={ | ["warn_four_char_character_literal"]={ | ||
[ | [g]="multi-character character constant [-Wfour-char-constants]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"four-char-constants"}, | |||
[n]="four-char-constants", | |||
[h]="multi-character character constant", | |||
[i]=m, | [i]=m, | ||
[ | [e]="multi\\-character character constant", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfour\\-char\\-constants[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={"8fa45e1fd527",1601988326,"Convert diagnostics about multi-character literals from extension to warning","Convert diagnostics about multi-character literals from extension to warning"}, | |||
[j]={{ed,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,431: | Line 7,431: | ||
}, | }, | ||
["warn_frame_address"]={ | ["warn_frame_address"]={ | ||
[ | [g]="calling \'A\' with a nonzero argument is unsafe [-Wframe-address]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={G,M,"frame-address",S}, | |||
[n]="frame-address", | |||
[h]="calling \'%0\' with a nonzero argument is unsafe", | |||
[i]=m, | [i]=m, | ||
[ | [e]="calling \'(.*?)\' with a nonzero argument is unsafe", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wframe\\-address[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Nd,1576908663,nc,nc}, | |||
[j]={{x,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,449: | Line 7,449: | ||
}, | }, | ||
["warn_framework_include_private_from_public"]={ | ["warn_framework_include_private_from_public"]={ | ||
[ | [g]="public framework header includes private framework header \'A\' [-Wframework-include-private-from-public]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"framework-include-private-from-public"}, | |||
[n]="framework-include-private-from-public", | |||
[h]="public framework header includes private framework header \'%0\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="public framework header includes private framework header \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wframework\\-include\\-private\\-from\\-public[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={"1b3b69fbda70",1529965457,"Warning for framework include violation from Headers to PrivateHeaders","Warning for framework include violation from Headers to PrivateHeaders"}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,466: | Line 7,466: | ||
}, | }, | ||
["warn_free_nonheap_object"]={ | ["warn_free_nonheap_object"]={ | ||
[ | [g]="attempt to call A on non-heap ... [-Wfree-nonheap-object]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"free-nonheap-object"}, | |||
[n]="free-nonheap-object", | |||
[h]="attempt to call %0 on non-heap %select{object %2|object: block expression|object: lambda-to-function-pointer conversion}1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="attempt to call (.*?) on non\\-heap (?:object (.*?)|object\\: block expression|object\\: lambda\\-to\\-function\\-pointer conversion)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfree\\-nonheap\\-object[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types"}, | |||
[j]={{x,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);"},{x,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*/;"},{x,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;"},{x,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();"},{x,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();"},{x,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*/;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,483: | Line 7,483: | ||
}, | }, | ||
["warn_fun_excludes_mutex"]={ | ["warn_fun_excludes_mutex"]={ | ||
[ | [g]="cannot call function \'A\' while B \'C\' is held [-Wthread-safety-analysis]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={vc,Ob}, | |||
[n]=Ob, | |||
[h]="cannot call function \'%1\' while %0 \'%2\' is held", | |||
[i]=m, | [i]=m, | ||
[ | [e]="cannot call function \'(.*?)\' while (.*?) \'(.*?)\' is held", | ||
[a]=bd, | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{mb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,501: | Line 7,501: | ||
}, | }, | ||
["warn_fun_requires_lock"]={ | ["warn_fun_requires_lock"]={ | ||
[ | [g]="calling function A requires holding B ... [-Wthread-safety-analysis]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={vc,Ob}, | |||
[n]=Ob, | |||
[h]="calling function %1 requires holding %0 %select{\'%2\'|\'%2\' exclusively}3", | |||
[i]=m, | [i]=m, | ||
[ | [e]="calling function (.*?) requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)", | ||
[a]=bd, | |||
[f]=r, | |||
[d]={"69b367af17e0",1315506451,"Thread safety: Adding basic support for locks required and excluded attributes","Thread safety: Adding basic support for locks required and excluded attributes"}, | |||
[j]={{mb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,519: | Line 7,519: | ||
}, | }, | ||
["warn_fun_requires_lock_precise"]={ | ["warn_fun_requires_lock_precise"]={ | ||
[ | [g]="calling function A requires holding B ... [-Wthread-safety-precise]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={vc,"thread-safety-precise"}, | |||
[n]="thread-safety-precise", | |||
[h]="calling function %1 requires holding %0 %select{\'%2\'|\'%2\' exclusively}3", | |||
[i]=m, | [i]=m, | ||
[ | [e]="calling function (.*?) requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-precise[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"5ff1644e624e",1347307103,"Thread-safety analysis: differentiate between two forms of analysis; a precise","Thread-safety analysis: differentiate between two forms of analysis; a precise"}, | |||
[j]={{mb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,537: | Line 7,537: | ||
}, | }, | ||
["warn_fun_requires_negative_cap"]={ | ["warn_fun_requires_negative_cap"]={ | ||
[ | [g]="calling function A requires negative capability \'B\' [-Wthread-safety-analysis]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={vc,Ob}, | |||
[n]=Ob, | |||
[h]="calling function %0 requires negative capability \'%1\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="calling function (.*?) requires negative capability \'(.*?)\'", | ||
[a]=bd, | |||
[f]=r, | |||
[d]={"14f6bfcb52e7",1582847864,Uc,Uc}, | |||
[j]={{mb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,555: | Line 7,555: | ||
}, | }, | ||
["warn_func_template_missing"]={ | ["warn_func_template_missing"]={ | ||
[ | [g]="instantiation of function A required here, but no definition is available [-Wundefined-func-template]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"undefined-func-template"}, | |||
[n]="undefined-func-template", | |||
[h]="instantiation of function %q0 required here, but no definition is available", | |||
[i]=m, | [i]=m, | ||
[ | [e]="instantiation of function (.*?) required here, but no definition is available", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wundefined\\-func\\-template[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"7dcc97e7ac0a",1461046792,"Warn if function or variable cannot be implicitly instantiated","Warn if function or variable cannot be implicitly instantiated"}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,573: | Line 7,573: | ||
}, | }, | ||
["warn_function_attribute_ignored_in_stmt"]={ | ["warn_function_attribute_ignored_in_stmt"]={ | ||
[ | [g]="attribute is ignored on this statement as it only applies to functions; use \'A\' on statements [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="attribute is ignored on this statement as it only applies to functions; use \'%0\' on statements", | |||
[i]=m, | [i]=m, | ||
[ | [e]="attribute is ignored on this statement as it only applies to functions; use \'(.*?)\' on statements", | ||
[a]=xb, | |||
[f]=r, | |||
[d]={ld,1620118562,Zb,Zb}, | |||
[j]={{"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]]\";"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,590: | Line 7,590: | ||
}, | }, | ||
["warn_function_def_in_objc_container"]={ | ["warn_function_def_in_objc_container"]={ | ||
[ | [g]="function definition inside an Objective-C container is deprecated [-Wfunction-def-in-objc-container]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"function-def-in-objc-container"}, | |||
[n]="function-def-in-objc-container", | |||
[h]="function definition inside an Objective-C container is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="function definition inside an Objective\\-C container is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfunction\\-def\\-in\\-objc\\-container[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"3451df8f5dfc",1401296555,"Objective-C. Deprecate use of function definitions","Objective-C. Deprecate use of function definitions"}, | |||
[j]={{I,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,607: | Line 7,607: | ||
}, | }, | ||
["warn_function_stmt_attribute_precedence"]={ | ["warn_function_stmt_attribute_precedence"]={ | ||
[ | [g]="statement attribute A has higher precedence than function attribute \'...\' [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="statement attribute %0 has higher precedence than function attribute \'%select{always_inline|flatten|noinline}1\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="statement attribute (.*?) has higher precedence than function attribute \'(?:always_inline|flatten|noinline)\'", | ||
[a]=xb, | |||
[f]=r, | |||
[d]={ld,1620118562,Zb,Zb}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,624: | Line 7,624: | ||
}, | }, | ||
["warn_gc_attribute_weak_on_local"]={ | ["warn_gc_attribute_weak_on_local"]={ | ||
[ | [g]="Objective-C GC does not allow weak variables on the stack [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="Objective-C GC does not allow weak variables on the stack", | |||
[i]=m, | [i]=m, | ||
[ | [e]="Objective\\-C GC does not allow weak variables on the stack", | ||
[a]=xb, | |||
[f]=r, | |||
[d]={"c32830cd6469",1307477746,"More coherent diagnostic when a stack variable is","More coherent diagnostic when a stack variable is"}, | |||
[j]={{I,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,641: | Line 7,641: | ||
}, | }, | ||
["warn_gcc_attribute_location"]={ | ["warn_gcc_attribute_location"]={ | ||
[ | [g]="GCC does not allow an attribute in this position on a function declaration [-Wgcc-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={zc}, | |||
[n]=zc, | |||
[h]="GCC does not allow an attribute in this position on a function declaration", | |||
[i]=m, | [i]=m, | ||
[ | [e]="GCC does not allow an attribute in this position on a function declaration", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | |||
[f]=B, | |||
[ | [d]={"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"}, | ||
[j]={{jb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,658: | Line 7,658: | ||
}, | }, | ||
["warn_gcc_ignores_type_attr"]={ | ["warn_gcc_ignores_type_attr"]={ | ||
[ | [g]="GCC does not allow the A attribute to be written on a type [-Wgcc-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={zc}, | |||
[n]=zc, | |||
[h]="GCC does not allow the %0 attribute to be written on a type", | |||
[i]=m, | [i]=m, | ||
[ | [e]="GCC does not allow the (.*?) attribute to be written on a type", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"b9a457af35b2",1525361630,"Allow writing calling convention attributes on function types.","Allow writing calling convention attributes on function types."}, | |||
[j]={{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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,675: | Line 7,675: | ||
}, | }, | ||
["warn_gcc_requires_variadic_function"]={ | ["warn_gcc_requires_variadic_function"]={ | ||
[ | [g]="GCC requires a function with the A attribute to be variadic [-Wgcc-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={zc}, | |||
[n]=zc, | |||
[h]="GCC requires a function with the %0 attribute to be variadic", | |||
[i]=m, | [i]=m, | ||
[ | [e]="GCC requires a function with the (.*?) attribute to be variadic", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{J,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,692: | Line 7,692: | ||
}, | }, | ||
["warn_gcc_variable_decl_in_for_loop"]={ | ["warn_gcc_variable_decl_in_for_loop"]={ | ||
[ | [g]="GCC does not allow variable declarations in for loop initializers before C99 [-Wgcc-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={zc}, | |||
[n]=zc, | |||
[h]="GCC does not allow variable declarations in for loop initializers before C99", | |||
[i]=m, | [i]=m, | ||
[ | [e]="GCC does not allow variable declarations in for loop initializers before C99", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | |||
[f]=B, | |||
[ | [d]={"4d456455684c",1530221760,"[Parse] Make -Wgcc-compat complain about for loop inits in C89","[Parse] Make -Wgcc-compat complain about for loop inits in C89"}, | ||
[j]={{gc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,709: | Line 7,709: | ||
}, | }, | ||
["warn_global_constructor"]={ | ["warn_global_constructor"]={ | ||
[ | [g]="declaration requires a global constructor [-Wglobal-constructors]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"global-constructors"}, | |||
[n]="global-constructors", | |||
[h]="declaration requires a global constructor", | |||
[i]=m, | [i]=m, | ||
[ | [e]="declaration requires a global constructor", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wglobal\\-constructors[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[ | [j]={{I,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())) {"},{I,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();"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,727: | Line 7,727: | ||
}, | }, | ||
["warn_global_destructor"]={ | ["warn_global_destructor"]={ | ||
[ | [g]="declaration requires a global destructor [-Wglobal-constructors]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"global-constructors"}, | |||
[n]="global-constructors", | |||
[h]="declaration requires a global destructor", | |||
[i]=m, | [i]=m, | ||
[ | [e]="declaration requires a global destructor", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wglobal\\-constructors[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[ | [j]={{H,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);"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,745: | Line 7,745: | ||
}, | }, | ||
["warn_gnu_inline_attribute_requires_inline"]={ | ["warn_gnu_inline_attribute_requires_inline"]={ | ||
[ | [g]="\'gnu_inline\' attribute requires function to be marked \'inline\', attribute ignored [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="\'gnu_inline\' attribute requires function to be marked \'inline\', attribute ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'gnu_inline\' attribute requires function to be marked \'inline\', attribute ignored", | ||
[a]=xb, | |||
[f]=r, | |||
[ | [d]={"ddf6ca0355a8",1240254748,"the __gnuc_inline__ attribute is actually named __gnu_inline__,","the __gnuc_inline__ attribute is actually named __gnu_inline__,"}, | ||
[f]= | [j]={{J,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);"}}, | ||
[d | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,762: | Line 7,762: | ||
}, | }, | ||
["warn_gnu_inline_cplusplus_without_extern"]={ | ["warn_gnu_inline_cplusplus_without_extern"]={ | ||
[ | [g]="\'gnu_inline\' attribute without \'extern\' in C++ treated as externally available, this changed in Clang 10 [-Wgnu-inline-cpp-without-extern]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"gnu-inline-cpp-without-extern"}, | |||
[n]="gnu-inline-cpp-without-extern", | |||
[h]="\'gnu_inline\' attribute without \'extern\' in C++ treated as externally available, this changed in Clang 10", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'gnu_inline\' attribute without \'extern\' in C\\+\\+ treated as externally available, this changed in Clang 10", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-inline\\-cpp\\-without\\-extern[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{J,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,779: | Line 7,779: | ||
}, | }, | ||
["warn_gnu_null_ptr_arith"]={ | ["warn_gnu_null_ptr_arith"]={ | ||
[ | [g]="arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension [-Wgnu-null-pointer-arithmetic]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={v,G,Jc,"gnu","gnu-null-pointer-arithmetic","null-pointer-arithmetic",jd}, | |||
[n]="gnu-null-pointer-arithmetic", | |||
[h]="arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension", | |||
[i]=m, | [i]=m, | ||
[ | [e]="arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-null\\-pointer\\-arithmetic[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[ | [j]={{P,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();"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,797: | Line 7,797: | ||
}, | }, | ||
["warn_guarded_pass_by_reference"]={ | ["warn_guarded_pass_by_reference"]={ | ||
[ | [g]="passing variable A by reference requires holding B ... [-Wthread-safety-reference]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={vc,"thread-safety-reference"}, | |||
[n]="thread-safety-reference", | |||
[h]="passing variable %1 by reference requires holding %0 %select{\'%2\'|\'%2\' exclusively}3", | |||
[i]=m, | [i]=m, | ||
[ | [e]="passing variable (.*?) by reference requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-reference[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"c60dc2cfb9ad",1411081346,"Thread Safety Analysis: add new warning flag, -Wthread-safety-reference, which","Thread Safety Analysis: add new warning flag, -Wthread-safety-reference, which"}, | |||
[j]={{mb,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;"},{mb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,815: | Line 7,815: | ||
}, | }, | ||
["warn_has_warning_invalid_option"]={ | ["warn_has_warning_invalid_option"]={ | ||
[ | [g]="__has_warning expected option name (e.g. \"-Wundef\") [-Wmalformed-warning-check]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"malformed-warning-check"}, | |||
[n]="malformed-warning-check", | |||
[h]="__has_warning expected option name (e.g. \"-Wundef\")", | |||
[i]=m, | [i]=m, | ||
[ | [e]="__has_warning expected option name \\(e\\.g\\. \"\\-Wundef\"\\)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmalformed\\-warning\\-check[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={"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>."}, | |||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,832: | Line 7,832: | ||
}, | }, | ||
["warn_header_guard"]={ | ["warn_header_guard"]={ | ||
[ | [g]="A is used as a header guard here, followed by #define of a different macro [-Wheader-guard]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"header-guard"}, | |||
[n]="header-guard", | |||
[h]="%0 is used as a header guard here, followed by #define of a different macro", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) is used as a header guard here, followed by \\#define of a different macro", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wheader\\-guard[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={"33a4b3db0de5",1371072057,"Introducing -Wheader-guard, a warning that checks header guards actually work","Introducing -Wheader-guard, a warning that checks header guards actually work"}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,849: | Line 7,849: | ||
}, | }, | ||
["warn_hip_omp_target_directives"]={ | ["warn_hip_omp_target_directives"]={ | ||
[ | [g]="HIP does not support OpenMP target directives; directive has been ignored [-Whip-omp-target-directives]", | ||
[ | [b]="error: ", | ||
[ | [c]="Downgradable Error", | ||
[ | [o]={"hip-omp-target-directives"}, | ||
[ | [n]="hip-omp-target-directives", | ||
[ | [h]="HIP does not support OpenMP target directives; directive has been ignored", | ||
[ | [i]="(?:error|warning|fatal error)\\: ", | ||
[ | [e]="HIP does not support OpenMP target directives; directive has been ignored", | ||
[ | [a]=" \\[[^\\]]*\\-Whip\\-omp\\-target\\-directives[^\\]]*\\]", | ||
[ | [f]=r, | ||
[ | [d]={Hb,1625925174,T,T}, | ||
[ | [j]={{"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);"}}, | ||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,866: | Line 7,866: | ||
}, | }, | ||
["warn_iboutlet_object_type"]={ | ["warn_iboutlet_object_type"]={ | ||
[ | [g]="... with A attribute must be an object type (invalid B) [-Winvalid-iboutlet]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"invalid-iboutlet"}, | |||
[n]="invalid-iboutlet", | |||
[h]="%select{instance variable|property}2 with %0 attribute must be an object type (invalid %1)", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:instance variable|property) with (.*?) attribute must be an object type \\(invalid (.*?)\\)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-iboutlet[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{J,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;"},{J,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,883: | Line 7,883: | ||
}, | }, | ||
["warn_iboutletcollection_property_assign"]={ | ["warn_iboutletcollection_property_assign"]={ | ||
[ | [g]="IBOutletCollection properties should be copy/strong and not assign [-Winvalid-iboutlet]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"invalid-iboutlet"}, | |||
[n]="invalid-iboutlet", | |||
[h]="IBOutletCollection properties should be copy/strong and not assign", | |||
[i]=m, | [i]=m, | ||
[ | [e]="IBOutletCollection properties should be copy\\/strong and not assign", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-iboutlet[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"f030d16c920f",1372181690,"Objective-C: Warn when IBOutletCollection property","Objective-C: Warn when IBOutletCollection property"}, | |||
[j]={{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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,900: | Line 7,900: | ||
}, | }, | ||
["warn_identity_field_assign"]={ | ["warn_identity_field_assign"]={ | ||
[ | [g]="assigning ... to itself [-Wself-assign-field]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,S,"self-assign","self-assign-field"}, | |||
[n]="self-assign-field", | |||
[h]="assigning %select{field|instance variable}0 to itself", | |||
[i]=m, | [i]=m, | ||
[ | [e]="assigning (?:field|instance variable) to itself", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wself\\-assign\\-field[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{P,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;"},{P,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,917: | Line 7,917: | ||
}, | }, | ||
["warn_ignored_clang_option"]={ | ["warn_ignored_clang_option"]={ | ||
[ | [g]="the flag \'A\' has been deprecated and will be ignored [-Wunused-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={ub}, | |||
[n]=ub, | |||
[h]="the flag \'%0\' has been deprecated and will be ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="the flag \'(.*?)\' has been deprecated and will be ignored", | ||
[a]=uc, | |||
[f]=v, | |||
[d]={"c91996817fa3",1498944981,"Add an option group for deprecated warnings. Add the removed","Add an option group for deprecated warnings. Add the removed"}, | |||
[j]={{Y,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"]={ | ||
[ | [g]="optimization flag \'A\' is not supported [-Wignored-optimization-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"ignored-optimization-argument",Fb}, | |||
[n]="ignored-optimization-argument", | |||
[h]="optimization flag \'%0\' is not supported", | |||
[i]=m, | [i]=m, | ||
[ | [e]="optimization flag \'(.*?)\' is not supported", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wignored\\-optimization\\-argument[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"2fe501eef908",1405079037,"GCC compatibility: Create a Group to ignore unsupported optimization.","GCC compatibility: Create a Group to ignore unsupported optimization."}, | |||
[j]={{Y,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"]={ | ||
[ | [g]="\'A\' is ignored since it is only supported for HIP [-Whip-only]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"hip-only"}, | |||
[n]="hip-only", | |||
[h]="\'%0\' is ignored since it is only supported for HIP", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' is ignored since it is only supported for HIP", | ||
[a]=" \\[(?:\\-Werror,)?\\-Whip\\-only[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"39f50da2a357",1568041174,"Support -fstack-clash-protection for x86","Support -fstack-clash-protection for x86"}, | |||
[j]={{Ec,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);"},{Ec,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"]={ | ||
[ | [g]="inheritance model ignored on ... [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="inheritance model ignored on %select{primary template|partial specialization}0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="inheritance model ignored on (?:primary template|partial specialization)", | ||
[a]=xb, | |||
[f]=r, | |||
[d]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords","Sema: Diagnose improper application of inheritance keywords"}, | |||
[j]={{J,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*/;"},{J,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*/;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,976: | Line 7,976: | ||
}, | }, | ||
["warn_ignored_objc_externally_retained"]={ | ["warn_ignored_objc_externally_retained"]={ | ||
[ | [g]="\'objc_externally_retained\' can only be applied to local variables ... [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="\'objc_externally_retained\' can only be applied to local variables %select{of retainable type|with strong ownership}0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'objc_externally_retained\' can only be applied to local variables (?:of retainable type|with strong ownership)", | ||
[a]=xb, | |||
[f]=r, | |||
[d]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained","[ObjCARC] Add an new attribute, objc_externally_retained"}, | |||
[j]={{J,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;"},{J,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;"},{J,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 7,993: | Line 7,993: | ||
}, | }, | ||
["warn_ignoring_fdiscard_for_bitcode"]={ | ["warn_ignoring_fdiscard_for_bitcode"]={ | ||
[ | [g]="ignoring -fdiscard-value-names for LLVM Bitcode [-Wunused-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={ub}, | |||
[n]=ub, | |||
[h]="ignoring -fdiscard-value-names for LLVM Bitcode", | |||
[i]=m, | [i]=m, | ||
[ | [e]="ignoring \\-fdiscard\\-value\\-names for LLVM Bitcode", | ||
[a]=uc, | |||
[f]=v, | |||
[d]={ec,1534346725,pb,pb}, | |||
[j]={{Y,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"]={ | ||
[ | [g]="ignoring invalid -ftabstop value \'A\', using default value B", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="ignoring invalid -ftabstop value \'%0\', using default value %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="ignoring invalid \\-ftabstop value \'(.*?)\', using default value (.*?)", | ||
[a]=Ib, | |||
[f]=v, | |||
[ | [d]={"3d756f1a9e05",1263352010,"diagnose invalid values of -ftabstop, patch by Christian Adaker!","diagnose invalid values of -ftabstop, patch by Christian Adaker!"}, | ||
[ | [j]={{Ec,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;"}}, | ||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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"} | ||
Line 8,022: | Line 8,022: | ||
}, | }, | ||
["warn_ignoring_verify_debuginfo_preserve_export"]={ | ["warn_ignoring_verify_debuginfo_preserve_export"]={ | ||
[ | [g]="ignoring -fverify-debuginfo-preserve-export=A because -fverify-debuginfo-preserve wasn\'t enabled [-Wunused-command-line-argument]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={ub}, | |||
[n]=ub, | |||
[h]="ignoring -fverify-debuginfo-preserve-export=%0 because -fverify-debuginfo-preserve wasn\'t enabled", | |||
[i]=m, | [i]=m, | ||
[ | [e]="ignoring \\-fverify\\-debuginfo\\-preserve\\-export\\=(.*?) because \\-fverify\\-debuginfo\\-preserve wasn\'t enabled", | ||
[a]=v, | |||
[f]=v, | |||
[d]={"0175999805cf",1585492323,Cc,Cc}, | |||
[j]={{Ec,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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"} | ||
Line 8,039: | Line 8,039: | ||
}, | }, | ||
["warn_imp_cast_drops_unaligned"]={ | ["warn_imp_cast_drops_unaligned"]={ | ||
[ | [g]="implicit cast from type A to type B drops __unaligned qualifier [-Wunaligned-qualifier-implicit-cast]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"unaligned-qualifier-implicit-cast"}, | |||
[n]="unaligned-qualifier-implicit-cast", | |||
[h]="implicit cast from type %0 to type %1 drops __unaligned qualifier", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit cast from type (.*?) to type (.*?) drops __unaligned qualifier", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunaligned\\-qualifier\\-implicit\\-cast[^\\]]*\\]", | |||
[f]=r, | |||
[d]={ld,1620118562,Zb,Zb}, | |||
[j]={{ac,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,056: | Line 8,056: | ||
}, | }, | ||
["warn_impcast_bitfield_precision_constant"]={ | ["warn_impcast_bitfield_precision_constant"]={ | ||
[ | [g]="implicit truncation from A to bit-field changes value from B to C [-Wbitfield-constant-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"bitfield-constant-conversion","constant-conversion",cb,X}, | |||
[n]="bitfield-constant-conversion", | |||
[h]="implicit truncation from %2 to bit-field changes value from %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit truncation from (.*?) to bit\\-field changes value from (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-constant\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"d2a5312e14e3",1289345087,"Add a warning for implicit truncation of constant values due to","Add a warning for implicit truncation of constant values due to"}, | |||
[j]={{x,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,073: | Line 8,073: | ||
}, | }, | ||
["warn_impcast_bool_to_null_pointer"]={ | ["warn_impcast_bool_to_null_pointer"]={ | ||
[ | [g]="initialization of pointer of type A to null from a constant boolean expression [-Wbool-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"bool-conversion","bool-conversions",cb,X}, | |||
[n]="bool-conversion", | |||
[h]="initialization of pointer of type %0 to null from a constant boolean expression", | |||
[i]=m, | [i]=m, | ||
[ | [e]="initialization of pointer of type (.*?) to null from a constant boolean expression", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wbool\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"66a7b0476768",1302335297,"Clean up the bool conversion warning. Group it with other conversion","Clean up the bool conversion warning. Group it with other conversion"}, | |||
[j]={{"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());"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,090: | Line 8,090: | ||
}, | }, | ||
["warn_impcast_complex_scalar"]={ | ["warn_impcast_complex_scalar"]={ | ||
[ | [g]="implicit conversion discards imaginary component: A to B [-Wconversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,X}, | |||
[n]=cb, | |||
[h]="implicit conversion discards imaginary component: %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion discards imaginary component\\: (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wconversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"fceb64bd044f",1257564610,wc,wc}, | |||
[j]={{x,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"]={ | ||
[ | [g]="implicit conversion from constant value A to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO [-Wobjc-bool-constant-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"constant-conversion",cb,X,"objc-bool-constant-conversion","objc-signed-char-bool"}, | |||
[n]="objc-bool-constant-conversion", | |||
[h]="implicit conversion from constant value %0 to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion from constant value (.*?) to \'BOOL\'; the only well defined values for \'BOOL\' are YES and NO", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-bool\\-constant\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{x,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);"},{x,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));"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,122: | Line 8,122: | ||
}, | }, | ||
["warn_impcast_different_enum_types"]={ | ["warn_impcast_different_enum_types"]={ | ||
[ | [g]="implicit conversion from enumeration type A to different enumeration type B [-Wenum-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={cb,"enum-conversion",X}, | |||
[n]="enum-conversion", | |||
[h]="implicit conversion from enumeration type %0 to different enumeration type %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion from enumeration type (.*?) to different enumeration type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wenum\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"a78f193e7ecf",1298342707,"Warn about implicit conversions between values of different, named","Warn about implicit conversions between values of different, named"}, | |||
[j]={{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,139: | Line 8,139: | ||
}, | }, | ||
["warn_impcast_double_promotion"]={ | ["warn_impcast_double_promotion"]={ | ||
[ | [g]="implicit conversion increases floating-point precision: A to B [-Wdouble-promotion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"double-promotion"}, | |||
[n]="double-promotion", | |||
[h]="implicit conversion increases floating-point precision: %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion increases floating\\-point precision\\: (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdouble\\-promotion[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"148e0d3d5d8d",1446078532,"[Sema] Implement -Wdouble-promotion for clang.","[Sema] Implement -Wdouble-promotion for clang."}, | |||
[j]={{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,157: | Line 8,157: | ||
}, | }, | ||
["warn_impcast_fixed_point_range"]={ | ["warn_impcast_fixed_point_range"]={ | ||
[ | [g]="implicit conversion from A cannot fit within the range of values for B [-Wimplicit-fixed-point-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"implicit-fixed-point-conversion"}, | |||
[n]="implicit-fixed-point-conversion", | |||
[h]="implicit conversion from %0 cannot fit within the range of values for %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion from (.*?) cannot fit within the range of values for (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-fixed\\-point\\-conversion[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"d3f3e16293e5",1547845465,"[Fixed Point Arithmetic] Fixed Point Addition Constant Expression Evaluation","[Fixed Point Arithmetic] Fixed Point Addition Constant Expression Evaluation"}, | |||
[j]={{x,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));"},{x,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));"},{x,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));"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,174: | Line 8,174: | ||
}, | }, | ||
["warn_impcast_float_integer"]={ | ["warn_impcast_float_integer"]={ | ||
[ | [g]="implicit conversion turns floating-point number into integer: A to B [-Wfloat-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,"float-conversion",X}, | |||
[n]="float-conversion", | |||
[h]="implicit conversion turns floating-point number into integer: %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion turns floating\\-point number into integer\\: (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfloat\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"fceb64bd044f",1257564610,wc,wc}, | |||
[j]={{x,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);"},{x,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);"},{x,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);"},{x,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);"},{x,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);"},{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,192: | Line 8,192: | ||
}, | }, | ||
["warn_impcast_float_precision"]={ | ["warn_impcast_float_precision"]={ | ||
[ | [g]="implicit conversion loses floating-point precision: A to B [-Wimplicit-float-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,gd,X}, | |||
[n]=gd, | |||
[h]="implicit conversion loses floating-point precision: %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion loses floating\\-point precision\\: (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-float\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"fceb64bd044f",1257564610,wc,wc}, | |||
[j]={{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,210: | Line 8,210: | ||
}, | }, | ||
["warn_impcast_float_result_precision"]={ | ["warn_impcast_float_result_precision"]={ | ||
[ | [g]="implicit conversion when assigning computation result loses floating-point precision: A to B [-Wimplicit-float-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,gd,X}, | |||
[n]=gd, | |||
[h]="implicit conversion when assigning computation result loses floating-point precision: %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion when assigning computation result loses floating\\-point precision\\: (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-float\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"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."}, | |||
[j]={{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,228: | Line 8,228: | ||
}, | }, | ||
["warn_impcast_float_to_integer"]={ | ["warn_impcast_float_to_integer"]={ | ||
[ | [g]="implicit conversion from A to B changes value from C to D [-Wfloat-overflow-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,"float-conversion","float-overflow-conversion",X}, | |||
[n]="float-overflow-conversion", | |||
[h]="implicit conversion from %0 to %1 changes value from %2 to %3", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion from (.*?) to (.*?) changes value from (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfloat\\-overflow\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"be234c30ada7",1461272695,"Split interesting warnings off from -Wfloat-conversion","Split interesting warnings off from -Wfloat-conversion"}, | |||
[j]={{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,246: | Line 8,246: | ||
}, | }, | ||
["warn_impcast_float_to_integer_out_of_range"]={ | ["warn_impcast_float_to_integer_out_of_range"]={ | ||
[ | [g]="implicit conversion of out of range value from A to B is undefined [-Wfloat-overflow-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,"float-conversion","float-overflow-conversion",X}, | |||
[n]="float-overflow-conversion", | |||
[h]="implicit conversion of out of range value from %0 to %1 is undefined", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion of out of range value from (.*?) to (.*?) is undefined", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfloat\\-overflow\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"7130a9393470",1525726376,"Correct warning on Float->Integer conversions.","Correct warning on Float->Integer conversions."}, | |||
[j]={{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,264: | Line 8,264: | ||
}, | }, | ||
["warn_impcast_float_to_integer_zero"]={ | ["warn_impcast_float_to_integer_zero"]={ | ||
[ | [g]="implicit conversion from A to B changes non-zero value from C to D [-Wfloat-zero-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,"float-conversion","float-zero-conversion",X}, | |||
[n]="float-zero-conversion", | |||
[h]="implicit conversion from %0 to %1 changes non-zero value from %2 to %3", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion from (.*?) to (.*?) changes non\\-zero value from (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfloat\\-zero\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"be234c30ada7",1461272695,"Split interesting warnings off from -Wfloat-conversion","Split interesting warnings off from -Wfloat-conversion"}, | |||
[j]={{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,282: | Line 8,282: | ||
}, | }, | ||
["warn_impcast_float_to_objc_signed_char_bool"]={ | ["warn_impcast_float_to_objc_signed_char_bool"]={ | ||
[ | [g]="implicit conversion from floating-point type A to \'BOOL\' [-Wobjc-signed-char-bool-implicit-float-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={cb,gd,X,"objc-signed-char-bool","objc-signed-char-bool-implicit-float-conversion"}, | |||
[n]="objc-signed-char-bool-implicit-float-conversion", | |||
[h]="implicit conversion from floating-point type %0 to \'BOOL\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion from floating\\-point type (.*?) to \'BOOL\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-signed\\-char\\-bool\\-implicit\\-float\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{x,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());"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,299: | Line 8,299: | ||
}, | }, | ||
["warn_impcast_floating_point_to_bool"]={ | ["warn_impcast_floating_point_to_bool"]={ | ||
[ | [g]="implicit conversion turns floating-point number into bool: A to B [-Wimplicit-conversion-floating-point-to-bool]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"implicit-conversion-floating-point-to-bool"}, | |||
[n]="implicit-conversion-floating-point-to-bool", | |||
[h]="implicit conversion turns floating-point number into bool: %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion turns floating\\-point number into bool\\: (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-conversion\\-floating\\-point\\-to\\-bool[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"f4ad23292111",1346168670,"Warn about suspicious implicit conversions from floating point to bool","Warn about suspicious implicit conversions from floating point to bool"}, | |||
[j]={{x,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);"},{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,316: | Line 8,316: | ||
}, | }, | ||
["warn_impcast_high_order_zero_bits"]={ | ["warn_impcast_high_order_zero_bits"]={ | ||
[ | [g]="higher order bits are zeroes after implicit conversion [-Wimplicit-int-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,"implicit-int-conversion",X}, | |||
[n]="implicit-int-conversion", | |||
[h]="higher order bits are zeroes after implicit conversion", | |||
[i]=m, | [i]=m, | ||
[ | [e]="higher order bits are zeroes after implicit conversion", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-int\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"cf7d2256d6b2",1538460150,"Added warning for unary minus used with unsigned type","Added warning for unary minus used with unsigned type"}, | |||
[ | [j]={{x,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);"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,334: | Line 8,334: | ||
}, | }, | ||
["warn_impcast_int_to_objc_signed_char_bool"]={ | ["warn_impcast_int_to_objc_signed_char_bool"]={ | ||
[ | [g]="implicit conversion from integral type A to \'BOOL\' [-Wobjc-signed-char-bool-implicit-int-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,"implicit-int-conversion",X,"objc-signed-char-bool","objc-signed-char-bool-implicit-int-conversion"}, | |||
[n]="objc-signed-char-bool-implicit-int-conversion", | |||
[h]="implicit conversion from integral type %0 to \'BOOL\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion from integral type (.*?) to \'BOOL\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-signed\\-char\\-bool\\-implicit\\-int\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{x,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());"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,352: | Line 8,352: | ||
}, | }, | ||
["warn_impcast_integer_64_32"]={ | ["warn_impcast_integer_64_32"]={ | ||
[ | [g]="implicit conversion loses integer precision: A to B [-Wshorten-64-to-32]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,X,"shorten-64-to-32"}, | |||
[n]="shorten-64-to-32", | |||
[h]="implicit conversion loses integer precision: %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion loses integer precision\\: (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wshorten\\-64\\-to\\-32[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"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"}, | |||
[j]={{x,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,"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,370: | Line 8,370: | ||
}, | }, | ||
["warn_impcast_integer_float_precision"]={ | ["warn_impcast_integer_float_precision"]={ | ||
[ | [g]="implicit conversion from A to B may lose precision [-Wimplicit-int-float-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,gd,"implicit-int-float-conversion",X}, | |||
[n]="implicit-int-float-conversion", | |||
[h]="implicit conversion from %0 to %1 may lose precision", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion from (.*?) to (.*?) may lose precision", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-int\\-float\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"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"}, | |||
[j]={{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,388: | Line 8,388: | ||
}, | }, | ||
["warn_impcast_integer_float_precision_constant"]={ | ["warn_impcast_integer_float_precision_constant"]={ | ||
[ | [g]="implicit conversion from A to B changes value from C to D [-Wimplicit-const-int-float-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={cb,"implicit-const-int-float-conversion",gd,"implicit-int-float-conversion",X}, | |||
[n]="implicit-const-int-float-conversion", | |||
[h]="implicit conversion from %2 to %3 changes value from %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion from (.*?) to (.*?) changes value from (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-const\\-int\\-float\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"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"}, | |||
[j]={{x,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));"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,405: | Line 8,405: | ||
}, | }, | ||
["warn_impcast_integer_precision"]={ | ["warn_impcast_integer_precision"]={ | ||
[ | [g]="implicit conversion loses integer precision: A to B [-Wimplicit-int-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,"implicit-int-conversion",X}, | |||
[n]="implicit-int-conversion", | |||
[h]="implicit conversion loses integer precision: %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion loses integer precision\\: (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-int\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"fceb64bd044f",1257564610,wc,wc}, | |||
[j]={{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,423: | Line 8,423: | ||
}, | }, | ||
["warn_impcast_integer_precision_constant"]={ | ["warn_impcast_integer_precision_constant"]={ | ||
[ | [g]="implicit conversion from A to B changes value from C to D [-Wconstant-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"constant-conversion",cb,X}, | |||
[n]="constant-conversion", | |||
[h]="implicit conversion from %2 to %3 changes value from %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion from (.*?) to (.*?) changes value from (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wconstant\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"18a2c2c0b9d2",1289341332,"Split out -Wconversion warnings about constant precision into their","Split out -Wconversion warnings about constant precision into their"}, | |||
[j]={{x,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));"},{x,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));"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,440: | Line 8,440: | ||
}, | }, | ||
["warn_impcast_integer_sign"]={ | ["warn_impcast_integer_sign"]={ | ||
[ | [g]="implicit conversion changes signedness: A to B [-Wsign-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,X,Dd}, | |||
[n]=Dd, | |||
[h]="implicit conversion changes signedness: %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion changes signedness\\: (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wsign\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"cc7e5bff5c80",1273136313,"Rearchitect -Wconversion and -Wsign-compare. Instead of computing them","Rearchitect -Wconversion and -Wsign-compare. Instead of computing them"}, | |||
[j]={{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,458: | Line 8,458: | ||
}, | }, | ||
["warn_impcast_integer_sign_conditional"]={ | ["warn_impcast_integer_sign_conditional"]={ | ||
[ | [g]="operand of ? changes signedness: A to B [-Wsign-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,X,Dd}, | |||
[n]=Dd, | |||
[h]="operand of ? changes signedness: %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="operand of \\? changes signedness\\: (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wsign\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"cc7e5bff5c80",1273136313,"Rearchitect -Wconversion and -Wsign-compare. Instead of computing them","Rearchitect -Wconversion and -Wsign-compare. Instead of computing them"}, | |||
[j]={{x,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;"},{x,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))"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,476: | Line 8,476: | ||
}, | }, | ||
["warn_impcast_literal_float_to_integer"]={ | ["warn_impcast_literal_float_to_integer"]={ | ||
[ | [g]="implicit conversion from A to B changes value from C to D [-Wliteral-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={cb,"literal-conversion",X}, | |||
[n]="literal-conversion", | |||
[h]="implicit conversion from %0 to %1 changes value from %2 to %3", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion from (.*?) to (.*?) changes value from (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wliteral\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"22c7a79a1da4",1297940749,"Implement a sub-group of -Wconversion: -Wliteral-conversion. This","Implement a sub-group of -Wconversion: -Wliteral-conversion. This"}, | |||
[j]={{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,493: | Line 8,493: | ||
}, | }, | ||
["warn_impcast_literal_float_to_integer_out_of_range"]={ | ["warn_impcast_literal_float_to_integer_out_of_range"]={ | ||
[ | [g]="implicit conversion of out of range value from A to B is undefined [-Wliteral-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={cb,"literal-conversion",X}, | |||
[n]="literal-conversion", | |||
[h]="implicit conversion of out of range value from %0 to %1 is undefined", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion of out of range value from (.*?) to (.*?) is undefined", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wliteral\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"7130a9393470",1525726376,"Correct warning on Float->Integer conversions.","Correct warning on Float->Integer conversions."}, | |||
[j]={{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,510: | Line 8,510: | ||
}, | }, | ||
["warn_impcast_nonnegative_result"]={ | ["warn_impcast_nonnegative_result"]={ | ||
[ | [g]="the resulting value is always non-negative after implicit conversion [-Wsign-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,X,Dd}, | |||
[n]=Dd, | |||
[h]="the resulting value is always non-negative after implicit conversion", | |||
[i]=m, | [i]=m, | ||
[ | [e]="the resulting value is always non\\-negative after implicit conversion", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wsign\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"cf7d2256d6b2",1538460150,"Added warning for unary minus used with unsigned type","Added warning for unary minus used with unsigned type"}, | |||
[j]={{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,528: | Line 8,528: | ||
}, | }, | ||
["warn_impcast_null_pointer_to_integer"]={ | ["warn_impcast_null_pointer_to_integer"]={ | ||
[ | [g]="implicit conversion of ... constant to A [-Wnull-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={cb,"conversion-null",X,"null-conversion"}, | |||
[n]="null-conversion", | |||
[h]="implicit conversion of %select{NULL|nullptr}0 constant to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion of (?:NULL|nullptr) constant to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wnull\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"beaf34531ef1",1306699142,"Add a new warning on NULL pointer constant to integer conversion.","Add a new warning on NULL pointer constant to integer conversion."}, | |||
[j]={{x,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()))"},{x,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));"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,545: | Line 8,545: | ||
}, | }, | ||
["warn_impcast_objective_c_literal_to_bool"]={ | ["warn_impcast_objective_c_literal_to_bool"]={ | ||
[ | [g]="implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={cb,X,"objc-literal-conversion"}, | |||
[n]="objc-literal-conversion", | |||
[h]="implicit boolean conversion of Objective-C object literal always evaluates to true", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit boolean conversion of Objective\\-C object literal always evaluates to true", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-literal\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"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"}, | |||
[j]={{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,562: | Line 8,562: | ||
}, | }, | ||
["warn_impcast_pointer_to_bool"]={ | ["warn_impcast_pointer_to_bool"]={ | ||
[ | [g]="address of... \'A\' will always evaluate to \'true\' [-Wpointer-bool-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"address","bool-conversion","bool-conversions",cb,X,"pointer-bool-conversion"}, | |||
[n]="pointer-bool-conversion", | |||
[h]="address of%select{| function| array}0 \'%1\' will always evaluate to \'true\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="address of(?:| function| array) \'(.*?)\' will always evaluate to \'true\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wpointer\\-bool\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"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"}, | |||
[j]={{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,579: | Line 8,579: | ||
}, | }, | ||
["warn_impcast_single_bit_bitield_precision_constant"]={ | ["warn_impcast_single_bit_bitield_precision_constant"]={ | ||
[ | [g]="implicit truncation from A to a one-bit wide bit-field changes value from B to C [-Wsingle-bit-bitfield-constant-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"bitfield-constant-conversion","constant-conversion",cb,X,"single-bit-bitfield-constant-conversion"}, | |||
[n]="single-bit-bitfield-constant-conversion", | |||
[h]="implicit truncation from %2 to a one-bit wide bit-field changes value from %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit truncation from (.*?) to a one\\-bit wide bit\\-field changes value from (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wsingle\\-bit\\-bitfield\\-constant\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{x,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,596: | Line 8,596: | ||
}, | }, | ||
["warn_impcast_string_literal_to_bool"]={ | ["warn_impcast_string_literal_to_bool"]={ | ||
[ | [g]="implicit conversion turns string literal into bool: A to B [-Wstring-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,X,"string-conversion"}, | |||
[n]="string-conversion", | |||
[h]="implicit conversion turns string literal into bool: %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion turns string literal into bool\\: (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wstring\\-conversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"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"}, | |||
[j]={{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,614: | Line 8,614: | ||
}, | }, | ||
["warn_impcast_vector_scalar"]={ | ["warn_impcast_vector_scalar"]={ | ||
[ | [g]="implicit conversion turns vector to scalar: A to B [-Wconversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={cb,X}, | |||
[n]=cb, | |||
[h]="implicit conversion turns vector to scalar: %0 to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit conversion turns vector to scalar\\: (.*?) to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wconversion[^\\]]*\\]", | |||
[f]=eb, | |||
[d]={"fceb64bd044f",1257564610,wc,wc}, | |||
[j]={{x,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"]={ | ||
[ | [g]="class property A requires method B to be defined - use @dynamic or provide a method implementation in this class implementation [-Wobjc-property-implementation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"objc-property-implementation"}, | |||
[n]="objc-property-implementation", | |||
[h]="class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this class implementation", | |||
[i]=m, | [i]=m, | ||
[ | [e]="class property (.*?) requires method (.*?) to be defined \\- use @dynamic or provide a method implementation in this class implementation", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-implementation[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"16a7d637dd44",1460502115,"ObjC class properties: add diagnostics for unimplemented class properties.","ObjC class properties: add diagnostics for unimplemented class properties."}, | |||
[j]={{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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,646: | Line 8,646: | ||
}, | }, | ||
["warn_impl_required_in_category_for_class_property"]={ | ["warn_impl_required_in_category_for_class_property"]={ | ||
[ | [g]="class property A requires method B to be defined - use @dynamic or provide a method implementation in this category [-Wobjc-property-implementation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"objc-property-implementation"}, | |||
[n]="objc-property-implementation", | |||
[h]="class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category", | |||
[i]=m, | [i]=m, | ||
[ | [e]="class property (.*?) requires method (.*?) to be defined \\- use @dynamic or provide a method implementation in this category", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-implementation[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"16a7d637dd44",1460502115,"ObjC class properties: add diagnostics for unimplemented class properties.","ObjC class properties: add diagnostics for unimplemented class properties."}, | |||
[j]={{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"]={ | ||
[ | [g]="default assign attribute on property A which implements NSCopying protocol is not appropriate with -fobjc-gc[-only]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="default assign attribute on property %0 which implements NSCopying protocol is not appropriate with -fobjc-gc[-only]", | |||
[i]=m, | [i]=m, | ||
[ | [e]="default assign attribute on property (.*?) which implements NSCopying protocol is not appropriate with \\-fobjc\\-gc\\[\\-only\\]", | ||
[a]=Ib, | |||
[f]=r, | |||
[ | [d]={"3f8917abf6f2",1250028145,"Patch to warn if a property which is \'assign\' by default","Patch to warn if a property which is \'assign\' by default"}, | ||
[ | [j]={{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;"}}, | ||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,675: | Line 8,675: | ||
}, | }, | ||
["warn_implicit_atomic_property"]={ | ["warn_implicit_atomic_property"]={ | ||
[ | [g]="property is assumed atomic by default [-Wimplicit-atomic-properties]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"atomic-properties","implicit-atomic-properties"}, | |||
[n]="implicit-atomic-properties", | |||
[h]="property is assumed atomic by default", | |||
[i]=m, | [i]=m, | ||
[ | [e]="property is assumed atomic by default", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-atomic\\-properties[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"382c040da2a6",1292624896,"Warn when synthesizing a property which is","Warn when synthesizing a property which is"}, | |||
[ | [j]={{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);"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,693: | Line 8,693: | ||
}, | }, | ||
["warn_implicit_decl_no_jmp_buf"]={ | ["warn_implicit_decl_no_jmp_buf"]={ | ||
[ | [g]="declaration of built-in function \'A\' requires the declaration of the \'jmp_buf\' type, commonly provided in the header <setjmp.h>. [-Wincomplete-setjmp-declaration]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"incomplete-setjmp-declaration"}, | |||
[n]="incomplete-setjmp-declaration", | |||
[h]="declaration of built-in function \'%0\' requires the declaration of the \'jmp_buf\' type, commonly provided in the header <setjmp.h>.", | |||
[i]=m, | [i]=m, | ||
[ | [e]="declaration of built\\-in function \'(.*?)\' requires the declaration of the \'jmp_buf\' type, commonly provided in the header \\<setjmp\\.h\\>\\.", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-setjmp\\-declaration[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"3be25e79477d",1564550198,"[Fix] Customize warnings for missing built-in types","[Fix] Customize warnings for missing built-in types"}, | |||
[j]={{I,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"]={ | ||
[ | [g]="declaration of built-in function \'A\' requires inclusion of the header <B> [-Wbuiltin-requires-header]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"builtin-requires-header"}, | |||
[n]="builtin-requires-header", | |||
[h]="declaration of built-in function \'%1\' requires inclusion of the header <%0>", | |||
[i]=m, | [i]=m, | ||
[ | [e]="declaration of built\\-in function \'(.*?)\' requires inclusion of the header \\<(.*?)\\>", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-requires\\-header[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"5d96e0a3a795",1405112031,"Consolidate header inclusion diagnostics","Consolidate header inclusion diagnostics"}, | |||
[j]={{I,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,724: | Line 8,724: | ||
}, | }, | ||
["warn_implicit_function_decl"]={ | ["warn_implicit_function_decl"]={ | ||
[ | [g]="implicit declaration of function A [-Wimplicit-function-declaration]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={G,M,"implicit","implicit-function-declaration",S}, | |||
[n]="implicit-function-declaration", | |||
[h]="implicit declaration of function %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="implicit declaration of function (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-function\\-declaration[^\\]]*\\]", | |||
[f]=r, | |||
[d]={ud,1236199783,md,xd}, | |||
[j]={{I,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,742: | Line 8,742: | ||
}, | }, | ||
["warn_implicitly_retains_self"]={ | ["warn_implicitly_retains_self"]={ | ||
[ | [g]="block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior [-Wimplicit-retain-self]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"implicit-retain-self"}, | |||
[n]="implicit-retain-self", | |||
[h]="block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior", | |||
[i]=m, | [i]=m, | ||
[ | [e]="block implicitly retains \'self\'; explicitly mention \'self\' to indicate this is intended behavior", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-retain\\-self[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[ | [j]={{I,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->\");"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,760: | Line 8,760: | ||
}, | }, | ||
["warn_import_on_definition"]={ | ["warn_import_on_definition"]={ | ||
[ | [g]="import ... cannot be applied to a function with a definition [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="import %select{module|name}0 cannot be applied to a function with a definition", | |||
[i]=m, | [i]=m, | ||
[ | [e]="import (?:module|name) cannot be applied to a function with a definition", | ||
[a]=xb, | |||
[f]=v, | |||
[d]={Nd,1576908663,nc,nc}, | |||
[j]={{J,7688,"WebAssemblyImportModuleAttr *Sema::mergeImportModuleAttr(Decl *D, const WebAssemblyImportModuleAttr &AL) {\n // ...\n if (FD->hasBody()) {\n Diag(AL.getLoc(), diag::warn_import_on_definition) << 0;"},{J,7708,"WebAssemblyImportNameAttr *Sema::mergeImportNameAttr(Decl *D, const WebAssemblyImportNameAttr &AL) {\n // ...\n if (FD->hasBody()) {\n Diag(AL.getLoc(), diag::warn_import_on_definition) << 1;"},{J,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;"},{J,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"]={ | ||
[ | [g]="direct base A is inaccessible due to ambiguity:B [-Winaccessible-base]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"inaccessible-base"}, | |||
[n]="inaccessible-base", | |||
[h]="direct base %0 is inaccessible due to ambiguity:%1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="direct base (.*?) is inaccessible due to ambiguity\\:(.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winaccessible\\-base[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"44b21749b9d6",1421631842,"PR6037","PR6037"}, | |||
[j]={{H,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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:"} | ||
Line 8,791: | Line 8,791: | ||
}, | }, | ||
["warn_incompatible_analyzer_plugin_api"]={ | ["warn_incompatible_analyzer_plugin_api"]={ | ||
[ | [g]="checker plugin \'A\' is not compatible with this version of the analyzer [-Wanalyzer-incompatible-plugin]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"analyzer-incompatible-plugin"}, | |||
[n]="analyzer-incompatible-plugin", | |||
[h]="checker plugin \'%0\' is not compatible with this version of the analyzer", | |||
[i]=m, | [i]=m, | ||
[ | [e]="checker plugin \'(.*?)\' is not compatible with this version of the analyzer", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wanalyzer\\-incompatible\\-plugin[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"075d73bcced3",1313556963,"[analyzer] Add a warning for an incompatible plugin version.","[analyzer] Add a warning for an incompatible plugin version."}, | |||
[j]={{"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"]={ | ||
[ | [g]="\'-mbranch-protection=\' option is incompatible with the \'A\' architecture [-Wbranch-protection]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"branch-protection"}, | |||
[n]="branch-protection", | |||
[h]="\'-mbranch-protection=\' option is incompatible with the \'%0\' architecture", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'\\-mbranch\\-protection\\=\' option is incompatible with the \'(.*?)\' architecture", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wbranch\\-protection[^\\]]*\\]", | |||
[f]="Nullability Issue", | |||
[d]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for","Add support for floating-point option `ffp-eval-method` and for"}, | |||
[j]={{Y,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"]={ | ||
[ | [g]="target exception specification is not superset of source [-Wincompatible-exception-spec]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"incompatible-exception-spec"}, | |||
[n]="incompatible-exception-spec", | |||
[h]="target exception specification is not superset of source", | |||
[i]=m, | [i]=m, | ||
[ | [e]="target exception specification is not superset of source", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-exception\\-spec[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"1be59c510612",1477099939,"[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for","[c++1z] P0012R1: Implement a few remaining pieces: downgrade diagnostic for"}, | ||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,836: | Line 8,836: | ||
}, | }, | ||
["warn_incompatible_qualified_id"]={ | ["warn_incompatible_qualified_id"]={ | ||
[ | [g]="...", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="%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", | |||
[i]=m, | [i]=m, | ||
[ | [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))", | ||
[a]=Ib, | |||
[f]=r, | |||
[ | [d]={Tb,1237025389,fb,fb}, | ||
[ | [j]={{P,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;"},{P,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())"}}, | ||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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>\'"} | ||
Line 8,851: | Line 8,851: | ||
}, | }, | ||
["warn_incompatible_sysroot"]={ | ["warn_incompatible_sysroot"]={ | ||
[ | [g]="using sysroot for \'A\' but targeting \'B\' [-Wincompatible-sysroot]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"incompatible-sysroot"}, | |||
[n]="incompatible-sysroot", | |||
[h]="using sysroot for \'%0\' but targeting \'%1\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="using sysroot for \'(.*?)\' but targeting \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-sysroot[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"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"}, | |||
[j]={{fd,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,868: | Line 8,868: | ||
}, | }, | ||
["warn_incompatible_vectors"]={ | ["warn_incompatible_vectors"]={ | ||
[ | [g]="incompatible vector types ... [-Wvector-conversion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"vector-conversion","vector-conversions"}, | |||
[n]="vector-conversion", | |||
[h]="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", | |||
[i]=m, | [i]=m, | ||
[ | [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))", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wvector\\-conversion[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Tb,1237025389,fb,fb}, | |||
[j]={{P,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,886: | Line 8,886: | ||
}, | }, | ||
["warn_incomplete_encoded_type"]={ | ["warn_incomplete_encoded_type"]={ | ||
[ | [g]="encoding of A type is incomplete because B component has unknown encoding [-Wencode-type]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"encode-type"}, | |||
[n]="encode-type", | |||
[h]="encoding of %0 type is incomplete because %1 component has unknown encoding", | |||
[i]=m, | [i]=m, | ||
[ | [e]="encoding of (.*?) type is incomplete because (.*?) component has unknown encoding", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wencode\\-type[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"4bf437ecd8cc",1408749472,"Objective-C. Warn when @encode\'ing provides an incomplete","Objective-C. Warn when @encode\'ing provides an incomplete"}, | |||
[j]={{Yc,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,903: | Line 8,903: | ||
}, | }, | ||
["warn_inconsistent_array_form"]={ | ["warn_inconsistent_array_form"]={ | ||
[ | [g]="argument A of type B with mismatched bound [-Warray-parameter]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={G,M,"array-parameter",S}, | |||
[n]="array-parameter", | |||
[h]="argument %0 of type %1 with mismatched bound", | |||
[i]=m, | [i]=m, | ||
[ | [e]="argument (.*?) of type (.*?) with mismatched bound", | ||
[a]=" \\[(?:\\-Werror,)?\\-Warray\\-parameter[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{I,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,921: | Line 8,921: | ||
}, | }, | ||
["warn_inconsistent_destructor_marked_not_override_overriding"]={ | ["warn_inconsistent_destructor_marked_not_override_overriding"]={ | ||
[ | [g]="A overrides a destructor but is not marked \'override\' [-Winconsistent-missing-destructor-override]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"inconsistent-missing-destructor-override"}, | |||
[n]="inconsistent-missing-destructor-override", | |||
[h]="%0 overrides a destructor but is not marked \'override\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) overrides a destructor but is not marked \'override\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winconsistent\\-missing\\-destructor\\-override[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"14f6bfcb52e7",1582847864,Uc,Uc}, | |||
[j]={{H,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"]={ | ||
[ | [g]="A overrides a member function but is not marked \'override\' [-Winconsistent-missing-override]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"inconsistent-missing-override"}, | |||
[n]="inconsistent-missing-override", | |||
[h]="%0 overrides a member function but is not marked \'override\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) overrides a member function but is not marked \'override\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winconsistent\\-missing\\-override[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"14f6bfcb52e7",1582847864,Uc,Uc}, | |||
[j]={{H,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,953: | Line 8,953: | ||
}, | }, | ||
["warn_increment_bool"]={ | ["warn_increment_bool"]={ | ||
[ | [g]="incrementing expression of type bool is deprecated and incompatible with C++17 [-Wdeprecated-increment-bool]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={L,z,K,gb,"deprecated-increment-bool","increment-bool"}, | |||
[n]="deprecated-increment-bool", | |||
[h]="incrementing expression of type bool is deprecated and incompatible with C++17", | |||
[i]=m, | [i]=m, | ||
[ | [e]="incrementing expression of type bool is deprecated and incompatible with C\\+\\+17", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-increment\\-bool[^\\]]*\\]", | |||
[f]=lb, | |||
[d]={Tb,1237025389,fb,fb}, | |||
[j]={{P,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,970: | Line 8,970: | ||
}, | }, | ||
["warn_independentclass_attribute"]={ | ["warn_independentclass_attribute"]={ | ||
[ | [g]="\'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored [-WIndependentClass-attribute]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"IndependentClass-attribute"}, | |||
[n]="IndependentClass-attribute", | |||
[h]="\'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'objc_independent_class\' attribute may be put on a typedef only; attribute is ignored", | ||
[a]=" \\[(?:\\-Werror,)?\\-WIndependentClass\\-attribute[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"7a60b6db76f5",1429209524,"[Objective-C Sema] patch to introduce IndependentClass","[Objective-C Sema] patch to introduce IndependentClass"}, | ||
[j]={{J,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 8,987: | Line 8,987: | ||
}, | }, | ||
["warn_indirection_through_null"]={ | ["warn_indirection_through_null"]={ | ||
[ | [g]="indirection of non-volatile null pointer will be deleted, not trap [-Wnull-dereference]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"null-dereference"}, | |||
[n]="null-dereference", | |||
[h]="indirection of non-volatile null pointer will be deleted, not trap", | |||
[i]=m, | [i]=m, | ||
[ | [e]="indirection of non\\-volatile null pointer will be deleted, not trap", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wnull\\-dereference[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"395610654363",1278483263,"implement PR7569, warning about assignment to null, which ","implement PR7569, warning about assignment to null, which "}, | |||
[j]={{P,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());"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,004: | Line 9,004: | ||
}, | }, | ||
["warn_infinite_recursive_function"]={ | ["warn_infinite_recursive_function"]={ | ||
[ | [g]="all paths through this function will call itself [-Winfinite-recursion]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={G,M,"infinite-recursion",S}, | |||
[n]="infinite-recursion", | |||
[h]="all paths through this function will call itself", | |||
[i]=m, | [i]=m, | ||
[ | [e]="all paths through this function will call itself", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winfinite\\-recursion[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"2f024f432d62",1387593223,"Add -Winfinite-recursion to Clang","Add -Winfinite-recursion to Clang"}, | |||
[ | [j]={{mb,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);"},{mb,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())) {"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,022: | Line 9,022: | ||
}, | }, | ||
["warn_init_list_constant_narrowing"]={ | ["warn_init_list_constant_narrowing"]={ | ||
[ | [g]="constant expression evaluates to A which cannot be narrowed to type B in C++11 [-Wc++11-narrowing]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,"c++0x-narrowing",y,u,Cd,"narrowing"}, | |||
[n]=Cd, | |||
[h]="constant expression evaluates to %0 which cannot be narrowed to type %1 in C++11", | |||
[i]=m, | [i]=m, | ||
[ | [e]="constant expression evaluates to (.*?) which cannot be narrowed to type (.*?) in C\\+\\+11", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{nb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,040: | Line 9,040: | ||
}, | }, | ||
["warn_init_list_type_narrowing"]={ | ["warn_init_list_type_narrowing"]={ | ||
[ | [g]="type A cannot be narrowed to B in initializer list in C++11 [-Wc++11-narrowing]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,"c++0x-narrowing",y,u,Cd,"narrowing"}, | |||
[n]=Cd, | |||
[h]="type %0 cannot be narrowed to %1 in initializer list in C++11", | |||
[i]=m, | [i]=m, | ||
[ | [e]="type (.*?) cannot be narrowed to (.*?) in initializer list in C\\+\\+11", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"66e05fe63099",1326864109,"Move narrowing conversion detection code from SemaInit to SemaOverload, ready","Move narrowing conversion detection code from SemaInit to SemaOverload, ready"}, | |||
[j]={{nb,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"]={ | ||
[ | [g]="non-constant-expression cannot be narrowed from type A to B in initializer list in C++11 [-Wc++11-narrowing]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={A,"c++0x-narrowing",y,u,Cd,"narrowing"}, | |||
[n]=Cd, | |||
[h]="non-constant-expression cannot be narrowed from type %0 to %1 in initializer list in C++11", | |||
[i]=m, | [i]=m, | ||
[ | [e]="non\\-constant\\-expression cannot be narrowed from type (.*?) to (.*?) in initializer list in C\\+\\+11", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{nb,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,073: | Line 9,073: | ||
}, | }, | ||
["warn_init_ptr_member_to_parameter_addr"]={ | ["warn_init_ptr_member_to_parameter_addr"]={ | ||
[ | [g]="initializing pointer member A with the stack address of ... B [-Wdangling-field]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bd,"dangling-field"}, | |||
[n]="dangling-field", | |||
[h]="initializing pointer member %0 with the stack address of %select{variable|parameter}2 %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="initializing pointer member (.*?) with the stack address of (?:variable|parameter) (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdangling\\-field[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"599deef37946",1315012455,"Add a simple new warning to catch blatantly dangling pointer and","Add a simple new warning to catch blatantly dangling pointer and"}, | |||
[j]={{nb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,090: | Line 9,090: | ||
}, | }, | ||
["warn_initializer_out_of_order"]={ | ["warn_initializer_out_of_order"]={ | ||
[ | [g]="... A will be initialized after ... B [-Wreorder-ctor]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={G,M,S,"reorder","reorder-ctor"}, | |||
[n]="reorder-ctor", | |||
[h]="%select{field|base class}0 %1 will be initialized after %select{field|base}2 %3", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:field|base class) (.*?) will be initialized after (?:field|base) (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wreorder\\-ctor[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"bb7b658ab5d0",1270885043,"Diagnose misordered initializers in constructor templates immediately instead of","Diagnose misordered initializers in constructor templates immediately instead of"}, | |||
[j]={{H,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())) {"},{H,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,108: | Line 9,108: | ||
}, | }, | ||
["warn_initializer_overrides"]={ | ["warn_initializer_overrides"]={ | ||
[ | [g]="initializer ...overrides prior initialization of this subobject [-Winitializer-overrides]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={v,G,Jc,"initializer-overrides","override-init"}, | |||
[n]="initializer-overrides", | |||
[h]="initializer %select{partially |}0overrides prior initialization of this subobject", | |||
[i]=m, | [i]=m, | ||
[ | [e]="initializer (?:partially |)overrides prior initialization of this subobject", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winitializer\\-overrides[^\\]]*\\]", | |||
[f]=r, | |||
[d]={ud,1236199783,md,xd}, | |||
[j]={{nb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,125: | Line 9,125: | ||
}, | }, | ||
["warn_inline_namespace_reopened_noninline"]={ | ["warn_inline_namespace_reopened_noninline"]={ | ||
[ | [g]="inline namespace reopened as a non-inline namespace [-Winline-namespace-reopened-noninline]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"inline-namespace-reopened-noninline"}, | |||
[n]="inline-namespace-reopened-noninline", | |||
[h]="inline namespace reopened as a non-inline namespace", | |||
[i]=m, | [i]=m, | ||
[ | [e]="inline namespace reopened as a non\\-inline namespace", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winline\\-namespace\\-reopened\\-noninline[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{H,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 \");"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,142: | Line 9,142: | ||
}, | }, | ||
["warn_inst_method_not_found"]={ | ["warn_inst_method_not_found"]={ | ||
[ | [g]="instance method A not found (return type defaults to \'id\') [-Wobjc-method-access]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"objc-method-access"}, | |||
[n]="objc-method-access", | |||
[h]="instance method %objcinstance0 not found (return type defaults to \'id\')", | |||
[i]=m, | [i]=m, | ||
[ | [e]="instance method (.*?) not found \\(return type defaults to \'id\'\\)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Tb,1237025389,fb,fb}, | |||
[j]={{Yc,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,159: | Line 9,159: | ||
}, | }, | ||
["warn_instance_method_not_found_with_typo"]={ | ["warn_instance_method_not_found_with_typo"]={ | ||
[ | [g]="instance method A not found (return type defaults to \'id\'); did you mean B? [-Wobjc-method-access]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"objc-method-access"}, | |||
[n]="objc-method-access", | |||
[h]="instance method %objcinstance0 not found (return type defaults to \'id\'); did you mean %objcinstance2?", | |||
[i]=m, | [i]=m, | ||
[ | [e]="instance method (.*?) not found \\(return type defaults to \'id\'\\); did you mean (.*?)\\?", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"4cc5552b9b94",1371569496,"Objective-C [qoi]: privide typo correction for selectors","Objective-C [qoi]: privide typo correction for selectors"}, | |||
[j]={{Yc,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,176: | Line 9,176: | ||
}, | }, | ||
["warn_instance_method_on_class_found"]={ | ["warn_instance_method_on_class_found"]={ | ||
[ | [g]="instance method A found instead of class method B [-Wobjc-method-access]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"objc-method-access"}, | |||
[n]="objc-method-access", | |||
[h]="instance method %0 found instead of class method %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="instance method (.*?) found instead of class method (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"3b9819b4a2f1",1302115208,"Fix lookup for class messages sent to qualified-class","Fix lookup for class messages sent to qualified-class"}, | |||
[j]={{Yc,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,193: | Line 9,193: | ||
}, | }, | ||
["warn_int_to_pointer_cast"]={ | ["warn_int_to_pointer_cast"]={ | ||
[ | [g]="cast to A from smaller integer type B [-Wint-to-pointer-cast]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"int-to-pointer-cast"}, | |||
[n]="int-to-pointer-cast", | |||
[h]="cast to %1 from smaller integer type %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="cast to (.*?) from smaller integer type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wint\\-to\\-pointer\\-cast[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"282ad876bd89",1350413594,"Implement GCC\'s -Wint-to-pointer-cast.","Implement GCC\'s -Wint-to-pointer-cast."}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,210: | Line 9,210: | ||
}, | }, | ||
["warn_int_to_void_pointer_cast"]={ | ["warn_int_to_void_pointer_cast"]={ | ||
[ | [g]="cast to A from smaller integer type B [-Wint-to-void-pointer-cast]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"int-to-pointer-cast","int-to-void-pointer-cast"}, | |||
[n]="int-to-void-pointer-cast", | |||
[h]="cast to %1 from smaller integer type %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="cast to (.*?) from smaller integer type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wint\\-to\\-void\\-pointer\\-cast[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,227: | Line 9,227: | ||
}, | }, | ||
["warn_integer_constant_overflow"]={ | ["warn_integer_constant_overflow"]={ | ||
[ | [g]="overflow in expression; result is A with type B [-Winteger-overflow]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"integer-overflow"}, | |||
[n]="integer-overflow", | |||
[h]="overflow in expression; result is %0 with type %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="overflow in expression; result is (.*?) with type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winteger\\-overflow[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"e735ff93e828",1359065505,"Patch to check for integer overflow. It has been","Patch to check for integer overflow. It has been"}, | |||
[j]={{dd,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();"},{dd,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,244: | Line 9,244: | ||
}, | }, | ||
["warn_integer_constants_in_conditional_always_true"]={ | ["warn_integer_constants_in_conditional_always_true"]={ | ||
[ | [g]="converting the result of \'?:\' with integer constants to a boolean always evaluates to \'true\' [-Wtautological-constant-compare]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,S,"tautological-compare","tautological-constant-compare"}, | |||
[n]="tautological-constant-compare", | |||
[h]="converting the result of \'?:\' with integer constants to a boolean always evaluates to \'true\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="converting the result of \'\\?\\:\' with integer constants to a boolean always evaluates to \'true\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wtautological\\-constant\\-compare[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,261: | Line 9,261: | ||
}, | }, | ||
["warn_internal_linkage_local_storage"]={ | ["warn_internal_linkage_local_storage"]={ | ||
[ | [g]="\'internal_linkage\' attribute on a non-static local variable is ignored [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="\'internal_linkage\' attribute on a non-static local variable is ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'internal_linkage\' attribute on a non\\-static local variable is ignored", | ||
[a]=xb, | |||
[f]=r, | |||
[d]={"ae6ebd3af525",1447190924,"Implement __attribute__((internal_linkage)).","Implement __attribute__((internal_linkage))."}, | |||
[j]={{J,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);"},{J,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,278: | Line 9,278: | ||
}, | }, | ||
["warn_interrupt_attribute_invalid"]={ | ["warn_interrupt_attribute_invalid"]={ | ||
[ | [g]="... \'interrupt\' attribute only applies to functions that have ... [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="%select{MIPS|MSP430|RISC-V}0 \'interrupt\' attribute only applies to functions that have %select{no parameters|a \'void\' return type}1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:MIPS|MSP430|RISC\\-V) \'interrupt\' attribute only applies to functions that have (?:no parameters|a \'void\' return type)", | ||
[a]=xb, | |||
[f]=r, | |||
[d]={"b0d74bfe81b6",1548266537,"Merge similar target diagnostics for interrupt attribute into one; NFC","Merge similar target diagnostics for interrupt attribute into one; NFC"}, | |||
[j]={{J,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;"},{J,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;"},{J,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;"},{J,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;"},{J,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;"},{J,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,295: | Line 9,295: | ||
}, | }, | ||
["warn_invalid_asm_cast_lvalue"]={ | ["warn_invalid_asm_cast_lvalue"]={ | ||
[ | [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", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="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", | |||
[i]=m, | [i]=m, | ||
[ | [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", | ||
[a]=Ib, | |||
[f]="Inline Assembly Issue", | |||
[ | [d]={Tb,1237025389,fb,fb}, | ||
[ | [j]={{"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();"}}, | ||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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"} | ||
Line 9,310: | Line 9,310: | ||
}, | }, | ||
["warn_invalid_initializer_from_system_header"]={ | ["warn_invalid_initializer_from_system_header"]={ | ||
[ | [g]="invalid constructor from class in system header, should not be explicit [-Winvalid-initializer-from-system-header]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"invalid-initializer-from-system-header"}, | |||
[n]="invalid-initializer-from-system-header", | |||
[h]="invalid constructor from class in system header, should not be explicit", | |||
[i]=m, | [i]=m, | ||
[ | [e]="invalid constructor from class in system header, should not be explicit", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-initializer\\-from\\-system\\-header[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"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."}, | ||
[j]={{nb,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"]={ | ||
[ | [g]="invalid iOS deployment version \'A\', iOS 10 is the maximum deployment target for 32-bit targets [-Winvalid-ios-deployment-target]", | ||
[ | [b]="error: ", | ||
[ | [c]="Downgradable Error", | ||
[ | [o]={"invalid-ios-deployment-target"}, | ||
[ | [n]="invalid-ios-deployment-target", | ||
[ | [h]="invalid iOS deployment version \'%0\', iOS 10 is the maximum deployment target for 32-bit targets", | ||
[ | [i]="(?:error|warning|fatal error)\\: ", | ||
[ | [e]="invalid iOS deployment version \'(.*?)\', iOS 10 is the maximum deployment target for 32\\-bit targets", | ||
[ | [a]=" \\[[^\\]]*\\-Winvalid\\-ios\\-deployment\\-target[^\\]]*\\]", | ||
[ | [f]=v, | ||
[ | [d]={"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"}, | ||
[ | [j]={{fd,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"]={ | ||
[ | [g]="invalid UTF-8 in comment [-Winvalid-utf8]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"invalid-utf8",jd}, | |||
[n]="invalid-utf8", | |||
[h]="invalid UTF-8 in comment", | |||
[i]=m, | [i]=m, | ||
[ | [e]="invalid UTF\\-8 in comment", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-utf8[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={Hb,1625925174,T,T}, | |||
[j]={{Db,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);"},{Db,2850,"#endif\n // ...\n MultiByteUTF8:\n // ...\n if (Length == 0) {\n if (!UnicodeDecodingAlreadyDiagnosed && !isLexingRawMode())\n Diag(CurPtr - 1, diag::warn_invalid_utf8_in_comment);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,356: | Line 9,356: | ||
}, | }, | ||
["warn_is_constant_evaluated_always_true_constexpr"]={ | ["warn_is_constant_evaluated_always_true_constexpr"]={ | ||
[ | [g]="\'A\' will always evaluate to \'true\' in a manifestly constant-evaluated expression [-Wconstant-evaluated]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"constant-evaluated"}, | |||
[n]="constant-evaluated", | |||
[h]="\'%0\' will always evaluate to \'true\' in a manifestly constant-evaluated expression", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' will always evaluate to \'true\' in a manifestly constant\\-evaluated expression", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wconstant\\-evaluated[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"b06305e44949",1572372408,"[Diagnostics] Warn for std::is_constant_evaluated in constexpr mode","[Diagnostics] Warn for std::is_constant_evaluated in constexpr mode"}, | |||
[j]={{dd,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\");"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,373: | Line 9,373: | ||
}, | }, | ||
["warn_ivar_use_hidden"]={ | ["warn_ivar_use_hidden"]={ | ||
[ | [g]="local declaration of A hides instance variable [-Wshadow-ivar]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"shadow",Ld,"shadow-ivar"}, | |||
[n]="shadow-ivar", | |||
[h]="local declaration of %0 hides instance variable", | |||
[i]=m, | [i]=m, | ||
[ | [e]="local declaration of (.*?) hides instance variable", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wshadow\\-ivar[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Tb,1237025389,fb,fb}, | |||
[j]={{P,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,390: | Line 9,390: | ||
}, | }, | ||
["warn_ivars_in_interface"]={ | ["warn_ivars_in_interface"]={ | ||
[ | [g]="declaration of instance variables in the interface is deprecated [-Wobjc-interface-ivars]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"objc-interface-ivars"}, | |||
[n]="objc-interface-ivars", | |||
[h]="declaration of instance variables in the interface is deprecated", | |||
[i]=m, | [i]=m, | ||
[ | [e]="declaration of instance variables in the interface is deprecated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-interface\\-ivars[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"e1ada58ef434",1337103796,"Remove word \'block\' from option and diagnostic I added","Remove word \'block\' from option and diagnostic I added"}, | |||
[ | [j]={{I,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);"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,408: | Line 9,408: | ||
}, | }, | ||
["warn_jump_out_of_seh_finally"]={ | ["warn_jump_out_of_seh_finally"]={ | ||
[ | [g]="jump out of __finally block has undefined behavior [-Wjump-seh-finally]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"jump-seh-finally"}, | |||
[n]="jump-seh-finally", | |||
[h]="jump out of __finally block has undefined behavior", | |||
[i]=m, | [i]=m, | ||
[ | [e]="jump out of __finally block has undefined behavior", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wjump\\-seh\\-finally[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"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."}, | ||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,425: | Line 9,425: | ||
}, | }, | ||
["warn_kern_is_inline"]={ | ["warn_kern_is_inline"]={ | ||
[ | [g]="ignored \'inline\' attribute on kernel function A [-Wcuda-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Kd}, | |||
[n]=Kd, | |||
[h]="ignored \'inline\' attribute on kernel function %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="ignored \'inline\' attribute on kernel function (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"c66a10652a94",1453249617,"[CUDA] Only allow __global__ on free functions and static member functions.","[CUDA] Only allow __global__ on free functions and static member functions."}, | |||
[j]={{J,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,442: | Line 9,442: | ||
}, | }, | ||
["warn_kern_is_method"]={ | ["warn_kern_is_method"]={ | ||
[ | [g]="kernel function A is a member function; this may not be accepted by nvcc [-Wcuda-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={Kd,jd}, | |||
[n]=Kd, | |||
[h]="kernel function %0 is a member function; this may not be accepted by nvcc", | |||
[i]=m, | [i]=m, | ||
[ | [e]="kernel function (.*?) is a member function; this may not be accepted by nvcc", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wcuda\\-compat[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"c66a10652a94",1453249617,"[CUDA] Only allow __global__ on free functions and static member functions.","[CUDA] Only allow __global__ on free functions and static member functions."}, | |||
[j]={{J,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,460: | Line 9,460: | ||
}, | }, | ||
["warn_left_shift_always"]={ | ["warn_left_shift_always"]={ | ||
[ | [g]="converting the result of \'<<\' to a boolean always evaluates to ... [-Wtautological-constant-compare]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,S,"tautological-compare","tautological-constant-compare"}, | |||
[n]="tautological-constant-compare", | |||
[h]="converting the result of \'<<\' to a boolean always evaluates to %select{false|true}0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="converting the result of \'\\<\\<\' to a boolean always evaluates to (?:false|true)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wtautological\\-constant\\-compare[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{x,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;"},{x,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,477: | Line 9,477: | ||
}, | }, | ||
["warn_left_shift_in_bool_context"]={ | ["warn_left_shift_in_bool_context"]={ | ||
[ | [g]="converting the result of \'<<\' to a boolean; did you mean \'(A) != 0\'? [-Wint-in-bool-context]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={G,M,"int-in-bool-context",S}, | |||
[n]="int-in-bool-context", | |||
[h]="converting the result of \'<<\' to a boolean; did you mean \'(%0) != 0\'?", | |||
[i]=m, | [i]=m, | ||
[ | [e]="converting the result of \'\\<\\<\' to a boolean; did you mean \'\\((.*?)\\) \\!\\= 0\'\\?", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wint\\-in\\-bool\\-context[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Ab,1567434909,N,N}, | |||
[j]={{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,495: | Line 9,495: | ||
}, | }, | ||
["warn_lock_exclusive_and_shared"]={ | ["warn_lock_exclusive_and_shared"]={ | ||
[ | [g]="A \'B\' is acquired exclusively and shared in the same scope [-Wthread-safety-analysis]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={vc,Ob}, | |||
[n]=Ob, | |||
[h]="%0 \'%1\' is acquired exclusively and shared in the same scope", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) \'(.*?)\' is acquired exclusively and shared in the same scope", | ||
[a]=bd, | |||
[f]=r, | |||
[d]={"46b057681a7f",1315505978,"Thread safety: shared vs. exclusive locks","Thread safety: shared vs. exclusive locks"}, | |||
[j]={{mb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,513: | Line 9,513: | ||
}, | }, | ||
["warn_lock_some_predecessors"]={ | ["warn_lock_some_predecessors"]={ | ||
[ | [g]="A \'B\' is not held on every path through here [-Wthread-safety-analysis]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={vc,Ob}, | |||
[n]=Ob, | |||
[h]="%0 \'%1\' is not held on every path through here", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) \'(.*?)\' is not held on every path through here", | ||
[a]=bd, | |||
[f]=r, | |||
[d]={"922866783b07",1328244326,"Thread safety analysis:","Thread safety analysis:"}, | |||
[j]={{mb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,531: | Line 9,531: | ||
}, | }, | ||
["warn_logical_and_in_logical_or"]={ | ["warn_logical_and_in_logical_or"]={ | ||
[ | [g]="\'&&\' within \'||\' [-Wlogical-op-parentheses]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={G,M,"logical-op-parentheses","parentheses"}, | |||
[n]="logical-op-parentheses", | |||
[h]="\'&&\' within \'||\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'&&\' within \'\\|\\|\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wlogical\\-op\\-parentheses[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{P,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,549: | Line 9,549: | ||
}, | }, | ||
["warn_logical_instead_of_bitwise"]={ | ["warn_logical_instead_of_bitwise"]={ | ||
[ | [g]="use of logical \'A\' with constant operand [-Wconstant-logical-operand]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"constant-logical-operand"}, | |||
[n]="constant-logical-operand", | |||
[h]="use of logical \'%0\' with constant operand", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use of logical \'(.*?)\' with constant operand", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wconstant\\-logical\\-operand[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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:"}, | |||
[j]={{P,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 ? \"&&\" : \"||\");"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,566: | Line 9,566: | ||
}, | }, | ||
["warn_logical_not_on_lhs_of_check"]={ | ["warn_logical_not_on_lhs_of_check"]={ | ||
[ | [g]="logical not is only applied to the left hand side of this ... [-Wlogical-not-parentheses]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,"logical-not-parentheses","parentheses"}, | |||
[n]="logical-not-parentheses", | |||
[h]="logical not is only applied to the left hand side of this %select{comparison|bitwise operator}0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="logical not is only applied to the left hand side of this (?:comparison|bitwise operator)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wlogical\\-not\\-parentheses[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"44f6f2ee4233",1477585926,"Expand -Wlogical-not-parentheses to also fire on `!x & A`.","Expand -Wlogical-not-parentheses to also fire on `!x & A`."}, | |||
[j]={{P,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,583: | Line 9,583: | ||
}, | }, | ||
["warn_loop_ctrl_binds_to_inner"]={ | ["warn_loop_ctrl_binds_to_inner"]={ | ||
[ | [g]="\'A\' is bound to current loop, GCC binds it to the enclosing loop [-Wgcc-compat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={zc}, | |||
[n]=zc, | |||
[h]="\'%0\' is bound to current loop, GCC binds it to the enclosing loop", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'(.*?)\' is bound to current loop, GCC binds it to the enclosing loop", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"09f9924acf1a",1390489500,"Fix to PR8880 (clang dies processing a for loop)","Fix to PR8880 (clang dies processing a for loop)"}, | |||
[j]={{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\";"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,600: | Line 9,600: | ||
}, | }, | ||
["warn_loop_state_mismatch"]={ | ["warn_loop_state_mismatch"]={ | ||
[ | [g]="state of variable \'A\' must match at the entry and exit of loop [-Wconsumed]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"consumed"}, | |||
[n]="consumed", | |||
[h]="state of variable \'%0\' must match at the entry and exit of loop", | |||
[i]=m, | [i]=m, | ||
[ | [e]="state of variable \'(.*?)\' must match at the entry and exit of loop", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wconsumed[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"3277a6129b79",1381343424,"Consumed analysis: improve loop handling. The prior version of the analysis","Consumed analysis: improve loop handling. The prior version of the analysis"}, | |||
[j]={{mb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,618: | Line 9,618: | ||
}, | }, | ||
["warn_main_one_arg"]={ | ["warn_main_one_arg"]={ | ||
[ | [g]="only one parameter on \'main\' declaration [-Wmain]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"main"}, | |||
[n]="main", | |||
[h]="only one parameter on \'main\' declaration", | |||
[i]=m, | [i]=m, | ||
[ | [e]="only one parameter on \'main\' declaration", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"02dee0a46a39",1248496613,"Semantic checking for main().","Semantic checking for main()."}, | ||
[j]={{I,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"]={ | ||
[ | [g]="variable named \'main\' with external linkage has undefined behavior [-Wmain]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"main"}, | |||
[n]="main", | |||
[h]="variable named \'main\' with external linkage has undefined behavior", | |||
[i]=m, | [i]=m, | ||
[ | [e]="variable named \'main\' with external linkage has undefined behavior", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"da8a3b903b45",1439561609,"[Sema] main can\'t be declared as global variable, in C++.","[Sema] main can\'t be declared as global variable, in C++."}, | ||
[j]={{I,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,649: | Line 9,649: | ||
}, | }, | ||
["warn_main_returns_bool_literal"]={ | ["warn_main_returns_bool_literal"]={ | ||
[ | [g]="bool literal returned from \'main\' [-Wmain]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"main"}, | |||
[n]="main", | |||
[h]="bool literal returned from \'main\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="bool literal returned from \'main\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"9bb192ed9996",1480383317,"Add a warning for \'main\' returning \'true\' or \'false\'.","Add a warning for \'main\' returning \'true\' or \'false\'."}, | ||
[j]={{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();"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,666: | Line 9,666: | ||
}, | }, | ||
["warn_max_tokens"]={ | ["warn_max_tokens"]={ | ||
[ | [g]="the number of preprocessor source tokens (A) exceeds this token limit (B) [-Wmax-tokens]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"max-tokens"}, | |||
[n]="max-tokens", | |||
[h]="the number of preprocessor source tokens (%0) exceeds this token limit (%1)", | |||
[i]=m, | [i]=m, | ||
[ | [e]="the number of preprocessor source tokens \\((.*?)\\) exceeds this token limit \\((.*?)\\)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmax\\-tokens[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"739b410f1ff5",1570627358,Qc,Qc}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,684: | Line 9,684: | ||
}, | }, | ||
["warn_max_tokens_total"]={ | ["warn_max_tokens_total"]={ | ||
[ | [g]="the total number of preprocessor source tokens (A) exceeds the token limit (B) [-Wmax-tokens]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"max-tokens"}, | |||
[n]="max-tokens", | |||
[h]="the total number of preprocessor source tokens (%0) exceeds the token limit (%1)", | |||
[i]=m, | [i]=m, | ||
[ | [e]="the total number of preprocessor source tokens \\((.*?)\\) exceeds the token limit \\((.*?)\\)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmax\\-tokens[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"739b410f1ff5",1570627358,Qc,Qc}, | |||
[j]={{Ic,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,702: | Line 9,702: | ||
}, | }, | ||
["warn_max_unsigned_zero"]={ | ["warn_max_unsigned_zero"]={ | ||
[ | [g]="taking the max of ... is always equal to the other value [-Wmax-unsigned-zero]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"max-unsigned-zero"}, | |||
[n]="max-unsigned-zero", | |||
[h]="taking the max of %select{a value and unsigned zero|unsigned zero and a value}0 is always equal to the other value", | |||
[i]=m, | [i]=m, | ||
[ | [e]="taking the max of (?:a value and unsigned zero|unsigned zero and a value) is always equal to the other value", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmax\\-unsigned\\-zero[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"67c0071517e5",1480981306,"Warn on unsigned zero in call to std::max","Warn on unsigned zero in call to std::max"}, | |||
[j]={{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,719: | Line 9,719: | ||
}, | }, | ||
["warn_maybe_capture_bad_target_this_ptr"]={ | ["warn_maybe_capture_bad_target_this_ptr"]={ | ||
[ | [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 [-Wgpu-maybe-wrong-side]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"gpu-maybe-wrong-side"}, | |||
[n]="gpu-maybe-wrong-side", | |||
[h]="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", | |||
[i]=m, | [i]=m, | ||
[ | [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", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgpu\\-maybe\\-wrong\\-side[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={Rc,1615397021,Rb,Rb}, | ||
[j]={{"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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,736: | Line 9,736: | ||
}, | }, | ||
["warn_maybe_falloff_nonvoid_coroutine"]={ | ["warn_maybe_falloff_nonvoid_coroutine"]={ | ||
[ | [g]="non-void coroutine does not return a value in all control paths [-Wreturn-type]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,S,kc}, | |||
[n]=kc, | |||
[h]="non-void coroutine does not return a value in all control paths", | |||
[i]=m, | [i]=m, | ||
[ | [e]="non\\-void coroutine does not return a value in all control paths", | ||
[a]=Jd, | |||
[f]=r, | |||
[d]={"709d1b30ab9e",1477553431,"[coroutines] Build fallthrough and set_exception statements.","[coroutines] Build fallthrough and set_exception statements."}, | |||
[j]={{mb,585,"struct CheckFallThroughDiagnostics {\n // ...\n static CheckFallThroughDiagnostics MakeForCoroutine(const Decl *Func) {\n // ...\n D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_coroutine;"},{mb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,753: | Line 9,753: | ||
}, | }, | ||
["warn_maybe_falloff_nonvoid_function"]={ | ["warn_maybe_falloff_nonvoid_function"]={ | ||
[ | [g]="non-void function does not return a value in all control paths [-Wreturn-type]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,S,kc}, | |||
[n]=kc, | |||
[h]="non-void function does not return a value in all control paths", | |||
[i]=m, | [i]=m, | ||
[ | [e]="non\\-void function does not return a value in all control paths", | ||
[a]=Jd, | |||
[f]=r, | |||
[d]={"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"}, | |||
[j]={{mb,553,"struct CheckFallThroughDiagnostics {\n // ...\n static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n // ...\n D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_function;"},{mb,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));"},{mb,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,770: | Line 9,770: | ||
}, | }, | ||
["warn_maybe_falloff_nonvoid_lambda"]={ | ["warn_maybe_falloff_nonvoid_lambda"]={ | ||
[ | [g]="non-void lambda does not return a value in all control paths [-Wreturn-type]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,S,kc}, | |||
[n]=kc, | |||
[h]="non-void lambda does not return a value in all control paths", | |||
[i]=m, | [i]=m, | ||
[ | [e]="non\\-void lambda does not return a value in all control paths", | ||
[a]=Jd, | |||
[f]=Wc, | |||
[ | [d]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions.","Specialize noreturn diagnostics for lambda expressions."}, | ||
[f]= | [j]={{mb,614,"struct CheckFallThroughDiagnostics {\n // ...\n static CheckFallThroughDiagnostics MakeForLambda() {\n // ...\n D.diag_MaybeFallThrough_ReturnsNonVoid = diag::warn_maybe_falloff_nonvoid_lambda;"}}, | ||
[d | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,787: | Line 9,787: | ||
}, | }, | ||
["warn_maybe_uninit_var"]={ | ["warn_maybe_uninit_var"]={ | ||
[ | [g]="variable A may be uninitialized when ... [-Wconditional-uninitialized]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"conditional-uninitialized"}, | |||
[n]="conditional-uninitialized", | |||
[h]="variable %0 may be uninitialized when %select{used here|captured by block}1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="variable (.*?) may be uninitialized when (?:used here|captured by block)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wconditional\\-uninitialized[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{mb,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();"},{mb,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())) {"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,805: | Line 9,805: | ||
}, | }, | ||
["warn_maynot_respond"]={ | ["warn_maynot_respond"]={ | ||
[ | [g]="A may not respond to B", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="%0 may not respond to %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) may not respond to (.*?)", | ||
[a]=Ib, | |||
[f]=r, | |||
[ | [d]={Tb,1237025389,fb,fb}, | ||
[ | [j]={{Yc,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;"}}, | ||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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:\'"} | ||
Line 9,820: | Line 9,820: | ||
}, | }, | ||
["warn_member_extra_qualification"]={ | ["warn_member_extra_qualification"]={ | ||
[ | [g]="extra qualification on member A [-Wmicrosoft-extra-qualification]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"microsoft","microsoft-extra-qualification"}, | |||
[n]="microsoft-extra-qualification", | |||
[h]="extra qualification on member %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="extra qualification on member (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-extra\\-qualification[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{I,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());"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,837: | Line 9,837: | ||
}, | }, | ||
["warn_memsize_comparison"]={ | ["warn_memsize_comparison"]={ | ||
[ | [g]="size argument in A call is a comparison [-Wmemsize-comparison]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"memsize-comparison"}, | |||
[n]="memsize-comparison", | |||
[h]="size argument in %0 call is a comparison", | |||
[i]=m, | [i]=m, | ||
[ | [e]="size argument in (.*?) call is a comparison", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmemsize\\-comparison[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"0e6daefe8f11",1388101119,"Warn on mismatched parentheses in memcmp and friends.","Warn on mismatched parentheses in memcmp and friends."}, | |||
[j]={{x,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,854: | Line 9,854: | ||
}, | }, | ||
["warn_messaging_unqualified_id"]={ | ["warn_messaging_unqualified_id"]={ | ||
[ | [g]="messaging unqualified id [-Wobjc-messaging-id]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"objc-messaging-id"}, | |||
[n]="objc-messaging-id", | |||
[h]="messaging unqualified id", | |||
[i]=m, | [i]=m, | ||
[ | [e]="messaging unqualified id", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-messaging\\-id[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"d9f1284009d5",1503677537,"[ObjC] Add a -Wobjc-messaging-id warning","[ObjC] Add a -Wobjc-messaging-id warning"}, | |||
[ | [j]={{Yc,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);"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,872: | Line 9,872: | ||
}, | }, | ||
["warn_method_param_declaration"]={ | ["warn_method_param_declaration"]={ | ||
[ | [g]="redeclaration of method parameter A [-Wduplicate-method-arg]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"duplicate-method-arg"}, | |||
[n]="duplicate-method-arg", | |||
[h]="redeclaration of method parameter %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="redeclaration of method parameter (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-method\\-arg[^\\]]*\\]", | |||
[f]=B, | |||
[d]={"c677f693971f",1299956070,"Place duplicate argument declaration in in","Place duplicate argument declaration in in"}, | |||
[j]={{xc,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,890: | Line 9,890: | ||
}, | }, | ||
["warn_method_param_redefinition"]={ | ["warn_method_param_redefinition"]={ | ||
[ | [g]="redefinition of method parameter A", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="redefinition of method parameter %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="redefinition of method parameter (.*?)", | ||
[a]=Ib, | |||
[f]=B, | |||
[ | [d]={"ca3566fc20b6",1297290001,"Fix scoping of method declarations and issue ","Fix scoping of method declarations and issue "}, | ||
[ | [j]={{xc,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;"}}, | ||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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\'"} | ||
Line 9,905: | Line 9,905: | ||
}, | }, | ||
["warn_microsoft_dependent_exists"]={ | ["warn_microsoft_dependent_exists"]={ | ||
[ | [g]="dependent ... declarations are ignored [-Wmicrosoft-exists]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"microsoft-exists"}, | |||
[n]="microsoft-exists", | |||
[h]="dependent %select{__if_not_exists|__if_exists}0 declarations are ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="dependent (?:__if_not_exists|__if_exists) declarations are ignored", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-exists[^\\]]*\\]", | |||
[f]=B, | |||
[d]={"43edb32f1f03",1319495470,"Rework Microsoft __if_exists/__if_not_exists parsing and semantic","Rework Microsoft __if_exists/__if_not_exists parsing and semantic"}, | |||
[j]={{jb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,922: | Line 9,922: | ||
}, | }, | ||
["warn_microsoft_qualifiers_ignored"]={ | ["warn_microsoft_qualifiers_ignored"]={ | ||
[ | [g]="qualifiers after comma in declarator list are ignored [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="qualifiers after comma in declarator list are ignored", | |||
[i]=m, | [i]=m, | ||
[ | [e]="qualifiers after comma in declarator list are ignored", | ||
[a]=xb, | |||
[f]=B, | |||
[ | [d]={"eaaae27bc512",1417735868,"Parse qualifiers after comma in declarator lists as a Microsoft extension","Parse qualifiers after comma in declarator lists as a Microsoft extension"}, | ||
[f]= | [j]={{Vb,880,"void Parser::DiagnoseAndSkipExtendedMicrosoftTypeAttributes() {\n // ...\n if (EndLoc.isValid()) {\n // ...\n Diag(StartLoc, diag::warn_microsoft_qualifiers_ignored) << Range;"}}, | ||
[d | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,939: | Line 9,939: | ||
}, | }, | ||
["warn_mig_server_routine_does_not_return_kern_return_t"]={ | ["warn_mig_server_routine_does_not_return_kern_return_t"]={ | ||
[ | [g]="\'mig_server_routine\' attribute only applies to routines that return a kern_return_t [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="\'mig_server_routine\' attribute only applies to routines that return a kern_return_t", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'mig_server_routine\' attribute only applies to routines that return a kern_return_t", | ||
[a]=xb, | |||
[f]=r, | |||
[ | [d]={"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."}, | ||
[j]={{J,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,956: | Line 9,956: | ||
}, | }, | ||
["warn_misleading_indentation"]={ | ["warn_misleading_indentation"]={ | ||
[ | [g]="misleading indentation; statement is not part of the previous \'...\' [-Wmisleading-indentation]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={G,M,"misleading-indentation"}, | |||
[n]="misleading-indentation", | |||
[h]="misleading indentation; statement is not part of the previous \'%select{if|else|for|while}0\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="misleading indentation; statement is not part of the previous \'(?:if|else|for|while)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmisleading\\-indentation[^\\]]*\\]", | |||
[f]=B, | |||
[d]={"739b410f1ff5",1570627358,Qc,Qc}, | |||
[j]={{gc,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())) {"},{gc,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,974: | Line 9,974: | ||
}, | }, | ||
["warn_mismatched_availability"]={ | ["warn_mismatched_availability"]={ | ||
[ | [g]="availability does not match previous declaration [-Wavailability]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Nc}, | |||
[n]=Nc, | |||
[h]="availability does not match previous declaration", | |||
[i]=m, | [i]=m, | ||
[ | [e]="availability does not match previous declaration", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]", | |||
[f]=r, | |||
[ | [d]={"2d243bfe2f25",1336334185,"Split mergeAvailabilityAttr out of handleAvailabilityAttr. This is important","Split mergeAvailabilityAttr out of handleAvailabilityAttr. This is important"}, | ||
[j]={{J,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 9,991: | Line 9,991: | ||
}, | }, | ||
["warn_mismatched_availability_override"]={ | ["warn_mismatched_availability_override"]={ | ||
[ | [g]="...method ... ... on A (B vs. C) [-Wavailability]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Nc}, | |||
[n]=Nc, | |||
[h]="%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)", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:|overriding )method (?:introduced after|deprecated before|obsoleted before) (?:the protocol method it implements|overridden method) on (.*?) \\((.*?) vs\\. (.*?)\\)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an","When checking availability attributes for consistency between an"}, | |||
[j]={{J,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,008: | Line 10,008: | ||
}, | }, | ||
["warn_mismatched_availability_override_unavail"]={ | ["warn_mismatched_availability_override_unavail"]={ | ||
[ | [g]="...method cannot be unavailable on A when ... is available [-Wavailability]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Nc}, | |||
[n]=Nc, | |||
[h]="%select{|overriding }1method cannot be unavailable on %0 when %select{the protocol method it implements|its overridden method}1 is available", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:|overriding )method cannot be unavailable on (.*?) when (?:the protocol method it implements|its overridden method) is available", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wavailability[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"66a8ca0f7fef",1358289788,"When checking availability attributes for consistency between an","When checking availability attributes for consistency between an"}, | |||
[j]={{J,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,025: | Line 10,025: | ||
}, | }, | ||
["warn_mismatched_delete_new"]={ | ["warn_mismatched_delete_new"]={ | ||
[ | [g]="\'delete...\' applied to a pointer that was allocated with \'new...\'; did you mean \'delete...\'? [-Wmismatched-new-delete]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"mismatched-new-delete"}, | |||
[n]="mismatched-new-delete", | |||
[h]="\'delete%select{|[]}0\' applied to a pointer that was allocated with \'new%select{[]|}0\'; did you mean \'delete%select{[]|}0\'?", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'delete(?:|\\[\\])\' applied to a pointer that was allocated with \'new(?:\\[\\]|)\'; did you mean \'delete(?:\\[\\]|)\'\\?", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-new\\-delete[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"538ef53c139d",1431620097,"Detect uses of mismatching forms of \'new\' and \'delete\'","Detect uses of mismatching forms of \'new\' and \'delete\'"}, | |||
[j]={{"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())) {"},{ac,3537,"static void DiagnoseMismatchedNewDelete(Sema &SemaRef, SourceLocation DeleteLoc, const MismatchingNewDeleteDetector &Detector) {\n // ...\n SemaRef.Diag(DeleteLoc, diag::warn_mismatched_delete_new) << Detector.IsArrayForm << H;"},{ac,3546,"void Sema::AnalyzeDeleteExprMismatch(const CXXDeleteExpr *DE) {\n if (Diags.isIgnored(diag::warn_mismatched_delete_new, SourceLocation()))"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,042: | Line 10,042: | ||
}, | }, | ||
["warn_mismatched_import"]={ | ["warn_mismatched_import"]={ | ||
[ | [g]="import ... (A) does not match the import ... (B) of the previous declaration [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="import %select{module|name}0 (%1) does not match the import %select{module|name}0 (%2) of the previous declaration", | |||
[i]=m, | [i]=m, | ||
[ | [e]="import (?:module|name) \\((.*?)\\) does not match the import (?:module|name) \\((.*?)\\) of the previous declaration", | ||
[a]=xb, | |||
[f]=v, | |||
[d]={Nd,1576908663,nc,nc}, | |||
[j]={{J,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();"},{J,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,059: | Line 10,059: | ||
}, | }, | ||
["warn_mismatched_nullability_attr"]={ | ["warn_mismatched_nullability_attr"]={ | ||
[ | [g]="nullability specifier A conflicts with existing specifier B [-Wnullability]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"nullability"}, | |||
[n]="nullability", | |||
[h]="nullability specifier %0 conflicts with existing specifier %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="nullability specifier (.*?) conflicts with existing specifier (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wnullability[^\\]]*\\]", | |||
[f]="Nullability Issue", | |||
[d]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++.","Introduce type nullability specifiers for C/C++."}, | |||
[j]={{I,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));"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,076: | Line 10,076: | ||
}, | }, | ||
["warn_mismatched_section"]={ | ["warn_mismatched_section"]={ | ||
[ | [g]="... does not match previous declaration [-Wsection]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"section"}, | |||
[n]="section", | |||
[h]="%select{codeseg|section}0 does not match previous declaration", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:codeseg|section) does not match previous declaration", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wsection[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"9869c3a10fdb",1336876962,"Produce a warning for mismatched section attributes. Completest pr9356.","Produce a warning for mismatched section attributes. Completest pr9356."}, | |||
[j]={{I,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*/;"},{J,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*/;"},{J,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*/;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,093: | Line 10,093: | ||
}, | }, | ||
["warn_misplaced_ellipsis_vararg"]={ | ["warn_misplaced_ellipsis_vararg"]={ | ||
[ | [g]="\'...\' in this location creates a C-style varargs function... [-Wambiguous-ellipsis]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"ambiguous-ellipsis"}, | |||
[n]="ambiguous-ellipsis", | |||
[h]="\'...\' in this location creates a C-style varargs function%select{, not a function parameter pack|}0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="\'\\.\\.\\.\' in this location creates a C\\-style varargs function(?:, not a function parameter pack|)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wambiguous\\-ellipsis[^\\]]*\\]", | |||
[f]=B, | |||
[d]={"36ee9fb21957",1407799823,"Reject varargs \'...\' in function prototype if there are more parameters after","Reject varargs \'...\' in function prototype if there are more parameters after"}, | |||
[j]={{Vb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,110: | Line 10,110: | ||
}, | }, | ||
["warn_missing_braces"]={ | ["warn_missing_braces"]={ | ||
[ | [g]="suggest braces around initialization of subobject [-Wmissing-braces]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={G,M,"missing-braces",S}, | |||
[n]="missing-braces", | |||
[h]="suggest braces around initialization of subobject", | |||
[i]=m, | [i]=m, | ||
[ | [e]="suggest braces around initialization of subobject", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-braces[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"5029d56cc1d2",1267935435,"Implement missing-braces warning and add a test case.","Implement missing-braces warning and add a test case."}, | |||
[ | [j]={{nb,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()), \"}\");"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,128: | Line 10,128: | ||
}, | }, | ||
["warn_missing_case"]={ | ["warn_missing_case"]={ | ||
[ | [g]="enumeration value A not handled in switch [-Wswitch]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,"switch"}, | |||
[n]="switch", | |||
[h]="%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", | |||
[i]=m, | [i]=m, | ||
[ | [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\\: (.*?), (.*?), (.*?)\\.\\.\\.)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wswitch[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"3a8650af779c",1427476994,"[Sema] Factor diags with %plural. No functionality change intended.","[Sema] Factor diags with %plural. No functionality change intended."}, | |||
[j]={{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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,145: | Line 10,145: | ||
}, | }, | ||
["warn_missing_case_for_condition"]={ | ["warn_missing_case_for_condition"]={ | ||
[ | [g]="no case matching constant switch condition \'A\'", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="no case matching constant switch condition \'%0\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="no case matching constant switch condition \'(.*?)\'", | ||
[a]=Ib, | |||
[f]=r, | |||
[ | [d]={"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."}, | ||
[ | [j]={{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();"}}, | ||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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\'"} | ||
Line 10,160: | Line 10,160: | ||
}, | }, | ||
["warn_missing_dependent_template_keyword"]={ | ["warn_missing_dependent_template_keyword"]={ | ||
[ | [g]="use \'template\' keyword to treat \'A\' as a dependent template name", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="use \'template\' keyword to treat \'%0\' as a dependent template name", | |||
[i]=m, | [i]=m, | ||
[ | [e]="use \'template\' keyword to treat \'(.*?)\' as a dependent template name", | ||
[a]=Ib, | |||
[f]=B, | |||
[ | [d]={"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."}, | ||
[ | [j]={{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;"}}, | ||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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"} | ||
Line 10,175: | Line 10,175: | ||
}, | }, | ||
["warn_missing_explicit_synthesis"]={ | ["warn_missing_explicit_synthesis"]={ | ||
[ | [g]="auto property synthesis is synthesizing property not explicitly synthesized [-Wobjc-missing-property-synthesis]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"objc-missing-property-synthesis"}, | |||
[n]="objc-missing-property-synthesis", | |||
[h]="auto property synthesis is synthesizing property not explicitly synthesized", | |||
[i]=m, | [i]=m, | ||
[ | [e]="auto property synthesis is synthesizing property not explicitly synthesized", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wobjc\\-missing\\-property\\-synthesis[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"d5f34f9fee08",1336063410,"objective-c: warn for properties being default synthesized","objective-c: warn for properties being default synthesized"}, | |||
[ | [j]={{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);"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,193: | Line 10,193: | ||
}, | }, | ||
["warn_missing_field_initializers"]={ | ["warn_missing_field_initializers"]={ | ||
[ | [g]="missing field A initializer [-Wmissing-field-initializers]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={v,G,Jc,"missing-field-initializers"}, | |||
[n]="missing-field-initializers", | |||
[h]="missing field %0 initializer", | |||
[i]=m, | [i]=m, | ||
[ | [e]="missing field (.*?) initializer", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-field\\-initializers[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"e40b58ec2f66",1268335958,"Implement -Wmissing-field-initializers. Patch by mikem!","Implement -Wmissing-field-initializers. Patch by mikem!"}, | |||
[j]={{nb,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,211: | Line 10,211: | ||
}, | }, | ||
["warn_missing_format_string"]={ | ["warn_missing_format_string"]={ | ||
[ | [g]="format string missing [-Wformat]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={G,M,rb,S}, | |||
[n]=rb, | |||
[h]="format string missing", | |||
[i]=m, | [i]=m, | ||
[ | [e]="format string missing", | ||
[a]=qc, | |||
[f]=Xb, | |||
[ | [d]={cd,1279246282,Sb,Sb}, | ||
[f]= | [j]={{x,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;"}} | ||
[d | |||
[ | |||
}, | }, | ||
["warn_missing_method_return_type"]={ | ["warn_missing_method_return_type"]={ | ||
[ | [g]="method has no return type specified; defaults to \'id\' [-Wmissing-method-return-type]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={v,G,Jc,"missing-method-return-type"}, | |||
[n]="missing-method-return-type", | |||
[h]="method has no return type specified; defaults to \'id\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="method has no return type specified; defaults to \'id\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-method\\-return\\-type[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"b5a52ca0c935",1311267647,"objc - Diagnose missing method return type specifier under","objc - Diagnose missing method return type specifier under"}, | |||
[ | [j]={{xc,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)\");"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,243: | Line 10,243: | ||
}, | }, | ||
["warn_missing_prototype"]={ | ["warn_missing_prototype"]={ | ||
[ | [g]="no previous prototype for function A [-Wmissing-prototypes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"missing-prototypes"}, | |||
[n]="missing-prototypes", | |||
[h]="no previous prototype for function %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="no previous prototype for function (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-prototypes[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"f1b876d5dee3",1238517303,"Implement -Wmissing-prototypes. Fixes PR3911.","Implement -Wmissing-prototypes. Fixes PR3911."}, | |||
[j]={{I,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,261: | Line 10,261: | ||
}, | }, | ||
["warn_missing_sdksettings_for_availability_checking"]={ | ["warn_missing_sdksettings_for_availability_checking"]={ | ||
[ | [g]="A availability is ignored without a valid \'SDKSettings.json\' in the SDK [-Wignored-availability-without-sdk-settings]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"ignored-availability-without-sdk-settings"}, | |||
[n]="ignored-availability-without-sdk-settings", | |||
[h]="%0 availability is ignored without a valid \'SDKSettings.json\' in the SDK", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) availability is ignored without a valid \'SDKSettings\\.json\' in the SDK", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wignored\\-availability\\-without\\-sdk\\-settings[^\\]]*\\]", | |||
[f]=r, | |||
[d]={Rc,1615397021,Rb,Rb}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,278: | Line 10,278: | ||
}, | }, | ||
["warn_missing_selector_name"]={ | ["warn_missing_selector_name"]={ | ||
[ | [g]="A used as the name of the previous parameter rather than as part of the selector [-Wmissing-selector-name]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"missing-selector-name"}, | |||
[n]="missing-selector-name", | |||
[h]="%0 used as the name of the previous parameter rather than as part of the selector", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(.*?) used as the name of the previous parameter rather than as part of the selector", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-selector\\-name[^\\]]*\\]", | |||
[f]=B, | |||
[d]={"84f498433116",1347923399,"objective-C: improve on warnings about misplacement of method","objective-C: improve on warnings about misplacement of method"}, | |||
[j]={{"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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,295: | Line 10,295: | ||
}, | }, | ||
["warn_missing_sentinel"]={ | ["warn_missing_sentinel"]={ | ||
[ | [g]="missing sentinel in ... [-Wsentinel]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"sentinel"}, | |||
[n]="sentinel", | |||
[h]="missing sentinel in %select{function call|method dispatch|block call}0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="missing sentinel in (?:function call|method dispatch|block call)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wsentinel[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"9e87721d47fd",1242256850,"Look for and diagnose missing sentinel argument on message","Look for and diagnose missing sentinel argument on message"}, | |||
[j]={{P,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);"},{P,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,312: | Line 10,312: | ||
}, | }, | ||
["warn_missing_submodule"]={ | ["warn_missing_submodule"]={ | ||
[ | [g]="missing submodule \'A\' [-Wincomplete-umbrella]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"incomplete-module","incomplete-umbrella"}, | |||
[n]="incomplete-umbrella", | |||
[h]="missing submodule \'%0\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="missing submodule \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-umbrella[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"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"}, | |||
[j]={{Mc,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);"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,329: | Line 10,329: | ||
}, | }, | ||
["warn_missing_sysroot"]={ | ["warn_missing_sysroot"]={ | ||
[ | [g]="no such sysroot directory: \'A\' [-Wmissing-sysroot]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"missing-sysroot"}, | |||
[n]="missing-sysroot", | |||
[h]="no such sysroot directory: \'%0\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="no such sysroot directory\\: \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-sysroot[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"6c2b11cc50e8",1355960510,"[driver] Have -isysroot warn on nonexistent paths.","[driver] Have -isysroot warn on nonexistent paths."}, | |||
[j]={{fd,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,346: | Line 10,346: | ||
}, | }, | ||
["warn_missing_type_specifier"]={ | ["warn_missing_type_specifier"]={ | ||
[ | [g]="type specifier missing, defaults to \'int\' [-Wimplicit-int]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={G,M,"implicit","implicit-int",S}, | |||
[n]="implicit-int", | |||
[h]="type specifier missing, defaults to \'int\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="type specifier missing, defaults to \'int\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-int[^\\]]*\\]", | |||
[f]=B, | |||
[d]={Tb,1237025389,fb,fb}, | |||
[ | [j]={{Ic,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\");"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,364: | Line 10,364: | ||
}, | }, | ||
["warn_missing_variable_declarations"]={ | ["warn_missing_variable_declarations"]={ | ||
[ | [g]="no previous extern declaration for non-static variable A [-Wmissing-variable-declarations]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"missing-variable-declarations"}, | |||
[n]="missing-variable-declarations", | |||
[h]="no previous extern declaration for non-static variable %0", | |||
[i]=m, | [i]=m, | ||
[ | [e]="no previous extern declaration for non\\-static variable (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-variable\\-declarations[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"7d14b3c9b3f9",1351023572,"Add a new warning -Wmissing-variable-declarations, to warn about variables","Add a new warning -Wmissing-variable-declarations, to warn about variables"}, | |||
[j]={{I,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())) {"},{I,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,382: | Line 10,382: | ||
}, | }, | ||
["warn_missing_whitespace_after_macro_name"]={ | ["warn_missing_whitespace_after_macro_name"]={ | ||
[ | [g]="whitespace recommended after macro name", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[h]="whitespace recommended after macro name", | |||
[i]=m, | [i]=m, | ||
[ | [e]="whitespace recommended after macro name", | ||
[ | [a]=Ib, | ||
[f]= | [f]=Q, | ||
[d]={"2425bcb49ae4",1240021405,"enforce requirements imposed by C90 6.8 TC1, fixing PR3919.","enforce requirements imposed by C90 6.8 TC1, fixing PR3919."}, | |||
[d | [j]={{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);"}}, | ||
[ | |||
[p]={ | [p]={ | ||
["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"} | ||
Line 10,397: | Line 10,397: | ||
}, | }, | ||
["warn_mixed_decls_code"]={ | ["warn_mixed_decls_code"]={ | ||
[ | [g]="mixing declarations and code is incompatible with standards before C99 [-Wdeclaration-after-statement]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"declaration-after-statement"}, | |||
[n]="declaration-after-statement", | |||
[h]="mixing declarations and code is incompatible with standards before C99", | |||
[i]=m, | [i]=m, | ||
[ | [e]="mixing declarations and code is incompatible with standards before C99", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeclaration\\-after\\-statement[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"f9c3310d32c6",1616787805,sd,sd}, | |||
[ | [j]={{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;"}}, | ||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,415: | Line 10,415: | ||
}, | }, | ||
["warn_mixed_sign_comparison"]={ | ["warn_mixed_sign_comparison"]={ | ||
[ | [g]="comparison of integers of different signs: A and B [-Wsign-compare]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={v,G,Jc,X,"sign-compare"}, | |||
[n]="sign-compare", | |||
[h]="comparison of integers of different signs: %0 and %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="comparison of integers of different signs\\: (.*?) and (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wsign\\-compare[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"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."}, | |||
[j]={{x,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());"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,433: | Line 10,433: | ||
}, | }, | ||
["warn_mmap_incomplete_framework_module_declaration"]={ | ["warn_mmap_incomplete_framework_module_declaration"]={ | ||
[ | [g]="skipping \'A\' because module declaration of \'B\' lacks the \'framework\' qualifier [-Wincomplete-framework-module-declaration]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"incomplete-framework-module-declaration"}, | |||
[n]="incomplete-framework-module-declaration", | |||
[h]="skipping \'%0\' because module declaration of \'%1\' lacks the \'framework\' qualifier", | |||
[i]=m, | [i]=m, | ||
[ | [e]="skipping \'(.*?)\' because module declaration of \'(.*?)\' lacks the \'framework\' qualifier", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-framework\\-module\\-declaration[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={"9f6020bcc522",1527816378,"[Modules] Warning for module declarations lacking \'framework\' qualifier","[Modules] Warning for module declarations lacking \'framework\' qualifier"}, | |||
[j]={{ad,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,450: | Line 10,450: | ||
}, | }, | ||
["warn_mmap_mismatched_private_module_name"]={ | ["warn_mmap_mismatched_private_module_name"]={ | ||
[ | [g]="expected canonical name for private module \'A\' [-Wprivate-module]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Fd}, | |||
[n]=Fd, | |||
[h]="expected canonical name for private module \'%0\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="expected canonical name for private module \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wprivate\\-module[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings","[Modules] Change private modules rules and warnings"}, | |||
[j]={{ad,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;"},{ad,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)"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,467: | Line 10,467: | ||
}, | }, | ||
["warn_mmap_mismatched_private_submodule"]={ | ["warn_mmap_mismatched_private_submodule"]={ | ||
[ | [g]="private submodule \'A\' in private module map, expected top-level module [-Wprivate-module]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Fd}, | |||
[n]=Fd, | |||
[h]="private submodule \'%0\' in private module map, expected top-level module", | |||
[i]=m, | [i]=m, | ||
[ | [e]="private submodule \'(.*?)\' in private module map, expected top\\-level module", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wprivate\\-module[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings","[Modules] Change private modules rules and warnings"}, | |||
[j]={{ad,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;"},{ad,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)"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,484: | Line 10,484: | ||
}, | }, | ||
["warn_mmap_redundant_export_as"]={ | ["warn_mmap_redundant_export_as"]={ | ||
[ | [g]="module \'A\' already re-exported as \'B\' [-Wprivate-module]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Fd}, | |||
[n]=Fd, | |||
[h]="module \'%0\' already re-exported as \'%1\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="module \'(.*?)\' already re\\-exported as \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wprivate\\-module[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={"f0b11de279e7",1505432324,"[Module map] Introduce a private module re-export directive.","[Module map] Introduce a private module re-export directive."}, | |||
[j]={{ad,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"]={ | ||
[ | [g]="umbrella directory \'A\' not found [-Wincomplete-umbrella]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"incomplete-module","incomplete-umbrella"}, | |||
[n]="incomplete-umbrella", | |||
[h]="umbrella directory \'%0\' not found", | |||
[i]=m, | [i]=m, | ||
[ | [e]="umbrella directory \'(.*?)\' not found", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-umbrella[^\\]]*\\]", | |||
[f]=Q, | |||
[d]={"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."}, | |||
[j]={{ad,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"]={ | ||
[ | [g]="unknown attribute \'A\' [-Wignored-attributes]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={Bb,O}, | |||
[n]=O, | |||
[h]="unknown attribute \'%0\'", | |||
[i]=m, | [i]=m, | ||
[ | [e]="unknown attribute \'(.*?)\'", | ||
[a]=xb, | |||
[f]=Q, | |||
[d]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a","Introduce module attributes into the module map grammar, along with a"}, | |||
[j]={{ad,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"]={ | ||
[ | [g]="modifying constructor parameter A that shadows a field of B [-Wshadow-field-in-constructor-modified]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[q]=false, | |||
[o]={"shadow",Ld,Ld,"shadow-field-in-constructor","shadow-field-in-constructor-modified"}, | |||
[n]="shadow-field-in-constructor-modified", | |||
[h]="modifying constructor parameter %0 that shadows a field of %1", | |||
[i]=m, | [i]=m, | ||
[ | [e]="modifying constructor parameter (.*?) that shadows a field of (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wshadow\\-field\\-in\\-constructor\\-modified[^\\]]*\\]", | |||
[f]=r, | |||
[d]={"f463a8a424e7",1461890263,"Avoid -Wshadow warnings about constructor parameters named after fields","Avoid -Wshadow warnings about constructor parameters named after fields"}, | |||
[j]={{I,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;"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} | ||
Line 10,544: | Line 10,544: | ||
}, | }, | ||
["warn_module_config_macro_undef"]={ | ["warn_module_config_macro_undef"]={ | ||
[ | [g]="... of configuration macro \'A\' has no effect on the import of \'B\'; pass \'...\' on the command line to configure the module [-Wconfig-macros]", | ||
[h]= | [b]=k, | ||
[c]=l, | |||
[o]={"config-macros"}, | |||
[n]="config-macros", | |||
[h]="%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", | |||
[i]=m, | [i]=m, | ||
[ | [e]="(?:definition|\\#undef) of configuration macro \'(.*?)\' has no effect on the import of \'(.*?)\'; pass \'(?:\\-D(.*?)\\=\\.\\.\\.|\\-U(.*?))\' on the command line to configure the module", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wconfig\\-macros[^\\]]*\\]", | |||
[f]=v, | |||
[d]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps.","<rdar://problem/10796651> Introduce configuration macros into module maps."}, | |||
[j]={{Mc,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();"},{Mc,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();"},{Mc,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();"}}, | |||
[ | |||
[ | |||
[ | |||
[ | |||
[p]={ | [p]={ | ||
["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]"} |
edits