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="regex1"; | ||
local c=" | local c="title"; | ||
local d=" | local d="prefix"; | ||
local e=" | local e="category"; | ||
local f=" | local f="type"; | ||
local g=" | local g="regex2"; | ||
local h=" | local h="message"; | ||
local i="commit"; | local i="commit"; | ||
local j="source"; | local j="source"; | ||
local k=" | local k="tests2"; | ||
local l=" | local l="groups"; | ||
local m=" | local m="maingroup"; | ||
local n=" | local n="Semantic Issue"; | ||
local o | local o="(?:warning|error|fatal error)\\: "; | ||
local p="Warning"; | |||
local q=""; | local q="warning: "; | ||
local r=" | local r=""; | ||
local s=" | local s="error: "; | ||
local t="Error"; | local t="Error"; | ||
local u="pedantic"; | local u="(?:error|fatal error)\\: "; | ||
local | local v="pedantic"; | ||
local | local w="defaultactive"; | ||
local | local x="clang/lib/Sema/SemaDecl.cpp"; | ||
local | local y="Parse Issue"; | ||
local | local z="clang/lib/Sema/SemaExpr.cpp"; | ||
local | local A="clang/lib/Sema/SemaDeclCXX.cpp"; | ||
local | local B="Lexical or Preprocessor Issue"; | ||
local | local C="b1c4d5507fad"; | ||
local | local D="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp..."; | ||
local | local E="c++11-extensions"; | ||
local F="clang/lib/Sema/SemaTemplate.cpp"; | |||
local G="microsoft"; | local G="microsoft"; | ||
local H="5a8987ca5113"; | local H="clang/lib/Parse/ParseDecl.cpp"; | ||
local | local I="5a8987ca5113"; | ||
local | local J="Update tablegen diagnostic files to be in sync with the def files."; | ||
local | local K="c++20-extensions"; | ||
local | local L="gnu"; | ||
local M="clang/lib/Parse/ParseDeclCXX.cpp"; | |||
local N="Implement P2361 Unevaluated string literals"; | local N="Implement P2361 Unevaluated string literals"; | ||
local O="c++17-extensions"; | local O="95f50964fbf5"; | ||
local | local P="c++17-extensions"; | ||
local | local Q="Downgradable Error"; | ||
local | local R="(?:error|warning|fatal error)\\: "; | ||
local | local S="clang/lib/Sema/SemaType.cpp"; | ||
local | local T="c++0x-extensions"; | ||
local | local U="clang/lib/Sema/SemaInit.cpp"; | ||
local V="c99-extensions"; | |||
local W="clang/lib/Lex/PPDirectives.cpp"; | local W="clang/lib/Lex/PPDirectives.cpp"; | ||
local X=" \\[(?:\\-Werror,)?\\-Wpedantic[^\\]]*\\]"; | local X=" \\[(?:\\-Werror,)?\\-Wpedantic[^\\]]*\\]"; | ||
local Y=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-extensions[^\\]]*\\]"; | local Y="clang/lib/Sema/SemaExprCXX.cpp"; | ||
local | local Z=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-extensions[^\\]]*\\]"; | ||
local ab="clang/lib/Lex/Lexer.cpp"; | |||
local bb="clang/lib/Sema/SemaChecking.cpp"; | local bb="clang/lib/Sema/SemaChecking.cpp"; | ||
local cb="clang/lib/Lex/LiteralSupport.cpp"; | local cb="c++2a-extensions"; | ||
local | local db="clang/lib/Lex/LiteralSupport.cpp"; | ||
local | local eb="microsoft-template"; | ||
local | local fb="c++23-extensions"; | ||
local | local gb=" \\[(?:\\-Werror,)?\\-Wc\\+\\+20\\-extensions[^\\]]*\\]"; | ||
local | local hb="c++1z-extensions"; | ||
local ib=" \\[(?:\\-Werror,)?\\-Wc\\+\\+17\\-extensions[^\\]]*\\]"; | |||
local jb="CL4"; | local jb="CL4"; | ||
local kb="PR20356: Fix all Sema warnings with mismatched ext_/warn_ versus"; | local kb="c++14-extensions"; | ||
local | local lb="PR20356: Fix all Sema warnings with mismatched ext_/warn_ versus"; | ||
local | local mb="clang/lib/Lex/Pragma.cpp"; | ||
local | local nb="1b98ccc4e957"; | ||
local | local ob="clang/lib/Frontend/VerifyDiagnosticConsumer.cpp"; | ||
local | local pb="clang/lib/Sema/SemaDeclObjC.cpp"; | ||
local | local qb="all"; | ||
local rb="c2x-extensions"; | |||
local sb=" | local sb="most"; | ||
local tb="69350e569dc4"; | local tb="69350e569dc4"; | ||
local ub="clang/lib/Parse/ParseExpr.cpp"; | local ub="clang/lib/Parse/ParseExpr.cpp"; | ||
local vb=" | local vb="[C++20][Modules][3/8] Initial handling for module partitions."; | ||
local wb="clang/lib/Parse/ | local wb="clang/lib/Parse/ParseExprCXX.cpp"; | ||
local xb="clang/lib/Parse/ParseStmt.cpp"; | local xb="clang/lib/Parse/ParseStmt.cpp"; | ||
local yb=" | local yb="clang/lib/Parse/Parser.cpp"; | ||
local zb=" | local zb="c99-designator"; | ||
local Ab="clang/lib/Sema/ | local Ab="clang/lib/Sema/SemaExceptionSpec.cpp"; | ||
local Bb="clang/lib/Sema/ | local Bb="clang/lib/Sema/SemaCast.cpp"; | ||
local Cb="c | local Cb="clang/test/Sema/wasm-refs-and-tables.c"; | ||
local Db=" \\[(?:\\-Werror,)?\\- | local Db=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-template[^\\]]*\\]"; | ||
local Eb=" \\[(?:\\-Werror,)?\\- | local Eb="c++2b-extensions"; | ||
local Fb=" \\[(?:\\-Werror,)?\\-Wc\\+\\+23\\-extensions[^\\]]*\\]"; | |||
local Gb=" | local Gb=" \\[(?:\\-Werror,)?\\-Wc99\\-extensions[^\\]]*\\]"; | ||
local Hb=" | local Hb="microsoft-exception-spec"; | ||
local Ib="[WebAssembly] Improve clang diagnostics for wasm attributes"; | local Ib="[WebAssembly] Improve clang diagnostics for wasm attributes"; | ||
local Jb=" | local Jb="931fcd3ba011"; | ||
local Kb=" | local Kb="c++1y-extensions"; | ||
local Lb=" | local Lb="clang/lib/Sema/SemaOverload.cpp"; | ||
local Mb=" | local Mb="(?: \\[(?:\\-Werror)?[^\\]]*\\])?"; | ||
local Nb=" | local Nb="excess-initializers"; | ||
local Ob="clang/lib/Sema/SemaStmt.cpp"; | local Ob="clang/lib/Sema/SemaStmt.cpp"; | ||
local Pb="c++11-narrowing"; | local Pb="c11-extensions"; | ||
local | local Qb="c++11-narrowing"; | ||
local | local Rb="#error"; | ||
local | local Sb="clang/lib/Sema/SemaDeclAttr.cpp"; | ||
local | local Tb="clang/test/Parser/declarators.c"; | ||
local | local Ub="clang/lib/Parse/ParseObjc.cpp"; | ||
local | local Vb="7c11da0cfd33"; | ||
local | local Wb=" \\[(?:\\-Werror,)?\\-Wc\\+\\+14\\-extensions[^\\]]*\\]"; | ||
local | local Xb=" \\[(?:\\-Werror,)?\\-Wc2x\\-extensions[^\\]]*\\]"; | ||
local | local Yb="c++11-compat"; | ||
local | local Zb="c++11-compat-pedantic"; | ||
local | local ac="pointer-arith"; | ||
local | local bc="clang/test/Sema/vla.c"; | ||
local | local cc="[clang] New __attribute__((__clang_arm_mve_alias))."; | ||
local | local dc="clang/test/SemaCXX/unknown-anytype.cpp"; | ||
local | local ec="clang/lib/Sema/SemaExprObjC.cpp"; | ||
local | local fc="unknown-pragmas"; | ||
local | local gc="main"; | ||
local | local hc="dtor-name"; | ||
local | local ic="gnu-designator"; | ||
local | local jc="missing-declarations"; | ||
local | local kc="5030928d60a1"; | ||
local | local lc="gnu-pointer-arith"; | ||
local | local mc="clang/test/Sema/c89.c"; | ||
local | local nc="[c++20] Implement semantic restrictions for C++20 designated"; | ||
local | local oc="gnu-folding-constant"; | ||
local pc="implicit-function-declaration"; | |||
local | local qc="c++0x-compat"; | ||
local | local rc="comment"; | ||
local | local sc="clang/test/Parser/MicrosoftExtensions.cpp"; | ||
local | local tc="gcc-compat"; | ||
local | local uc="3dbcea8b957a"; | ||
local | local vc="Reland [clang] Check unsupported types in expressions"; | ||
local | local wc="clang/lib/Sema/DeclSpec.cpp"; | ||
local | local xc="variadic-macros"; | ||
local | local yc="gnu-empty-struct"; | ||
local | local zc="clang/lib/Lex/PPExpressions.cpp"; | ||
local | local Ac="clang/lib/AST/ASTImporter.cpp"; | ||
local Bc="clang/lib/Sema/SemaAccess.cpp"; | |||
local | local Cc="clang/lib/Parse/ParseInit.cpp"; | ||
local | local Dc="clang/lib/Basic/DiagnosticIDs.cpp"; | ||
local Ec="implicit"; | |||
local Fc="clang/lib/Sema/SemaOpenMP.cpp"; | |||
local Gc="Modules Issue"; | |||
local Hc="clang/lib/Sema/SemaObjCProperty.cpp"; | |||
local Ic=" \\[(?:\\-Werror,)?\\-Wc99\\-designator[^\\]]*\\]"; | |||
local Jc="clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"; | |||
local Kc="clang/test/SemaCXX/MicrosoftExtensions.cpp"; | |||
local Lc="incompatible-pointer-types"; | |||
local Mc="clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp"; | |||
local Nc="1228d42ddab8"; | |||
local Oc="[OpenMP][Part 2] Use reusable OpenMP context/traits handling"; | |||
local Pc=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-exception\\-spec[^\\]]*\\]"; | |||
return { | return { | ||
["err_typename_missing_template"]={ | ["err_typename_missing_template"]={ | ||
[ | [c]="missing \'typename\' prior to dependent type template name \'AB\'", | ||
[d]=s, | |||
[f]=t, | |||
[h]="missing \'typename\' prior to dependent type template name \'%0%1\'", | |||
[b]=u, | |||
[g]="missing \'typename\' prior to dependent type template name \'(.*?)(.*?)\'", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"62559bd7ce0c",1485984998,"Fix hole in our enforcement of rule requiring \'typename\' prior to a dependent"}, | [i]={"62559bd7ce0c",1485984998,"Fix hole in our enforcement of rule requiring \'typename\' prior to a dependent"}, | ||
[j]={{ | [j]={{F,4153,"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 if (!IsCtorOrDtorName && !IsClassName && SS.isSet()) {\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 } else\n Diag(SS.getBeginLoc(), diag::err_typename_missing_template) << SS.getScopeRep() << TemplateII->getName();"}} | ||
}, | }, | ||
["err_typename_nested_not_found"]={ | ["err_typename_nested_not_found"]={ | ||
[ | [c]="no type named A in B", | ||
[d]=s, | |||
[f]=t, | |||
[h]="no type named %0 in %1", | |||
[b]=u, | |||
[g]="no type named (.*?) in (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template"}, | [i]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template"}, | ||
[j]={{ | [j]={{x,813,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n if (!SS || (!SS->isSet() && !SS->isInvalid()))\n else if (DeclContext *DC = computeDeclContext(*SS, false))\n Diag(IILoc, IsTemplateName ? diag::err_no_member_template : diag::err_typename_nested_not_found) << II << DC << SS->getRange();"},{F,11058,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n case LookupResult::NotFound: {\n DiagID = Ctx ? diag::err_typename_nested_not_found : diag::err_unknown_typename;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/libstdcxx_atomic_ns_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_atomic_ns_hack.cpp:32:6: error: no type named \'foobar\' in namespace \'std\'"} | |||
} | |||
}, | }, | ||
["err_typename_nested_not_found_enable_if"]={ | ["err_typename_nested_not_found_enable_if"]={ | ||
[ | [c]="no type named \'type\' in A; \'enable_if\' cannot be used to disable this declaration", | ||
[d]=s, | |||
[f]=t, | |||
[h]="no type named \'type\' in %0; \'enable_if\' cannot be used to disable this declaration", | |||
[b]=u, | |||
[g]="no type named \'type\' in (.*?); \'enable_if\' cannot be used to disable this declaration", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"6f8d2c6c9c34",1336540620,"A little tweak to the SFINAE condition reporting. Don\'t say:"}, | [i]={"6f8d2c6c9c34",1336540620,"A little tweak to the SFINAE condition reporting. Don\'t say:"}, | ||
[j]={{ | [j]={{Lb,11263,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n case Sema::TDK_SubstitutionFailure: {\n if (PDiag && PDiag->second.getDiagID() == diag::err_typename_nested_not_found_enable_if) {"},{F,3941,"QualType Sema::CheckTemplateIdType(TemplateName Name, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n if (TypeAliasTemplateDecl *AliasTemplate = dyn_cast<TypeAliasTemplateDecl>(Template)) {\n if (CanonType.isNull()) {\n // If this was enable_if and we failed to find the nested type\n // within enable_if in a SFINAE context, dig out the specific\n // enable_if condition that failed and present that instead.\n if (isEnableIfAliasTemplate(AliasTemplate)) {\n if (auto DeductionInfo = isSFINAEContext()) {\n if (*DeductionInfo && (*DeductionInfo)->hasSFINAEDiagnostic() && (*DeductionInfo)->peekSFINAEDiagnostic().second.getDiagID() == diag::err_typename_nested_not_found_enable_if && TemplateArgs[0].getArgument().getKind() == TemplateArgument::Expression) {"},{F,11053,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n case LookupResult::NotFound: {\n if (Ctx && isEnableIf(QualifierLoc, II, CondRange, Cond)) {\n Diag(CondRange.getBegin(), diag::err_typename_nested_not_found_enable_if) << Ctx << CondRange;"}} | ||
}, | }, | ||
["err_typename_nested_not_found_requirement"]={ | ["err_typename_nested_not_found_requirement"]={ | ||
[ | [c]="failed requirement \'A\'; \'enable_if\' cannot be used to disable this declaration", | ||
[d]=s, | |||
[f]=t, | |||
[h]="failed requirement \'%0\'; \'enable_if\' cannot be used to disable this declaration", | |||
[b]=u, | |||
[g]="failed requirement \'(.*?)\'; \'enable_if\' cannot be used to disable this declaration", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"00fa10b43f25",1499286014,"Customize the SFINAE diagnostics for enable_if to provide the failed condition."}, | [i]={"00fa10b43f25",1499286014,"Customize the SFINAE diagnostics for enable_if to provide the failed condition."}, | ||
[j]={{ | [j]={{Lb,11273,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n case Sema::TDK_SubstitutionFailure: {\n if (PDiag && PDiag->second.getDiagID() == diag::err_typename_nested_not_found_requirement) {"},{F,3958,"QualType Sema::CheckTemplateIdType(TemplateName Name, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n if (TypeAliasTemplateDecl *AliasTemplate = dyn_cast<TypeAliasTemplateDecl>(Template)) {\n if (CanonType.isNull()) {\n // If this was enable_if and we failed to find the nested type\n // within enable_if in a SFINAE context, dig out the specific\n // enable_if condition that failed and present that instead.\n if (isEnableIfAliasTemplate(AliasTemplate)) {\n if (auto DeductionInfo = isSFINAEContext()) {\n if (*DeductionInfo && (*DeductionInfo)->hasSFINAEDiagnostic() && (*DeductionInfo)->peekSFINAEDiagnostic().second.getDiagID() == diag::err_typename_nested_not_found_enable_if && TemplateArgs[0].getArgument().getKind() == TemplateArgument::Expression) {\n (*DeductionInfo)->addSFINAEDiagnostic(OldDiag.first, PDiag(diag::err_typename_nested_not_found_requirement) << FailedDescription << FailedCond->getSourceRange());"},{F,11046,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n case LookupResult::NotFound: {\n if (Ctx && isEnableIf(QualifierLoc, II, CondRange, Cond)) {\n // If we have a condition, narrow it down to the specific failed\n // condition.\n if (Cond) {\n Diag(FailedCond->getExprLoc(), diag::err_typename_nested_not_found_requirement) << FailedDescription << FailedCond->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/attr-annotate.cpp"]={"clang/test/SemaCXX/attr-annotate.cpp:34:51: error: failed requirement \'!is_same<long, long>::value\'; \'enable_if\' cannot be used to disable this declaration"} | |||
} | |||
}, | }, | ||
["err_typename_nested_not_type"]={ | ["err_typename_nested_not_type"]={ | ||
[ | [c]="typename specifier refers to non-type member A in B", | ||
[d]=s, | |||
[f]=t, | |||
[h]="typename specifier refers to non-type member %0 in %1", | |||
[b]=u, | |||
[g]="typename specifier refers to non\\-type member (.*?) in (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template"}, | [i]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template"}, | ||
[j]={{ | [j]={{F,11145,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n case LookupResult::Found:\n DiagID = Ctx ? diag::err_typename_nested_not_type : diag::err_typename_not_type;"},{F,11151,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n case LookupResult::FoundOverloaded:\n DiagID = Ctx ? diag::err_typename_nested_not_type : diag::err_typename_not_type;"}}, | ||
[k]={ | |||
["clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:62:51: error: typename specifier refers to non-type member \'type\' in \'D\'"} | |||
} | |||
}, | }, | ||
["err_typename_not_type"]={ | ["err_typename_not_type"]={ | ||
[ | [c]="typename specifier refers to non-type A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="typename specifier refers to non-type %0", | |||
[b]=u, | |||
[g]="typename specifier refers to non\\-type (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"}, | [i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"}, | ||
[j]={{ | [j]={{F,11146,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n case LookupResult::Found:\n DiagID = Ctx ? diag::err_typename_nested_not_type : diag::err_typename_not_type;"},{F,11152,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n case LookupResult::FoundOverloaded:\n DiagID = Ctx ? diag::err_typename_nested_not_type : diag::err_typename_not_type;"}}, | ||
[k]={ | |||
["clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:37:37: error: typename specifier refers to non-type \'C\'"} | |||
} | |||
}, | }, | ||
["err_typename_refers_to_non_type_template"]={ | ["err_typename_refers_to_non_type_template"]={ | ||
[c]="typename specifier refers to a non-type template", | [c]="typename specifier refers to a non-type template", | ||
[d]=s, | [d]=s, | ||
[f]="typename specifier refers to a non\\-type template", | [f]=t, | ||
[ | [h]="typename specifier refers to a non-type template", | ||
[ | [b]=u, | ||
[g]="typename specifier refers to a non\\-type template", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"dce2b62b7006",1238545739,"Parsing, semantic analysis, and template instantiation for typename"}, | [i]={"dce2b62b7006",1238545739,"Parsing, semantic analysis, and template instantiation for typename"}, | ||
[j]={{ | [j]={{yb,2017,"/// 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 if (Tok.is(tok::kw_typename)) {\n if (Tok.is(tok::identifier)) {\n } else if (Tok.is(tok::annot_template_id)) {\n if (!TemplateId->mightBeType()) {\n Diag(Tok, diag::err_typename_refers_to_non_type_template) << Tok.getAnnotationRange();"}}, | ||
[k]={ | |||
["clang/test/CXX/drs/dr3xx.cpp"]={"clang/test/CXX/drs/dr3xx.cpp:30:17: error: typename specifier refers to a non-type template"} | |||
} | |||
}, | }, | ||
["err_typename_refers_to_using_value_decl"]={ | ["err_typename_refers_to_using_value_decl"]={ | ||
[ | [c]="typename specifier refers to a dependent using declaration for a value A in B", | ||
[d]=s, | |||
[f]=t, | |||
[h]="typename specifier refers to a dependent using declaration for a value %0 in %1", | |||
[b]=u, | |||
[g]="typename specifier refers to a dependent using declaration for a value (.*?) in (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"aed2efbbb54f",1291853187,"A typename specifier can end up referring to a unresolved using"}, | [i]={"aed2efbbb54f",1291853187,"A typename specifier can end up referring to a unresolved using"}, | ||
[j]={{ | [j]={{F,11068,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n case LookupResult::FoundUnresolvedValue: {\n Diag(IILoc, diag::err_typename_refers_to_using_value_decl) << Name << Ctx << FullRange;"}}, | ||
[k]={ | |||
["clang/test/SemaTemplate/typename-specifier-4.cpp"]={"clang/test/SemaTemplate/typename-specifier-4.cpp:150:22: error: typename specifier refers to a dependent using declaration for a value \'iterator\' in \'X<T>\'"} | |||
} | |||
}, | }, | ||
["err_typename_requires_specqual"]={ | ["err_typename_requires_specqual"]={ | ||
[c]="type name requires a specifier or qualifier", | [c]="type name requires a specifier or qualifier", | ||
[d]=s, | [d]=s, | ||
[f]="type name requires a specifier or qualifier", | [f]=t, | ||
[g]= | [h]="type name requires a specifier or qualifier", | ||
[ | [b]=u, | ||
[i]={ | [g]="type name requires a specifier or qualifier", | ||
[j]={{ | [a]=r, | ||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[j]={{H,2658,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n if (isTypeSpecifier(DSC) && !DS.hasTypeSpecifier()) {\n } else if (Specs == DeclSpec::PQ_None && !DS.hasAttributes()) {\n Diag(Tok, diag::err_typename_requires_specqual);"}}, | |||
[k]={ | |||
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:117:14: error: type name requires a specifier or qualifier"} | |||
} | |||
}, | }, | ||
["err_ucn_control_character"]={ | ["err_ucn_control_character"]={ | ||
[c]="universal character name refers to a control character", | [c]="universal character name refers to a control character", | ||
[d]=s, | [d]=s, | ||
[f]="universal character name refers to a control character", | [f]=t, | ||
[g]= | [h]="universal character name refers to a control character", | ||
[ | [b]=u, | ||
[g]="universal character name refers to a control character", | |||
[a]=r, | |||
[e]=B, | |||
[i]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the"}, | [i]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the"}, | ||
[j]={{ | [j]={{ab,3509,"uint32_t Lexer::tryReadUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n // C++11 [lex.charset]p2: If the hexadecimal value for a\n // universal-character-name corresponds to a surrogate code point (in the\n // range 0xD800-0xDFFF, inclusive), the program is ill-formed. Additionally,\n // if the hexadecimal value for a universal-character-name outside the\n // c-char-sequence, s-char-sequence, or r-char-sequence of a character or\n // string literal corresponds to a control character (in either of the\n // ranges 0x00-0x1F or 0x7F-0x9F, both inclusive) or to a character in the\n // basic source character set, the program is ill-formed.\n if (CodePoint < 0xA0) {\n // We don\'t use isLexingRawMode() here because we need to warn about bad\n // UCNs even when skipping preprocessing tokens in a #if block.\n if (Result && PP) {\n if (CodePoint < 0x20 || CodePoint >= 0x7F)\n Diag(BufferPtr, diag::err_ucn_control_character);"},{db,684,"/// 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 // 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 if (Diags) {\n if (UcnVal >= 0x20 && UcnVal < 0x7f)\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);"}}, | ||
[k]={ | |||
["clang/test/Sema/ucn-cstring.c"]={"clang/test/Sema/ucn-cstring.c:14:19: error: universal character name refers to a control character"} | |||
} | |||
}, | }, | ||
["err_ucn_escape_basic_scs"]={ | ["err_ucn_escape_basic_scs"]={ | ||
[ | [c]="character \'A\' cannot be specified by a universal character name", | ||
[d]=s, | |||
[f]=t, | |||
[h]="character \'%0\' cannot be specified by a universal character name", | |||
[b]=u, | |||
[g]="character \'(.*?)\' cannot be specified by a universal character name", | |||
[a]=r, | [a]=r, | ||
[ | [e]=B, | ||
[i]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the"}, | [i]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the"}, | ||
[j]={{ | [j]={{ab,3512,"uint32_t Lexer::tryReadUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n // C++11 [lex.charset]p2: If the hexadecimal value for a\n // universal-character-name corresponds to a surrogate code point (in the\n // range 0xD800-0xDFFF, inclusive), the program is ill-formed. Additionally,\n // if the hexadecimal value for a universal-character-name outside the\n // c-char-sequence, s-char-sequence, or r-char-sequence of a character or\n // string literal corresponds to a control character (in either of the\n // ranges 0x00-0x1F or 0x7F-0x9F, both inclusive) or to a character in the\n // basic source character set, the program is ill-formed.\n if (CodePoint < 0xA0) {\n // We don\'t use isLexingRawMode() here because we need to warn about bad\n // UCNs even when skipping preprocessing tokens in a #if block.\n if (Result && PP) {\n if (CodePoint < 0x20 || CodePoint >= 0x7F)\n else {\n Diag(BufferPtr, diag::err_ucn_escape_basic_scs) << StringRef(&C, 1);"},{db,677,"/// 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 // 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 if (Diags) {\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);"}}, | ||
[k]={ | |||
["clang/test/CXX/lex/lex.charset/p2-cxx98.cpp"]={"clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:6:13: error: character \' \' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:7:13: error: character \'\"\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:8:13: error: character \'#\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:10:13: error: character \'%\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:11:13: error: character \'\'\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:12:13: error: character \'?\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:14:13: error: character \'A\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:15:13: error: character \'_\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:17:13: error: character \'~\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:33:20: error: character \' \' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:34:20: error: character \'\"\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:35:20: error: character \'#\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:37:20: error: character \'%\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:38:20: error: character \'\'\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:39:20: error: character \'?\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:41:20: error: character \'A\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:42:20: error: character \'_\' cannot be specified by a universal character name","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:44:20: error: character \'~\' cannot be specified by a universal character name"} | |||
} | |||
}, | }, | ||
["err_ucn_escape_incomplete"]={ | ["err_ucn_escape_incomplete"]={ | ||
[c]="incomplete universal character name", | [c]="incomplete universal character name", | ||
[d]=s, | [d]=s, | ||
[f]="incomplete universal character name", | [f]=t, | ||
[g]= | [h]="incomplete universal character name", | ||
[ | [b]=u, | ||
[g]="incomplete universal character name", | |||
[a]=r, | |||
[e]=B, | |||
[i]={"7b753d21b54d",1238456763,"Implement UCN support for C string literals (C99 6.4.3) and add some very basic tests. Chris Goller ..."}, | [i]={"7b753d21b54d",1238456763,"Implement UCN support for C string literals (C99 6.4.3) and add some very basic tests. Chris Goller ..."}, | ||
[j]={{ | [j]={{db,523,"static bool ProcessNumericUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, bool &Delimited, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n // If we didn\'t consume the proper number of digits, there is a problem.\n if (Count == 0 || (!Delimited && Count != UcnLen)) {\n if (Diags)\n Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, Delimited ? diag::err_delimited_escape_empty : diag::err_ucn_escape_incomplete);"},{db,610,"static bool ProcessNamedUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features) {\n if (Incomplete || Empty) {\n if (Diags) {\n Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, Incomplete ? diag::err_ucn_escape_incomplete : diag::err_delimited_escape_empty) << StringRef(&UcnBegin[1], 1);"}}, | ||
[k]={ | |||
["clang/test/Sema/ucn-cstring.c"]={"clang/test/Sema/ucn-cstring.c:12:19: error: incomplete universal character name","clang/test/Sema/ucn-cstring.c:13:19: error: incomplete universal character name"} | |||
} | |||
}, | }, | ||
["err_ucn_escape_invalid"]={ | ["err_ucn_escape_invalid"]={ | ||
[c]="invalid universal character", | [c]="invalid universal character", | ||
[d]=s, | [d]=s, | ||
[f]="invalid universal character", | [f]=t, | ||
[g]= | [h]="invalid universal character", | ||
[ | [b]=u, | ||
[g]="invalid universal character", | |||
[a]=r, | |||
[e]=B, | |||
[i]={"7b753d21b54d",1238456763,"Implement UCN support for C string literals (C99 6.4.3) and add some very basic tests. Chris Goller ..."}, | [i]={"7b753d21b54d",1238456763,"Implement UCN support for C string literals (C99 6.4.3) and add some very basic tests. Chris Goller ..."}, | ||
[j]={{ | [j]={{ab,3525,"uint32_t Lexer::tryReadUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n // C++11 [lex.charset]p2: If the hexadecimal value for a\n // universal-character-name corresponds to a surrogate code point (in the\n // range 0xD800-0xDFFF, inclusive), the program is ill-formed. Additionally,\n // if the hexadecimal value for a universal-character-name outside the\n // c-char-sequence, s-char-sequence, or r-char-sequence of a character or\n // string literal corresponds to a control character (in either of the\n // ranges 0x00-0x1F or 0x7F-0x9F, both inclusive) or to a character in the\n // basic source character set, the program is ill-formed.\n if (CodePoint < 0xA0) {\n } else if (CodePoint >= 0xD800 && CodePoint <= 0xDFFF) {\n // C++03 allows UCNs representing surrogate characters. C99 and C++11 don\'t.\n // We don\'t use isLexingRawMode() here because we need to diagnose bad\n // UCNs even when skipping preprocessing tokens in a #if block.\n if (Result && PP) {\n if (LangOpts.CPlusPlus && !LangOpts.CPlusPlus11)\n else\n Diag(BufferPtr, diag::err_ucn_escape_invalid);"},{db,662,"/// 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 // Check UCN constraints (C99 6.4.3p2) [C++11 lex.charset p2]\n if ((0xD800 <= UcnVal && UcnVal <= 0xDFFF) || // surrogate codepoints\n if (Diags)\n Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, diag::err_ucn_escape_invalid);"}}, | ||
[k]={ | |||
["clang/test/CXX/lex/lex.charset/p2-cxx98.cpp"]={"clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:26:19: error: invalid universal character","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:27:19: error: invalid universal character","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:53:27: error: invalid universal character","clang/test/CXX/lex/lex.charset/p2-cxx98.cpp:54:27: error: invalid universal character"} | |||
} | |||
}, | }, | ||
["err_unable_to_make_temp"]={ | ["err_unable_to_make_temp"]={ | ||
[ | [c]="unable to make temporary file: A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="unable to make temporary file: %0", | |||
[b]=u, | |||
[g]="unable to make temporary file\\: (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"3ef9c44747fb",1337201758,"Pulls diagnostics for temp file handling into the common diagnostic kinds."}, | [i]={"3ef9c44747fb",1337201758,"Pulls diagnostics for temp file handling into the common diagnostic kinds."}, | ||
[j]={{"clang/lib/Driver/Driver.cpp",5715,"const char *Driver::CreateTempFile(Compilation &C, StringRef Prefix, StringRef Suffix, bool MultipleArchs, StringRef BoundArch, bool NeedUniqueDirectory) const {\n if (CrashDirectory) {\n if (std::error_code EC = llvm::sys::fs::createUniqueFile(Path + Middle + Suffix, TmpName)) {\n Diag(clang::diag::err_unable_to_make_temp) << EC.message();"},{"clang/lib/Driver/Driver.cpp",6119,"std::string Driver::GetTemporaryPath(StringRef Prefix, StringRef Suffix) const {\n if (EC) {\n Diag(clang::diag::err_unable_to_make_temp) << EC.message();"},{"clang/lib/Driver/Driver.cpp",6130,"std::string Driver::GetTemporaryDirectory(StringRef Prefix) const {\n if (EC) {\n Diag(clang::diag::err_unable_to_make_temp) << EC.message();"},{"clang/lib/Driver/ToolChains/HIPUtility.cpp",160,"/// Add Generated HIP Object File which has device images embedded into the\n/// host to the argument list for linking. Using MC directives, embed the\n/// device code and also define symbols required by the code generation so that\n/// the image can be retrieved at runtime.\nvoid HIP::constructGenerateObjFileFromHIPFatBinary(Compilation &C, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const JobAction &JA, const Tool &T) {\n if (EC) {\n C.getDriver().Diag(clang::diag::err_unable_to_make_temp) << EC.message();"}} | [j]={{"clang/lib/Driver/Driver.cpp",5715,"const char *Driver::CreateTempFile(Compilation &C, StringRef Prefix, StringRef Suffix, bool MultipleArchs, StringRef BoundArch, bool NeedUniqueDirectory) const {\n if (CrashDirectory) {\n if (std::error_code EC = llvm::sys::fs::createUniqueFile(Path + Middle + Suffix, TmpName)) {\n Diag(clang::diag::err_unable_to_make_temp) << EC.message();"},{"clang/lib/Driver/Driver.cpp",6119,"std::string Driver::GetTemporaryPath(StringRef Prefix, StringRef Suffix) const {\n if (EC) {\n Diag(clang::diag::err_unable_to_make_temp) << EC.message();"},{"clang/lib/Driver/Driver.cpp",6130,"std::string Driver::GetTemporaryDirectory(StringRef Prefix) const {\n if (EC) {\n Diag(clang::diag::err_unable_to_make_temp) << EC.message();"},{"clang/lib/Driver/ToolChains/HIPUtility.cpp",160,"/// Add Generated HIP Object File which has device images embedded into the\n/// host to the argument list for linking. Using MC directives, embed the\n/// device code and also define symbols required by the code generation so that\n/// the image can be retrieved at runtime.\nvoid HIP::constructGenerateObjFileFromHIPFatBinary(Compilation &C, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const JobAction &JA, const Tool &T) {\n if (EC) {\n C.getDriver().Diag(clang::diag::err_unable_to_make_temp) << EC.message();"}} | ||
}, | }, | ||
["err_unable_to_rename_temp"]={ | ["err_unable_to_rename_temp"]={ | ||
[ | [c]="unable to rename temporary \'A\' to output file \'B\': \'C\'", | ||
[d]=s, | |||
[f]=t, | |||
[h]="unable to rename temporary \'%0\' to output file \'%1\': \'%2\'", | |||
[b]=u, | |||
[g]="unable to rename temporary \'(.*?)\' to output file \'(.*?)\'\\: \'(.*?)\'", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"3ef9c44747fb",1337201758,"Pulls diagnostics for temp file handling into the common diagnostic kinds."}, | [i]={"3ef9c44747fb",1337201758,"Pulls diagnostics for temp file handling into the common diagnostic kinds."}, | ||
[j]={{"clang/lib/Frontend/CompilerInstance.cpp",793,"void CompilerInstance::clearOutputFiles(bool EraseFiles) {\n // Ignore errors that occur when trying to discard the temp file.\n for (OutputFile &OF : OutputFiles) {\n getDiagnostics().Report(diag::err_unable_to_rename_temp) << OF.File->TmpName << OF.Filename << std::move(E);"}} | [j]={{"clang/lib/Frontend/CompilerInstance.cpp",793,"void CompilerInstance::clearOutputFiles(bool EraseFiles) {\n // Ignore errors that occur when trying to discard the temp file.\n for (OutputFile &OF : OutputFiles) {\n getDiagnostics().Report(diag::err_unable_to_rename_temp) << OF.File->TmpName << OF.Filename << std::move(E);"}} | ||
}, | }, | ||
["err_unavailable"]={ | ["err_unavailable"]={ | ||
[ | [c]="A is unavailable", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%0 is unavailable", | |||
[b]=u, | |||
[g]="(.*?) is unavailable", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"1ddd6d2b6b80",1279744991,"Upgrade \"\'X\' is unavailable\" from a warning to an error. This matches GCC\'s behavior. Note that"}, | [i]={"1ddd6d2b6b80",1279744991,"Upgrade \"\'X\' is unavailable\" from a warning to an error. This matches GCC\'s behavior. Note that"}, | ||
[j]={{"clang/lib/ARCMigrate/TransAPIUses.cpp",90,"class APIChecker : public RecursiveASTVisitor<APIChecker> {\n bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n if (E->isInstanceMessage() && E->getInstanceReceiver() && E->getSelector() == zoneSel && Pass.TA.hasDiagnostic(diag::err_unavailable, diag::err_unavailable_message, E->getSelectorLoc(0))) {"},{"clang/lib/ARCMigrate/TransAPIUses.cpp",95,"class APIChecker : public RecursiveASTVisitor<APIChecker> {\n bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n // -zone.\n if (E->isInstanceMessage() && E->getInstanceReceiver() && E->getSelector() == zoneSel && Pass.TA.hasDiagnostic(diag::err_unavailable, diag::err_unavailable_message, E->getSelectorLoc(0))) {\n Pass.TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message, E->getSelectorLoc(0));"},{"clang/lib/ARCMigrate/TransAutoreleasePool.cpp",220,"class AutoreleasePoolRewriter : public RecursiveASTVisitor<AutoreleasePoolRewriter> {\n void clearUnavailableDiags(Stmt *S) {\n if (S)\n Pass.TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message, S->getSourceRange());"},{"clang/lib/ARCMigrate/TransGCCalls.cpp",54,"class GCCollectableCallsChecker : public RecursiveASTVisitor<GCCollectableCallsChecker> {\n bool VisitCallExpr(CallExpr *E) {\n if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CEE)) {\n if (FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(DRE->getDecl())) {\n if (FD->getIdentifier() == NSMakeCollectableII) {\n TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message,"},{"clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp",391,"class RetainReleaseDeallocRemover : public RecursiveASTVisitor<RetainReleaseDeallocRemover> {\n void clearDiagnostics(SourceLocation loc) const { Pass.TA.clearDiagnostic(diag::err_arc_illegal_explicit_message, diag::err_unavailable, diag::err_unavailable_message, loc); }"},{ | [j]={{"clang/lib/ARCMigrate/TransAPIUses.cpp",90,"class APIChecker : public RecursiveASTVisitor<APIChecker> {\n bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n if (E->isInstanceMessage() && E->getInstanceReceiver() && E->getSelector() == zoneSel && Pass.TA.hasDiagnostic(diag::err_unavailable, diag::err_unavailable_message, E->getSelectorLoc(0))) {"},{"clang/lib/ARCMigrate/TransAPIUses.cpp",95,"class APIChecker : public RecursiveASTVisitor<APIChecker> {\n bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n // -zone.\n if (E->isInstanceMessage() && E->getInstanceReceiver() && E->getSelector() == zoneSel && Pass.TA.hasDiagnostic(diag::err_unavailable, diag::err_unavailable_message, E->getSelectorLoc(0))) {\n Pass.TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message, E->getSelectorLoc(0));"},{"clang/lib/ARCMigrate/TransAutoreleasePool.cpp",220,"class AutoreleasePoolRewriter : public RecursiveASTVisitor<AutoreleasePoolRewriter> {\n void clearUnavailableDiags(Stmt *S) {\n if (S)\n Pass.TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message, S->getSourceRange());"},{"clang/lib/ARCMigrate/TransGCCalls.cpp",54,"class GCCollectableCallsChecker : public RecursiveASTVisitor<GCCollectableCallsChecker> {\n bool VisitCallExpr(CallExpr *E) {\n if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CEE)) {\n if (FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(DRE->getDecl())) {\n if (FD->getIdentifier() == NSMakeCollectableII) {\n TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message,"},{"clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp",391,"class RetainReleaseDeallocRemover : public RecursiveASTVisitor<RetainReleaseDeallocRemover> {\n void clearDiagnostics(SourceLocation loc) const { Pass.TA.clearDiagnostic(diag::err_arc_illegal_explicit_message, diag::err_unavailable, diag::err_unavailable_message, loc); }"},{Dc,844,"bool DiagnosticIDs::isUnrecoverable(unsigned DiagID) const {\n if (DiagID == diag::err_unavailable || DiagID == diag::err_unavailable_message)"},{"clang/lib/Sema/SemaAvailability.cpp",447,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n case AR_Unavailable:\n diag = !ObjCPropertyAccess ? diag::err_unavailable : diag::err_property_method_unavailable;"}}, | ||
[k]={ | |||
["clang/test/SemaObjC/protocol-attribute.m"]={"clang/test/SemaObjC/protocol-attribute.m:6:8: error: \'FwProto\' is unavailable","clang/test/SemaObjC/protocol-attribute.m:38:22: error: \'FwProto\' is unavailable","clang/test/SemaObjC/protocol-attribute.m:43:5: error: \'XProto\' is unavailable"} | |||
} | |||
}, | }, | ||
["err_unavailable_in_arc"]={ | ["err_unavailable_in_arc"]={ | ||
[ | [c]="A is unavailable in ARC", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%0 is unavailable in ARC", | |||
[b]=u, | |||
[g]="(.*?) is unavailable in ARC", | |||
[a]=r, | [a]=r, | ||
[ | [e]="ARC Restrictions", | ||
[i]={"c6af8c606dae",1446008599,"Refine r251469 to give better (and more localizable) diagnostics"}, | [i]={"c6af8c606dae",1446008599,"Refine r251469 to give better (and more localizable) diagnostics"}, | ||
[j]={{"clang/lib/Sema/SemaAvailability.cpp",462,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n case AR_Unavailable:\n if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n if (AL->isImplicit() && AL->getImplicitReason()) {\n // Most of these failures are due to extra restrictions in ARC;\n // reflect that in the primary diagnostic when applicable.\n auto flagARCError = [&] {\n if (S.getLangOpts().ObjCAutoRefCount && S.getSourceManager().isInSystemHeader(OffendingDecl->getLocation()))\n diag = diag::err_unavailable_in_arc;"}} | [j]={{"clang/lib/Sema/SemaAvailability.cpp",462,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n case AR_Unavailable:\n if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n if (AL->isImplicit() && AL->getImplicitReason()) {\n // Most of these failures are due to extra restrictions in ARC;\n // reflect that in the primary diagnostic when applicable.\n auto flagARCError = [&] {\n if (S.getLangOpts().ObjCAutoRefCount && S.getSourceManager().isInSystemHeader(OffendingDecl->getLocation()))\n diag = diag::err_unavailable_in_arc;"}}, | ||
[k]={ | |||
["clang/test/SemaObjC/arc-unavailable-system-function.m"]={"arc-unavailable-system-function.m:2:3: error: \'foo\' is unavailable in ARC"} | |||
} | |||
}, | }, | ||
["err_unavailable_message"]={ | ["err_unavailable_message"]={ | ||
[ | [c]="A is unavailable: B", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%0 is unavailable: %1", | |||
[b]=u, | |||
[g]="(.*?) is unavailable\\: (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"c74073cd2045",1286406752,"Patch for adding message to unavailable attribute."}, | [i]={"c74073cd2045",1286406752,"Patch for adding message to unavailable attribute."}, | ||
[j]={{"clang/lib/ARCMigrate/TransAPIUses.cpp",91,"class APIChecker : public RecursiveASTVisitor<APIChecker> {\n bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n if (E->isInstanceMessage() && E->getInstanceReceiver() && E->getSelector() == zoneSel && Pass.TA.hasDiagnostic(diag::err_unavailable, diag::err_unavailable_message, E->getSelectorLoc(0))) {"},{"clang/lib/ARCMigrate/TransAPIUses.cpp",96,"class APIChecker : public RecursiveASTVisitor<APIChecker> {\n bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n // -zone.\n if (E->isInstanceMessage() && E->getInstanceReceiver() && E->getSelector() == zoneSel && Pass.TA.hasDiagnostic(diag::err_unavailable, diag::err_unavailable_message, E->getSelectorLoc(0))) {\n Pass.TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message, E->getSelectorLoc(0));"},{"clang/lib/ARCMigrate/TransAutoreleasePool.cpp",221,"class AutoreleasePoolRewriter : public RecursiveASTVisitor<AutoreleasePoolRewriter> {\n void clearUnavailableDiags(Stmt *S) {\n if (S)\n Pass.TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message, S->getSourceRange());"},{"clang/lib/ARCMigrate/TransGCCalls.cpp",55,"class GCCollectableCallsChecker : public RecursiveASTVisitor<GCCollectableCallsChecker> {\n bool VisitCallExpr(CallExpr *E) {\n if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CEE)) {\n if (FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(DRE->getDecl())) {\n if (FD->getIdentifier() == NSMakeCollectableII) {\n TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message,"},{"clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp",392,"class RetainReleaseDeallocRemover : public RecursiveASTVisitor<RetainReleaseDeallocRemover> {\n void clearDiagnostics(SourceLocation loc) const { Pass.TA.clearDiagnostic(diag::err_arc_illegal_explicit_message, diag::err_unavailable, diag::err_unavailable_message, loc); }"},{ | [j]={{"clang/lib/ARCMigrate/TransAPIUses.cpp",91,"class APIChecker : public RecursiveASTVisitor<APIChecker> {\n bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n if (E->isInstanceMessage() && E->getInstanceReceiver() && E->getSelector() == zoneSel && Pass.TA.hasDiagnostic(diag::err_unavailable, diag::err_unavailable_message, E->getSelectorLoc(0))) {"},{"clang/lib/ARCMigrate/TransAPIUses.cpp",96,"class APIChecker : public RecursiveASTVisitor<APIChecker> {\n bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n // -zone.\n if (E->isInstanceMessage() && E->getInstanceReceiver() && E->getSelector() == zoneSel && Pass.TA.hasDiagnostic(diag::err_unavailable, diag::err_unavailable_message, E->getSelectorLoc(0))) {\n Pass.TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message, E->getSelectorLoc(0));"},{"clang/lib/ARCMigrate/TransAutoreleasePool.cpp",221,"class AutoreleasePoolRewriter : public RecursiveASTVisitor<AutoreleasePoolRewriter> {\n void clearUnavailableDiags(Stmt *S) {\n if (S)\n Pass.TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message, S->getSourceRange());"},{"clang/lib/ARCMigrate/TransGCCalls.cpp",55,"class GCCollectableCallsChecker : public RecursiveASTVisitor<GCCollectableCallsChecker> {\n bool VisitCallExpr(CallExpr *E) {\n if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CEE)) {\n if (FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(DRE->getDecl())) {\n if (FD->getIdentifier() == NSMakeCollectableII) {\n TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message,"},{"clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp",392,"class RetainReleaseDeallocRemover : public RecursiveASTVisitor<RetainReleaseDeallocRemover> {\n void clearDiagnostics(SourceLocation loc) const { Pass.TA.clearDiagnostic(diag::err_arc_illegal_explicit_message, diag::err_unavailable, diag::err_unavailable_message, loc); }"},{Dc,845,"bool DiagnosticIDs::isUnrecoverable(unsigned DiagID) const {\n if (DiagID == diag::err_unavailable || DiagID == diag::err_unavailable_message)"},{"clang/lib/Sema/SemaAvailability.cpp",449,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n case AR_Unavailable:\n diag_message = diag::err_unavailable_message;"}}, | ||
[k]={ | |||
["clang/test/Sema/attr-c2x.c"]={"clang/test/Sema/attr-c2x.c:27:3: error: \'foo2\' is unavailable: not available - replaced"} | |||
} | |||
}, | }, | ||
["err_uncasted_call_of_unknown_any"]={ | ["err_uncasted_call_of_unknown_any"]={ | ||
[ | [c]="A has unknown return type; cast the call to its declared return type", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%0 has unknown return type; cast the call to its declared return type", | |||
[b]=u, | |||
[g]="(.*?) has unknown return type; cast the call to its declared return type", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"2d2e870745c2",1302505370,"More __unknown_anytype work."}, | [i]={"2d2e870745c2",1302505370,"More __unknown_anytype work."}, | ||
[j]={{ | [j]={{z,21484,"static ExprResult diagnoseUnknownAnyExpr(Sema &S, Expr *E) {\n while (true) {\n if (CallExpr *call = dyn_cast<CallExpr>(E)) {\n diagID = diag::err_uncasted_call_of_unknown_any;"},{z,21488,"static ExprResult diagnoseUnknownAnyExpr(Sema &S, Expr *E) {\n if (DeclRefExpr *ref = dyn_cast<DeclRefExpr>(E)) {\n } else if (MemberExpr *mem = dyn_cast<MemberExpr>(E)) {\n } else if (ObjCMessageExpr *msg = dyn_cast<ObjCMessageExpr>(E)) {\n diagID = diag::err_uncasted_call_of_unknown_any;"}}, | ||
[k]={ | |||
[dc]={"clang/test/SemaCXX/unknown-anytype.cpp:26:5: error: \'foo\' has unknown return type; cast the call to its declared return type"} | |||
} | |||
}, | }, | ||
["err_uncasted_send_to_unknown_any_method"]={ | ["err_uncasted_send_to_unknown_any_method"]={ | ||
[ | [c]="no known method ...; cast the message send to the method\'s return type", | ||
[d]=s, | |||
[f]=t, | |||
[h]="no known method %select{%objcinstance1|%objcclass1}0; cast the message send to the method\'s return type", | |||
[b]=u, | |||
[g]="no known method (?:(.*?)|(.*?)); cast the message send to the method\'s return type", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"fa6f5d6ab8c3",1314824256,"Don\'t assert when diagnosing a missing cast of an unknown-anytype"}, | [i]={"fa6f5d6ab8c3",1314824256,"Don\'t assert when diagnosing a missing cast of an unknown-anytype"}, | ||
[j]={{ | [j]={{z,21494,"static ExprResult diagnoseUnknownAnyExpr(Sema &S, Expr *E) {\n if (DeclRefExpr *ref = dyn_cast<DeclRefExpr>(E)) {\n } else if (MemberExpr *mem = dyn_cast<MemberExpr>(E)) {\n } else if (ObjCMessageExpr *msg = dyn_cast<ObjCMessageExpr>(E)) {\n if (!d) {\n S.Diag(loc, diag::err_uncasted_send_to_unknown_any_method) << static_cast<unsigned>(msg->isClassMessage()) << msg->getSelector() << orig->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/SemaObjCXX/unknown-anytype.mm"]={"clang/test/SemaObjCXX/unknown-anytype.mm:6:12: error: no known method \'-foo\'; cast the message send to the method\'s return type","clang/test/SemaObjCXX/unknown-anytype.mm:7:8: error: no known method \'-foo\'; cast the message send to the method\'s return type"} | |||
} | |||
}, | }, | ||
["err_uncasted_use_of_unknown_any"]={ | ["err_uncasted_use_of_unknown_any"]={ | ||
[ | [c]="A has unknown type; cast it to its declared type to use it", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%0 has unknown type; cast it to its declared type to use it", | |||
[b]=u, | |||
[g]="(.*?) has unknown type; cast it to its declared type to use it", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"2d2e870745c2",1302505370,"More __unknown_anytype work."}, | [i]={"2d2e870745c2",1302505370,"More __unknown_anytype work."}, | ||
[j]={{ | [j]={{z,21469,"static ExprResult diagnoseUnknownAnyExpr(Sema &S, Expr *E) {\n unsigned diagID = diag::err_uncasted_use_of_unknown_any;"}}, | ||
[k]={ | |||
[dc]={"clang/test/SemaCXX/unknown-anytype.cpp:17:13: error: \'foo\' has unknown type; cast it to its declared type to use it","clang/test/SemaCXX/unknown-anytype.cpp:18:17: error: \'foo\' has unknown type; cast it to its declared type to use it","clang/test/SemaCXX/unknown-anytype.cpp:19:12: error: \'foo\' has unknown type; cast it to its declared type to use it"} | |||
} | |||
}, | }, | ||
["err_undeclared_boxing_method"]={ | ["err_undeclared_boxing_method"]={ | ||
[ | [c]="declaration of A is missing in B class", | ||
[d]=s, | |||
[f]=t, | |||
[h]="declaration of %0 is missing in %1 class", | |||
[b]=u, | |||
[g]="declaration of (.*?) is missing in (.*?) class", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"890f4577b11a",1336838021,"Don\'t crash on boxed strings when +stringWithUTF8String: is missing."}, | [i]={"890f4577b11a",1336838021,"Don\'t crash on boxed strings when +stringWithUTF8String: is missing."}, | ||
[j]={{ | [j]={{ec,154,"/// Emits an error if the given method does not exist, or if the return\n/// type is not an Objective-C object.\nstatic bool validateBoxingMethod(Sema &S, SourceLocation Loc, const ObjCInterfaceDecl *Class, Selector Sel, const ObjCMethodDecl *Method) {\n if (!Method) {\n S.Diag(Loc, diag::err_undeclared_boxing_method) << Sel << Class->getName();"}}, | ||
[k]={ | |||
["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:54:18: error: declaration of \'numberWithDouble:\' is missing in NSNumber class","clang/test/SemaObjC/objc-literal-nsnumber.m:55:24: error: declaration of \'numberWithBool:\' is missing in NSNumber class","clang/test/SemaObjC/objc-literal-nsnumber.m:124:10: error: declaration of \'stringWithUTF8String:\' is missing in NSString class"} | |||
} | |||
}, | }, | ||
["err_undeclared_destructor_name"]={ | ["err_undeclared_destructor_name"]={ | ||
[ | [c]="undeclared identifier A in destructor name", | ||
[d]=s, | |||
[f]=t, | |||
[h]="undeclared identifier %0 in destructor name", | |||
[b]=u, | |||
[g]="undeclared identifier (.*?) in destructor name", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={Nc,1576809732,Oc}, | |||
[j]={{Y,438,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n if (FoundDecls.empty()) {\n Diag(NameLoc, diag::err_undeclared_destructor_name) << &II << MakeFixItHint();"}}, | |||
[k]={ | |||
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:26:7: error: undeclared identifier \'foo\' in destructor name","clang/test/SemaCXX/pseudo-destructors.cpp:86:9: error: undeclared identifier \'oops\' in destructor name","clang/test/SemaCXX/pseudo-destructors.cpp:139:45: error: undeclared identifier \'G\' in destructor name"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_undeclared_label_use"]={ | ["err_undeclared_label_use"]={ | ||
[ | [c]="use of undeclared label A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="use of undeclared label %0", | |||
[b]=u, | |||
[g]="use of undeclared label (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={I,1237025389,J}, | |||
[j]={{x,2222,"static void CheckPoppedLabel(LabelDecl *L, Sema &S, Sema::DiagReceiverTy DiagReceiver) {\n if (Diagnose)\n DiagReceiver(L->getLocation(), S.PDiag(diag::err_undeclared_label_use) << L);"}}, | |||
[k]={ | |||
["clang/test/Misc/explicit.cpp"]={"clang/test/Misc/explicit.cpp:5:16: error: use of undeclared label \'b\'"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_undeclared_objc_literal_class"]={ | ["err_undeclared_objc_literal_class"]={ | ||
[ | [c]="definition of class A must be available to use Objective-C ...", | ||
[d]=s, | |||
[f]=t, | |||
[h]="definition of class %0 must be available to use Objective-C %select{array literals|dictionary literals|numeric literals|boxed expressions|string literals}1", | |||
[b]=u, | |||
[g]="definition of class (.*?) must be available to use Objective\\-C (?:array literals|dictionary literals|numeric literals|boxed expressions|string literals)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"b7d8563973fe",1437714580,"Cleanup ObjCInterfaceDecl lookup for ObjC literals"}, | [i]={"b7d8563973fe",1437714580,"Cleanup ObjCInterfaceDecl lookup for ObjC literals"}, | ||
[j]={{ | [j]={{ec,204,"/// Validates ObjCInterfaceDecl availability.\n/// ObjCInterfaceDecl, used to create ObjC literals, should be defined\n/// if clang not in a debugger mode.\nstatic bool ValidateObjCLiteralInterfaceDecl(Sema &S, ObjCInterfaceDecl *Decl, SourceLocation Loc, Sema::ObjCLiteralKind LiteralKind) {\n if (!Decl) {\n S.Diag(Loc, diag::err_undeclared_objc_literal_class) << II->getName() << LiteralKind;"},{ec,208,"/// Validates ObjCInterfaceDecl availability.\n/// ObjCInterfaceDecl, used to create ObjC literals, should be defined\n/// if clang not in a debugger mode.\nstatic bool ValidateObjCLiteralInterfaceDecl(Sema &S, ObjCInterfaceDecl *Decl, SourceLocation Loc, Sema::ObjCLiteralKind LiteralKind) {\n if (!Decl) {\n } else if (!Decl->hasDefinition() && !S.getLangOpts().DebuggerObjCLiteral) {\n S.Diag(Loc, diag::err_undeclared_objc_literal_class) << Decl->getName() << LiteralKind;"}}, | ||
[k]={ | |||
["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:13:12: error: definition of class NSNumber must be available to use Objective-C numeric literals","clang/test/SemaObjC/objc-literal-nsnumber.m:16:13: error: definition of class NSNumber must be available to use Objective-C numeric literals","clang/test/SemaObjC/objc-literal-nsnumber.m:23:12: error: definition of class NSNumber must be available to use Objective-C numeric literals","clang/test/SemaObjC/objc-literal-nsnumber.m:26:13: error: definition of class NSNumber must be available to use Objective-C numeric literals","clang/test/SemaObjC/objc-literal-nsnumber.m:77:10: error: definition of class NSDictionary must be available to use Objective-C dictionary literals"} | |||
} | |||
}, | }, | ||
["err_undeclared_protocol"]={ | ["err_undeclared_protocol"]={ | ||
[ | [c]="cannot find protocol declaration for A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot find protocol declaration for %0", | |||
[b]=u, | |||
[g]="cannot find protocol declaration for (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={C,1236199783,D}, | |||
[j]={{pb,1331,"/// FindProtocolDeclaration - This routine looks up protocols and\n/// issues an error if they are not declared. It returns list of\n/// protocol declarations in its \'Protocols\' argument.\nvoid Sema::FindProtocolDeclaration(bool WarnOnDeclarations, bool ForObjCContainer, ArrayRef<IdentifierLocPair> ProtocolId, SmallVectorImpl<Decl *> &Protocols) {\n for (const IdentifierLocPair &Pair : ProtocolId) {\n if (!PDecl) {\n Diag(Pair.second, diag::err_undeclared_protocol) << Pair.first;"},{pb,1745,"void Sema::actOnObjCTypeArgsOrProtocolQualifiers(Scope *S, ParsedType baseType, SourceLocation lAngleLoc, ArrayRef<IdentifierInfo *> identifiers, ArrayRef<SourceLocation> identifierLocs, SourceLocation rAngleLoc, SourceLocation &typeArgsLAngleLoc, SmallVectorImpl<ParsedType> &typeArgs, SourceLocation &typeArgsRAngleLoc, SourceLocation &protocolLAngleLoc, SmallVectorImpl<Decl *> &protocols, SourceLocation &protocolRAngleLoc, bool warnOnIncompleteProtocols) {\n for (unsigned i = 0, n = identifiers.size(); i != n; ++i) {\n Diag(identifierLocs[i], (lookupKind == LookupAnyName ? diag::err_objc_type_arg_missing : lookupKind == LookupObjCProtocolName ? diag::err_undeclared_protocol : diag::err_unknown_typename)) << identifiers[i];"},{ec,1393,"ExprResult Sema::ParseObjCProtocolExpression(IdentifierInfo *ProtocolId, SourceLocation AtLoc, SourceLocation ProtoLoc, SourceLocation LParenLoc, SourceLocation ProtoIdLoc, SourceLocation RParenLoc) {\n if (!PDecl) {\n Diag(ProtoLoc, diag::err_undeclared_protocol) << ProtocolId;"}}, | |||
[k]={ | |||
["clang/test/SemaObjC/undefined-protocol-type-1.m"]={"clang/test/SemaObjC/undefined-protocol-type-1.m:7:10: error: cannot find protocol declaration for \'p3\'","clang/test/SemaObjC/undefined-protocol-type-1.m:8:10: error: cannot find protocol declaration for \'p3\'"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_undeclared_protocol_suggest"]={ | ["err_undeclared_protocol_suggest"]={ | ||
[ | [c]="cannot find protocol declaration for A; did you mean B?", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot find protocol declaration for %0; did you mean %1?", | |||
[b]=u, | |||
[g]="cannot find protocol declaration for (.*?); did you mean (.*?)\\?", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"}, | [i]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"}, | ||
[j]={{ | [j]={{pb,1326,"/// FindProtocolDeclaration - This routine looks up protocols and\n/// issues an error if they are not declared. It returns list of\n/// protocol declarations in its \'Protocols\' argument.\nvoid Sema::FindProtocolDeclaration(bool WarnOnDeclarations, bool ForObjCContainer, ArrayRef<IdentifierLocPair> ProtocolId, SmallVectorImpl<Decl *> &Protocols) {\n for (const IdentifierLocPair &Pair : ProtocolId) {\n if (!PDecl) {\n if ((PDecl = Corrected.getCorrectionDeclAs<ObjCProtocolDecl>()))\n diagnoseTypo(Corrected, PDiag(diag::err_undeclared_protocol_suggest) << Pair.first);"},{pb,1711,"void Sema::actOnObjCTypeArgsOrProtocolQualifiers(Scope *S, ParsedType baseType, SourceLocation lAngleLoc, ArrayRef<IdentifierInfo *> identifiers, ArrayRef<SourceLocation> identifierLocs, SourceLocation rAngleLoc, SourceLocation &typeArgsLAngleLoc, SmallVectorImpl<ParsedType> &typeArgs, SourceLocation &typeArgsRAngleLoc, SourceLocation &protocolLAngleLoc, SmallVectorImpl<Decl *> &protocols, SourceLocation &protocolRAngleLoc, bool warnOnIncompleteProtocols) {\n for (unsigned i = 0, n = identifiers.size(); i != n; ++i) {\n if (corrected) {\n // Did we find a protocol?\n if (auto proto = corrected.getCorrectionDeclAs<ObjCProtocolDecl>()) {\n diagnoseTypo(corrected, PDiag(diag::err_undeclared_protocol_suggest) << identifiers[i]);"}}, | ||
[k]={ | |||
["clang/test/SemaObjC/parameterized_classes.m"]={"clang/test/SemaObjC/parameterized_classes.m:227:24: error: cannot find protocol declaration for \'NSObjec\'; did you mean \'NSObject\'?","clang/test/SemaObjC/parameterized_classes.m:234:33: error: cannot find protocol declaration for \'NSCopyin\'; did you mean \'NSCopying\'?"} | |||
} | |||
}, | }, | ||
["err_undeclared_use"]={ | ["err_undeclared_use"]={ | ||
[ | [c]="use of undeclared A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="use of undeclared %0", | |||
[b]=u, | |||
[g]="use of undeclared (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={I,1237025389,J}, | |||
[j]={{"clang/lib/Sema/SemaAttr.cpp",805,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n for (auto &Function : Functions) {\n if (!ND) {\n Diag(Loc, diag::err_undeclared_use) << II->getName();"},{z,2381,"/// Diagnose an empty lookup.\n///\n/// \\return false if new lookup candidates were found\nbool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, CorrectionCandidateCallback &CCC, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, TypoExpr **Out) {\n if (Name.getNameKind() == DeclarationName::CXXOperatorName || Name.getNameKind() == DeclarationName::CXXLiteralOperatorName || Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n diagnostic = diag::err_undeclared_use;"},{F,5162,"/// 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 (!MemberOfUnknownSpecialization) {\n if (!LookupTemplateName(R, S, SS, ObjectType.get(), EnteringContext, MOUS, RTK, nullptr, /*AllowTypoCorrection=*/false) && !R.isAmbiguous()) {\n if (LookupCtx)\n else\n Diag(Name.getBeginLoc(), diag::err_undeclared_use) << DNI.getName() << SS.getRange();"}}, | |||
[k]={ | |||
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:6:23: error: use of undeclared a"} | |||
} | |||
[i]={ | |||
[j]={{"clang/lib/Sema/SemaAttr.cpp",805,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n for (auto &Function : Functions) {\n if (!ND) {\n Diag(Loc, diag::err_undeclared_use) << II->getName();"},{ | |||
}, | }, | ||
["err_undeclared_use_of_module"]={ | ["err_undeclared_use_of_module"]={ | ||
[ | [c]="module A does not depend on a module exporting \'B\'", | ||
[d]=s, | |||
[f]=t, | |||
[h]="module %0 does not depend on a module exporting \'%1\'", | |||
[b]=u, | |||
[g]="module (.*?) does not depend on a module exporting \'(.*?)\'", | |||
[a]=r, | [a]=r, | ||
[ | [e]=B, | ||
[i]={"11152dd55f7a",1424304628,"Allow errors on use of a private module header to be disabled, to better support incremental transit..."}, | [i]={"11152dd55f7a",1424304628,"Allow errors on use of a private module header to be disabled, to better support incremental transit..."}, | ||
[j]={{"clang/lib/Lex/ModuleMap.cpp",540,"void ModuleMap::diagnoseHeaderInclusion(Module *RequestingModule, bool RequestingModuleIsModuleInterface, SourceLocation FilenameLoc, StringRef Filename, FileEntryRef File) {\n if (RequestingModule && LangOpts.ModulesStrictDeclUse) {\n Diags.Report(FilenameLoc, diag::err_undeclared_use_of_module) << RequestingModule->getTopLevelModule()->Name << Filename;"}} | [j]={{"clang/lib/Lex/ModuleMap.cpp",540,"void ModuleMap::diagnoseHeaderInclusion(Module *RequestingModule, bool RequestingModuleIsModuleInterface, SourceLocation FilenameLoc, StringRef Filename, FileEntryRef File) {\n if (RequestingModule && LangOpts.ModulesStrictDeclUse) {\n Diags.Report(FilenameLoc, diag::err_undeclared_use_of_module) << RequestingModule->getTopLevelModule()->Name << Filename;"}}, | ||
[k]={ | |||
["clang/test/Modules/strict-decluse.cpp"]={"clang/test/Modules/strict-decluse.cpp:7:10: error: module XG does not depend on a module exporting \'i.h\'"} | |||
} | |||
}, | }, | ||
["err_undeclared_use_of_module_indirect"]={ | ["err_undeclared_use_of_module_indirect"]={ | ||
[ | [c]="module A does not directly depend on a module exporting \'B\', which is part of indirectly-used module C", | ||
[d]=s, | |||
[f]=t, | |||
[h]="module %0 does not directly depend on a module exporting \'%1\', which is part of indirectly-used module %2", | |||
[b]=u, | |||
[g]="module (.*?) does not directly depend on a module exporting \'(.*?)\', which is part of indirectly\\-used module (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=B, | ||
[i]={O,1625925174,N}, | |||
[j]={{"clang/lib/Lex/ModuleMap.cpp",528,"void ModuleMap::diagnoseHeaderInclusion(Module *RequestingModule, bool RequestingModuleIsModuleInterface, SourceLocation FilenameLoc, StringRef Filename, FileEntryRef File) {\n // We have found a module, but we don\'t use it.\n if (NotUsed) {\n Diags.Report(FilenameLoc, diag::err_undeclared_use_of_module_indirect) << RequestingModule->getTopLevelModule()->Name << Filename << NotUsed->Name;"}}, | |||
[k]={ | |||
["clang/test/Modules/declare-use2.cpp"]={"clang/test/Modules/Inputs/declare-use/h.h:4:10: error: module XH does not directly depend on a module exporting \'d.h\', which is part of indirectly-used module XD","clang/test/Modules/declare-use2.cpp:6:10: error: module XH does not directly depend on a module exporting \'f.h\', which is part of indirectly-used module XF"} | |||
} | |||
[i]={ | |||
[j]={{"clang/lib/Lex/ModuleMap.cpp",528,"void ModuleMap::diagnoseHeaderInclusion(Module *RequestingModule, bool RequestingModuleIsModuleInterface, SourceLocation FilenameLoc, StringRef Filename, FileEntryRef File) {\n // We have found a module, but we don\'t use it.\n if (NotUsed) {\n Diags.Report(FilenameLoc, diag::err_undeclared_use_of_module_indirect) << RequestingModule->getTopLevelModule()->Name << Filename << NotUsed->Name;"}} | |||
}, | }, | ||
["err_undeclared_use_suggest"]={ | ["err_undeclared_use_suggest"]={ | ||
[ | [c]="use of undeclared A; did you mean B?", | ||
[d]=s, | |||
[f]=t, | |||
[h]="use of undeclared %0; did you mean %1?", | |||
[b]=u, | |||
[g]="use of undeclared (.*?); did you mean (.*?)\\?", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"598b08f8182e",1262236813,"Implement typo correction for id-expressions, e.g.,"}, | [i]={"598b08f8182e",1262236813,"Implement typo correction for id-expressions, e.g.,"}, | ||
[j]={{ | [j]={{z,2382,"/// Diagnose an empty lookup.\n///\n/// \\return false if new lookup candidates were found\nbool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, CorrectionCandidateCallback &CCC, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, TypoExpr **Out) {\n if (Name.getNameKind() == DeclarationName::CXXOperatorName || Name.getNameKind() == DeclarationName::CXXLiteralOperatorName || Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n diagnostic_suggest = diag::err_undeclared_use_suggest;"}} | ||
}, | }, | ||
["err_undeclared_var_use"]={ | ["err_undeclared_var_use"]={ | ||
[ | [c]="use of undeclared identifier A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="use of undeclared identifier %0", | |||
[b]=u, | |||
[g]="use of undeclared identifier (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={I,1237025389,J}, | |||
[j]={{"clang/lib/Sema/SemaCUDA.cpp",56,"ExprResult Sema::ActOnCUDAExecConfigExpr(Scope *S, SourceLocation LLLLoc, MultiExprArg ExecConfig, SourceLocation GGGLoc) {\n if (!ConfigDecl)\n return ExprError(Diag(LLLLoc, diag::err_undeclared_var_use) << getCudaConfigureFuncName());"},{"clang/lib/Sema/SemaCXXScopeSpec.cpp",826,"/// 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 if (!Found.empty()) {\n } else if (SS.isSet())\n else\n Diag(IdInfo.IdentifierLoc, diag::err_undeclared_var_use) << IdInfo.Identifier;"},{z,2376,"/// Diagnose an empty lookup.\n///\n/// \\return false if new lookup candidates were found\nbool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, CorrectionCandidateCallback &CCC, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, TypoExpr **Out) {\n unsigned diagnostic = diag::err_undeclared_var_use;"},{Hc,1591,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n if (IC) {\n if (getLangOpts().ObjCDefaultSynthProperties && getLangOpts().ObjCRuntime.isNonFragile() && !IDecl->isObjCRequiresPropertyDefs()) {\n // Issue diagnostics only if Ivar belongs to current class.\n if (Ivar && Ivar->getSynthesize() && declaresSameEntity(IC->getClassInterface(), ClassDeclared)) {\n Diag(Ivar->getLocation(), diag::err_undeclared_var_use) << PropertyId;"},{Fc,3053,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n if (!Lookup.isSingleResult()) {\n if (TypoCorrection Corrected = CorrectTypo(Id, LookupOrdinaryName, CurScope, nullptr, CCC, CTK_ErrorRecovery)) {\n } else {\n Diag(Id.getLoc(), Lookup.empty() ? diag::err_undeclared_var_use : diag::err_omp_expected_var_arg) << Id.getName();"},{Fc,23037,"NamedDecl *Sema::lookupOpenMPDeclareTargetName(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id) {\n if (!Lookup.isSingleResult()) {\n Diag(Id.getLoc(), diag::err_undeclared_var_use) << Id.getName();"}}, | |||
[k]={ | |||
["clang/test/SemaTemplate/nss-recovery.cpp"]={"clang/test/SemaTemplate/nss-recovery.cpp:5:12: error: use of undeclared identifier \'undef\'"} | |||
} | |||
[i]={ | |||
[j]={{"clang/lib/Sema/SemaCUDA.cpp",56,"ExprResult Sema::ActOnCUDAExecConfigExpr(Scope *S, SourceLocation LLLLoc, MultiExprArg ExecConfig, SourceLocation GGGLoc) {\n if (!ConfigDecl)\n return ExprError(Diag(LLLLoc, diag::err_undeclared_var_use) << getCudaConfigureFuncName());"},{"clang/lib/Sema/SemaCXXScopeSpec.cpp",826,"/// 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 if (!Found.empty()) {\n } else if (SS.isSet())\n else\n Diag(IdInfo.IdentifierLoc, diag::err_undeclared_var_use) << IdInfo.Identifier;"},{ | |||
}, | }, | ||
["err_undeclared_var_use_suggest"]={ | ["err_undeclared_var_use_suggest"]={ | ||
[ | [c]="use of undeclared identifier A; did you mean B?", | ||
[d]=s, | |||
[f]=t, | |||
[h]="use of undeclared identifier %0; did you mean %1?", | |||
[b]=u, | |||
[g]="use of undeclared identifier (.*?); did you mean (.*?)\\?", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"598b08f8182e",1262236813,"Implement typo correction for id-expressions, e.g.,"}, | [i]={"598b08f8182e",1262236813,"Implement typo correction for id-expressions, e.g.,"}, | ||
[j]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",627,"/// 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 if (Found.empty() && !ErrorRecoveryLookup && !getLangOpts().MSVCCompat) {\n if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery, LookupCtx, EnteringContext)) {\n if (LookupCtx) {\n } else\n diagnoseTypo(Corrected, PDiag(diag::err_undeclared_var_use_suggest) << Name);"},{ | [j]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",627,"/// 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 if (Found.empty() && !ErrorRecoveryLookup && !getLangOpts().MSVCCompat) {\n if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery, LookupCtx, EnteringContext)) {\n if (LookupCtx) {\n } else\n diagnoseTypo(Corrected, PDiag(diag::err_undeclared_var_use_suggest) << Name);"},{x,1009,"Corrected:\n case LookupResult::NotFound:\n // Perform typo correction to determine if there is another name that is\n // close to this name.\n if (!SecondTry && CCC) {\n if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, &SS, *CCC, CTK_ErrorRecovery)) {\n unsigned UnqualifiedDiag = diag::err_undeclared_var_use_suggest;"},{z,2377,"/// Diagnose an empty lookup.\n///\n/// \\return false if new lookup candidates were found\nbool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, CorrectionCandidateCallback &CCC, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, TypoExpr **Out) {\n unsigned diagnostic_suggest = diag::err_undeclared_var_use_suggest;"},{Fc,3048,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n if (!Lookup.isSingleResult()) {\n if (TypoCorrection Corrected = CorrectTypo(Id, LookupOrdinaryName, CurScope, nullptr, CCC, CTK_ErrorRecovery)) {\n diagnoseTypo(Corrected, PDiag(Lookup.empty() ? diag::err_undeclared_var_use_suggest : diag::err_omp_expected_var_arg_suggest) << Id.getName());"},{Fc,23031,"NamedDecl *Sema::lookupOpenMPDeclareTargetName(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id) {\n if (!Lookup.isSingleResult()) {\n if (TypoCorrection Corrected = CorrectTypo(Id, LookupOrdinaryName, CurScope, nullptr, CCC, CTK_ErrorRecovery)) {\n diagnoseTypo(Corrected, PDiag(diag::err_undeclared_var_use_suggest) << Id.getName());"}}, | ||
[k]={ | |||
["clang/test/Sema/PR28181.c"]={"clang/test/Sema/PR28181.c:8:22: error: use of undeclared identifier \'lock\'; did you mean \'long\'?","clang/test/Sema/PR28181.c:12:22: error: use of undeclared identifier \'lock\'; did you mean \'long\'?"} | |||
} | |||
}, | }, | ||
["err_undef_interface"]={ | ["err_undef_interface"]={ | ||
[ | [c]="cannot find interface declaration for A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot find interface declaration for %0", | |||
[b]=u, | |||
[g]="cannot find interface declaration for (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={C,1236199783,D}, | |||
[j]={{pb,1845,"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 if (!IDecl || RequireCompleteType(ClassLoc, Context.getObjCInterfaceType(IDecl), diag::err_category_forward_interface, CategoryName == nullptr)) {\n if (!IDecl)\n Diag(ClassLoc, diag::err_undef_interface) << ClassName;"},{pb,1941,"/// ActOnStartCategoryImplementation - Perform semantic checks on the\n/// category implementation declaration and build an ObjCCategoryImplDecl\n/// object.\nObjCCategoryImplDecl *Sema::ActOnStartCategoryImplementation(SourceLocation AtCatImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *CatName, SourceLocation CatLoc, const ParsedAttributesView &Attrs) {\n /// Check that class of this category is already completely declared.\n if (!IDecl) {\n Diag(ClassLoc, diag::err_undef_interface) << ClassName;"},{pb,1944,"/// ActOnStartCategoryImplementation - Perform semantic checks on the\n/// category implementation declaration and build an ObjCCategoryImplDecl\n/// object.\nObjCCategoryImplDecl *Sema::ActOnStartCategoryImplementation(SourceLocation AtCatImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *CatName, SourceLocation CatLoc, const ParsedAttributesView &Attrs) {\n } else if (RequireCompleteType(ClassLoc, Context.getObjCInterfaceType(IDecl), diag::err_undef_interface)) {"},{pb,5106,"/// Called whenever \\@defs(ClassName) is encountered in the source. Inserts the\n/// instance variables of ClassName into Decls.\nvoid Sema::ActOnDefs(Scope *S, Decl *TagD, SourceLocation DeclStart, IdentifierInfo *ClassName, SmallVectorImpl<Decl *> &Decls) {\n if (!Class) {\n Diag(DeclStart, diag::err_undef_interface) << ClassName;"}} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_undef_interface_suggest"]={ | ["err_undef_interface_suggest"]={ | ||
[ | [c]="cannot find interface declaration for A; did you mean B?", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot find interface declaration for %0; did you mean %1?", | |||
[b]=u, | |||
[g]="cannot find interface declaration for (.*?); did you mean (.*?)\\?", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"}, | [i]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"}, | ||
[j]={{ | [j]={{x,2330,"/// Look for an Objective-C class in the translation unit.\n///\n/// \\param Id The name of the Objective-C class we\'re looking for. If\n/// typo-correction fixes this name, the Id will be updated\n/// to the fixed name.\n///\n/// \\param IdLoc The location of the name in the translation unit.\n///\n/// \\param DoTypoCorrection If true, this routine will attempt typo correction\n/// if there is no class with the given name.\n///\n/// \\returns The declaration of the named Objective-C class, or NULL if the\n/// class could not be found.\nObjCInterfaceDecl *Sema::getObjCInterfaceDecl(IdentifierInfo *&Id, SourceLocation IdLoc, bool DoTypoCorrection) {\n if (!IDecl && DoTypoCorrection) {\n if (TypoCorrection C = CorrectTypo(DeclarationNameInfo(Id, IdLoc), LookupOrdinaryName, TUScope, nullptr, CCC, CTK_ErrorRecovery)) {\n diagnoseTypo(C, PDiag(diag::err_undef_interface_suggest) << Id);"}}, | ||
[k]={ | |||
["clang/test/SemaObjC/undef-class-messagin-error.m"]={"clang/test/SemaObjC/undef-class-messagin-error.m:7:12: error: cannot find interface declaration for \'Child\'; did you mean \'_Child\'?"} | |||
} | |||
}, | }, | ||
["err_undef_superclass"]={ | ["err_undef_superclass"]={ | ||
[ | [c]="cannot find interface declaration for A, superclass of B", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot find interface declaration for %0, superclass of %1", | |||
[b]=u, | |||
[g]="cannot find interface declaration for (.*?), superclass of (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={C,1236199783,D}, | |||
[j]={{pb,617,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n if (declaresSameEntity(PrevDecl, IDecl)) {\n } else {\n if (!isa_and_nonnull<TypedefNameDecl>(PrevDecl)) {\n if (!SuperClassDecl)\n Diag(SuperLoc, diag::err_undef_superclass) << SuperName << ClassName << SourceRange(AtInterfaceLoc, ClassLoc);"},{pb,2034,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n if (SuperClassname) {\n if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n } else {\n if (!SDecl)\n Diag(SuperClassLoc, diag::err_undef_superclass) << SuperClassname << ClassName;"}}, | |||
[k]={ | |||
["clang/test/SemaObjC/class-def-test-1.m"]={"clang/test/SemaObjC/class-def-test-1.m:26:20: error: cannot find interface declaration for \'PROTO\', superclass of \'INTF3\'","clang/test/SemaObjC/class-def-test-1.m:35:27: error: cannot find interface declaration for \'SomeClassSup\', superclass of \'SomeClassSub\'"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_undef_superclass_suggest"]={ | ["err_undef_superclass_suggest"]={ | ||
[ | [c]="cannot find interface declaration for A, superclass of B; did you mean C?", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot find interface declaration for %0, superclass of %1; did you mean %2?", | |||
[b]=u, | |||
[g]="cannot find interface declaration for (.*?), superclass of (.*?); did you mean (.*?)\\?", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"}, | [i]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific"}, | ||
[j]={{ | [j]={{pb,563,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n if (!PrevDecl) {\n if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(SuperName, SuperLoc), LookupOrdinaryName, TUScope, nullptr, CCC, CTK_ErrorRecovery)) {\n diagnoseTypo(Corrected, PDiag(diag::err_undef_superclass_suggest) << SuperName << ClassName);"}}, | ||
[k]={ | |||
["clang/test/FixIt/typo.m"]={"clang/test/FixIt/typo.m:86:22: error: cannot find interface declaration for \'Collid\', superclass of \'Derived\'; did you mean \'Collide\'?"} | |||
} | |||
}, | }, | ||
["err_undefined_inline_var"]={ | ["err_undefined_inline_var"]={ | ||
[ | [c]="inline variable A is not defined", | ||
[d]=s, | |||
[f]=t, | |||
[h]="inline variable %q0 is not defined", | |||
[b]=u, | |||
[g]="inline variable (.*?) is not defined", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a"}, | [i]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a"}, | ||
[j]={{"clang/lib/Sema/Sema.cpp",915,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n for (const auto &Undef : Undefined) {\n if (S.isExternalWithNoLinkageType(VD)) {\n } else if (!VD->isExternallyVisible()) {\n } else if (auto *FD = dyn_cast<FunctionDecl>(VD)) {\n } else {\n S.Diag(VD->getLocation(), diag::err_undefined_inline_var) << VD;"}} | [j]={{"clang/lib/Sema/Sema.cpp",915,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n for (const auto &Undef : Undefined) {\n if (S.isExternalWithNoLinkageType(VD)) {\n } else if (!VD->isExternallyVisible()) {\n } else if (auto *FD = dyn_cast<FunctionDecl>(VD)) {\n } else {\n S.Diag(VD->getLocation(), diag::err_undefined_inline_var) << VD;"}}, | ||
[k]={ | |||
["clang/test/CXX/basic/basic.def/p4.cpp"]={"clang/test/CXX/basic/basic.def/p4.cpp:4:19: error: inline variable \'n\' is not defined"} | |||
} | |||
}, | }, | ||
["err_undefined_internal_type"]={ | ["err_undefined_internal_type"]={ | ||
[ | [c]="... A is used but not defined in this translation unit, and cannot be defined in any other translation unit because its type does not have linkage", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%select{function|variable}0 %q1 is used but not defined in this translation unit, and cannot be defined in any other translation unit because its type does not have linkage", | |||
[b]=u, | |||
[g]="(?:function|variable) (.*?) is used but not defined in this translation unit, and cannot be defined in any other translation unit because its type does not have linkage", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"405e2dbf3767",1505892120,"Implement C++ [basic.link]p8."}, | [i]={"405e2dbf3767",1505892120,"Implement C++ [basic.link]p8."}, | ||
[j]={{"clang/lib/Sema/Sema.cpp",885,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n for (const auto &Undef : Undefined) {\n if (S.isExternalWithNoLinkageType(VD)) {\n S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage()) ? diag::ext_undefined_internal_type : diag::err_undefined_internal_type) << isa<VarDecl>(VD) << VD;"}} | [j]={{"clang/lib/Sema/Sema.cpp",885,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n for (const auto &Undef : Undefined) {\n if (S.isExternalWithNoLinkageType(VD)) {\n S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage()) ? diag::ext_undefined_internal_type : diag::err_undefined_internal_type) << isa<VarDecl>(VD) << VD;"}}, | ||
[k]={ | |||
["clang/test/CXX/basic/basic.link/p8.cpp"]={"clang/test/CXX/basic/basic.link/p8.cpp:35:19: error: function \'no_linkage1\' is used but not defined in this translation unit, and cannot be defined in any other translation unit because its type does not have linkage","clang/test/CXX/basic/basic.link/p8.cpp:36:19: error: function \'no_linkage2\' is used but not defined in this translation unit, and cannot be defined in any other translation unit because its type does not have linkage","clang/test/CXX/basic/basic.link/p8.cpp:37:19: error: function \'no_linkage3\' is used but not defined in this translation unit, and cannot be defined in any other translation unit because its type does not have linkage","clang/test/CXX/basic/basic.link/p8.cpp:58:17: error: function \'internal_linkage\' is used but not defined in this translation unit, and cannot be defined in any other translation unit because its type does not have linkage"} | |||
} | |||
}, | }, | ||
["err_underlying_type_of_incomplete_enum"]={ | ["err_underlying_type_of_incomplete_enum"]={ | ||
[ | [c]="cannot determine underlying type of incomplete enumeration type A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot determine underlying type of incomplete enumeration type %0", | |||
[b]=u, | |||
[g]="cannot determine underlying type of incomplete enumeration type (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"29d0e6b60116",1402531305,"PR19966: don\'t crash/assert when __underlying_type is applied to an incomplete"}, | [i]={"29d0e6b60116",1402531305,"PR19966: don\'t crash/assert when __underlying_type is applied to an incomplete"}, | ||
[j]={{ | [j]={{S,9530,"QualType Sema::BuiltinEnumUnderlyingType(QualType BaseType, SourceLocation Loc) {\n if (BaseType->isIncompleteType(&FwdDecl)) {\n Diag(Loc, diag::err_underlying_type_of_incomplete_enum) << BaseType;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/underlying_type.cpp"]={"clang/test/SemaCXX/underlying_type.cpp:49:5: error: cannot determine underlying type of incomplete enumeration type \'Invalid\'","clang/test/SemaCXX/underlying_type.cpp:53:10: error: cannot determine underlying type of incomplete enumeration type \'E\'"} | |||
} | |||
}, | }, | ||
["err_unevaluated_string_invalid_escape_sequence"]={ | ["err_unevaluated_string_invalid_escape_sequence"]={ | ||
[ | [c]="invalid escape sequence \'A\' in an unevaluated string literal", | ||
[d]=s, | |||
[f]=t, | |||
[h]="invalid escape sequence \'%0\' in an unevaluated string literal", | |||
[b]=u, | |||
[g]="invalid escape sequence \'(.*?)\' in an unevaluated string literal", | |||
[a]=r, | [a]=r, | ||
[ | [e]=B, | ||
[i]={O,1625925174,N}, | |||
[j]={{db,365,"/// 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 if (EvalMethod == StringLiteralEvalMethod::Unevaluated && !IsEscapeValidInUnevaluatedStringLiteral(Escape)) {\n Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::err_unevaluated_string_invalid_escape_sequence) << StringRef(EscapeBegin, ThisTokBuf - EscapeBegin);"}}, | |||
[k]={ | |||
["clang/test/CXX/dcl.dcl/p4-0x.cpp"]={"clang/test/CXX/dcl.dcl/p4-0x.cpp:21:24: error: invalid escape sequence \'\\x14\' in an unevaluated string literal"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_unevaluated_string_prefix"]={ | ["err_unevaluated_string_prefix"]={ | ||
[c]="an unevaluated string literal cannot have an encoding prefix", | [c]="an unevaluated string literal cannot have an encoding prefix", | ||
[d]=s, | [d]=s, | ||
[f]="an unevaluated string literal cannot have an encoding prefix", | [f]=t, | ||
[g]= | [h]="an unevaluated string literal cannot have an encoding prefix", | ||
[ | [b]=u, | ||
[i]={ | [g]="an unevaluated string literal cannot have an encoding prefix", | ||
[j]={{ | [a]=r, | ||
[e]=B, | |||
[i]={O,1625925174,N}, | |||
[j]={{db,1953,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n /// (C99 5.1.1.2p1). The common case is only one string fragment.\n for (const Token &Tok : StringToks) {\n // Remember if we see any wide or utf-8/16/32 strings.\n // Also check for illegal concatenations.\n if (isUnevaluated() && Tok.getKind() != tok::string_literal) {\n if (Diags) {\n Diags->Report(Tok.getLocation(), Features.CPlusPlus26 ? diag::err_unevaluated_string_prefix : diag::warn_unevaluated_string_prefix) << Prefix << Features.CPlusPlus << FixItHint::CreateRemoval(Range);"}}, | |||
[k]={ | |||
["clang/test/FixIt/unevaluated-strings.cpp"]={"clang/test/FixIt/unevaluated-strings.cpp:7:21: error: an unevaluated string literal cannot have an encoding prefix","clang/test/FixIt/unevaluated-strings.cpp:10:21: error: an unevaluated string literal cannot have an encoding prefix","clang/test/FixIt/unevaluated-strings.cpp:13:21: error: an unevaluated string literal cannot have an encoding prefix","clang/test/FixIt/unevaluated-strings.cpp:16:21: error: an unevaluated string literal cannot have an encoding prefix"} | |||
} | |||
}, | }, | ||
["err_unevaluated_string_udl"]={ | ["err_unevaluated_string_udl"]={ | ||
[c]="an unevaluated string literal cannot be a user-defined literal", | [c]="an unevaluated string literal cannot be a user-defined literal", | ||
[d]=s, | [d]=s, | ||
[f]="an unevaluated string literal cannot be a user\\-defined literal", | [f]=t, | ||
[ | [h]="an unevaluated string literal cannot be a user-defined literal", | ||
[ | [b]=u, | ||
[i]={ | [g]="an unevaluated string literal cannot be a user\\-defined literal", | ||
[j]={{ | [a]=r, | ||
[e]=B, | |||
[i]={O,1625925174,N}, | |||
[j]={{db,2047,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n for (unsigned i = 0, e = StringToks.size(); i != e; ++i) {\n // Remove an optional ud-suffix.\n if (ThisTokEnd[-1] != \'\"\') {\n if (UDSuffixBuf.empty()) {\n } else {\n if (UDSuffixBuf != UDSuffix || UnevaluatedStringHasUDL) {\n if (Diags) {\n if (UnevaluatedStringHasUDL) {\n Diags->Report(TokLoc, diag::err_unevaluated_string_udl) << SourceRange(TokLoc, TokLoc);"}} | |||
}, | }, | ||
["err_unexpanded_parameter_pack"]={ | ["err_unexpanded_parameter_pack"]={ | ||
[ | [c]="... contains an unexpanded parameter pack", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%select{expression|base type|declaration type|data member type|bit-field size|static assertion|fixed underlying type|enumerator value|using declaration|friend declaration|qualifier|initializer|default argument|non-type template parameter type|exception type|partial specialization|__if_exists name|__if_not_exists name|lambda|block|type constraint|requirement|requires clause}0 contains%plural{0: an|:}1 unexpanded parameter pack%plural{0:|1: %2|2:s %2 and %3|:s %2, %3, ...}1", | |||
[b]=u, | |||
[g]="(?:expression|base type|declaration type|data member type|bit\\-field size|static assertion|fixed underlying type|enumerator value|using declaration|friend declaration|qualifier|initializer|default argument|non\\-type template parameter type|exception type|partial specialization|__if_exists name|__if_not_exists name|lambda|block|type constraint|requirement|requires clause) contains(?: an|) unexpanded parameter pack(?:| (.*?)|s (.*?) and (.*?)|s (.*?), (.*?), \\.\\.\\.)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"506bd56484a5",1292280562,"Variadic templates: extend Type, NestedNameSpecifier, TemplateName,"}, | [i]={"506bd56484a5",1292280562,"Variadic templates: extend Type, NestedNameSpecifier, TemplateName,"}, | ||
[j]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",372,"/// Diagnose all of the unexpanded parameter packs in the given\n/// vector.\nbool Sema::DiagnoseUnexpandedParameterPacks(SourceLocation Loc, UnexpandedParameterPackContext UPPC, ArrayRef<UnexpandedParameterPack> Unexpanded) {\n auto DB = Diag(Loc, diag::err_unexpanded_parameter_pack) << (int)UPPC << (int)Names.size();"}} | [j]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",372,"/// Diagnose all of the unexpanded parameter packs in the given\n/// vector.\nbool Sema::DiagnoseUnexpandedParameterPacks(SourceLocation Loc, UnexpandedParameterPackContext UPPC, ArrayRef<UnexpandedParameterPack> Unexpanded) {\n auto DB = Diag(Loc, diag::err_unexpanded_parameter_pack) << (int)UPPC << (int)Names.size();"}}, | ||
[k]={ | |||
["clang/test/CXX/temp/temp.decls/temp.variadic/p5.mm"]={"clang/test/CXX/temp/temp.decls/temp.variadic/p5.mm:5:16: error: expression contains unexpanded parameter pack \'values\'","clang/test/CXX/temp/temp.decls/temp.variadic/p5.mm:6:17: error: expression contains unexpanded parameter pack \'values\'","clang/test/CXX/temp/temp.decls/temp.variadic/p5.mm:7:12: error: expression contains unexpanded parameter pack \'values\'"} | |||
} | |||
}, | }, | ||
["err_unexpected_at"]={ | ["err_unexpected_at"]={ | ||
[c]="unexpected \'@\' in program", | [c]="unexpected \'@\' in program", | ||
[d]=s, | [d]=s, | ||
[f]="unexpected \'@\' in program", | [f]=t, | ||
[g]= | [h]="unexpected \'@\' in program", | ||
[ | [b]=u, | ||
[i]={ | [g]="unexpected \'@\' in program", | ||
[j]={{ | [a]=r, | ||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[j]={{H,4694,"/// ParseStructUnionBody\n/// struct-contents:\n/// struct-declaration-list\n/// [EXT] empty\n/// [GNU] \"struct-declaration-list\" without terminating \';\'\n/// struct-declaration-list:\n/// struct-declaration\n/// struct-declaration-list struct-declaration\n/// [OBC] \'@\' \'defs\' \'(\' class-name \')\'\n///\nvoid Parser::ParseStructUnionBody(SourceLocation RecordLoc, DeclSpec::TST TagType, RecordDecl *TagDecl) {\n // While we still have something to read, read the declarations in the struct.\n while (!tryParseMisplacedModuleImport() && Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {\n if (!Tok.is(tok::at)) {\n } else { // Handle @defs\n if (!Tok.isObjCAtKeyword(tok::objc_defs)) {\n Diag(Tok, diag::err_unexpected_at);"},{Ub,107,"/// ParseObjCAtDirectives - Handle parts of the external-declaration production:\n/// external-declaration: [C99 6.9]\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\'\nParser::DeclGroupPtrTy Parser::ParseObjCAtDirectives(ParsedAttributes &DeclAttrs, ParsedAttributes &DeclSpecAttrs) {\n default:\n Diag(AtLoc, diag::err_unexpected_at);"},{Ub,2902,"ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {\n default:\n if (Tok.getIdentifierInfo() == nullptr)\n return ExprError(Diag(AtLoc, diag::err_unexpected_at));"},{Ub,2928,"ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {\n default:\n default: {\n if (str) {\n return ExprError(Diag(AtLoc, diag::err_unexpected_at) << FixItHint::CreateReplacement(kwLoc, str));"},{Ub,2932,"ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {\n default:\n default: {\n if (str) {\n } else\n return ExprError(Diag(AtLoc, diag::err_unexpected_at));"}}, | |||
[k]={ | |||
["clang/test/SemaObjC/invalid-code.m"]={"clang/test/SemaObjC/invalid-code.m:6:13: error: unexpected \'@\' in program"} | |||
} | |||
}, | }, | ||
["err_unexpected_colon_in_nested_name_spec"]={ | ["err_unexpected_colon_in_nested_name_spec"]={ | ||
[c]="unexpected \':\' in nested name specifier; did you mean \'::\'?", | [c]="unexpected \':\' in nested name specifier; did you mean \'::\'?", | ||
[d]=s, | [d]=s, | ||
[f]="unexpected \'\\:\' in nested name specifier; did you mean \'\\:\\:\'\\?", | [f]=t, | ||
[ | [h]="unexpected \':\' in nested name specifier; did you mean \'::\'?", | ||
[ | [b]=u, | ||
[g]="unexpected \'\\:\' in nested name specifier; did you mean \'\\:\\:\'\\?", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"6a7ffbed8ab4",1397407923,"Improve error recovery around colon."}, | [i]={"6a7ffbed8ab4",1397407923,"Improve error recovery around colon."}, | ||
[j]={{ | [j]={{wb,406,"/// 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 while (true) {\n // If we get foo:bar, this is almost certainly a typo for foo::bar. Recover\n // and emit a fixit hint for it.\n if (Next.is(tok::colon) && !ColonIsSacred) {\n if (Actions.IsInvalidUnlessNestedName(getCurScope(), SS, IdInfo, EnteringContext) &&\n Diag(Next, diag::err_unexpected_colon_in_nested_name_spec) << FixItHint::CreateReplacement(Next.getLocation(), \"::\");"}}, | ||
[k]={ | |||
["clang/test/Misc/diag-inline-namespace.cpp"]={"clang/test/Misc/diag-inline-namespace.cpp:57:5: error: unexpected \':\' in nested name specifier; did you mean \'::\'?"} | |||
} | |||
}, | }, | ||
["err_unexpected_friend"]={ | ["err_unexpected_friend"]={ | ||
[c]="friends can only be classes or functions", | [c]="friends can only be classes or functions", | ||
[d]=s, | [d]=s, | ||
[f]="friends can only be classes or functions", | [f]=t, | ||
[g]= | [h]="friends can only be classes or functions", | ||
[ | [b]=u, | ||
[g]="friends can only be classes or functions", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"07e91c04ba33",1249524943,"First pass at friend semantics."}, | [i]={"07e91c04ba33",1249524943,"First pass at friend semantics."}, | ||
[j]={{ | [j]={{A,17499,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n // C++ [class.friend]p1\n // A friend of a class is a function or class....\n // Note that this sees through typedefs, which is intended.\n // It *doesn\'t* see through dependent types, which is correct\n // according to [temp.arg.type]p3:\n // If a declaration acquires a function type through a\n // type dependent on a template-parameter and this causes\n // a declaration that does not use the syntactic form of a\n // function declarator to have a function type, the program\n // is ill-formed.\n if (!TInfo->getType()->isFunctionType()) {\n Diag(Loc, diag::err_unexpected_friend);"}}, | ||
[k]={ | |||
["clang/test/CXX/class/class.friend/p1.cpp"]={"clang/test/CXX/class/class.friend/p1.cpp:34:28: error: friends can only be classes or functions","clang/test/CXX/class/class.friend/p1.cpp:35:28: error: friends can only be classes or functions","clang/test/CXX/class/class.friend/p1.cpp:37:14: error: friends can only be classes or functions"} | |||
} | |||
}, | }, | ||
["err_unexpected_interface"]={ | ["err_unexpected_interface"]={ | ||
[ | [c]="unexpected interface name A: expected expression", | ||
[d]=s, | |||
[f]=t, | |||
[h]="unexpected interface name %0: expected expression", | |||
[b]=u, | |||
[g]="unexpected interface name (.*?)\\: expected expression", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={I,1237025389,J}, | |||
[j]={{z,3301,"/// Diagnoses obvious problems with the use of the given declaration\n/// as an expression. This is only actually called for lookups that\n/// were not overloaded, and it doesn\'t promise that the declaration\n/// will in fact be used.\nstatic bool CheckDeclInExpr(Sema &S, SourceLocation Loc, NamedDecl *D, bool AcceptInvalid) {\n if (isa<ObjCInterfaceDecl>(D)) {\n S.Diag(Loc, diag::err_unexpected_interface) << D->getDeclName();"}}, | |||
[k]={ | |||
["clang/test/SemaObjC/crash-on-type-args-protocols.m"]={"clang/test/SemaObjC/crash-on-type-args-protocols.m:23:15: error: unexpected interface name \'X\': expected expression"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_unexpected_module_decl"]={ | ["err_unexpected_module_decl"]={ | ||
[c]="module declaration can only appear at the top level", | [c]="module declaration can only appear at the top level", | ||
[d]=s, | [d]=s, | ||
[f]="module declaration can only appear at the top level", | [f]=t, | ||
[g]= | [h]="module declaration can only appear at the top level", | ||
[ | [b]=u, | ||
[g]="module declaration can only appear at the top level", | |||
[a]=r, | |||
[e]=Gc, | |||
[i]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module"}, | [i]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module"}, | ||
[j]={{ | [j]={{yb,1025,"/// ParseExternalDeclaration:\n///\n/// The `Attrs` that are passed in are C++11 attributes and appertain to the\n/// declaration.\n///\n/// external-declaration: [C99 6.9], declaration: [C++ dcl.dcl]\n/// function-definition\n/// declaration\n/// [GNU] asm-definition\n/// [GNU] __extension__ external-declaration\n/// [OBJC] objc-class-definition\n/// [OBJC] objc-class-declaration\n/// [OBJC] objc-alias-declaration\n/// [OBJC] objc-protocol-definition\n/// [OBJC] objc-method-definition\n/// [OBJC] @end\n/// [C++] linkage-specification\n/// [GNU] asm-definition:\n/// simple-asm-expr \';\'\n/// [C++11] empty-declaration\n/// [C++11] attribute-declaration\n///\n/// [C++11] empty-declaration:\n/// \';\'\n///\n/// [C++0x/GNU] \'extern\' \'template\' declaration\n///\n/// [C++20] module-import-declaration\n///\nParser::DeclGroupPtrTy Parser::ParseExternalDeclaration(ParsedAttributes &Attrs, ParsedAttributes &DeclSpecAttrs, ParsingDeclSpec *DS) {\n case tok::kw_module:\n Diag(Tok, diag::err_unexpected_module_decl);"}} | ||
}, | }, | ||
["err_unexpected_namespace"]={ | ["err_unexpected_namespace"]={ | ||
[ | [c]="unexpected namespace name A: expected expression", | ||
[d]=s, | |||
[f]=t, | |||
[h]="unexpected namespace name %0: expected expression", | |||
[b]=u, | |||
[g]="unexpected namespace name (.*?)\\: expected expression", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={I,1237025389,J}, | |||
[j]={{z,3306,"/// Diagnoses obvious problems with the use of the given declaration\n/// as an expression. This is only actually called for lookups that\n/// were not overloaded, and it doesn\'t promise that the declaration\n/// will in fact be used.\nstatic bool CheckDeclInExpr(Sema &S, SourceLocation Loc, NamedDecl *D, bool AcceptInvalid) {\n if (isa<NamespaceDecl>(D)) {\n S.Diag(Loc, diag::err_unexpected_namespace) << D->getDeclName();"}}, | |||
[k]={ | |||
["clang/test/SemaCXX/attr-musttail.cpp"]={"clang/test/SemaCXX/attr-musttail.cpp:268:30: error: unexpected namespace name \'ns\': expected expression"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_unexpected_namespace_attributes_alias"]={ | ["err_unexpected_namespace_attributes_alias"]={ | ||
[c]="attributes cannot be specified on namespace alias", | [c]="attributes cannot be specified on namespace alias", | ||
[d]=s, | [d]=s, | ||
[f]="attributes cannot be specified on namespace alias", | [f]=t, | ||
[g]= | [h]="attributes cannot be specified on namespace alias", | ||
[ | [b]=u, | ||
[g]="attributes cannot be specified on namespace alias", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"6b6bba4a2087",1245268140,"Diagnose the use of attributes on namespace aliases, from Anis Ahmad"}, | [i]={"6b6bba4a2087",1245268140,"Diagnose the use of attributes on namespace aliases, from Anis Ahmad"}, | ||
[j]={{ | [j]={{M,144,"/// 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 if (Tok.is(tok::equal)) {\n if (attrLoc.isValid())\n Diag(attrLoc, diag::err_unexpected_namespace_attributes_alias);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx1z-attributes.cpp"]={"clang/test/Parser/cxx1z-attributes.cpp:5:11: error: attributes cannot be specified on namespace alias"} | |||
} | |||
}, | }, | ||
["err_unexpected_nested_namespace_attribute"]={ | ["err_unexpected_nested_namespace_attribute"]={ | ||
[c]="attributes cannot be specified on a nested namespace definition", | [c]="attributes cannot be specified on a nested namespace definition", | ||
[d]=s, | [d]=s, | ||
[f]="attributes cannot be specified on a nested namespace definition", | [f]=t, | ||
[g]= | [h]="attributes cannot be specified on a nested namespace definition", | ||
[ | [b]=u, | ||
[g]="attributes cannot be specified on a nested namespace definition", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"c0ae7dfe75e5",1415466435,"Updated the wording for a diagnostic to be more grammatically correct, and use a %select. Also ensur..."}, | [i]={"c0ae7dfe75e5",1415466435,"Updated the wording for a diagnostic to be more grammatically correct, and use a %select. Also ensur..."}, | ||
[j]={{ | [j]={{M,134,"/// 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 // A nested namespace definition cannot have attributes.\n if (!ExtraNSs.empty() && attrLoc.isValid())\n Diag(attrLoc, diag::err_unexpected_nested_namespace_attribute);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx1z-attributes.cpp"]={"clang/test/Parser/cxx1z-attributes.cpp:7:11: error: attributes cannot be specified on a nested namespace definition"} | |||
} | |||
}, | }, | ||
["err_unexpected_protocol_qualifier"]={ | ["err_unexpected_protocol_qualifier"]={ | ||
[c]="@implementation declaration cannot be protocol qualified", | [c]="@implementation declaration cannot be protocol qualified", | ||
[d]=s, | [d]=s, | ||
[f]="@implementation declaration cannot be protocol qualified", | [f]=t, | ||
[g]= | [h]="@implementation declaration cannot be protocol qualified", | ||
[ | [b]=u, | ||
[g]="@implementation declaration cannot be protocol qualified", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"46ed4d978e1c",1366845827,"Objective-C parsing [qoi]: Recover gracefully with good diagnostic"}, | [i]={"46ed4d978e1c",1366845827,"Objective-C parsing [qoi]: Recover gracefully with good diagnostic"}, | ||
[j]={{ | [j]={{Ub,2195,"/// objc-implementation:\n/// objc-class-implementation-prologue\n/// objc-category-implementation-prologue\n///\n/// objc-class-implementation-prologue:\n/// @implementation identifier objc-superclass[opt]\n/// objc-class-instance-variables[opt]\n///\n/// objc-category-implementation-prologue:\n/// @implementation identifier ( identifier )\nParser::DeclGroupPtrTy Parser::ParseObjCAtImplementationDeclaration(SourceLocation AtLoc, ParsedAttributes &Attrs) {\n // Neither a type parameter list nor a list of protocol references is\n // permitted here. Parse and diagnose them.\n if (Tok.is(tok::less)) {\n if (parseObjCTypeParamListOrProtocolRefs(typeParamScope, lAngleLoc, protocolIdents, rAngleLoc)) {\n } else if (lAngleLoc.isValid()) {\n Diag(lAngleLoc, diag::err_unexpected_protocol_qualifier) << FixItHint::CreateRemoval(SourceRange(lAngleLoc, rAngleLoc));"},{Ub,2227,"/// objc-implementation:\n/// objc-class-implementation-prologue\n/// objc-category-implementation-prologue\n///\n/// objc-class-implementation-prologue:\n/// @implementation identifier objc-superclass[opt]\n/// objc-class-instance-variables[opt]\n///\n/// objc-category-implementation-prologue:\n/// @implementation identifier ( identifier )\nParser::DeclGroupPtrTy Parser::ParseObjCAtImplementationDeclaration(SourceLocation AtLoc, ParsedAttributes &Attrs) {\n if (Tok.is(tok::l_paren)) {\n if (Tok.is(tok::less)) { // we have illegal \'<\' try to recover\n Diag(Tok, diag::err_unexpected_protocol_qualifier);"},{Ub,2257,"/// objc-implementation:\n/// objc-class-implementation-prologue\n/// objc-category-implementation-prologue\n///\n/// objc-class-implementation-prologue:\n/// @implementation identifier objc-superclass[opt]\n/// objc-class-instance-variables[opt]\n///\n/// objc-category-implementation-prologue:\n/// @implementation identifier ( identifier )\nParser::DeclGroupPtrTy Parser::ParseObjCAtImplementationDeclaration(SourceLocation AtLoc, ParsedAttributes &Attrs) {\n if (Tok.is(tok::l_paren)) {\n } else {\n if (Tok.is(tok::l_brace)) // we have ivars\n else if (Tok.is(tok::less)) { // we have illegal \'<\' try to recover\n Diag(Tok, diag::err_unexpected_protocol_qualifier);"}}, | ||
[k]={ | |||
["clang/test/SemaObjC/parameterized_classes.m"]={"clang/test/SemaObjC/parameterized_classes.m:168:20: error: @implementation declaration cannot be protocol qualified"} | |||
} | |||
}, | }, | ||
["err_unexpected_scope_on_base_decltype"]={ | ["err_unexpected_scope_on_base_decltype"]={ | ||
[c]="unexpected namespace scope prior to decltype", | [c]="unexpected namespace scope prior to decltype", | ||
[d]=s, | [d]=s, | ||
[f]="unexpected namespace scope prior to decltype", | [f]=t, | ||
[g]= | [h]="unexpected namespace scope prior to decltype", | ||
[ | [b]=u, | ||
[g]="unexpected namespace scope prior to decltype", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"afa155fb8879",1319566678,"Fix erroneous name-specifiers prior to decltypes better/correctly as per Doug\'s feedback."}, | [i]={"afa155fb8879",1319566678,"Fix erroneous name-specifiers prior to decltypes better/correctly as per Doug\'s feedback."}, | ||
[j]={{ | [j]={{M,1284,"/// ParseBaseTypeSpecifier - Parse a C++ base-type-specifier which is either a\n/// class name or decltype-specifier. Note that we only check that the result\n/// names a type; semantic analysis will need to verify that the type names a\n/// class. The result is either a type or null, depending on whether a type\n/// name was found.\n///\n/// base-type-specifier: [C++11 class.derived]\n/// class-or-decltype\n/// class-or-decltype: [C++11 class.derived]\n/// nested-name-specifier[opt] class-name\n/// decltype-specifier\n/// class-name: [C++ class.name]\n/// identifier\n/// simple-template-id\n///\n/// In C++98, instead of base-type-specifier, we have:\n///\n/// ::[opt] nested-name-specifier[opt] class-name\nTypeResult Parser::ParseBaseTypeSpecifier(SourceLocation &BaseLoc, SourceLocation &EndLocation) {\n // Parse decltype-specifier\n // tok == kw_decltype is just error recovery, it can only happen when SS\n // isn\'t empty\n if (Tok.isOneOf(tok::kw_decltype, tok::annot_decltype)) {\n if (SS.isNotEmpty())\n Diag(SS.getBeginLoc(), diag::err_unexpected_scope_on_base_decltype) << FixItHint::CreateRemoval(SS.getRange());"}}, | ||
[k]={ | |||
["clang/test/CXX/class.derived/p1.cpp"]={"clang/test/CXX/class.derived/p1.cpp:34:21: error: unexpected namespace scope prior to decltype","clang/test/CXX/class.derived/p1.cpp:36:21: error: unexpected namespace scope prior to decltype"} | |||
} | |||
}, | }, | ||
["err_unexpected_semi"]={ | ["err_unexpected_semi"]={ | ||
[ | [c]="unexpected \';\' before A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="unexpected \';\' before %0", | |||
[b]=u, | |||
[g]="unexpected \';\' before (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=y, | ||
[ | [i]={"1d3b58e31796",1431466595,"Add a new error for unexpected semi-colon before closing delimiter."}, | ||
[ | [k]={ | ||
["clang/test/Parser/extra-semi.cpp"]={"clang/test/Parser/extra-semi.cpp:6:17: error: unexpected \';\' before \')\'","clang/test/Parser/extra-semi.cpp:7:15: error: unexpected \';\' before \')\'","clang/test/Parser/extra-semi.cpp:8:31: error: unexpected \';\' before \')\'","clang/test/Parser/extra-semi.cpp:9:20: error: unexpected \';\' before \')\'","clang/test/Parser/extra-semi.cpp:10:10: error: unexpected \';\' before \']\'","clang/test/Parser/extra-semi.cpp:11:8: error: unexpected \';\' before \']\'","clang/test/Parser/extra-semi.cpp:12:19: error: unexpected \';\' before \'}\'"} | |||
} | |||
}, | }, | ||
["err_unexpected_template_after_using"]={ | ["err_unexpected_template_after_using"]={ | ||
[c]="\'template\' keyword not permitted after \'using\' keyword", | [c]="\'template\' keyword not permitted after \'using\' keyword", | ||
[d]=s, | [d]=s, | ||
[f]="\'template\' keyword not permitted after \'using\' keyword", | [f]=t, | ||
[g]= | [h]="\'template\' keyword not permitted after \'using\' keyword", | ||
[ | [b]=u, | ||
[g]="\'template\' keyword not permitted after \'using\' keyword", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"2efd30571bcc",1556753629,"Consume unexpected \"template\" keywords after \"using\""}, | [i]={"2efd30571bcc",1556753629,"Consume unexpected \"template\" keywords after \"using\""}, | ||
[j]={{ | [j]={{M,494,"/// ParseUsingDirectiveOrDeclaration - Parse C++ using using-declaration or\n/// using-directive. Assumes that current token is \'using\'.\nParser::DeclGroupPtrTy Parser::ParseUsingDirectiveOrDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd, ParsedAttributes &Attrs) {\n // Consume unexpected \'template\' keywords.\n while (Tok.is(tok::kw_template)) {\n Diag(TemplateLoc, diag::err_unexpected_template_after_using) << FixItHint::CreateRemoval(TemplateLoc);"},{M,2797,"/// 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 if (Tok.is(tok::kw_using)) {\n // Consume unexpected \'template\' keywords.\n while (Tok.is(tok::kw_template)) {\n Diag(TemplateLoc, diag::err_unexpected_template_after_using) << FixItHint::CreateRemoval(TemplateLoc);"}}, | ||
[k]={ | |||
["clang/test/Parser/using-template.cpp"]={"clang/test/Parser/using-template.cpp:14:9: error: \'template\' keyword not permitted after \'using\' keyword","clang/test/Parser/using-template.cpp:23:7: error: \'template\' keyword not permitted after \'using\' keyword","clang/test/Parser/using-template.cpp:25:7: error: \'template\' keyword not permitted after \'using\' keyword","clang/test/Parser/using-template.cpp:25:16: error: \'template\' keyword not permitted after \'using\' keyword","clang/test/Parser/using-template.cpp:34:7: error: \'template\' keyword not permitted after \'using\' keyword","clang/test/Parser/using-template.cpp:47:7: error: \'template\' keyword not permitted after \'using\' keyword"} | |||
} | |||
}, | }, | ||
["err_unexpected_template_in_destructor_name"]={ | ["err_unexpected_template_in_destructor_name"]={ | ||
[c]="\'template\' keyword not permitted in destructor name", | [c]="\'template\' keyword not permitted in destructor name", | ||
[d]=s, | [d]=s, | ||
[f]="\'template\' keyword not permitted in destructor name", | [f]=t, | ||
[g]= | [h]="\'template\' keyword not permitted in destructor name", | ||
[ | [b]=u, | ||
[g]="\'template\' keyword not permitted in destructor name", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator."}, | [i]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator."}, | ||
[j]={{ | [j]={{wb,3050,"/// Parse a C++ unqualified-id (or a C identifier), which describes the\n/// name of an entity.\n///\n/// \\code\n/// unqualified-id: [C++ expr.prim.general]\n/// identifier\n/// operator-function-id\n/// conversion-function-id\n/// [C++0x] literal-operator-id [TODO]\n/// ~ class-name\n/// template-id\n///\n/// \\endcode\n///\n/// \\param SS The nested-name-specifier that preceded this unqualified-id. If\n/// non-empty, then we are parsing the unqualified-id of a qualified-id.\n///\n/// \\param ObjectType if this unqualified-id occurs within a member access\n/// expression, the type of the base object whose member is 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 are entering the scope of the\n/// nested-name-specifier.\n///\n/// \\param AllowDestructorName whether we allow parsing of a destructor name.\n///\n/// \\param AllowConstructorName whether we allow parsing a constructor name.\n///\n/// \\param AllowDeductionGuide whether we allow parsing a deduction guide name.\n///\n/// \\param Result on a successful parse, contains the parsed unqualified-id.\n///\n/// \\returns true if parsing fails, false otherwise.\nbool Parser::ParseUnqualifiedId(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool AllowDestructorName, bool AllowConstructorName, bool AllowDeductionGuide, SourceLocation *TemplateKWLoc, UnqualifiedId &Result) {\n if (getLangOpts().CPlusPlus && (AllowDestructorName || SS.isSet()) && Tok.is(tok::tilde)) {\n if (TemplateSpecified) {\n Diag(*TemplateKWLoc, diag::err_unexpected_template_in_destructor_name) << Tok.getLocation();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:95:6: error: \'template\' keyword not permitted in destructor name","clang/test/SemaCXX/pseudo-destructors.cpp:97:7: error: \'template\' keyword not permitted in destructor name"} | |||
} | |||
}, | }, | ||
["err_unexpected_template_in_unqualified_id"]={ | ["err_unexpected_template_in_unqualified_id"]={ | ||
[c]="\'template\' keyword not permitted here", | [c]="\'template\' keyword not permitted here", | ||
[d]=s, | [d]=s, | ||
[f]="\'template\' keyword not permitted here", | [f]=t, | ||
[g]= | [h]="\'template\' keyword not permitted here", | ||
[ | [b]=u, | ||
[g]="\'template\' keyword not permitted here", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"c08b693e309b",1524794413,"Parse A::template B as an identifier rather than as a template-id with no"}, | [i]={"c08b693e309b",1524794413,"Parse A::template B as an identifier rather than as a template-id with no"}, | ||
[j]={{ | [j]={{wb,2885,"/// Parse a C++ unqualified-id (or a C identifier), which describes the\n/// name of an entity.\n///\n/// \\code\n/// unqualified-id: [C++ expr.prim.general]\n/// identifier\n/// operator-function-id\n/// conversion-function-id\n/// [C++0x] literal-operator-id [TODO]\n/// ~ class-name\n/// template-id\n///\n/// \\endcode\n///\n/// \\param SS The nested-name-specifier that preceded this unqualified-id. If\n/// non-empty, then we are parsing the unqualified-id of a qualified-id.\n///\n/// \\param ObjectType if this unqualified-id occurs within a member access\n/// expression, the type of the base object whose member is 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 are entering the scope of the\n/// nested-name-specifier.\n///\n/// \\param AllowDestructorName whether we allow parsing of a destructor name.\n///\n/// \\param AllowConstructorName whether we allow parsing a constructor name.\n///\n/// \\param AllowDeductionGuide whether we allow parsing a deduction guide name.\n///\n/// \\param Result on a successful parse, contains the parsed unqualified-id.\n///\n/// \\returns true if parsing fails, false otherwise.\nbool Parser::ParseUnqualifiedId(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool AllowDestructorName, bool AllowConstructorName, bool AllowDeductionGuide, SourceLocation *TemplateKWLoc, UnqualifiedId &Result) {\n if (Tok.is(tok::kw_template)) {\n if (TemplateKWLoc && (ObjectType || SS.isSet())) {\n } else {\n Diag(TemplateLoc, diag::err_unexpected_template_in_unqualified_id) << FixItHint::CreateRemoval(TemplateLoc);"},{wb,2992,"/// Parse a C++ unqualified-id (or a C identifier), which describes the\n/// name of an entity.\n///\n/// \\code\n/// unqualified-id: [C++ expr.prim.general]\n/// identifier\n/// operator-function-id\n/// conversion-function-id\n/// [C++0x] literal-operator-id [TODO]\n/// ~ class-name\n/// template-id\n///\n/// \\endcode\n///\n/// \\param SS The nested-name-specifier that preceded this unqualified-id. If\n/// non-empty, then we are parsing the unqualified-id of a qualified-id.\n///\n/// \\param ObjectType if this unqualified-id occurs within a member access\n/// expression, the type of the base object whose member is 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 are entering the scope of the\n/// nested-name-specifier.\n///\n/// \\param AllowDestructorName whether we allow parsing of a destructor name.\n///\n/// \\param AllowConstructorName whether we allow parsing a constructor name.\n///\n/// \\param AllowDeductionGuide whether we allow parsing a deduction guide name.\n///\n/// \\param Result on a successful parse, contains the parsed unqualified-id.\n///\n/// \\returns true if parsing fails, false otherwise.\nbool Parser::ParseUnqualifiedId(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool AllowDestructorName, bool AllowConstructorName, bool AllowDeductionGuide, SourceLocation *TemplateKWLoc, UnqualifiedId &Result) {\n // unqualified-id:\n // template-id (already parsed and annotated)\n if (Tok.is(tok::annot_template_id)) {\n if (TemplateLoc.isValid()) {\n if (TemplateKWLoc && (ObjectType || SS.isSet()))\n else\n Diag(TemplateLoc, diag::err_unexpected_template_in_unqualified_id) << FixItHint::CreateRemoval(TemplateLoc);"}}, | ||
[k]={ | |||
["clang/test/CXX/drs/dr1xx.cpp"]={"clang/test/CXX/drs/dr1xx.cpp:90:14: error: \'template\' keyword not permitted here","clang/test/CXX/drs/dr1xx.cpp:91:14: error: \'template\' keyword not permitted here"} | |||
} | |||
}, | }, | ||
["err_unexpected_token_in_nested_name_spec"]={ | ["err_unexpected_token_in_nested_name_spec"]={ | ||
[ | [c]="\'A\' cannot be a part of nested name specifier; did you mean \':\'?", | ||
[d]=s, | |||
[f]=t, | |||
[h]="\'%0\' cannot be a part of nested name specifier; did you mean \':\'?", | |||
[b]=u, | |||
[g]="\'(.*?)\' cannot be a part of nested name specifier; did you mean \'\\:\'\\?", | |||
[a]=r, | [a]=r, | ||
[ | [e]=y, | ||
[i]={"6a7ffbed8ab4",1397407923,"Improve error recovery around colon."}, | [i]={"6a7ffbed8ab4",1397407923,"Improve error recovery around colon."}, | ||
[j]={{ | [j]={{wb,434,"/// 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 while (true) {\n if (Next.is(tok::coloncolon)) {\n if (ColonIsSacred) {\n if (Next2.is(tok::kw_private) || Next2.is(tok::kw_protected) || Next2.is(tok::kw_public) || Next2.is(tok::kw_virtual)) {\n Diag(Next2, diag::err_unexpected_token_in_nested_name_spec) << Next2.getName() << FixItHint::CreateReplacement(Next.getLocation(), \":\");"}}, | ||
[k]={ | |||
["clang/test/Parser/recovery.cpp"]={"clang/test/Parser/recovery.cpp:205:22: error: \'public\' cannot be a part of nested name specifier; did you mean \':\'?"} | |||
} | |||
}, | }, | ||
["err_unexpected_typedef"]={ | ["err_unexpected_typedef"]={ | ||
[ | [c]="unexpected type name A: expected expression", | ||
[d]=s, | |||
[f]=t, | |||
[h]="unexpected type name %0: expected expression", | |||
[b]=u, | |||
[g]="unexpected type name (.*?)\\: expected expression", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={I,1237025389,J}, | |||
[j]={{z,3296,"/// Diagnoses obvious problems with the use of the given declaration\n/// as an expression. This is only actually called for lookups that\n/// were not overloaded, and it doesn\'t promise that the declaration\n/// will in fact be used.\nstatic bool CheckDeclInExpr(Sema &S, SourceLocation Loc, NamedDecl *D, bool AcceptInvalid) {\n if (isa<TypedefNameDecl>(D)) {\n S.Diag(Loc, diag::err_unexpected_typedef) << D->getDeclName();"}}, | |||
[k]={ | |||
["clang/test/Parser/cxx0x-condition.cpp"]={"clang/test/Parser/cxx0x-condition.cpp:20:9: error: unexpected type name \'n\': expected expression","clang/test/Parser/cxx0x-condition.cpp:22:9: error: unexpected type name \'n\': expected expression"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_unexpected_typedef_ident"]={ | ["err_unexpected_typedef_ident"]={ | ||
[ | [c]="unexpected type name A: expected identifier", | ||
[d]=s, | |||
[f]=t, | |||
[h]="unexpected type name %0: expected identifier", | |||
[b]=u, | |||
[g]="unexpected type name (.*?)\\: expected identifier", | |||
[a]=r, | [a]=r, | ||
[ | [e]=y, | ||
[i]={C,1236199783,D}, | |||
[j]={{H,7237,"/// ParseFunctionDeclaratorIdentifierList - While parsing a function declarator\n/// we found a K&R-style identifier list instead of a typed parameter list.\n///\n/// After returning, ParamInfo will hold the parsed parameters.\n///\n/// identifier-list: [C99 6.7.5]\n/// identifier\n/// identifier-list \',\' identifier\n///\nvoid Parser::ParseFunctionDeclaratorIdentifierList(Declarator &D, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo) {\n do {\n // Reject \'typedef int y; int test(x, y)\', but continue parsing.\n if (Actions.getTypeName(*ParmII, Tok.getLocation(), getCurScope()))\n Diag(Tok, diag::err_unexpected_typedef_ident) << ParmII;"}}, | |||
[k]={ | |||
[Tb]={"clang/test/Parser/declarators.c:31:12: error: unexpected type name \'atype\': expected identifier"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_unexpected_unqualified_id"]={ | ["err_unexpected_unqualified_id"]={ | ||
[c]="type-id cannot have a name", | [c]="type-id cannot have a name", | ||
[d]=s, | [d]=s, | ||
[f]="type\\-id cannot have a name", | [f]=t, | ||
[ | [h]="type-id cannot have a name", | ||
[ | [b]=u, | ||
[g]="type\\-id cannot have a name", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"9ce302ed9c29",1373519421,"PR5066: If a declarator cannot have an identifier, and cannot possibly be"}, | [i]={"9ce302ed9c29",1373519421,"PR5066: If a declarator cannot have an identifier, and cannot possibly be"}, | ||
[j]={{ | [j]={{H,6541,"/// ParseDirectDeclarator\n/// direct-declarator: [C99 6.7.5]\n/// [C99] identifier\n/// \'(\' declarator \')\'\n/// [GNU] \'(\' attributes declarator \')\'\n/// [C90] direct-declarator \'[\' constant-expression[opt] \']\'\n/// [C99] direct-declarator \'[\' type-qual-list[opt] assignment-expr[opt] \']\'\n/// [C99] direct-declarator \'[\' \'static\' type-qual-list[opt] assign-expr \']\'\n/// [C99] direct-declarator \'[\' type-qual-list \'static\' assignment-expr \']\'\n/// [C99] direct-declarator \'[\' type-qual-list[opt] \'*\' \']\'\n/// [C++11] direct-declarator \'[\' constant-expression[opt] \']\'\n/// attribute-specifier-seq[opt]\n/// direct-declarator \'(\' parameter-type-list \')\'\n/// direct-declarator \'(\' identifier-list[opt] \')\'\n/// [GNU] direct-declarator \'(\' parameter-forward-declarations\n/// parameter-type-list[opt] \')\'\n/// [C++] direct-declarator \'(\' parameter-declaration-clause \')\'\n/// cv-qualifier-seq[opt] exception-specification[opt]\n/// [C++11] direct-declarator \'(\' parameter-declaration-clause \')\'\n/// attribute-specifier-seq[opt] cv-qualifier-seq[opt]\n/// ref-qualifier[opt] exception-specification[opt]\n/// [C++] declarator-id\n/// [C++11] declarator-id attribute-specifier-seq[opt]\n///\n/// declarator-id: [C++ 8]\n/// \'...\'[opt] id-expression\n/// \'::\'[opt] nested-name-specifier[opt] type-name\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/// C++17 adds the following, which we also handle here:\n///\n/// simple-declaration:\n/// <decl-spec> \'[\' identifier-list \']\' brace-or-equal-initializer \';\'\n///\n/// Note, any additional constructs added here may need corresponding changes\n/// in isConstructorDeclarator.\nvoid Parser::ParseDirectDeclarator(Declarator &D) {\n if (getLangOpts().CPlusPlus && D.mayHaveIdentifier()) {\n } else if (Tok.is(tok::identifier) && D.mayHaveIdentifier()) {\n } else if (Tok.is(tok::identifier) && !D.mayHaveIdentifier()) {\n if (DiagnoseIdentifier) {\n Diag(Tok.getLocation(), diag::err_unexpected_unqualified_id) << FixItHint::CreateRemoval(Tok.getLocation());"}}, | ||
[k]={ | |||
["clang/test/Sema/block-args.c"]={"clang/test/Sema/block-args.c:40:23: error: type-id cannot have a name"} | |||
} | |||
}, | }, | ||
["err_unimplemented_conversion_with_fixed_point_type"]={ | ["err_unimplemented_conversion_with_fixed_point_type"]={ | ||
[ | [c]="conversion between fixed point and A is not yet supported", | ||
[d]=s, | |||
[f]=t, | |||
[h]="conversion between fixed point and %0 is not yet supported", | |||
[b]=u, | |||
[g]="conversion between fixed point and (.*?) is not yet supported", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"99bda375a14e",1539619622,"[Fixed Point Arithmetic] FixedPointCast"}, | [i]={"99bda375a14e",1539619622,"[Fixed Point Arithmetic] FixedPointCast"}, | ||
[j]={{ | [j]={{z,8060,"/// Prepares for a scalar cast, performing all the necessary stages\n/// except the final cast and returning the kind required.\nCastKind Sema::PrepareScalarCast(ExprResult &Src, QualType DestTy) {\n case Type::STK_FixedPoint:\n case Type::STK_FloatingComplex:\n Diag(Src.get()->getExprLoc(), diag::err_unimplemented_conversion_with_fixed_point_type) << DestTy;"},{z,8094,"/// Prepares for a scalar cast, performing all the necessary stages\n/// except the final cast and returning the kind required.\nCastKind Sema::PrepareScalarCast(ExprResult &Src, QualType DestTy) {\n case Type::STK_FloatingComplex:\n case Type::STK_FixedPoint:\n Diag(Src.get()->getExprLoc(), diag::err_unimplemented_conversion_with_fixed_point_type) << SrcTy;"},{z,8278,"/// Prepares for a scalar cast, performing all the necessary stages\n/// except the final cast and returning the kind required.\nCastKind Sema::PrepareScalarCast(ExprResult &Src, QualType DestTy) {\n case Type::STK_IntegralComplex:\n case Type::STK_FixedPoint:\n Diag(Src.get()->getExprLoc(), diag::err_unimplemented_conversion_with_fixed_point_type) << SrcTy;"}}, | ||
[k]={ | |||
["clang/test/Frontend/fixed_point_unknown_conversions.c"]={"clang/test/Frontend/fixed_point_unknown_conversions.c:25:11: error: conversion between fixed point and \'_Complex double\' is not yet supported","clang/test/Frontend/fixed_point_unknown_conversions.c:26:11: error: conversion between fixed point and \'_Complex int\' is not yet supported","clang/test/Frontend/fixed_point_unknown_conversions.c:31:8: error: conversion between fixed point and \'_Complex double\' is not yet supported","clang/test/Frontend/fixed_point_unknown_conversions.c:32:8: error: conversion between fixed point and \'_Complex int\' is not yet supported"} | |||
} | |||
}, | }, | ||
["err_uninitialized_member_for_assign"]={ | ["err_uninitialized_member_for_assign"]={ | ||
[ | [c]="cannot define the implicit copy assignment operator for A, because non-static ... member B cannot use copy assignment operator", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot define the implicit copy assignment operator for %0, because non-static %select{reference|const}1 member %2 cannot use copy assignment operator", | |||
[b]=u, | |||
[g]="cannot define the implicit copy assignment operator for (.*?), because non\\-static (?:reference|const) member (.*?) cannot use copy assignment operator", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"24a175b37c87",1246060156,"Patch to mark destructors when they are used."}, | [i]={"24a175b37c87",1246060156,"Patch to mark destructors when they are used."}, | ||
[j]={{ | [j]={{A,14859,"void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation, CXXMethodDecl *CopyAssignOperator) {\n // Assign non-static members.\n for (auto *Field : ClassDecl->fields()) {\n // Check for members of reference type; we can\'t copy those.\n if (Field->getType()->isReferenceType()) {\n Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign) << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();"},{A,14869,"void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation, CXXMethodDecl *CopyAssignOperator) {\n // Assign non-static members.\n for (auto *Field : ClassDecl->fields()) {\n if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {\n Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign) << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();"},{A,15234,"void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation, CXXMethodDecl *MoveAssignOperator) {\n // Assign non-static members.\n for (auto *Field : ClassDecl->fields()) {\n // Check for members of reference type; we can\'t move those.\n if (Field->getType()->isReferenceType()) {\n Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign) << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();"},{A,15244,"void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation, CXXMethodDecl *MoveAssignOperator) {\n // Assign non-static members.\n for (auto *Field : ClassDecl->fields()) {\n if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {\n Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign) << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/default-assignment-operator.cpp"]={"clang/test/SemaCXX/default-assignment-operator.cpp:5:7: error: cannot define the implicit copy assignment operator for \'Base\', because non-static reference member \'ref\' cannot use copy assignment operator","clang/test/SemaCXX/default-assignment-operator.cpp:18:7: error: cannot define the implicit copy assignment operator for \'X\', because non-static const member \'cint\' cannot use copy assignment operator","clang/test/SemaCXX/default-assignment-operator.cpp:103:7: error: cannot define the implicit copy assignment operator for \'E1\', because non-static const member \'a\' cannot use copy assignment operator"} | |||
} | |||
}, | }, | ||
["err_uninitialized_member_in_ctor"]={ | ["err_uninitialized_member_in_ctor"]={ | ||
[ | [c]="... must explicitly initialize the ... member A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%select{constructor for %1|implicit default constructor for %1|cannot use constructor inherited from %1:}0 must explicitly initialize the %select{reference|const}2 member %3", | |||
[b]=u, | |||
[g]="(?:constructor for (.*?)|implicit default constructor for (.*?)|cannot use constructor inherited from (.*?)\\:) must explicitly initialize the (?:reference|const) member (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several"}, | [i]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several"}, | ||
[j]={{ | [j]={{A,5048,"static bool BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor, ImplicitInitializerKind ImplicitInitKind, FieldDecl *Field, IndirectFieldDecl *Indirect, CXXCtorInitializer *&CXXMemberInit) {\n if (!Field->getParent()->isUnion()) {\n if (FieldBaseElementType->isReferenceType()) {\n SemaRef.Diag(Constructor->getLocation(), diag::err_uninitialized_member_in_ctor) << (int)Constructor->isImplicit() << SemaRef.Context.getTagDeclType(Constructor->getParent()) << 0 << Field->getDeclName();"},{A,5058,"static bool BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor, ImplicitInitializerKind ImplicitInitKind, FieldDecl *Field, IndirectFieldDecl *Indirect, CXXCtorInitializer *&CXXMemberInit) {\n if (!Field->getParent()->isUnion()) {\n if (FieldBaseElementType.isConstQualified()) {\n SemaRef.Diag(Constructor->getLocation(), diag::err_uninitialized_member_in_ctor) << (int)Constructor->isImplicit() << SemaRef.Context.getTagDeclType(Constructor->getParent()) << 1 << Field->getDeclName();"},{U,9956,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_DefaultInitOfConst:\n if (Entity.getKind() == InitializedEntity::EK_Member && isa<CXXConstructorDecl>(S.CurContext)) {\n S.Diag(Kind.getLocation(), diag::err_uninitialized_member_in_ctor) << (Constructor->getInheritedConstructor() ? 2 : Constructor->isImplicit() ? 1 : 0) << S.Context.getTypeDeclType(Constructor->getParent()) << /*const=*/1 << Entity.getName();"}}, | ||
[k]={ | |||
["clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp"]={"clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp:12:3: error: constructor for \'S\' must explicitly initialize the reference member \'a\'","clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp:14:3: error: constructor for \'S\' must explicitly initialize the reference member \'a\'"} | |||
} | |||
}, | }, | ||
["err_union_as_base_class"]={ | ["err_union_as_base_class"]={ | ||
[c]="unions cannot be base classes", | [c]="unions cannot be base classes", | ||
[d]=s, | [d]=s, | ||
[f]="unions cannot be base classes", | [f]=t, | ||
[g]= | [h]="unions cannot be base classes", | ||
[ | [b]=u, | ||
[i]={ | [g]="unions cannot be base classes", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{A,2718,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n // C++ [class.union]p1:\n // A union shall not be used as a base class.\n if (BaseType->isUnionType()) {\n Diag(BaseLoc, diag::err_union_as_base_class) << SpecifierRange;"}}, | |||
[k]={ | |||
["clang/test/SemaCXX/inherit.cpp"]={"clang/test/SemaCXX/inherit.cpp:25:18: error: unions cannot be base classes"} | |||
} | |||
}, | }, | ||
["err_union_member_of_reference_type"]={ | ["err_union_member_of_reference_type"]={ | ||
[ | [c]="union member A has reference type B", | ||
[d]=s, | |||
[f]=t, | |||
[h]="union member %0 has reference type %1", | |||
[b]=u, | |||
[g]="union member (.*?) has reference type (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"2ceb347e8bce",1289157235,"A union cannot contain static data members or data members of reference type."}, | [i]={"2ceb347e8bce",1289157235,"A union cannot contain static data members or data members of reference type."}, | ||
[j]={{ | [j]={{x,18241,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n if (!InvalidDecl && getLangOpts().CPlusPlus) {\n if (Record->isUnion()) {\n // C++ [class.union]p1: If a union contains a member of reference type,\n // the program is ill-formed, except when compiling with MSVC extensions\n // enabled.\n if (EltTy->isReferenceType()) {\n Diag(NewFD->getLocation(), getLangOpts().MicrosoftExt ? diag::ext_union_member_of_reference_type : diag::err_union_member_of_reference_type) << NewFD->getDeclName() << EltTy;"}}, | ||
[k]={ | |||
["clang/test/CXX/class/class.union/p1.cpp"]={"clang/test/CXX/class/class.union/p1.cpp:105:8: error: union member \'i1\' has reference type \'int &\'"} | |||
} | |||
}, | }, | ||
["err_unknown_analyzer_checker_or_package"]={ | ["err_unknown_analyzer_checker_or_package"]={ | ||
[ | [c]="no analyzer checkers or packages are associated with \'A\'", | ||
[d]=s, | |||
[f]=t, | |||
[h]="no analyzer checkers or packages are associated with \'%0\'", | |||
[b]=u, | |||
[g]="no analyzer checkers or packages are associated with \'(.*?)\'", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"a079a4270851",1565920394,"[analyzer] Analysis: Silence checkers"}, | [i]={"a079a4270851",1565920394,"[analyzer] Analysis: Silence checkers"}, | ||
[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",1169,"#include \"clang/StaticAnalyzer/Core/AnalyzerOptions.def\"\n // FIXME: Here we try to validate the silenced checkers or packages are valid.\n // The current approach only validates the registered checkers which does not\n // contain the runtime enabled checkers and optimally we would validate both.\n if (!AnOpts.RawSilencedCheckersAndPackages.empty()) {\n for (const StringRef &CheckerOrPackage : CheckersAndPackages) {\n if (Diags) {\n if (!IsValidName)\n Diags->Report(diag::err_unknown_analyzer_checker_or_package) << CheckerOrPackage;"},{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",178,"#endif\n // Parse \'-analyzer-checker\' and \'-analyzer-disable-checker\' options from the\n // command line.\n for (const std::pair<std::string, bool> &Opt : AnOpts.CheckersAndPackages) {\n if (CheckerForCmdLineArg.begin() == CheckerForCmdLineArg.end()) {\n Diags.Report(diag::err_unknown_analyzer_checker_or_package) << Opt.first;"},{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",525,"void CheckerRegistry::validateCheckerOptions() const {\n for (const auto &Config : AnOpts.Config) {\n Diags.Report(diag::err_unknown_analyzer_checker_or_package) << SuppliedCheckerOrPackage;"}} | [j]={{"clang/lib/Frontend/CompilerInvocation.cpp",1169,"#include \"clang/StaticAnalyzer/Core/AnalyzerOptions.def\"\n // FIXME: Here we try to validate the silenced checkers or packages are valid.\n // The current approach only validates the registered checkers which does not\n // contain the runtime enabled checkers and optimally we would validate both.\n if (!AnOpts.RawSilencedCheckersAndPackages.empty()) {\n for (const StringRef &CheckerOrPackage : CheckersAndPackages) {\n if (Diags) {\n if (!IsValidName)\n Diags->Report(diag::err_unknown_analyzer_checker_or_package) << CheckerOrPackage;"},{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",178,"#endif\n // Parse \'-analyzer-checker\' and \'-analyzer-disable-checker\' options from the\n // command line.\n for (const std::pair<std::string, bool> &Opt : AnOpts.CheckersAndPackages) {\n if (CheckerForCmdLineArg.begin() == CheckerForCmdLineArg.end()) {\n Diags.Report(diag::err_unknown_analyzer_checker_or_package) << Opt.first;"},{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",525,"void CheckerRegistry::validateCheckerOptions() const {\n for (const auto &Config : AnOpts.Config) {\n Diags.Report(diag::err_unknown_analyzer_checker_or_package) << SuppliedCheckerOrPackage;"}} | ||
}, | }, | ||
["err_unknown_any_addrof"]={ | ["err_unknown_any_addrof"]={ | ||
[c]="the address of a declaration with unknown type can only be cast to a pointer type", | [c]="the address of a declaration with unknown type can only be cast to a pointer type", | ||
[d]=s, | [d]=s, | ||
[f]="the address of a declaration with unknown type can only be cast to a pointer type", | [f]=t, | ||
[g]= | [h]="the address of a declaration with unknown type can only be cast to a pointer type", | ||
[ | [b]=u, | ||
[g]="the address of a declaration with unknown type can only be cast to a pointer type", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"2979fe01da2c",1302568968,"After some discussion with Doug, we decided that it made a lot more sense"}, | [i]={"2979fe01da2c",1302568968,"After some discussion with Doug, we decided that it made a lot more sense"}, | ||
[j]={{ | [j]={{z,21132,"/// A visitor for rebuilding an expression of type __unknown_anytype\n/// into one which resolves the type directly on the referring\n/// expression. Strict preservation of the original source\n/// structure is not a goal.\nstruct RebuildUnknownAnyExpr : StmtVisitor<RebuildUnknownAnyExpr, ExprResult> {\n ExprResult VisitUnaryAddrOf(UnaryOperator *E) {\n if (!Ptr) {\n S.Diag(E->getOperatorLoc(), diag::err_unknown_any_addrof) << E->getSourceRange();"}} | ||
}, | }, | ||
["err_unknown_any_addrof_call"]={ | ["err_unknown_any_addrof_call"]={ | ||
[c]="address-of operator cannot be applied to a call to a function with unknown return type", | [c]="address-of operator cannot be applied to a call to a function with unknown return type", | ||
[d]=s, | [d]=s, | ||
[f]="address\\-of operator cannot be applied to a call to a function with unknown return type", | [f]=t, | ||
[ | [h]="address-of operator cannot be applied to a call to a function with unknown return type", | ||
[ | [b]=u, | ||
[g]="address\\-of operator cannot be applied to a call to a function with unknown return type", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"f7d563c76c40",1479514383,"[Sema] Don\'t allow applying address-of operator to a call to a function"}, | [i]={"f7d563c76c40",1479514383,"[Sema] Don\'t allow applying address-of operator to a call to a function"}, | ||
[j]={{ | [j]={{z,21190,"/// A visitor for rebuilding an expression of type __unknown_anytype\n/// into one which resolves the type directly on the referring\n/// expression. Strict preservation of the original source\n/// structure is not a goal.\nstruct RebuildUnknownAnyExpr : StmtVisitor<RebuildUnknownAnyExpr, ExprResult> {\n ExprResult VisitUnaryAddrOf(UnaryOperator *E) {\n if (isa<CallExpr>(E->getSubExpr())) {\n S.Diag(E->getOperatorLoc(), diag::err_unknown_any_addrof_call) << E->getSourceRange();"}}, | ||
[k]={ | |||
[dc]={"clang/test/SemaCXX/unknown-anytype.cpp:66:18: error: address-of operator cannot be applied to a call to a function with unknown return type"} | |||
} | |||
}, | }, | ||
["err_unknown_any_function"]={ | ["err_unknown_any_function"]={ | ||
[ | [c]="function A with unknown type must be given a function type", | ||
[d]=s, | |||
[f]=t, | |||
[h]="function %0 with unknown type must be given a function type", | |||
[b]=u, | |||
[g]="function (.*?) with unknown type must be given a function type", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"9a877fef910f",1312949543,"Change an assert into a check. I\'m pretty sure there was a point"}, | [i]={"9a877fef910f",1312949543,"Change an assert into a check. I\'m pretty sure there was a point"}, | ||
[j]={{ | [j]={{z,21393,"ExprResult RebuildUnknownAnyExpr::resolveDecl(Expr *E, ValueDecl *VD) {\n // - functions\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(VD)) {\n if (!Type->isFunctionType()) {\n S.Diag(E->getExprLoc(), diag::err_unknown_any_function) << VD << E->getSourceRange();"}}, | ||
[k]={ | |||
[dc]={"clang/test/SemaCXX/unknown-anytype.cpp:45:19: error: function \'test1\' with unknown type must be given a function type"} | |||
} | |||
}, | }, | ||
["err_unknown_any_var_function_type"]={ | ["err_unknown_any_var_function_type"]={ | ||
[ | [c]="variable A with unknown type cannot be given a function type", | ||
[d]=s, | |||
[f]=t, | |||
[h]="variable %0 with unknown type cannot be given a function type", | |||
[b]=u, | |||
[g]="variable (.*?) with unknown type cannot be given a function type", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"2979fe01da2c",1302568968,"After some discussion with Doug, we decided that it made a lot more sense"}, | [i]={"2979fe01da2c",1302568968,"After some discussion with Doug, we decided that it made a lot more sense"}, | ||
[j]={{ | [j]={{z,21400,"ExprResult RebuildUnknownAnyExpr::resolveDecl(Expr *E, ValueDecl *VD) {\n // - functions\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(VD)) {\n } else if (isa<VarDecl>(VD)) {\n if (const ReferenceType *RefTy = Type->getAs<ReferenceType>()) {\n } else if (Type->isFunctionType()) {\n S.Diag(E->getExprLoc(), diag::err_unknown_any_var_function_type) << VD << E->getSourceRange();"}}, | ||
[k]={ | |||
[dc]={"clang/test/SemaCXX/unknown-anytype.cpp:34:19: error: variable \'foo\' with unknown type cannot be given a function type"} | |||
} | |||
}, | }, | ||
["err_unknown_hlsl_semantic"]={ | ["err_unknown_hlsl_semantic"]={ | ||
[ | [c]="unknown HLSL semantic A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="unknown HLSL semantic %0", | |||
[b]=u, | |||
[g]="unknown HLSL semantic (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"1fdf952deeb9",1648668015,"[HLSL] Add Semantic syntax, and SV_GroupIndex"}, | [i]={"1fdf952deeb9",1648668015,"[HLSL] Add Semantic syntax, and SV_GroupIndex"}, | ||
[j]={{"clang/lib/Parse/ParseHLSL.cpp",189,"void Parser::ParseHLSLSemantics(ParsedAttributes &Attrs, SourceLocation *EndLoc) {\n case ParsedAttr::UnknownAttribute:\n Diag(Loc, diag::err_unknown_hlsl_semantic) << II;"}} | [j]={{"clang/lib/Parse/ParseHLSL.cpp",189,"void Parser::ParseHLSLSemantics(ParsedAttributes &Attrs, SourceLocation *EndLoc) {\n case ParsedAttr::UnknownAttribute:\n Diag(Loc, diag::err_unknown_hlsl_semantic) << II;"}}, | ||
[k]={ | |||
["clang/test/ParserHLSL/semantic_parsing.hlsl"]={"clang/test/ParserHLSL/semantic_parsing.hlsl:7:20: error: unknown HLSL semantic \'SV_IWantAPony\'"} | |||
} | |||
}, | }, | ||
["err_unknown_nested_typename_suggest"]={ | ["err_unknown_nested_typename_suggest"]={ | ||
[ | [c]="no type named A in B; did you mean ...C?", | ||
[d]=s, | |||
[f]=t, | |||
[h]="no type named %0 in %1; did you mean %select{|simply }2%3?", | |||
[b]=u, | |||
[g]="no type named (.*?) in (.*?); did you mean (?:|simply )(.*?)\\?", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"2d435306e524",1262192684,"Typo correction for type names when they appear in declarations, e.g., given"}, | [i]={"2d435306e524",1262192684,"Typo correction for type names when they appear in declarations, e.g., given"}, | ||
[j]={{ | [j]={{x,765,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n if (Corrected.isKeyword()) {\n } else {\n // We found a similarly-named type or interface; suggest that.\n if (!SS || !SS->isSet()) {\n } else if (DeclContext *DC = computeDeclContext(*SS, false)) {\n diagnoseTypo(Corrected, PDiag(IsTemplateName ? diag::err_no_member_template_suggest : diag::err_unknown_nested_typename_suggest) << II << DC << DroppedSpecifier << SS->getRange(), CanRecover);"},{x,1023,"Corrected:\n case LookupResult::NotFound:\n // Perform typo correction to determine if there is another name that is\n // close to this name.\n if (!SecondTry && CCC) {\n if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, &SS, *CCC, CTK_ErrorRecovery)) {\n if (getLangOpts().CPlusPlus && NextToken.is(tok::less) && UnderlyingFirstDecl && isa<TemplateDecl>(UnderlyingFirstDecl)) {\n } else if (UnderlyingFirstDecl && (isa<TypeDecl>(UnderlyingFirstDecl) || isa<ObjCInterfaceDecl>(UnderlyingFirstDecl) || isa<ObjCCompatibleAliasDecl>(UnderlyingFirstDecl))) {\n QualifiedDiag = diag::err_unknown_nested_typename_suggest;"}}, | ||
[k]={ | |||
["clang/test/CXX/basic/basic.scope/basic.scope.pdecl/p7.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.pdecl/p7.cpp:23:17: error: no type named \'D\' in \'X\'; did you mean simply \'D\'?","clang/test/CXX/basic/basic.scope/basic.scope.pdecl/p7.cpp:25:17: error: no type named \'E\' in \'X\'; did you mean simply \'E\'?","clang/test/CXX/basic/basic.scope/basic.scope.pdecl/p7.cpp:40:21: error: no type named \'H\' in \'X\'; did you mean simply \'H\'?","clang/test/CXX/basic/basic.scope/basic.scope.pdecl/p7.cpp:42:21: error: no type named \'I\' in \'X\'; did you mean simply \'I\'?"} | |||
} | |||
}, | }, | ||
["err_unknown_receiver_suggest"]={ | ["err_unknown_receiver_suggest"]={ | ||
[ | [c]="unknown receiver A; did you mean B?", | ||
[d]=s, | |||
[f]=t, | |||
[h]="unknown receiver %0; did you mean %1?", | |||
[b]=u, | |||
[g]="unknown receiver (.*?); did you mean (.*?)\\?", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"8aa4ebf0bcf7",1271213197,"Implement typo correction for Objective-C message sends when the"}, | [i]={"8aa4ebf0bcf7",1271213197,"Implement typo correction for Objective-C message sends when the"}, | ||
[j]={{ | [j]={{ec,2362,"Sema::ObjCMessageKind Sema::getObjCMessageKind(Scope *S, IdentifierInfo *Name, SourceLocation NameLoc, bool IsSuper, bool HasTrailingDot, ParsedType &ReceiverType) {\n if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery, nullptr, false, nullptr, false)) {\n if (Corrected.isKeyword()) {\n diagnoseTypo(Corrected, PDiag(diag::err_unknown_receiver_suggest) << Name);"},{ec,2369,"Sema::ObjCMessageKind Sema::getObjCMessageKind(Scope *S, IdentifierInfo *Name, SourceLocation NameLoc, bool IsSuper, bool HasTrailingDot, ParsedType &ReceiverType) {\n if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery, nullptr, false, nullptr, false)) {\n if (Corrected.isKeyword()) {\n } else if (ObjCInterfaceDecl *Class = Corrected.getCorrectionDeclAs<ObjCInterfaceDecl>()) {\n diagnoseTypo(Corrected, PDiag(diag::err_unknown_receiver_suggest) << Name);"}}, | ||
[k]={ | |||
["clang/test/FixIt/typo.m"]={"clang/test/FixIt/typo.m:64:4: error: unknown receiver \'NSstring\'; did you mean \'NSString\'?","clang/test/FixIt/typo.m:111:11: error: unknown receiver \'supper\'; did you mean \'super\'?","clang/test/FixIt/typo.m:122:11: error: unknown receiver \'supper\'; did you mean \'super\'?"} | |||
} | |||
}, | }, | ||
["err_unknown_template_name"]={ | ["err_unknown_template_name"]={ | ||
[ | [c]="unknown template name A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="unknown template name %0", | |||
[b]=u, | |||
[g]="unknown template name (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=y, | ||
[i]={"18473f329dbd",1263331724,"Improve recovery for template-ids whose template-name doesn\'t actually"}, | [i]={"18473f329dbd",1263331724,"Improve recovery for template-ids whose template-name doesn\'t actually"}, | ||
[j]={{ | [j]={{M,1330,"/// ParseBaseTypeSpecifier - Parse a C++ base-type-specifier which is either a\n/// class name or decltype-specifier. Note that we only check that the result\n/// names a type; semantic analysis will need to verify that the type names a\n/// class. The result is either a type or null, depending on whether a type\n/// name was found.\n///\n/// base-type-specifier: [C++11 class.derived]\n/// class-or-decltype\n/// class-or-decltype: [C++11 class.derived]\n/// nested-name-specifier[opt] class-name\n/// decltype-specifier\n/// class-name: [C++ class.name]\n/// identifier\n/// simple-template-id\n///\n/// In C++98, instead of base-type-specifier, we have:\n///\n/// ::[opt] nested-name-specifier[opt] class-name\nTypeResult Parser::ParseBaseTypeSpecifier(SourceLocation &BaseLoc, SourceLocation &EndLocation) {\n if (Tok.is(tok::less)) {\n if (!Actions.DiagnoseUnknownTemplateName(*Id, IdLoc, getCurScope(), &SS, Template, TNK)) {\n Diag(IdLoc, diag::err_unknown_template_name) << Id;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/injected-class-name-crash.cpp"]={"clang/test/SemaCXX/injected-class-name-crash.cpp:4:19: error: unknown template name \'Foo\'"} | |||
} | |||
}, | }, | ||
["err_unknown_type_or_class_name_suggest"]={ | ["err_unknown_type_or_class_name_suggest"]={ | ||
[ | [c]="unknown ... name A; did you mean B?", | ||
[d]=s, | |||
[f]=t, | |||
[h]="unknown %select{type|class}1 name %0; did you mean %2?", | |||
[b]=u, | |||
[g]="unknown (?:type|class) name (.*?); did you mean (.*?)\\?", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"9cb8e9fc89d3",1340408225,"Perform typo correction for base class specifiers."}, | [i]={"9cb8e9fc89d3",1340408225,"Perform typo correction for base class specifiers."}, | ||
[j]={{ | [j]={{x,470,"/// 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 case LookupResult::NotFoundInCurrentInstantiation:\n if (CorrectedII) {\n if (Correction && (NNS || NewII != &II) &&\n if (Ty) {\n diagnoseTypo(Correction, PDiag(diag::err_unknown_type_or_class_name_suggest) << Result.getLookupName() << isClassName);"},{pb,1733,"void Sema::actOnObjCTypeArgsOrProtocolQualifiers(Scope *S, ParsedType baseType, SourceLocation lAngleLoc, ArrayRef<IdentifierInfo *> identifiers, ArrayRef<SourceLocation> identifierLocs, SourceLocation rAngleLoc, SourceLocation &typeArgsLAngleLoc, SmallVectorImpl<ParsedType> &typeArgs, SourceLocation &typeArgsRAngleLoc, SourceLocation &protocolLAngleLoc, SmallVectorImpl<Decl *> &protocols, SourceLocation &protocolRAngleLoc, bool warnOnIncompleteProtocols) {\n for (unsigned i = 0, n = identifiers.size(); i != n; ++i) {\n if (corrected) {\n // Did we find an Objective-C class?\n if (auto objcClass = corrected.getCorrectionDeclAs<ObjCInterfaceDecl>()) {\n diagnoseTypo(corrected, PDiag(diag::err_unknown_type_or_class_name_suggest) << identifiers[i] << true);"}}, | ||
[k]={ | |||
["clang/test/Parser/recovery.c"]={"clang/test/Parser/recovery.c:86:10: error: unknown type name \'intptr\'; did you mean \'intptr_t\'?"} | |||
} | |||
}, | }, | ||
["err_unknown_typename"]={ | ["err_unknown_typename"]={ | ||
[ | [c]="unknown type name A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="unknown type name %0", | |||
[b]=u, | |||
[g]="unknown type name (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"6cc055af1df1",1239568951,"Implement the first set of changes for PR3963 and rdar://6759604,"}, | [i]={"6cc055af1df1",1239568951,"Implement the first set of changes for PR3963 and rdar://6759604,"}, | ||
[j]={{ | [j]={{x,809,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n if (!SS || (!SS->isSet() && !SS->isInvalid()))\n Diag(IILoc, IsTemplateName ? diag::err_no_template : diag::err_unknown_typename) << II;"},{A,12113,"Decl *Sema::ActOnUsingEnumDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation EnumLoc, SourceLocation IdentLoc, IdentifierInfo &II, CXXScopeSpec *SS) {\n if (EnumTy.isNull()) {\n Diag(IdentLoc, SS && isDependentScopeSpecifier(*SS) ? diag::err_using_enum_is_dependent : diag::err_unknown_typename) << II.getName() << SourceRange(SS ? SS->getBeginLoc() : IdentLoc, IdentLoc);"},{pb,1746,"void Sema::actOnObjCTypeArgsOrProtocolQualifiers(Scope *S, ParsedType baseType, SourceLocation lAngleLoc, ArrayRef<IdentifierInfo *> identifiers, ArrayRef<SourceLocation> identifierLocs, SourceLocation rAngleLoc, SourceLocation &typeArgsLAngleLoc, SmallVectorImpl<ParsedType> &typeArgs, SourceLocation &typeArgsRAngleLoc, SourceLocation &protocolLAngleLoc, SmallVectorImpl<Decl *> &protocols, SourceLocation &protocolRAngleLoc, bool warnOnIncompleteProtocols) {\n for (unsigned i = 0, n = identifiers.size(); i != n; ++i) {\n Diag(identifierLocs[i], (lookupKind == LookupAnyName ? diag::err_objc_type_arg_missing : lookupKind == LookupObjCProtocolName ? diag::err_undeclared_protocol : diag::err_unknown_typename)) << identifiers[i];"},{F,11059,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n case LookupResult::NotFound: {\n DiagID = Ctx ? diag::err_typename_nested_not_found : diag::err_unknown_typename;"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/pragma_poison.c"]={"clang/test/Preprocessor/pragma_poison.c:7:3: error: unknown type name \'XYZW\'"} | |||
} | |||
}, | }, | ||
["err_unknown_typename_suggest"]={ | ["err_unknown_typename_suggest"]={ | ||
[ | [c]="unknown type name A; did you mean B?", | ||
[d]=s, | |||
[f]=t, | |||
[h]="unknown type name %0; did you mean %1?", | |||
[b]=u, | |||
[g]="unknown type name (.*?); did you mean (.*?)\\?", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"2d435306e524",1262192684,"Typo correction for type names when they appear in declarations, e.g., given"}, | [i]={"2d435306e524",1262192684,"Typo correction for type names when they appear in declarations, e.g., given"}, | ||
[j]={{ | [j]={{x,748,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n if (Corrected.isKeyword()) {\n diagnoseTypo(Corrected, PDiag(IsTemplateName ? diag::err_no_template_suggest : diag::err_unknown_typename_suggest) << II);"},{x,756,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n if (Corrected.isKeyword()) {\n } else {\n // We found a similarly-named type or interface; suggest that.\n if (!SS || !SS->isSet()) {\n diagnoseTypo(Corrected, PDiag(IsTemplateName ? diag::err_no_template_suggest : diag::err_unknown_typename_suggest) << II, CanRecover);"},{x,1022,"Corrected:\n case LookupResult::NotFound:\n // Perform typo correction to determine if there is another name that is\n // close to this name.\n if (!SecondTry && CCC) {\n if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, &SS, *CCC, CTK_ErrorRecovery)) {\n if (getLangOpts().CPlusPlus && NextToken.is(tok::less) && UnderlyingFirstDecl && isa<TemplateDecl>(UnderlyingFirstDecl)) {\n } else if (UnderlyingFirstDecl && (isa<TypeDecl>(UnderlyingFirstDecl) || isa<ObjCInterfaceDecl>(UnderlyingFirstDecl) || isa<ObjCCompatibleAliasDecl>(UnderlyingFirstDecl))) {\n UnqualifiedDiag = diag::err_unknown_typename_suggest;"},{pb,1722,"void Sema::actOnObjCTypeArgsOrProtocolQualifiers(Scope *S, ParsedType baseType, SourceLocation lAngleLoc, ArrayRef<IdentifierInfo *> identifiers, ArrayRef<SourceLocation> identifierLocs, SourceLocation rAngleLoc, SourceLocation &typeArgsLAngleLoc, SmallVectorImpl<ParsedType> &typeArgs, SourceLocation &typeArgsRAngleLoc, SourceLocation &protocolLAngleLoc, SmallVectorImpl<Decl *> &protocols, SourceLocation &protocolRAngleLoc, bool warnOnIncompleteProtocols) {\n for (unsigned i = 0, n = identifiers.size(); i != n; ++i) {\n if (corrected) {\n // Did we find a type?\n if (auto typeDecl = corrected.getCorrectionDeclAs<TypeDecl>()) {\n diagnoseTypo(corrected, PDiag(diag::err_unknown_typename_suggest) << identifiers[i]);"}} | ||
}, | }, | ||
["err_unofficial_altivec_support_not_enabled"]={ | ["err_unofficial_altivec_support_not_enabled"]={ | ||
[c]="\"AltiVec support not enabled\"", | [c]="\"AltiVec support not enabled\"", | ||
[d]=s, | [d]=s, | ||
[f]="\"AltiVec support not enabled\"", | [f]=t, | ||
[g]= | [h]="\"AltiVec support not enabled\"", | ||
[ | [b]=u, | ||
[g]="\"AltiVec support not enabled\"", | |||
[a]=r, | |||
[e]=Rb | |||
}, | }, | ||
["err_unofficial_asm_invalid_register_name"]={ | ["err_unofficial_asm_invalid_register_name"]={ | ||
[c]="invalid register name", | [c]="invalid register name", | ||
[d]=s, | [d]=s, | ||
[f]="invalid register name", | [f]=t, | ||
[g]= | [h]="invalid register name", | ||
[ | [b]=u, | ||
[g]="invalid register name", | |||
[a]=r, | |||
[e]=n | |||
}, | }, | ||
["err_unofficial_cannot_compile_this_yet"]={ | ["err_unofficial_cannot_compile_this_yet"]={ | ||
[ | [c]="cannot compile this A yet", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot compile this %0 yet", | |||
[b]=u, | |||
[g]="cannot compile this (.*?) yet", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[ | [k]={ | ||
["clang/test/CodeGenHIP/printf-aggregate.cpp"]={"clang/test/CodeGenHIP/printf-aggregate.cpp:19:3: error: cannot compile this non-scalar arg to printf yet"} | |||
} | |||
}, | }, | ||
["err_unofficial_coroutine_requires_fcoroutines"]={ | ["err_unofficial_coroutine_requires_fcoroutines"]={ | ||
[c]="\"the <coroutine> header requires -fcoroutines\"", | [c]="\"the <coroutine> header requires -fcoroutines\"", | ||
[d]=s, | [d]=s, | ||
[f]="\"the \\<coroutine\\> header requires \\-fcoroutines\"", | [f]=t, | ||
[ | [h]="\"the <coroutine> header requires -fcoroutines\"", | ||
[ | [b]=u, | ||
[g]="\"the \\<coroutine\\> header requires \\-fcoroutines\"", | |||
[a]=r, | |||
[e]=Rb | |||
}, | }, | ||
["err_unofficial_cuda_unsupported_unified_addressing"]={ | ["err_unofficial_cuda_unsupported_unified_addressing"]={ | ||
[ | [c]="Target architecture A does not support unified addressing", | ||
[d]=s, | |||
[f]=t, | |||
[h]="Target architecture %0 does not support unified addressing", | |||
[b]=u, | |||
[g]="Target architecture (.*?) does not support unified addressing", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[ | [k]={ | ||
["clang/test/OpenMP/requires_codegen.cpp"]={"clang/test/OpenMP/requires_codegen.cpp:24:22: error: Target architecture sm_53 does not support unified addressing"} | |||
} | |||
}, | }, | ||
["err_unofficial_gcov_failed_to_open_coverage_notes_file_for_writing"]={ | ["err_unofficial_gcov_failed_to_open_coverage_notes_file_for_writing"]={ | ||
[ | [c]="failed to open coverage notes file for writing: A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="failed to open coverage notes file for writing: %0", | |||
[b]=u, | |||
[g]="failed to open coverage notes file for writing\\: (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[ | [k]={ | ||
["clang/test/CodeGen/code-coverage-filter.c"]={"error: failed to open coverage notes file for writing: Permission denied"} | |||
} | |||
}, | }, | ||
["err_unofficial_header_arm_mve_support_not_enabled"]={ | ["err_unofficial_header_arm_mve_support_not_enabled"]={ | ||
[c]="\"MVE support not enabled\"", | [c]="\"MVE support not enabled\"", | ||
[d]=s, | [d]=s, | ||
[f]="\"MVE support not enabled\"", | [f]=t, | ||
[g]= | [h]="\"MVE support not enabled\"", | ||
[ | [b]=u, | ||
[g]="\"MVE support not enabled\"", | |||
[a]=r, | |||
[e]=Rb | |||
}, | }, | ||
["err_unofficial_header_arm_neon_intrinsics_not_available"]={ | ["err_unofficial_header_arm_neon_intrinsics_not_available"]={ | ||
[c]="\"NEON intrinsics not available with the soft-float ABI. Please use -mfloat-abi=softfp or -mfloat-abi=hard\"", | [c]="\"NEON intrinsics not available with the soft-float ABI. Please use -mfloat-abi=softfp or -mfloat-abi=hard\"", | ||
[d]=s, | [d]=s, | ||
[f]="\"NEON intrinsics not available with the soft\\-float ABI\\. Please use \\-mfloat\\-abi\\=softfp or \\-mfloat\\-abi\\=hard\"", | [f]=t, | ||
[ | [h]="\"NEON intrinsics not available with the soft-float ABI. Please use -mfloat-abi=softfp or -mfloat-abi=hard\"", | ||
[ | [b]=u, | ||
[g]="\"NEON intrinsics not available with the soft\\-float ABI\\. Please use \\-mfloat\\-abi\\=softfp or \\-mfloat\\-abi\\=hard\"", | |||
[a]=r, | |||
[e]=Rb | |||
}, | }, | ||
["err_unofficial_header_arm_neon_support_not_enabled"]={ | ["err_unofficial_header_arm_neon_support_not_enabled"]={ | ||
[c]="\"NEON support not enabled\"", | [c]="\"NEON support not enabled\"", | ||
[d]=s, | [d]=s, | ||
[f]="\"NEON support not enabled\"", | [f]=t, | ||
[g]= | [h]="\"NEON support not enabled\"", | ||
[ | [b]=u, | ||
[g]="\"NEON support not enabled\"", | |||
[a]=r, | |||
[e]=Rb | |||
}, | }, | ||
["err_unofficial_header_arm_sve_big_endian_not_supported"]={ | ["err_unofficial_header_arm_sve_big_endian_not_supported"]={ | ||
[ | [c]="\"Big endian is currently not supported for A\"", | ||
[d]=s, | |||
[f]=t, | |||
[h]="\"Big endian is currently not supported for %0\"", | |||
[b]=u, | |||
[g]="\"Big endian is currently not supported for (.*?)\"", | |||
[a]=r, | [a]=r, | ||
[ | [e]=Rb, | ||
[ | [k]={ | ||
["clang/test/Sema/aarch64-sve-intrinsics/big_endian.cpp"]={"build/lib/clang/17/include/arm_sve.h:15:2: error: \"Big endian is currently not supported for arm_sve.h\""} | |||
} | |||
}, | }, | ||
["err_unofficial_header_cxx11_required"]={ | ["err_unofficial_header_cxx11_required"]={ | ||
[c]="This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.", | [c]="This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.", | ||
[d]=s, | [d]=s, | ||
[f]="This file requires compiler and library support for the ISO C\\+\\+ 2011 standard\\. This support must be enabled with the \\-std\\=c\\+\\+11 or \\-std\\=gnu\\+\\+11 compiler options\\.", | [f]=t, | ||
[ | [h]="This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.", | ||
[ | [b]=u, | ||
[g]="This file requires compiler and library support for the ISO C\\+\\+ 2011 standard\\. This support must be enabled with the \\-std\\=c\\+\\+11 or \\-std\\=gnu\\+\\+11 compiler options\\.", | |||
[a]=r, | |||
[e]=Rb | |||
}, | }, | ||
["err_unofficial_reading_profile"]={ | ["err_unofficial_reading_profile"]={ | ||
[ | [c]="Error in reading profile A: B", | ||
[d]=s, | |||
[f]=t, | |||
[h]="Error in reading profile %0: %1", | |||
[b]=u, | |||
[g]="Error in reading profile (.*?)\\: (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[ | [k]={ | ||
["clang/test/Profile/gcc-flag-compatibility.c"]={"error: Error in reading profile build/tools/clang/test/Profile/Output/gcc-flag-compatibility.c.tmp.dir/some/path/default.profdata: No such file or directory"} | |||
} | |||
}, | }, | ||
["err_unofficial_requires_hosted"]={ | ["err_unofficial_requires_hosted"]={ | ||
[c]="\"This header is not available in freestanding mode.\"", | [c]="\"This header is not available in freestanding mode.\"", | ||
[d]=s, | [d]=s, | ||
[f]="\"This header is not available in freestanding mode\\.\"", | [f]=t, | ||
[ | [h]="\"This header is not available in freestanding mode.\"", | ||
[ | [b]=u, | ||
[g]="\"This header is not available in freestanding mode\\.\"", | |||
[a]=r, | |||
[e]=Rb | |||
}, | }, | ||
["err_unparenthesized_non_primary_expr_in_requires_clause"]={ | ["err_unparenthesized_non_primary_expr_in_requires_clause"]={ | ||
[c]="parentheses are required around this expression in a requires clause", | [c]="parentheses are required around this expression in a requires clause", | ||
[d]=s, | [d]=s, | ||
[f]="parentheses are required around this expression in a requires clause", | [f]=t, | ||
[g]= | [h]="parentheses are required around this expression in a requires clause", | ||
[ | [b]=u, | ||
[g]="parentheses are required around this expression in a requires clause", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"}, | [i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"}, | ||
[j]={{ub,281,"/// \\brief Parse a constraint-logical-and-expression.\n///\n/// \\verbatim\n/// C++2a[temp.constr.decl]p1\n/// constraint-logical-and-expression:\n/// primary-expression\n/// constraint-logical-and-expression \'&&\' primary-expression\n///\n/// \\endverbatim\nExprResult Parser::ParseConstraintLogicalAndExpression(bool IsTrailingRequiresClause) {\n auto ParsePrimary = [&]() {\n auto RecoverFromNonPrimary = [&](ExprResult E, bool Note) {\n if (!E.isInvalid())\n Diag(E.get()->getExprLoc(), Note ? diag::note_unparenthesized_non_primary_expr_in_requires_clause : diag::err_unparenthesized_non_primary_expr_in_requires_clause) << FixItHint::CreateInsertion(E.get()->getBeginLoc(), \"(\") << FixItHint::CreateInsertion(PP.getLocForEndOfToken(E.get()->getEndLoc()), \")\") << E.get()->getSourceRange();"}} | [j]={{ub,281,"/// \\brief Parse a constraint-logical-and-expression.\n///\n/// \\verbatim\n/// C++2a[temp.constr.decl]p1\n/// constraint-logical-and-expression:\n/// primary-expression\n/// constraint-logical-and-expression \'&&\' primary-expression\n///\n/// \\endverbatim\nExprResult Parser::ParseConstraintLogicalAndExpression(bool IsTrailingRequiresClause) {\n auto ParsePrimary = [&]() {\n auto RecoverFromNonPrimary = [&](ExprResult E, bool Note) {\n if (!E.isInvalid())\n Diag(E.get()->getExprLoc(), Note ? diag::note_unparenthesized_non_primary_expr_in_requires_clause : diag::err_unparenthesized_non_primary_expr_in_requires_clause) << FixItHint::CreateInsertion(E.get()->getBeginLoc(), \"(\") << FixItHint::CreateInsertion(PP.getLocForEndOfToken(E.get()->getEndLoc()), \")\") << E.get()->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx-concepts-requires-clause.cpp"]={"clang/test/Parser/cxx-concepts-requires-clause.cpp:90:31: error: parentheses are required around this expression in a requires clause","clang/test/Parser/cxx-concepts-requires-clause.cpp:104:31: error: parentheses are required around this expression in a requires clause","clang/test/Parser/cxx-concepts-requires-clause.cpp:108:41: error: parentheses are required around this expression in a requires clause","clang/test/Parser/cxx-concepts-requires-clause.cpp:112:43: error: parentheses are required around this expression in a requires clause","clang/test/Parser/cxx-concepts-requires-clause.cpp:125:21: error: parentheses are required around this expression in a requires clause","clang/test/Parser/cxx-concepts-requires-clause.cpp:137:21: error: parentheses are required around this expression in a requires clause","clang/test/Parser/cxx-concepts-requires-clause.cpp:141:31: error: parentheses are required around this expression in a requires clause","clang/test/Parser/cxx-concepts-requires-clause.cpp:145:33: error: parentheses are required around this expression in a requires clause"} | |||
} | |||
}, | }, | ||
["err_unqualified_pointer_member_function"]={ | ["err_unqualified_pointer_member_function"]={ | ||
[c]="must explicitly qualify name of member function when taking its address", | [c]="must explicitly qualify name of member function when taking its address", | ||
[d]=s, | [d]=s, | ||
[f]="must explicitly qualify name of member function when taking its address", | [f]=t, | ||
[g]= | [h]="must explicitly qualify name of member function when taking its address", | ||
[ | [b]=u, | ||
[g]="must explicitly qualify name of member function when taking its address", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"9a8dd0db89f7",1263225416,"Make Clang complain about taking the address of an unqualified member function. Fixes PR5985."}, | [i]={"9a8dd0db89f7",1263225416,"Make Clang complain about taking the address of an unqualified member function. Fixes PR5985."}, | ||
[j]={{ | [j]={{z,14970,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n } else if (isa<ObjCSelectorExpr>(op)) {\n } else if (lval == Expr::LV_MemberFunction) {\n // The id-expression was parenthesized.\n if (OrigOp.get() != DRE) {\n } else if (!DRE->getQualifier()) {\n if (MD->getParent()->getName().empty())\n Diag(OpLoc, diag::err_unqualified_pointer_member_function) << op->getSourceRange();"},{z,14978,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n } else if (isa<ObjCSelectorExpr>(op)) {\n } else if (lval == Expr::LV_MemberFunction) {\n // The id-expression was parenthesized.\n if (OrigOp.get() != DRE) {\n } else if (!DRE->getQualifier()) {\n if (MD->getParent()->getName().empty())\n else {\n Diag(OpLoc, diag::err_unqualified_pointer_member_function) << op->getSourceRange() << FixItHint::CreateInsertion(op->getSourceRange().getBegin(), Qual);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/member-pointer.cpp"]={"clang/test/SemaCXX/member-pointer.cpp:157:11: error: must explicitly qualify name of member function when taking its address"} | |||
} | |||
}, | }, | ||
["err_unspecified_size_with_static"]={ | ["err_unspecified_size_with_static"]={ | ||
[c]="\'static\' may not be used without an array size", | [c]="\'static\' may not be used without an array size", | ||
[d]=s, | [d]=s, | ||
[f]="\'static\' may not be used without an array size", | [f]=t, | ||
[g]= | [h]="\'static\' may not be used without an array size", | ||
[ | [b]=u, | ||
[g]="\'static\' may not be used without an array size", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"f9834d5fa094",1407482478,"Parser: Array decls with static but without array size are illformed"}, | [i]={"f9834d5fa094",1407482478,"Parser: Array decls with static but without array size are illformed"}, | ||
[j]={{ | [j]={{H,7627,"/// [C90] direct-declarator \'[\' constant-expression[opt] \']\'\n/// [C99] direct-declarator \'[\' type-qual-list[opt] assignment-expr[opt] \']\'\n/// [C99] direct-declarator \'[\' \'static\' type-qual-list[opt] assign-expr \']\'\n/// [C99] direct-declarator \'[\' type-qual-list \'static\' assignment-expr \']\'\n/// [C99] direct-declarator \'[\' type-qual-list[opt] \'*\' \']\'\n/// [C++11] direct-declarator \'[\' constant-expression[opt] \']\'\n/// attribute-specifier-seq[opt]\nvoid Parser::ParseBracketDeclarator(Declarator &D) {\n // Handle the case where we have \'[*]\' as the array size. However, a leading\n // star could be the start of an expression, for example \'X[*p + 4]\'. Verify\n // the token after the star is a \']\'. Since stars in arrays are\n // infrequent, use of lookahead is not costly here.\n if (Tok.is(tok::star) && GetLookAheadToken(1).is(tok::r_square)) {\n } else if (Tok.isNot(tok::r_square)) {\n } else {\n if (StaticLoc.isValid()) {\n Diag(StaticLoc, diag::err_unspecified_size_with_static);"}}, | ||
[k]={ | |||
[Tb]={"clang/test/Parser/declarators.c:10:13: error: \'static\' may not be used without an array size"} | |||
} | |||
}, | }, | ||
["err_unspecified_vla_size_with_static"]={ | ["err_unspecified_vla_size_with_static"]={ | ||
[c]="\'static\' may not be used with an unspecified variable length array size", | [c]="\'static\' may not be used with an unspecified variable length array size", | ||
[d]=s, | [d]=s, | ||
[f]="\'static\' may not be used with an unspecified variable length array size", | [f]=t, | ||
[g]= | [h]="\'static\' may not be used with an unspecified variable length array size", | ||
[ | [b]=u, | ||
[i]={ | [g]="\'static\' may not be used with an unspecified variable length array size", | ||
[j]={{ | [a]=r, | ||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[j]={{H,7605,"/// [C90] direct-declarator \'[\' constant-expression[opt] \']\'\n/// [C99] direct-declarator \'[\' type-qual-list[opt] assignment-expr[opt] \']\'\n/// [C99] direct-declarator \'[\' \'static\' type-qual-list[opt] assign-expr \']\'\n/// [C99] direct-declarator \'[\' type-qual-list \'static\' assignment-expr \']\'\n/// [C99] direct-declarator \'[\' type-qual-list[opt] \'*\' \']\'\n/// [C++11] direct-declarator \'[\' constant-expression[opt] \']\'\n/// attribute-specifier-seq[opt]\nvoid Parser::ParseBracketDeclarator(Declarator &D) {\n // Handle the case where we have \'[*]\' as the array size. However, a leading\n // star could be the start of an expression, for example \'X[*p + 4]\'. Verify\n // the token after the star is a \']\'. Since stars in arrays are\n // infrequent, use of lookahead is not costly here.\n if (Tok.is(tok::star) && GetLookAheadToken(1).is(tok::r_square)) {\n if (StaticLoc.isValid()) {\n Diag(StaticLoc, diag::err_unspecified_vla_size_with_static);"}} | |||
}, | }, | ||
["err_unsupported_abi_for_opt"]={ | ["err_unsupported_abi_for_opt"]={ | ||
[ | [c]="\'A\' can only be used with the \'B\' ABI", | ||
[d]=s, | |||
[f]=t, | |||
[h]="\'%0\' can only be used with the \'%1\' ABI", | |||
[b]=u, | |||
[g]="\'(.*?)\' can only be used with the \'(.*?)\' ABI", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"eb63256095dd",1534929985,"[clang][mips] Set __mips_fpr correctly for -mfpxx"}, | [i]={"eb63256095dd",1534929985,"[clang][mips] Set __mips_fpr correctly for -mfpxx"}, | ||
[j]={{"clang/lib/Basic/Targets/Mips.cpp",251,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n // -fpxx is valid only for the o32 ABI\n if (FPMode == FPXX && (ABI == \"n32\" || ABI == \"n64\")) {\n Diags.Report(diag::err_unsupported_abi_for_opt) << \"-mfpxx\""}} | [j]={{"clang/lib/Basic/Targets/Mips.cpp",251,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n // -fpxx is valid only for the o32 ABI\n if (FPMode == FPXX && (ABI == \"n32\" || ABI == \"n64\")) {\n Diags.Report(diag::err_unsupported_abi_for_opt) << \"-mfpxx\""}} | ||
}, | }, | ||
["err_unsupported_ast_node"]={ | ["err_unsupported_ast_node"]={ | ||
[ | [c]="cannot import unsupported AST node A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot import unsupported AST node %0", | |||
[b]=u, | |||
[g]="cannot import unsupported AST node (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"e4c83e4e2e09",1265755713,"Complain about types and declarations that we don\'t know how to import."}, | [i]={"e4c83e4e2e09",1265755713,"Complain about types and declarations that we don\'t know how to import."}, | ||
[j]={{ | [j]={{Ac,1069,"ExpectedType ASTNodeImporter::VisitType(const Type *T) {\n Importer.FromDiag(SourceLocation(), diag::err_unsupported_ast_node) << T->getTypeClassName();"},{Ac,1718,"//----------------------------------------------------------------------------\n// Import Declarations\n//----------------------------------------------------------------------------\nError ASTNodeImporter::ImportDeclParts(NamedDecl *D, DeclContext *&DC, DeclContext *&LexicalDC, DeclarationName &Name, NamedDecl *&ToD, SourceLocation &Loc) {\n if (isa<RecordDecl>(D) && (FunDecl = dyn_cast<FunctionDecl>(OrigDC)) && FunDecl->hasBody()) {\n for (const ParmVarDecl *P : FunDecl->parameters()) {\n if (RT && RT->getDecl() == D) {\n Importer.FromDiag(D->getLocation(), diag::err_unsupported_ast_node) << D->getDeclKindName();"},{Ac,2263,"ExpectedDecl ASTNodeImporter::VisitDecl(Decl *D) {\n Importer.FromDiag(D->getLocation(), diag::err_unsupported_ast_node) << D->getDeclKindName();"},{Ac,2269,"ExpectedDecl ASTNodeImporter::VisitImportDecl(ImportDecl *D) {\n Importer.FromDiag(D->getLocation(), diag::err_unsupported_ast_node) << D->getDeclKindName();"},{Ac,6447,"ExpectedStmt ASTNodeImporter::VisitStmt(Stmt *S) {\n Importer.FromDiag(S->getBeginLoc(), diag::err_unsupported_ast_node) << S->getStmtClassName();"},{Ac,6961,"//----------------------------------------------------------------------------\n// Import Expressions\n//----------------------------------------------------------------------------\nExpectedStmt ASTNodeImporter::VisitExpr(Expr *E) {\n Importer.FromDiag(E->getBeginLoc(), diag::err_unsupported_ast_node) << E->getStmtClassName();"}}, | ||
[k]={ | |||
["clang/test/ASTMerge/macro/test.m"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/macro/Inputs/macro1.h:5:33: error: cannot import unsupported AST node Import","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/macro/Inputs/macro1.m:1:1: error: cannot import unsupported AST node Import"} | |||
} | |||
}, | }, | ||
["err_unsupported_bom"]={ | ["err_unsupported_bom"]={ | ||
[ | [c]="A byte order mark detected in \'B\', but encoding is not supported", | ||
[ | [d]="fatal error: ", | ||
[ | [f]="Fatal", | ||
[ | [h]="%0 byte order mark detected in \'%1\', but encoding is not supported", | ||
[ | [b]="fatal error\\: ", | ||
[ | [g]="(.*?) byte order mark detected in \'(.*?)\', but encoding is not supported", | ||
[ | [a]=r, | ||
[ | [e]=r, | ||
[i]={"8fbe98b3b6e4",1271787243,"enhance sourcemgr to detect various UTF BOM\'s and emit a fatal error"}, | [i]={"8fbe98b3b6e4",1271787243,"enhance sourcemgr to detect various UTF BOM\'s and emit a fatal error"}, | ||
[j]={{"clang/lib/Basic/SourceManager.cpp",181,"std::optional<llvm::MemoryBufferRef> ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, SourceLocation Loc) const {\n if (InvalidBOM) {\n Diag.Report(Loc, diag::err_unsupported_bom) << InvalidBOM << ContentsEntry->getName();"}} | [j]={{"clang/lib/Basic/SourceManager.cpp",181,"std::optional<llvm::MemoryBufferRef> ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, SourceLocation Loc) const {\n if (InvalidBOM) {\n Diag.Report(Loc, diag::err_unsupported_bom) << InvalidBOM << ContentsEntry->getName();"}}, | ||
[k]={ | |||
["clang/test/Lexer/utf-16.c"]={"clang/test/Lexer/utf-16.c:6:10: fatal error: UTF-16 (LE) byte order mark detected in \'clang/test/Lexer/utf-16.c.txt\', but encoding is not supported"} | |||
} | |||
}, | }, | ||
["err_unsupported_cxx_abi"]={ | ["err_unsupported_cxx_abi"]={ | ||
[ | [c]="C++ ABI \'A\' is not supported on target triple \'B\'", | ||
[d]=s, | |||
[f]=t, | |||
[h]="C++ ABI \'%0\' is not supported on target triple \'%1\'", | |||
[b]=u, | |||
[g]="C\\+\\+ ABI \'(.*?)\' is not supported on target triple \'(.*?)\'", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths."}, | [i]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths."}, | ||
[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",4026,"#include \"clang/Driver/Options.inc\"\n if (!CXXABI.empty()) {\n if (!TargetCXXABI::isABI(CXXABI)) {\n } else {\n if (!TargetCXXABI::isSupportedCXXABI(T, Kind))\n Diags.Report(diag::err_unsupported_cxx_abi) << CXXABI << T.str();"}} | [j]={{"clang/lib/Frontend/CompilerInvocation.cpp",4026,"#include \"clang/Driver/Options.inc\"\n if (!CXXABI.empty()) {\n if (!TargetCXXABI::isABI(CXXABI)) {\n } else {\n if (!TargetCXXABI::isSupportedCXXABI(T, Kind))\n Diags.Report(diag::err_unsupported_cxx_abi) << CXXABI << T.str();"}} | ||
}, | }, | ||
["err_unsupported_module_partition"]={ | ["err_unsupported_module_partition"]={ | ||
[c]="module partitions are only supported for C++20 onwards", | [c]="module partitions are only supported for C++20 onwards", | ||
[d]=s, | [d]=s, | ||
[f]="module partitions are only supported for C\\+\\+20 onwards", | [f]=t, | ||
[ | [h]="module partitions are only supported for C++20 onwards", | ||
[ | [b]=u, | ||
[g]="module partitions are only supported for C\\+\\+20 onwards", | |||
[a]=r, | |||
[e]=Gc, | |||
[i]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,"}, | [i]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,"}, | ||
[j]={{ | [j]={{yb,2454,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n/// module-declaration: [C++20]\n/// \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n/// global-module-fragment: [C++2a]\n/// \'module\' \';\' top-level-declaration-seq[opt]\n/// module-declaration: [C++2a]\n/// \'export\'[opt] \'module\' module-name module-partition[opt]\n/// attribute-specifier-seq[opt] \';\'\n/// private-module-fragment: [C++2a]\n/// \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n if (Tok.is(tok::colon)) {\n if (!getLangOpts().CPlusPlusModules)\n Diag(ColonLoc, diag::err_unsupported_module_partition) << SourceRange(ColonLoc, Partition.back().second);"},{yb,2519,"/// Parse a module import declaration. This is essentially the same for\n/// Objective-C and C++20 except for the leading \'@\' (in ObjC) and the\n/// trailing optional attributes (in C++).\n///\n/// [ObjC] @import declaration:\n/// \'@\' \'import\' module-name \';\'\n/// [ModTS] module-import-declaration:\n/// \'import\' module-name attribute-specifier-seq[opt] \';\'\n/// [C++20] module-import-declaration:\n/// \'export\'[opt] \'import\' module-name\n/// attribute-specifier-seq[opt] \';\'\n/// \'export\'[opt] \'import\' module-partition\n/// attribute-specifier-seq[opt] \';\'\n/// \'export\'[opt] \'import\' header-name\n/// attribute-specifier-seq[opt] \';\'\nDecl *Parser::ParseModuleImport(SourceLocation AtLoc, Sema::ModuleImportState &ImportState) {\n if (Tok.is(tok::header_name)) {\n } else if (Tok.is(tok::annot_header_unit)) {\n } else if (Tok.is(tok::colon)) {\n if (!getLangOpts().CPlusPlusModules)\n Diag(ColonLoc, diag::err_unsupported_module_partition) << SourceRange(ColonLoc, Path.back().second);"}} | ||
}, | }, | ||
["err_unsupported_placeholder_constraint"]={ | ["err_unsupported_placeholder_constraint"]={ | ||
[c]="constrained placeholder types other than simple \'auto\' on non-type template parameters not supported yet", | [c]="constrained placeholder types other than simple \'auto\' on non-type template parameters not supported yet", | ||
[d]=s, | [d]=s, | ||
[f]="constrained placeholder types other than simple \'auto\' on non\\-type template parameters not supported yet", | [f]=t, | ||
[ | [h]="constrained placeholder types other than simple \'auto\' on non-type template parameters not supported yet", | ||
[ | [b]=u, | ||
[g]="constrained placeholder types other than simple \'auto\' on non\\-type template parameters not supported yet", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"}, | [i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk"}, | ||
[j]={{ | [j]={{F,1274,"bool Sema::AttachTypeConstraint(AutoTypeLoc TL, NonTypeTemplateParmDecl *NewConstrainedParm, NonTypeTemplateParmDecl *OrigConstrainedParm, SourceLocation EllipsisLoc) {\n if (NewConstrainedParm->getType() != TL.getType() || TL.getAutoKeyword() != AutoTypeKeyword::Auto) {\n Diag(NewConstrainedParm->getTypeSourceInfo()->getTypeLoc().getBeginLoc(), diag::err_unsupported_placeholder_constraint) << NewConstrainedParm->getTypeSourceInfo()->getTypeLoc().getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/CXX/temp/temp.param/p10-2a.cpp"]={"clang/test/CXX/temp/temp.param/p10-2a.cpp:138:10: error: constrained placeholder types other than simple \'auto\' on non-type template parameters not supported yet"} | |||
} | |||
}, | }, | ||
["err_unsupported_string_concat"]={ | ["err_unsupported_string_concat"]={ | ||
[c]="unsupported non-standard concatenation of string literals", | [c]="unsupported non-standard concatenation of string literals", | ||
[d]=s, | [d]=s, | ||
[f]="unsupported non\\-standard concatenation of string literals", | [f]=t, | ||
[ | [h]="unsupported non-standard concatenation of string literals", | ||
[ | [b]=u, | ||
[g]="unsupported non\\-standard concatenation of string literals", | |||
[a]=r, | |||
[e]=B, | |||
[i]={"fb65e592e05a",1311745230,"Add support for C++0x unicode string and character literals, from Craig Topper!"}, | [i]={"fb65e592e05a",1311745230,"Add support for C++0x unicode string and character literals, from Craig Topper!"}, | ||
[j]={{ | [j]={{db,1964,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n /// (C99 5.1.1.2p1). The common case is only one string fragment.\n for (const Token &Tok : StringToks) {\n // Remember if we see any wide or utf-8/16/32 strings.\n // Also check for illegal concatenations.\n if (isUnevaluated() && Tok.getKind() != tok::string_literal) {\n } else if (Tok.isNot(Kind) && Tok.isNot(tok::string_literal)) {\n if (isOrdinary()) {\n } else {\n if (Diags)\n Diags->Report(Tok.getLocation(), diag::err_unsupported_string_concat);"}}, | ||
[k]={ | |||
["clang/test/Lexer/string_concat.cpp"]={"clang/test/Lexer/string_concat.cpp:12:27: error: unsupported non-standard concatenation of string literals","clang/test/Lexer/string_concat.cpp:13:27: error: unsupported non-standard concatenation of string literals","clang/test/Lexer/string_concat.cpp:14:27: error: unsupported non-standard concatenation of string literals","clang/test/Lexer/string_concat.cpp:21:30: error: unsupported non-standard concatenation of string literals","clang/test/Lexer/string_concat.cpp:22:30: error: unsupported non-standard concatenation of string literals","clang/test/Lexer/string_concat.cpp:23:30: error: unsupported non-standard concatenation of string literals","clang/test/Lexer/string_concat.cpp:30:30: error: unsupported non-standard concatenation of string literals","clang/test/Lexer/string_concat.cpp:31:30: error: unsupported non-standard concatenation of string literals","clang/test/Lexer/string_concat.cpp:32:30: error: unsupported non-standard concatenation of string literals","clang/test/Lexer/string_concat.cpp:39:29: error: unsupported non-standard concatenation of string literals","clang/test/Lexer/string_concat.cpp:40:29: error: unsupported non-standard concatenation of string literals","clang/test/Lexer/string_concat.cpp:41:29: error: unsupported non-standard concatenation of string literals"} | |||
} | |||
}, | }, | ||
["err_unsupported_unknown_any_call"]={ | ["err_unsupported_unknown_any_call"]={ | ||
[c]="call to unsupported expression with unknown type", | [c]="call to unsupported expression with unknown type", | ||
[d]=s, | [d]=s, | ||
[f]="call to unsupported expression with unknown type", | [f]=t, | ||
[g]= | [h]="call to unsupported expression with unknown type", | ||
[ | [b]=u, | ||
[g]="call to unsupported expression with unknown type", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"2979fe01da2c",1302568968,"After some discussion with Doug, we decided that it made a lot more sense"}, | [i]={"2979fe01da2c",1302568968,"After some discussion with Doug, we decided that it made a lot more sense"}, | ||
[j]={{ | [j]={{z,21094,"/// A visitor for rebuilding a call to an __unknown_any expression\n/// to have an appropriate type.\nstruct RebuildUnknownAnyFunction : StmtVisitor<RebuildUnknownAnyFunction, ExprResult> {\n ExprResult VisitExpr(Expr *E) {\n S.Diag(E->getExprLoc(), diag::err_unsupported_unknown_any_call) << E->getSourceRange();"}}, | ||
[k]={ | |||
[dc]={"clang/test/SemaCXX/unknown-anytype.cpp:33:5: error: call to unsupported expression with unknown type"} | |||
} | |||
}, | }, | ||
["err_unsupported_unknown_any_decl"]={ | ["err_unsupported_unknown_any_decl"]={ | ||
[ | [c]="A has unknown type, which is not supported for this kind of declaration", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%0 has unknown type, which is not supported for this kind of declaration", | |||
[b]=u, | |||
[g]="(.*?) has unknown type, which is not supported for this kind of declaration", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"2d2e870745c2",1302505370,"More __unknown_anytype work."}, | [i]={"2d2e870745c2",1302505370,"More __unknown_anytype work."}, | ||
[j]={{ | [j]={{z,21421,"ExprResult RebuildUnknownAnyExpr::resolveDecl(Expr *E, ValueDecl *VD) {\n // - functions\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(VD)) {\n } else if (isa<VarDecl>(VD)) {\n } else {\n S.Diag(E->getExprLoc(), diag::err_unsupported_unknown_any_decl) << VD << E->getSourceRange();"}} | ||
}, | }, | ||
["err_unsupported_unknown_any_expr"]={ | ["err_unsupported_unknown_any_expr"]={ | ||
[c]="unsupported expression with unknown type", | [c]="unsupported expression with unknown type", | ||
[d]=s, | [d]=s, | ||
[f]="unsupported expression with unknown type", | [f]=t, | ||
[g]= | [h]="unsupported expression with unknown type", | ||
[ | [b]=u, | ||
[g]="unsupported expression with unknown type", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"2d2e870745c2",1302505370,"More __unknown_anytype work."}, | [i]={"2d2e870745c2",1302505370,"More __unknown_anytype work."}, | ||
[j]={{ | [j]={{z,21126,"/// A visitor for rebuilding an expression of type __unknown_anytype\n/// into one which resolves the type directly on the referring\n/// expression. Strict preservation of the original source\n/// structure is not a goal.\nstruct RebuildUnknownAnyExpr : StmtVisitor<RebuildUnknownAnyExpr, ExprResult> {\n ExprResult VisitExpr(Expr *E) {\n S.Diag(E->getExprLoc(), diag::err_unsupported_unknown_any_expr) << E->getSourceRange();"},{z,21537,"static ExprResult diagnoseUnknownAnyExpr(Sema &S, Expr *E) {\n if (DeclRefExpr *ref = dyn_cast<DeclRefExpr>(E)) {\n } else if (MemberExpr *mem = dyn_cast<MemberExpr>(E)) {\n } else if (ObjCMessageExpr *msg = dyn_cast<ObjCMessageExpr>(E)) {\n } else {\n S.Diag(E->getExprLoc(), diag::err_unsupported_unknown_any_expr) << E->getSourceRange();"}} | ||
}, | }, | ||
["err_unterm_macro_invoc"]={ | ["err_unterm_macro_invoc"]={ | ||
[c]="unterminated function-like macro invocation", | [c]="unterminated function-like macro invocation", | ||
[d]=s, | [d]=s, | ||
[f]="unterminated function\\-like macro invocation", | [f]=t, | ||
[ | [h]="unterminated function-like macro invocation", | ||
[ | [b]=u, | ||
[i]={ | [g]="unterminated function\\-like macro invocation", | ||
[j]={{"clang/lib/Lex/PPMacroExpansion.cpp",815,"/// 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 while (Tok.isNot(tok::r_paren)) {\n while (true) {\n if (Tok.isOneOf(tok::eof, tok::eod)) { // \"#if f(<eof>\" & \"#if f(\\n\"\n if (!ContainsCodeCompletionTok) {\n Diag(MacroName, diag::err_unterm_macro_invoc);"},{"clang/lib/Lex/PPMacroExpansion.cpp",1322,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n already_lexed:\n case tok::eod:\n PP.Diag(Tok.getLocation(), diag::err_unterm_macro_invoc);"}} | [a]=r, | ||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[j]={{"clang/lib/Lex/PPMacroExpansion.cpp",815,"/// 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 while (Tok.isNot(tok::r_paren)) {\n while (true) {\n if (Tok.isOneOf(tok::eof, tok::eod)) { // \"#if f(<eof>\" & \"#if f(\\n\"\n if (!ContainsCodeCompletionTok) {\n Diag(MacroName, diag::err_unterm_macro_invoc);"},{"clang/lib/Lex/PPMacroExpansion.cpp",1322,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n already_lexed:\n case tok::eod:\n PP.Diag(Tok.getLocation(), diag::err_unterm_macro_invoc);"}}, | |||
[k]={ | |||
["clang/test/Preprocessor/invalid-__has_warning1.c"]={"clang/test/Preprocessor/invalid-__has_warning1.c:5:23: error: unterminated function-like macro invocation"} | |||
} | |||
}, | }, | ||
["err_unterminated___pragma"]={ | ["err_unterminated___pragma"]={ | ||
[c]="missing terminating \')\' character", | [c]="missing terminating \')\' character", | ||
[d]=s, | [d]=s, | ||
[f]="missing terminating \'\\)\' character", | [f]=t, | ||
[ | [h]="missing terminating \')\' character", | ||
[ | [b]=u, | ||
[g]="missing terminating \'\\)\' character", | |||
[a]=r, | |||
[e]=B, | |||
[i]={"49039d4afb3f",1283044194,"Complain if a __pragma isn\'t terminated."}, | [i]={"49039d4afb3f",1283044194,"Complain if a __pragma isn\'t terminated."}, | ||
[j]={{ | [j]={{mb,388,"/// HandleMicrosoft__pragma - Like Handle_Pragma except the pragma text\n/// is not enclosed within a string literal.\nvoid Preprocessor::HandleMicrosoft__pragma(Token &Tok) {\n if (Tok.is(tok::eof)) {\n Diag(PragmaLoc, diag::err_unterminated___pragma);"}} | ||
}, | }, | ||
["err_unterminated_block_comment"]={ | ["err_unterminated_block_comment"]={ | ||
[c]="unterminated /* comment", | [c]="unterminated /* comment", | ||
[d]=s, | [d]=s, | ||
[f]="unterminated \\/\\* comment", | [f]=t, | ||
[ | [h]="unterminated /* comment", | ||
[ | [b]=u, | ||
[i]={ | [g]="unterminated \\/\\* comment", | ||
[j]={{ | [a]=r, | ||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[j]={{ab,2735,"/// We have just read from input the / and * characters that started a comment.\n/// Read until we find the * and / characters that terminate the comment.\n/// Note that we don\'t bother decoding trigraphs or escaped newlines in block\n/// comments, because they cannot cause the comment to end. The only thing\n/// that can happen is the comment could end with an escaped newline between\n/// the terminating * and /.\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::SkipBlockComment(Token &Result, const char *CurPtr, bool &TokAtPhysicalStartOfLine) {\n if (C == 0 && CurPtr == BufferEnd + 1) {\n if (!isLexingRawMode())\n Diag(BufferPtr, diag::err_unterminated_block_comment);"},{ab,2881,"#endif\n FoundSlash:\n } else if (C == 0 && CurPtr == BufferEnd + 1) {\n if (!isLexingRawMode())\n Diag(BufferPtr, diag::err_unterminated_block_comment);"}} | |||
}, | }, | ||
["err_unterminated_raw_string"]={ | ["err_unterminated_raw_string"]={ | ||
[ | [c]="raw string missing terminating delimiter )A\"", | ||
[d]=s, | |||
[f]=t, | |||
[h]="raw string missing terminating delimiter )%0\"", | |||
[b]=u, | |||
[g]="raw string missing terminating delimiter \\)(.*?)\"", | |||
[a]=r, | [a]=r, | ||
[ | [e]=B, | ||
[i]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals."}, | [i]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals."}, | ||
[j]={{ | [j]={{ab,2198,"/// 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 while (true) {\n if (C == \')\') {\n } else if (C == 0 && CurPtr - 1 == BufferEnd) { // End of file.\n if (!isLexingRawMode())\n Diag(BufferPtr, diag::err_unterminated_raw_string) << StringRef(Prefix, PrefixLen);"}} | ||
}, | }, | ||
["err_upcast_to_inaccessible_base"]={ | ["err_upcast_to_inaccessible_base"]={ | ||
[ | [c]="cannot cast A to its ... base class B", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot cast %0 to its %select{private|protected}2 base class %1", | |||
[b]=u, | |||
[g]="cannot cast (.*?) to its (?:private|protected) base class (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"5b0829a321d5",1265794272,"Improve access control diagnostics. Perform access control on member-pointer"}, | [i]={"5b0829a321d5",1265794272,"Improve access control diagnostics. Perform access control on member-pointer"}, | ||
[j]={{ | [j]={{Bb,1833,"/// TryStaticMemberPointerUpcast - Tests whether a conversion according to\n/// C++ 5.2.9p9 is valid:\n///\n/// An rvalue of type \"pointer to member of D of type cv1 T\" can be\n/// converted to an rvalue of type \"pointer to member of B of type cv2 T\",\n/// where B is a base class of D [...].\n///\nTryCastResult TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n if (!CStyle) {\n switch (Self.CheckBaseClassAccess(OpRange.getBegin(), DestClass, SrcClass, Paths.front(), diag::err_upcast_to_inaccessible_base)) {"},{A,3166,"bool Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base, SourceLocation Loc, SourceRange Range, CXXCastPath *BasePath, bool IgnoreAccess) { return CheckDerivedToBaseConversion(Derived, Base, diag::err_upcast_to_inaccessible_base, diag::err_ambiguous_derived_to_base_conv, Loc, Range, DeclarationName(), BasePath, IgnoreAccess); }"},{Lb,3146,"/// CheckPointerConversion - Check the pointer conversion from the\n/// expression From to the type ToType. This routine checks for\n/// ambiguous or inaccessible derived-to-base pointer\n/// conversions for which IsPointerConversion has already returned\n/// true. It returns true and produces a diagnostic if there was an\n/// error, or returns false otherwise.\nbool Sema::CheckPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess, bool Diagnose) {\n if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {\n if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {\n if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() && !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {\n if (Diagnose) {\n InaccessibleID = diag::err_upcast_to_inaccessible_base;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/access-member-pointer.cpp"]={"clang/test/SemaCXX/access-member-pointer.cpp:10:9: error: cannot cast \'B\' to its private base class \'A\'"} | |||
} | |||
}, | }, | ||
["err_use_continuation_class"]={ | ["err_use_continuation_class"]={ | ||
[ | [c]="illegal redeclaration of property in class extension A (attribute must be \'readwrite\', while its primary must be \'readonly\')", | ||
[d]=s, | |||
[f]=t, | |||
[h]="illegal redeclaration of property in class extension %0 (attribute must be \'readwrite\', while its primary must be \'readonly\')", | |||
[b]=u, | |||
[g]="illegal redeclaration of property in class extension (.*?) \\(attribute must be \'readwrite\', while its primary must be \'readonly\'\\)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={C,1236199783,D}, | |||
[j]={{Hc,464,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n // Check for consistency with the previous declaration, if there is one.\n if (PIDecl) {\n // A readonly property declared in the primary class can be refined\n // by adding a readwrite property within an extension.\n // Anything else is an error.\n if (!(PIDecl->isReadOnly() && isReadWrite)) {\n unsigned diag = (Attributes & ObjCPropertyAttribute::kind_readwrite) && (PIDecl->getPropertyAttributesAsWritten() & ObjCPropertyAttribute::kind_readwrite) ? diag::err_use_continuation_class_redeclaration_readwrite : diag::err_use_continuation_class;"}}, | |||
[k]={ | |||
["clang/test/SemaObjC/continuation-class-err.m"]={"clang/test/SemaObjC/continuation-class-err.m:15:1: error: illegal redeclaration of property in class extension \'ReadOnly\' (attribute must be \'readwrite\', while its primary must be \'readonly\')","clang/test/SemaObjC/continuation-class-err.m:34:1: error: illegal redeclaration of property in class extension \'Bar\' (attribute must be \'readwrite\', while its primary must be \'readonly\')","clang/test/SemaObjC/continuation-class-err.m:35:1: error: illegal redeclaration of property in class extension \'Bar\' (attribute must be \'readwrite\', while its primary must be \'readonly\')"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_use_continuation_class_redeclaration_readwrite"]={ | ["err_use_continuation_class_redeclaration_readwrite"]={ | ||
[ | [c]="illegal redeclaration of \'readwrite\' property in class extension A (perhaps you intended this to be a \'readwrite\' redeclaration of a \'readonly\' public property?)", | ||
[d]=s, | |||
[f]=t, | |||
[h]="illegal redeclaration of \'readwrite\' property in class extension %0 (perhaps you intended this to be a \'readwrite\' redeclaration of a \'readonly\' public property?)", | |||
[b]=u, | |||
[g]="illegal redeclaration of \'readwrite\' property in class extension (.*?) \\(perhaps you intended this to be a \'readwrite\' redeclaration of a \'readonly\' public property\\?\\)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"5ef9ad9907a7",1287686982,"Tweak diagnostics for redeclaration of a @property in a class extension where the redelcaration and ..."}, | [i]={"5ef9ad9907a7",1287686982,"Tweak diagnostics for redeclaration of a @property in a class extension where the redelcaration and ..."}, | ||
[j]={{ | [j]={{Hc,463,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n // Check for consistency with the previous declaration, if there is one.\n if (PIDecl) {\n // A readonly property declared in the primary class can be refined\n // by adding a readwrite property within an extension.\n // Anything else is an error.\n if (!(PIDecl->isReadOnly() && isReadWrite)) {\n unsigned diag = (Attributes & ObjCPropertyAttribute::kind_readwrite) && (PIDecl->getPropertyAttributesAsWritten() & ObjCPropertyAttribute::kind_readwrite) ? diag::err_use_continuation_class_redeclaration_readwrite : diag::err_use_continuation_class;"}}, | ||
[k]={ | |||
["clang/test/SemaObjC/duplicate-property-class-extension.m"]={"clang/test/SemaObjC/duplicate-property-class-extension.m:12:1: error: illegal redeclaration of \'readwrite\' property in class extension \'Foo\' (perhaps you intended this to be a \'readwrite\' redeclaration of a \'readonly\' public property?)"} | |||
} | |||
}, | }, | ||
["err_use_of_default_argument_to_function_declared_later"]={ | ["err_use_of_default_argument_to_function_declared_later"]={ | ||
[ | [c]="use of default argument to function A that is declared later in class B", | ||
[d]=s, | |||
[f]=t, | |||
[h]="use of default argument to function %0 that is declared later in class %1", | |||
[b]=u, | |||
[g]="use of default argument to function (.*?) that is declared later in class (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"84613c4eba08",1244825500,"It\'s an error to use a function declared in a class definition as a default argument before the func..."}, | [i]={"84613c4eba08",1244825500,"It\'s an error to use a function declared in a class definition as a default argument before the func..."}, | ||
[j]={{ | [j]={{z,6035,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n if (Param->hasUnparsedDefaultArg()) {\n Diag(CallLoc, diag::err_use_of_default_argument_to_function_declared_later) << FD << cast<CXXRecordDecl>(FD->getDeclContext());"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/default2.cpp"]={"clang/test/SemaCXX/default2.cpp:117:23: error: use of default argument to function \'f\' that is declared later in class \'C2\'","clang/test/SemaCXX/default2.cpp:123:23: error: use of default argument to function \'f\' that is declared later in class \'C3<int>\'"} | |||
} | |||
}, | }, | ||
["err_use_of_empty_using_if_exists"]={ | ["err_use_of_empty_using_if_exists"]={ | ||
[c]="reference to unresolved using declaration", | [c]="reference to unresolved using declaration", | ||
[d]=s, | [d]=s, | ||
[f]="reference to unresolved using declaration", | [f]=t, | ||
[g]= | [h]="reference to unresolved using declaration", | ||
[ | [b]=u, | ||
[i]={ | [g]="reference to unresolved using declaration", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={uc,1615397021,vc}, | |||
[j]={{z,366,"/// 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 if (const auto *EmptyD = dyn_cast<UnresolvedUsingIfExistsDecl>(D)) {\n Diag(Loc, diag::err_use_of_empty_using_if_exists);"}}, | |||
[k]={ | |||
["clang/test/SemaCXX/using-if-exists.cpp"]={"clang/test/SemaCXX/using-if-exists.cpp:9:1: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:34:9: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:39:1: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:73:9: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:75:13: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:78:17: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:81:17: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:96:3: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:109:3: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:138:3: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:138:3: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:138:3: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:169:6: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:178:11: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:222:15: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:223:8: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:92:5: error: reference to unresolved using declaration","clang/test/SemaCXX/using-if-exists.cpp:93:5: error: reference to unresolved using declaration"} | |||
} | |||
}, | }, | ||
["err_use_of_tag_name_without_tag"]={ | ["err_use_of_tag_name_without_tag"]={ | ||
[ | [c]="must use \'A\' tag to refer to type B...", | ||
[d]=s, | |||
[f]=t, | |||
[h]="must use \'%1\' tag to refer to type %0%select{| in this scope}2", | |||
[b]=u, | |||
[g]="must use \'(.*?)\' tag to refer to type (.*?)(?:| in this scope)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"ffaa0e6919b0",1239572970,"Diagnose invalid uses of tagged types with a missing tag. For example, in:"}, | [i]={"ffaa0e6919b0",1239572970,"Diagnose invalid uses of tagged types with a missing tag. For example, in:"}, | ||
[j]={{ | [j]={{H,2823,"/// ParseImplicitInt - This method is called when we have an non-typename\n/// identifier in a declspec (which normally terminates the decl spec) when\n/// the declspec has no type specifier. In this case, the declspec is either\n/// malformed or is \"implicit int\" (in K&R and C89).\n///\n/// This method handles diagnosing this prettily and returns false if the\n/// declspec is done being processed. If it recovers and thinks there may be\n/// other pieces of declspec after it, it returns true.\n///\nbool Parser::ParseImplicitInt(DeclSpec &DS, CXXScopeSpec *SS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC, ParsedAttributes &Attrs) {\n // Otherwise, if we don\'t consume this token, we are going to emit an\n // error anyway. Try to recover from various common problems. Check\n // to see if this was a reference to a tag name without a tag specified.\n // This is a common problem in C (saying \'foo\' instead of \'struct foo\').\n //\n // C++ doesn\'t need this, and isTagName doesn\'t take SS.\n if (SS == nullptr) {\n if (TagName) {\n Diag(Loc, diag::err_use_of_tag_name_without_tag) << TokenName << TagName << getLangOpts().CPlusPlus << FixItHint::CreateInsertion(Tok.getLocation(), FixitTagName);"},{x,883,"static bool isTagTypeWithMissingTag(Sema &SemaRef, LookupResult &Result, Scope *S, CXXScopeSpec &SS, IdentifierInfo *&Name, SourceLocation NameLoc) {\n if (TagDecl *Tag = R.getAsSingle<TagDecl>()) {\n SemaRef.Diag(NameLoc, diag::err_use_of_tag_name_without_tag) << Name << TagName << SemaRef.getLangOpts().CPlusPlus << FixItHint::CreateInsertion(NameLoc, FixItTagName);"}}, | ||
[k]={ | |||
[Tb]={"clang/test/Parser/declarators.c:54:1: error: must use \'struct\' tag to refer to type \'xyz\'","clang/test/Parser/declarators.c:55:1: error: must use \'enum\' tag to refer to type \'myenum\'"} | |||
} | |||
}, | }, | ||
["err_use_of_unaddressable_function"]={ | ["err_use_of_unaddressable_function"]={ | ||
[c]="taking address of non-addressable standard library function", | [c]="taking address of non-addressable standard library function", | ||
[d]=s, | [d]=s, | ||
[f]="taking address of non\\-addressable standard library function", | [f]=t, | ||
[ | [h]="taking address of non-addressable standard library function", | ||
[ | [b]=u, | ||
[g]="taking address of non\\-addressable standard library function", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | [i]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | ||
[j]={{ | [j]={{z,21597,"/// 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 case BuiltinType::BuiltinFn: {\n if (DRE) {\n if (Context.BuiltinInfo.isInStdNamespace(BuiltinID)) {\n Diag(E->getBeginLoc(), getLangOpts().CPlusPlus20 ? diag::err_use_of_unaddressable_function : diag::warn_cxx20_compat_use_of_unaddressable_function);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/builtin-std-move.cpp"]={"clang/test/SemaCXX/builtin-std-move.cpp:119:20: error: taking address of non-addressable standard library function","clang/test/SemaCXX/builtin-std-move.cpp:120:31: error: taking address of non-addressable standard library function","clang/test/SemaCXX/builtin-std-move.cpp:121:24: error: taking address of non-addressable standard library function","clang/test/SemaCXX/builtin-std-move.cpp:122:28: error: taking address of non-addressable standard library function","clang/test/SemaCXX/builtin-std-move.cpp:123:29: error: taking address of non-addressable standard library function","clang/test/SemaCXX/builtin-std-move.cpp:124:25: error: taking address of non-addressable standard library function","clang/test/SemaCXX/builtin-std-move.cpp:125:35: error: taking address of non-addressable standard library function","clang/test/SemaCXX/builtin-std-move.cpp:129:20: error: taking address of non-addressable standard library function","clang/test/SemaCXX/builtin-std-move.cpp:130:23: error: taking address of non-addressable standard library function"} | |||
} | |||
}, | }, | ||
["err_use_with_wrong_tag"]={ | ["err_use_with_wrong_tag"]={ | ||
[ | [c]="use of A with tag type that does not match previous declaration", | ||
[d]=s, | |||
[f]=t, | |||
[h]="use of %0 with tag type that does not match previous declaration", | |||
[b]=u, | |||
[g]="use of (.*?) with tag type that does not match previous declaration", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[ | [i]={I,1237025389,J}, | ||
[ | [j]={{x,17241,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n if (!Previous.empty()) {\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n // If this is a use of a previous tag, or if the tag is already declared\n // in the same scope (so that the definition/declaration completes or\n // rementions the tag), reuse the decl.\n if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n // Make sure that this wasn\'t declared as an enum and now used as a\n // struct or something similar.\n if (!isAcceptableTagRedeclaration(PrevTagDecl, Kind, TUK == TUK_Definition, KWLoc, Name)) {\n if (SafeToContinue)\n Diag(KWLoc, diag::err_use_with_wrong_tag) << Name << FixItHint::CreateReplacement(SourceRange(KWLoc), PrevTagDecl->getKindName());"},{x,17246,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n if (!Previous.empty()) {\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n // If this is a use of a previous tag, or if the tag is already declared\n // in the same scope (so that the definition/declaration completes or\n // rementions the tag), reuse the decl.\n if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n // Make sure that this wasn\'t declared as an enum and now used as a\n // struct or something similar.\n if (!isAcceptableTagRedeclaration(PrevTagDecl, Kind, TUK == TUK_Definition, KWLoc, Name)) {\n if (SafeToContinue)\n else\n Diag(KWLoc, diag::err_use_with_wrong_tag) << Name;"},{F,2006,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n if (PrevClassTemplate) {\n if (!isAcceptableTagRedeclaration(PrevRecordDecl, Kind, TUK == TUK_Definition, KWLoc, Name)) {\n Diag(KWLoc, diag::err_use_with_wrong_tag) << Name << FixItHint::CreateReplacement(KWLoc, PrevRecordDecl->getKindName());"},{F,4302,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n // Check the tag kind\n if (const RecordType *RT = Result->getAs<RecordType>()) {\n if (!isAcceptableTagRedeclaration(D, TagKind, TUK == TUK_Definition, TagLoc, Id)) {\n Diag(TagLoc, diag::err_use_with_wrong_tag) << Result << FixItHint::CreateReplacement(SourceRange(TagLoc), D->getKindName());"},{F,8714,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), Kind, TUK == TUK_Definition, KWLoc, ClassTemplate->getIdentifier())) {\n Diag(KWLoc, diag::err_use_with_wrong_tag) << ClassTemplate << FixItHint::CreateReplacement(KWLoc, ClassTemplate->getTemplatedDecl()->getKindName());"},{F,9971,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), Kind, /*isDefinition*/ false, KWLoc, ClassTemplate->getIdentifier())) {\n Diag(KWLoc, diag::err_use_with_wrong_tag) << ClassTemplate << FixItHint::CreateReplacement(KWLoc, ClassTemplate->getTemplatedDecl()->getKindName());"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",1683,"QualType TemplateInstantiator::RebuildElaboratedType(SourceLocation KeywordLoc, ElaboratedTypeKeyword Keyword, NestedNameSpecifierLoc QualifierLoc, QualType T) {\n if (const TagType *TT = T->getAs<TagType>()) {\n // TODO: should we even warn on struct/class mismatches for this? Seems\n // like it\'s likely to produce a lot of spurious errors.\n if (Id && Keyword != ETK_None && Keyword != ETK_Typename) {\n if (!SemaRef.isAcceptableTagRedeclaration(TD, Kind, /*isDefinition*/ false, TagLocation, Id)) {\n SemaRef.Diag(TagLocation, diag::err_use_with_wrong_tag) << Id << FixItHint::CreateReplacement(SourceRange(TagLocation), TD->getKindName());"}}, | ||
[k]={ | |||
["clang/test/CXX/basic/basic.lookup/basic.lookup.elab/templateid.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.elab/templateid.cpp:18:1: error: use of \'Ident<int>\' with tag type that does not match previous declaration"} | |||
} | |||
}, | }, | ||
["err_using_attribute_ns_conflict"]={ | ["err_using_attribute_ns_conflict"]={ | ||
[c]="attribute with scope specifier cannot follow default scope specifier", | [c]="attribute with scope specifier cannot follow default scope specifier", | ||
[d]=s, | [d]=s, | ||
[f]="attribute with scope specifier cannot follow default scope specifier", | [f]=t, | ||
[g]= | [h]="attribute with scope specifier cannot follow default scope specifier", | ||
[ | [b]=u, | ||
[g]="attribute with scope specifier cannot follow default scope specifier", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"b7d7a046d8e0",1466770512,"Using for attributes voted into C++17."}, | [i]={"b7d7a046d8e0",1466770512,"Using for attributes voted into C++17."}, | ||
[j]={{ | [j]={{M,4594,"/// 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 while (!Tok.isOneOf(tok::r_square, tok::semi, tok::eof)) {\n if (CommonScopeName) {\n if (ScopeName) {\n Diag(ScopeLoc, diag::err_using_attribute_ns_conflict) << SourceRange(CommonScopeLoc);"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p2-1z.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p2-1z.cpp:13:15: error: attribute with scope specifier cannot follow default scope specifier"} | |||
} | |||
}, | }, | ||
["err_using_decl_can_not_refer_to_class_member"]={ | ["err_using_decl_can_not_refer_to_class_member"]={ | ||
[c]="using declaration cannot refer to class member", | [c]="using declaration cannot refer to class member", | ||
[d]=s, | [d]=s, | ||
[f]="using declaration cannot refer to class member", | [f]=t, | ||
[g]= | [h]="using declaration cannot refer to class member", | ||
[ | [b]=u, | ||
[g]="using declaration cannot refer to class member", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"5a9c5acf0f49",1251430518,"More work on using declarations."}, | [i]={"5a9c5acf0f49",1251430518,"More work on using declarations."}, | ||
[j]={{ | [j]={{A,13057,"/// 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 if (!CurContext->isRecord()) {\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();"}}, | ||
[k]={ | |||
["clang/test/CXX/special/class.inhctor/elsewhere.cpp"]={"clang/test/CXX/special/class.inhctor/elsewhere.cpp:12:11: error: using declaration cannot refer to class member"} | |||
} | |||
}, | }, | ||
["err_using_decl_can_not_refer_to_namespace"]={ | ["err_using_decl_can_not_refer_to_namespace"]={ | ||
[c]="using declaration cannot refer to a namespace", | [c]="using declaration cannot refer to a namespace", | ||
[d]=s, | [d]=s, | ||
[f]="using declaration cannot refer to a namespace", | [f]=t, | ||
[g]= | [h]="using declaration cannot refer to a namespace", | ||
[ | [b]=u, | ||
[g]="using declaration cannot refer to a namespace", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"5a9c5acf0f49",1251430518,"More work on using declarations."}, | [i]={"5a9c5acf0f49",1251430518,"More work on using declarations."}, | ||
[j]={{ | [j]={{A,12795,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n/// instantiation of an unresolved using declaration. We treat\n/// the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n // C++14 [namespace.udecl]p6:\n // A using-declaration shall not name a namespace.\n if (R.getAsSingle<NamespaceDecl>()) {\n Diag(IdentLoc, diag::err_using_decl_can_not_refer_to_namespace) << SS.getRange();"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p6-cxx11.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p6-cxx11.cpp:7:10: error: using declaration cannot refer to a namespace"} | |||
} | |||
}, | }, | ||
["err_using_decl_conflict"]={ | ["err_using_decl_conflict"]={ | ||
[c]="target of using declaration conflicts with declaration already in scope", | [c]="target of using declaration conflicts with declaration already in scope", | ||
[d]=s, | [d]=s, | ||
[f]="target of using declaration conflicts with declaration already in scope", | [f]=t, | ||
[g]= | [h]="target of using declaration conflicts with declaration already in scope", | ||
[ | [b]=u, | ||
[g]="target of using declaration conflicts with declaration already in scope", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"84d8767c1582",1260438112,"Implement redeclaration checking and hiding semantics for using declarations. There"}, | [i]={"84d8767c1582",1260438112,"Implement redeclaration checking and hiding semantics for using declarations. There"}, | ||
[j]={{ | [j]={{A,12276,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n // Always emit a diagnostic for a mismatch between an unresolved\n // using_if_exists and a resolved using declaration in either direction.\n if (isa<UnresolvedUsingIfExistsDecl>(Target) != (isa_and_nonnull<UnresolvedUsingIfExistsDecl>(NonTag))) {\n Diag(BUD->getLocation(), diag::err_using_decl_conflict);"},{A,12292,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n if (FunctionDecl *FD = Target->getAsFunction()) {\n case Ovl_NonFunction:\n Diag(BUD->getLocation(), diag::err_using_decl_conflict);"},{A,12304,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n if (FunctionDecl *FD = Target->getAsFunction()) {\n // We found a decl with the exact signature.\n case Ovl_Match:\n Diag(BUD->getLocation(), diag::err_using_decl_conflict);"},{A,12320,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n if (isa<TagDecl>(Target)) {\n Diag(BUD->getLocation(), diag::err_using_decl_conflict);"},{A,12330,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n Diag(BUD->getLocation(), diag::err_using_decl_conflict);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx1z-using-declaration.cpp"]={"clang/test/Parser/cxx1z-using-declaration.cpp:25:12: error: target of using declaration conflicts with declaration already in scope","clang/test/Parser/cxx1z-using-declaration.cpp:33:12: error: target of using declaration conflicts with declaration already in scope"} | |||
} | |||
}, | }, | ||
["err_using_decl_conflict_reverse"]={ | ["err_using_decl_conflict_reverse"]={ | ||
[c]="declaration conflicts with target of using declaration already in scope", | [c]="declaration conflicts with target of using declaration already in scope", | ||
[d]=s, | [d]=s, | ||
[f]="declaration conflicts with target of using declaration already in scope", | [f]=t, | ||
[g]= | [h]="declaration conflicts with target of using declaration already in scope", | ||
[ | [b]=u, | ||
[g]="declaration conflicts with target of using declaration already in scope", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"e29c5cd2398c",1260474663,"Improve the diagnostic when a new declaration conflicts with a using shadow"}, | [i]={"e29c5cd2398c",1260474663,"Improve the diagnostic when a new declaration conflicts with a using shadow"}, | ||
[j]={{ | [j]={{x,3554,"/// Check whether a redeclaration of an entity introduced by a\n/// using-declaration is valid, given that we know it\'s not an overload\n/// (nor a hidden tag declaration).\ntemplate <typename ExpectedDecl> static bool checkUsingShadowRedecl(Sema &S, UsingShadowDecl *OldS, ExpectedDecl *New) {\n if (!Old) {\n S.Diag(New->getLocation(), diag::err_using_decl_conflict_reverse);"},{x,17214,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n if (!Previous.empty()) {\n // If this is a redeclaration of a using shadow declaration, it must\n // declare a tag in the same context. In MSVC mode, we allow a\n // redefinition if either context is within the other.\n if (auto *Shadow = dyn_cast<UsingShadowDecl>(DirectPrevDecl)) {\n if (SS.isEmpty() && TUK != TUK_Reference && TUK != TUK_Friend && isDeclInScope(Shadow, SearchDC, S, isMemberSpecialization) && !(OldTag && isAcceptableTagRedeclContext(*this, OldTag->getDeclContext(), SearchDC))) {\n Diag(KWLoc, diag::err_using_decl_conflict_reverse);"},{F,1978,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n if (auto *Shadow = dyn_cast_or_null<UsingShadowDecl>(PrevDecl ? Previous.getRepresentativeDecl() : nullptr)) {\n if (SS.isEmpty() && !(PrevClassTemplate && PrevClassTemplate->getDeclContext()->getRedeclContext()->Equals(SemanticContext->getRedeclContext()))) {\n Diag(KWLoc, diag::err_using_decl_conflict_reverse);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/lookup-member.cpp"]={"clang/test/SemaCXX/lookup-member.cpp:8:1: error: declaration conflicts with target of using declaration already in scope"} | |||
} | |||
}, | }, | ||
["err_using_decl_constructor"]={ | ["err_using_decl_constructor"]={ | ||
[c]="using declaration cannot refer to a constructor", | [c]="using declaration cannot refer to a constructor", | ||
[d]=s, | [d]=s, | ||
[f]="using declaration cannot refer to a constructor", | [f]=t, | ||
[g]= | [h]="using declaration cannot refer to a constructor", | ||
[ | [b]=u, | ||
[g]="using declaration cannot refer to a constructor", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"220f4277bd2a",1257352206,"Switch parsing of using declarations over to ParseUnqualifiedId."}, | [i]={"220f4277bd2a",1257352206,"Switch parsing of using declarations over to ParseUnqualifiedId."}, | ||
[j]={{ | [j]={{A,12040,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n case UnqualifiedIdKind::IK_ConstructorTemplateId:\n Diag(Name.getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_using_decl_constructor : diag::err_using_decl_constructor) << SS.getRange();"}} | ||
}, | }, | ||
["err_using_decl_constructor_not_in_direct_base"]={ | ["err_using_decl_constructor_not_in_direct_base"]={ | ||
[ | [c]="A is not a direct base of B, cannot inherit constructors", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%0 is not a direct base of %1, cannot inherit constructors", | |||
[b]=u, | |||
[g]="(.*?) is not a direct base of (.*?), cannot inherit constructors", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"0890502f44a1",1296933799,"Basic implementation of inherited constructors. Only generates declarations, and probably only works..."}, | [i]={"0890502f44a1",1296933799,"Basic implementation of inherited constructors. Only generates declarations, and probably only works..."}, | ||
[j]={{ | [j]={{A,12905,"/// Additional checks for a using declaration referring to a constructor name.\nbool Sema::CheckInheritingConstructorUsingDecl(UsingDecl *UD) {\n if (!Base && !AnyDependentBases) {\n Diag(UD->getUsingLoc(), diag::err_using_decl_constructor_not_in_direct_base) << UD->getNameInfo().getSourceRange() << QualType(SourceType, 0) << TargetClass;"}}, | ||
[k]={ | |||
["clang/test/CXX/special/class.inhctor/elsewhere.cpp"]={"clang/test/CXX/special/class.inhctor/elsewhere.cpp:30:3: error: \'B1\' is not a direct base of \'D1\', cannot inherit constructors","clang/test/CXX/special/class.inhctor/elsewhere.cpp:50:3: error: \'A<bool>\' is not a direct base of \'E<bool>\', cannot inherit constructors","clang/test/CXX/special/class.inhctor/elsewhere.cpp:55:3: error: \'A<bool>\' is not a direct base of \'F<bool>\', cannot inherit constructors"} | |||
} | |||
}, | }, | ||
["err_using_decl_destructor"]={ | ["err_using_decl_destructor"]={ | ||
[c]="using declaration cannot refer to a destructor", | [c]="using declaration cannot refer to a destructor", | ||
[d]=s, | [d]=s, | ||
[f]="using declaration cannot refer to a destructor", | [f]=t, | ||
[g]= | [h]="using declaration cannot refer to a destructor", | ||
[ | [b]=u, | ||
[g]="using declaration cannot refer to a destructor", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"220f4277bd2a",1257352206,"Switch parsing of using declarations over to ParseUnqualifiedId."}, | [i]={"220f4277bd2a",1257352206,"Switch parsing of using declarations over to ParseUnqualifiedId."}, | ||
[j]={{ | [j]={{A,12048,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n case UnqualifiedIdKind::IK_DestructorName:\n Diag(Name.getBeginLoc(), diag::err_using_decl_destructor) << SS.getRange();"}} | ||
}, | }, | ||
["err_using_decl_friend"]={ | ["err_using_decl_friend"]={ | ||
[c]="cannot befriend target of using declaration", | [c]="cannot befriend target of using declaration", | ||
[d]=s, | [d]=s, | ||
[f]="cannot befriend target of using declaration", | [f]=t, | ||
[g]= | [h]="cannot befriend target of using declaration", | ||
[ | [b]=u, | ||
[g]="cannot befriend target of using declaration", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"c70fca60dab4",1365023987,"Complain about attempts to befriend declarations via a using"}, | [i]={"c70fca60dab4",1365023987,"Complain about attempts to befriend declarations via a using"}, | ||
[j]={{ | [j]={{x,3638,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n if (!Old) {\n if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n if (New->getFriendObjectKind()) {\n Diag(New->getLocation(), diag::err_using_decl_friend);"}}, | ||
[k]={ | |||
["clang/test/CXX/special/class.inhctor/p3.cpp"]={"clang/test/CXX/special/class.inhctor/p3.cpp:48:19: error: cannot befriend target of using declaration","clang/test/CXX/special/class.inhctor/p3.cpp:49:19: error: cannot befriend target of using declaration","clang/test/CXX/special/class.inhctor/p3.cpp:50:19: error: cannot befriend target of using declaration","clang/test/CXX/special/class.inhctor/p3.cpp:51:19: error: cannot befriend target of using declaration","clang/test/CXX/special/class.inhctor/p3.cpp:52:19: error: cannot befriend target of using declaration","clang/test/CXX/special/class.inhctor/p3.cpp:53:19: error: cannot befriend target of using declaration"} | |||
} | |||
}, | }, | ||
["err_using_decl_nested_name_specifier_is_current_class"]={ | ["err_using_decl_nested_name_specifier_is_current_class"]={ | ||
[c]="using declaration refers to its own class", | [c]="using declaration refers to its own class", | ||
[d]=s, | [d]=s, | ||
[f]="using declaration refers to its own class", | [f]=t, | ||
[g]= | [h]="using declaration refers to its own class", | ||
[ | [b]=u, | ||
[g]="using declaration refers to its own class", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"3969e30d3831",1260258378,"Correctly implement the C++03 and 0x restrictions on class-member using"}, | [i]={"3969e30d3831",1260258378,"Correctly implement the C++03 and 0x restrictions on class-member using"}, | ||
[j]={{ | [j]={{A,12201,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n // Diagnose finding a decl which is not from a base class of the\n // current class. We do this now because there are cases where this\n // function will silently decide not to build a shadow decl, which\n // will pre-empt further diagnostics.\n //\n // We don\'t need to do this in C++11 because we do the check once on\n // the qualifier.\n //\n // FIXME: diagnose the following if we care enough:\n // struct A { int foo; };\n // struct B : A { using A::foo; };\n // template <class T> struct C : A {};\n // template <class T> struct D : C<T> { using B::foo; } // <---\n // This is invalid (during instantiation) in C++03 because B::foo\n // resolves to the using decl in B, which is not a base class of D<T>.\n // We can\'t diagnose it immediately because C<T> is an unknown\n // specialization. The UsingShadowDecl in D<T> then points directly\n // to A::foo, which will look well-formed when we instantiate.\n // The right solution is to not collapse the shadow-decl chain.\n if (!getLangOpts().CPlusPlus11 && CurContext->isRecord())\n if (auto *Using = dyn_cast<UsingDecl>(BUD)) {\n if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {\n if (OrigDC == CurContext) {\n Diag(Using->getLocation(), diag::err_using_decl_nested_name_specifier_is_current_class) << Using->getQualifierLoc().getSourceRange();"},{A,13171,"/// 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 if (getLangOpts().CPlusPlus11) {\n if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(cast<CXXRecordDecl>(NamedContext))) {\n if (CurContext == NamedContext) {\n Diag(SS.getBeginLoc(), diag::err_using_decl_nested_name_specifier_is_current_class) << SS.getRange();"}}, | ||
[k]={ | |||
["clang/test/CXX/class.access/class.access.dcl/p1.cpp"]={"clang/test/CXX/class.access/class.access.dcl/p1.cpp:321:5: error: using declaration refers to its own class","clang/test/CXX/class.access/class.access.dcl/p1.cpp:341:5: error: using declaration refers to its own class"} | |||
} | |||
}, | }, | ||
["err_using_decl_nested_name_specifier_is_not_base_class"]={ | ["err_using_decl_nested_name_specifier_is_not_base_class"]={ | ||
[ | [c]="using declaration refers into \'A\', which is not a base class of B", | ||
[d]=s, | |||
[f]=t, | |||
[h]="using declaration refers into \'%0\', which is not a base class of %1", | |||
[b]=u, | |||
[g]="using declaration refers into \'(.*?)\', which is not a base class of (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"3969e30d3831",1260258378,"Correctly implement the C++03 and 0x restrictions on class-member using"}, | [i]={"3969e30d3831",1260258378,"Correctly implement the C++03 and 0x restrictions on class-member using"}, | ||
[j]={{ | [j]={{A,12209,"/// Determines whether to create a using shadow decl for a particular\n/// decl, given the set of decls existing prior to this using lookup.\nbool Sema::CheckUsingShadowDecl(BaseUsingDecl *BUD, NamedDecl *Orig, const LookupResult &Previous, UsingShadowDecl *&PrevShadow) {\n // Diagnose finding a decl which is not from a base class of the\n // current class. We do this now because there are cases where this\n // function will silently decide not to build a shadow decl, which\n // will pre-empt further diagnostics.\n //\n // We don\'t need to do this in C++11 because we do the check once on\n // the qualifier.\n //\n // FIXME: diagnose the following if we care enough:\n // struct A { int foo; };\n // struct B : A { using A::foo; };\n // template <class T> struct C : A {};\n // template <class T> struct D : C<T> { using B::foo; } // <---\n // This is invalid (during instantiation) in C++03 because B::foo\n // resolves to the using decl in B, which is not a base class of D<T>.\n // We can\'t diagnose it immediately because C<T> is an unknown\n // specialization. The UsingShadowDecl in D<T> then points directly\n // to A::foo, which will look well-formed when we instantiate.\n // The right solution is to not collapse the shadow-decl chain.\n if (!getLangOpts().CPlusPlus11 && CurContext->isRecord())\n if (auto *Using = dyn_cast<UsingDecl>(BUD)) {\n if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {\n Diag(Using->getQualifierLoc().getBeginLoc(), diag::err_using_decl_nested_name_specifier_is_not_base_class) << Using->getQualifier() << cast<CXXRecordDecl>(CurContext) << Using->getQualifierLoc().getSourceRange();"},{A,13178,"/// 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 if (getLangOpts().CPlusPlus11) {\n if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(cast<CXXRecordDecl>(NamedContext))) {\n if (!cast<CXXRecordDecl>(NamedContext)->isInvalidDecl()) {\n Diag(SS.getBeginLoc(), diag::err_using_decl_nested_name_specifier_is_not_base_class) << SS.getScopeRep() << cast<CXXRecordDecl>(CurContext) << SS.getRange();"},{A,13224,"/// 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 Diag(SS.getRange().getBegin(), diag::err_using_decl_nested_name_specifier_is_not_base_class) << SS.getScopeRep() << cast<CXXRecordDecl>(CurContext) << SS.getRange();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/using-decl-templates.cpp"]={"clang/test/SemaCXX/using-decl-templates.cpp:13:9: error: using declaration refers into \'A<double>::\', which is not a base class of \'B<int>\'"} | |||
} | |||
}, | }, | ||
["err_using_decl_nested_name_specifier_is_not_class"]={ | ["err_using_decl_nested_name_specifier_is_not_class"]={ | ||
[ | [c]="using declaration in class refers into \'A\', which is not a class", | ||
[d]=s, | |||
[f]=t, | |||
[h]="using declaration in class refers into \'%0\', which is not a class", | |||
[b]=u, | |||
[g]="using declaration in class refers into \'(.*?)\', which is not a class", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"3969e30d3831",1260258378,"Correctly implement the C++03 and 0x restrictions on class-member using"}, | [i]={"3969e30d3831",1260258378,"Correctly implement the C++03 and 0x restrictions on class-member using"}, | ||
[j]={{ | [j]={{A,13141,"/// 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 // The current scope is a record.\n if (!NamedContext->isRecord()) {\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();"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:81:9: error: using declaration in class refers into \'Three::\', which is not a class"} | |||
} | |||
}, | }, | ||
["err_using_decl_redeclaration"]={ | ["err_using_decl_redeclaration"]={ | ||
[c]="redeclaration of using declaration", | [c]="redeclaration of using declaration", | ||
[d]=s, | [d]=s, | ||
[f]="redeclaration of using declaration", | [f]=t, | ||
[g]= | [h]="redeclaration of using declaration", | ||
[ | [b]=u, | ||
[g]="redeclaration of using declaration", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"84d8767c1582",1260438112,"Implement redeclaration checking and hiding semantics for using declarations. There"}, | [i]={"84d8767c1582",1260438112,"Implement redeclaration checking and hiding semantics for using declarations. There"}, | ||
[j]={{ | [j]={{A,12988,"/// Checks that the given using declaration is not an invalid\n/// redeclaration. Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {\n Diag(NameLoc, diag::err_using_decl_redeclaration) << SS.getRange();"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx1z-using-declaration.cpp"]={"clang/test/Parser/cxx1z-using-declaration.cpp:23:12: error: redeclaration of using declaration"} | |||
} | |||
}, | }, | ||
["err_using_decl_redeclaration_expansion"]={ | ["err_using_decl_redeclaration_expansion"]={ | ||
[c]="using declaration pack expansion at block scope produces multiple values", | [c]="using declaration pack expansion at block scope produces multiple values", | ||
[d]=s, | [d]=s, | ||
[f]="using declaration pack expansion at block scope produces multiple values", | [f]=t, | ||
[g]= | [h]="using declaration pack expansion at block scope produces multiple values", | ||
[ | [b]=u, | ||
[g]="using declaration pack expansion at block scope produces multiple values", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"22a250cd5d8e",1482120533,"[c++1z] P0195R2: Support pack-expansion of using-declarations."}, | [i]={"22a250cd5d8e",1482120533,"[c++1z] P0195R2: Support pack-expansion of using-declarations."}, | ||
[j]={{ | [j]={{Jc,3412,"template <typename T> Decl *TemplateDeclInstantiator::instantiateUnresolvedUsingDecl(T *D, bool InstantiatingPackElement) {\n // If this is a pack expansion, expand it now.\n if (D->isPackExpansion() && !InstantiatingPackElement) {\n // Within a function, we don\'t have any normal way to check for conflicts\n // between shadow declarations from different using declarations in the\n // same pack expansion, but this is always ill-formed because all expansions\n // must produce (conflicting) enumerators.\n //\n // Sadly we can\'t just reject this in the template definition because it\n // could be valid if the pack is empty or has exactly one expansion.\n if (D->getDeclContext()->isFunctionOrMethod() && *NumExpansions > 1) {\n SemaRef.Diag(D->getEllipsisLoc(), diag::err_using_decl_redeclaration_expansion);"}}, | ||
[k]={ | |||
["clang/test/SemaTemplate/cxx1z-using-declaration.cpp"]={"clang/test/SemaTemplate/cxx1z-using-declaration.cpp:130:14: error: using declaration pack expansion at block scope produces multiple values","clang/test/SemaTemplate/cxx1z-using-declaration.cpp:130:14: error: using declaration pack expansion at block scope produces multiple values"} | |||
} | |||
}, | }, | ||
["err_using_decl_template_id"]={ | ["err_using_decl_template_id"]={ | ||
[c]="using declaration cannot refer to a template specialization", | [c]="using declaration cannot refer to a template specialization", | ||
[d]=s, | [d]=s, | ||
[f]="using declaration cannot refer to a template specialization", | [f]=t, | ||
[g]= | [h]="using declaration cannot refer to a template specialization", | ||
[ | [b]=u, | ||
[g]="using declaration cannot refer to a template specialization", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"220f4277bd2a",1257352206,"Switch parsing of using declarations over to ParseUnqualifiedId."}, | [i]={"220f4277bd2a",1257352206,"Switch parsing of using declarations over to ParseUnqualifiedId."}, | ||
[j]={{ | [j]={{A,12052,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n case UnqualifiedIdKind::IK_TemplateId:\n Diag(Name.getBeginLoc(), diag::err_using_decl_template_id) << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx-using-declaration.cpp"]={"clang/test/Parser/cxx-using-declaration.cpp:36:10: error: using declaration cannot refer to a template specialization"} | |||
} | |||
}, | }, | ||
["err_using_dependent_value_is_type"]={ | ["err_using_dependent_value_is_type"]={ | ||
[c]="dependent using declaration resolved to type without \'typename\'", | [c]="dependent using declaration resolved to type without \'typename\'", | ||
[d]=s, | [d]=s, | ||
[f]="dependent using declaration resolved to type without \'typename\'", | [f]=t, | ||
[g]= | [h]="dependent using declaration resolved to type without \'typename\'", | ||
[ | [b]=u, | ||
[g]="dependent using declaration resolved to type without \'typename\'", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"e61f2ba7e44a",1258511779,"Incremental progress on using declarations. Split UnresolvedUsingDecl into"}, | [i]={"e61f2ba7e44a",1258511779,"Incremental progress on using declarations. Split UnresolvedUsingDecl into"}, | ||
[j]={{ | [j]={{A,12786,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n/// instantiation of an unresolved using declaration. We treat\n/// the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n if (HasTypenameKeyword) {\n } else {\n // If we asked for a non-typename and we got a type, error out,\n // but only if this is an instantiation of an unresolved using\n // decl. Otherwise just silently find the type name.\n if (IsInstantiation && R.getAsSingle<TypeDecl>()) {\n Diag(IdentLoc, diag::err_using_dependent_value_is_type);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/using-decl-templates.cpp"]={"clang/test/SemaCXX/using-decl-templates.cpp:10:15: error: dependent using declaration resolved to type without \'typename\'"} | |||
} | |||
}, | }, | ||
["err_using_directive_member_suggest"]={ | ["err_using_directive_member_suggest"]={ | ||
[ | [c]="no namespace named A in B; did you mean ...C?", | ||
[d]=s, | |||
[f]=t, | |||
[h]="no namespace named %0 in %1; did you mean %select{|simply }2%3?", | |||
[b]=u, | |||
[g]="no namespace named (.*?) in (.*?); did you mean (?:|simply )(.*?)\\?", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"cdf87024edb7",1277834026,"Allow a using directive to refer to the implicitly-defined namespace"}, | [i]={"cdf87024edb7",1277834026,"Allow a using directive to refer to the implicitly-defined namespace"}, | ||
[j]={{ | [j]={{A,11903,"static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), Sc, &SS, CCC, Sema::CTK_ErrorRecovery)) {\n if (DeclContext *DC = S.computeDeclContext(SS, false)) {\n S.diagnoseTypo(Corrected, S.PDiag(diag::err_using_directive_member_suggest) << Ident << DC << DroppedSpecifier << SS.getRange(), S.PDiag(diag::note_namespace_defined_here));"},{"clang/unittests/Sema/ExternalSemaSourceTest.cpp",60,"/// Counts the number of typo-correcting diagnostics correcting from one name to\n/// another while still passing all diagnostics along a chain of consumers.\nclass DiagnosticWatcher : public clang::DiagnosticConsumer {\n void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) override {\n if (Info.getID() - 1 == diag::err_using_directive_member_suggest) {"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx-using-directive.cpp"]={"clang/test/Parser/cxx-using-directive.cpp:23:19: error: no namespace named \'A\' in namespace \'D::B\'; did you mean \'::B::A\'?","clang/test/Parser/cxx-using-directive.cpp:26:19: error: no namespace named \'C\' in namespace \'D\'; did you mean simply \'C\'?","clang/test/Parser/cxx-using-directive.cpp:31:17: error: no namespace named \'A\' in the global namespace; did you mean \'B::A\'?"} | |||
} | |||
}, | }, | ||
["err_using_directive_suggest"]={ | ["err_using_directive_suggest"]={ | ||
[ | [c]="no namespace named A; did you mean B?", | ||
[d]=s, | |||
[f]=t, | |||
[h]="no namespace named %0; did you mean %1?", | |||
[b]=u, | |||
[g]="no namespace named (.*?); did you mean (.*?)\\?", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"cdf87024edb7",1277834026,"Allow a using directive to refer to the implicitly-defined namespace"}, | [i]={"cdf87024edb7",1277834026,"Allow a using directive to refer to the implicitly-defined namespace"}, | ||
[j]={{ | [j]={{A,11908,"static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), Sc, &SS, CCC, Sema::CTK_ErrorRecovery)) {\n if (DeclContext *DC = S.computeDeclContext(SS, false)) {\n } else {\n S.diagnoseTypo(Corrected, S.PDiag(diag::err_using_directive_suggest) << Ident, S.PDiag(diag::note_namespace_defined_here));"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx-using-directive.cpp"]={"clang/test/Parser/cxx-using-directive.cpp:30:17: error: no namespace named \'A\'; did you mean \'B::A\'?"} | |||
} | |||
}, | }, | ||
["err_using_enum_decl_redeclaration"]={ | ["err_using_enum_decl_redeclaration"]={ | ||
[c]="redeclaration of using-enum declaration", | [c]="redeclaration of using-enum declaration", | ||
[d]=s, | [d]=s, | ||
[f]="redeclaration of using\\-enum declaration", | [f]=t, | ||
[ | [h]="redeclaration of using-enum declaration", | ||
[ | [b]=u, | ||
[i]={ | [g]="redeclaration of using\\-enum declaration", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={uc,1615397021,vc}, | |||
[j]={{A,12840,"NamedDecl *Sema::BuildUsingEnumDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation EnumLoc, SourceLocation NameLoc, TypeSourceInfo *EnumType, EnumDecl *ED) {\n if (CurContext->getRedeclContext()->isRecord()) {\n for (NamedDecl *D : Previous)\n if (UsingEnumDecl *UED = dyn_cast<UsingEnumDecl>(D))\n if (UED->getEnumDecl() == ED) {\n Diag(UsingLoc, diag::err_using_enum_decl_redeclaration) << SourceRange(EnumLoc, NameLoc);"}}, | |||
[k]={ | |||
["clang/test/SemaCXX/cxx20-using-enum.cpp"]={"clang/test/SemaCXX/cxx20-using-enum.cpp:230:3: error: redeclaration of using-enum declaration","clang/test/SemaCXX/cxx20-using-enum.cpp:236:3: error: redeclaration of using-enum declaration"} | |||
} | |||
}, | }, | ||
["err_using_enum_expect_identifier"]={ | ["err_using_enum_expect_identifier"]={ | ||
[ | [c]="using enum ...", | ||
[d]=s, | |||
[f]=t, | |||
[h]="using enum %select{requires an enum or typedef name|does not permit an elaborated enum specifier}0", | |||
[b]=u, | |||
[g]="using enum (?:requires an enum or typedef name|does not permit an elaborated enum specifier)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=y, | ||
[i]={"3d2080683f1d",1663177354,"[clang][DR2621] using enum NAME lookup fix"}, | [i]={"3d2080683f1d",1663177354,"[clang][DR2621] using enum NAME lookup fix"}, | ||
[j]={{ | [j]={{M,733,"/// 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 if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n if (!Tok.is(tok::identifier)) {\n Diag(Tok.getLocation(), diag::err_using_enum_expect_identifier) << Tok.is(tok::kw_enum);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx20-using-enum.cpp"]={"clang/test/Parser/cxx20-using-enum.cpp:7:17: error: using enum requires an enum or typedef name","clang/test/Parser/cxx20-using-enum.cpp:8:13: error: using enum requires an enum or typedef name","clang/test/Parser/cxx20-using-enum.cpp:9:14: error: using enum requires an enum or typedef name","clang/test/Parser/cxx20-using-enum.cpp:10:14: error: using enum does not permit an elaborated enum specifier"} | |||
} | |||
}, | }, | ||
["err_using_enum_is_dependent"]={ | ["err_using_enum_is_dependent"]={ | ||
[c]="using-enum cannot name a dependent type", | [c]="using-enum cannot name a dependent type", | ||
[d]=s, | [d]=s, | ||
[f]="using\\-enum cannot name a dependent type", | [f]=t, | ||
[ | [h]="using-enum cannot name a dependent type", | ||
[ | [b]=u, | ||
[i]={ | [g]="using\\-enum cannot name a dependent type", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={uc,1615397021,vc}, | |||
[j]={{A,12112,"Decl *Sema::ActOnUsingEnumDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation EnumLoc, SourceLocation IdentLoc, IdentifierInfo &II, CXXScopeSpec *SS) {\n if (EnumTy.isNull()) {\n Diag(IdentLoc, SS && isDependentScopeSpecifier(*SS) ? diag::err_using_enum_is_dependent : diag::err_unknown_typename) << II.getName() << SourceRange(SS ? SS->getBeginLoc() : IdentLoc, IdentLoc);"}}, | |||
[k]={ | |||
["clang/test/SemaCXX/cxx20-using-enum.cpp"]={"clang/test/SemaCXX/cxx20-using-enum.cpp:116:22: error: using-enum cannot name a dependent type"} | |||
} | |||
}, | }, | ||
["err_using_enum_not_enum"]={ | ["err_using_enum_not_enum"]={ | ||
[ | [c]="A is not an enumerated type", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%0 is not an enumerated type", | |||
[b]=u, | |||
[g]="(.*?) is not an enumerated type", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={O,1625925174,N}, | |||
[j]={{A,12121,"Decl *Sema::ActOnUsingEnumDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation EnumLoc, SourceLocation IdentLoc, IdentifierInfo &II, CXXScopeSpec *SS) {\n if (!Enum) {\n Diag(IdentLoc, diag::err_using_enum_not_enum) << EnumTy;"}}, | |||
[k]={ | |||
["clang/test/SemaCXX/cxx20-using-enum.cpp"]={"clang/test/SemaCXX/cxx20-using-enum.cpp:27:17: error: \'Bob::C\' is not an enumerated type"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_using_if_exists_on_ctor"]={ | ["err_using_if_exists_on_ctor"]={ | ||
[c]="\'using_if_exists\' attribute cannot be applied to an inheriting constructor", | [c]="\'using_if_exists\' attribute cannot be applied to an inheriting constructor", | ||
[d]=s, | [d]=s, | ||
[f]="\'using_if_exists\' attribute cannot be applied to an inheriting constructor", | [f]=t, | ||
[g]= | [h]="\'using_if_exists\' attribute cannot be applied to an inheriting constructor", | ||
[ | [b]=u, | ||
[i]={ | [g]="\'using_if_exists\' attribute cannot be applied to an inheriting constructor", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={uc,1615397021,vc}, | |||
[j]={{A,12625,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n/// instantiation of an unresolved using declaration. We treat\n/// the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n // \'using_if_exists\' doesn\'t make sense on an inherited constructor.\n if (IsUsingIfExists && UsingName.getName().getNameKind() == DeclarationName::CXXConstructorName) {\n Diag(UsingLoc, diag::err_using_if_exists_on_ctor);"}}, | |||
[k]={ | |||
["clang/test/SemaCXX/using-if-exists.cpp"]={"clang/test/SemaCXX/using-if-exists.cpp:66:3: error: \'using_if_exists\' attribute cannot be applied to an inheriting constructor"} | |||
} | |||
}, | }, | ||
["err_using_namespace_in_class"]={ | ["err_using_namespace_in_class"]={ | ||
[c]="\'using namespace\' is not allowed in classes", | [c]="\'using namespace\' is not allowed in classes", | ||
[d]=s, | [d]=s, | ||
[f]="\'using namespace\' is not allowed in classes", | [f]=t, | ||
[g]= | [h]="\'using namespace\' is not allowed in classes", | ||
[ | [b]=u, | ||
[g]="\'using namespace\' is not allowed in classes", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"fec52635f0d5",1245459114,"Parsing and AST support for using declarations, from John Thompson!"}, | [i]={"fec52635f0d5",1245459114,"Parsing and AST support for using declarations, from John Thompson!"}, | ||
[j]={{ | [j]={{M,2802,"/// 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 if (Tok.is(tok::kw_using)) {\n if (Tok.is(tok::kw_namespace)) {\n Diag(UsingLoc, diag::err_using_namespace_in_class);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/using-directive.cpp"]={"clang/test/SemaCXX/using-directive.cpp:63:3: error: \'using namespace\' is not allowed in classes"} | |||
} | |||
}, | }, | ||
["err_using_pack_expansion_empty"]={ | ["err_using_pack_expansion_empty"]={ | ||
[ | [c]="... using declaration A instantiates to an empty pack", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%select{|member}0 using declaration %1 instantiates to an empty pack", | |||
[b]=u, | |||
[g]="(?:|member) using declaration (.*?) instantiates to an empty pack", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[ | [i]={"22a250cd5d8e",1482120533,"[c++1z] P0195R2: Support pack-expansion of using-declarations."}, | ||
[ | [k]={ | ||
["clang/test/SemaTemplate/cxx1z-using-declaration.cpp"]={"clang/test/SemaTemplate/cxx1z-using-declaration.cpp:164:23: error: member using declaration \'f\' instantiates to an empty pack","clang/test/SemaTemplate/cxx1z-using-declaration.cpp:165:18: error: member using declaration \'type\' instantiates to an empty pack","clang/test/SemaTemplate/cxx1z-using-declaration.cpp:26:26: error: member using declaration \'h\' instantiates to an empty pack","clang/test/SemaTemplate/cxx1z-using-declaration.cpp:108:14: error: member using declaration \'type\' instantiates to an empty pack","clang/test/SemaTemplate/cxx1z-using-declaration.cpp:132:10: error: using declaration \'e\' instantiates to an empty pack"} | |||
} | |||
}, | }, | ||
["err_using_requires_qualname"]={ | ["err_using_requires_qualname"]={ | ||
[c]="using declaration requires a qualified name", | [c]="using declaration requires a qualified name", | ||
[d]=s, | [d]=s, | ||
[f]="using declaration requires a qualified name", | [f]=t, | ||
[g]= | [h]="using declaration requires a qualified name", | ||
[ | [b]=u, | ||
[g]="using declaration requires a qualified name", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"fec52635f0d5",1245459114,"Parsing and AST support for using declarations, from John Thompson!"}, | [i]={"fec52635f0d5",1245459114,"Parsing and AST support for using declarations, from John Thompson!"}, | ||
[j]={{ | [j]={{A,12022,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n if (SS.isEmpty()) {\n Diag(Name.getBeginLoc(), diag::err_using_requires_qualname);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/using-decl-1.cpp"]={"clang/test/SemaCXX/using-decl-1.cpp:405:34: error: using declaration requires a qualified name"} | |||
} | |||
}, | }, | ||
["err_using_typename_non_type"]={ | ["err_using_typename_non_type"]={ | ||
[c]="\'typename\' keyword used on a non-type", | [c]="\'typename\' keyword used on a non-type", | ||
[d]=s, | [d]=s, | ||
[f]="\'typename\' keyword used on a non\\-type", | [f]=t, | ||
[ | [h]="\'typename\' keyword used on a non-type", | ||
[ | [b]=u, | ||
[g]="\'typename\' keyword used on a non\\-type", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"fec52635f0d5",1245459114,"Parsing and AST support for using declarations, from John Thompson!"}, | [i]={"fec52635f0d5",1245459114,"Parsing and AST support for using declarations, from John Thompson!"}, | ||
[j]={{ | [j]={{A,12775,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n/// instantiation of an unresolved using declaration. We treat\n/// the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n if (HasTypenameKeyword) {\n // If we asked for a typename and got a non-type decl, error out.\n if (!R.getAsSingle<TypeDecl>() && !R.getAsSingle<UnresolvedUsingIfExistsDecl>()) {\n Diag(IdentLoc, diag::err_using_typename_non_type);"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p1.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p1.cpp:68:23: error: \'typename\' keyword used on a non-type"} | |||
} | |||
}, | }, | ||
["err_uuidof_with_multiple_guids"]={ | ["err_uuidof_with_multiple_guids"]={ | ||
[c]="cannot call operator __uuidof on a type with multiple GUIDs", | [c]="cannot call operator __uuidof on a type with multiple GUIDs", | ||
[d]=s, | [d]=s, | ||
[f]="cannot call operator __uuidof on a type with multiple GUIDs", | [f]=t, | ||
[g]= | [h]="cannot call operator __uuidof on a type with multiple GUIDs", | ||
[ | [b]=u, | ||
[g]="cannot call operator __uuidof on a type with multiple GUIDs", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"59c0ec23966a",1378537186,"AST: __uuidof should leak through templated types"}, | [i]={"59c0ec23966a",1378537186,"AST: __uuidof should leak through templated types"}, | ||
[j]={{ | [j]={{Y,760,"/// Build a Microsoft __uuidof expression with a type operand.\nExprResult Sema::BuildCXXUuidof(QualType Type, SourceLocation TypeidLoc, TypeSourceInfo *Operand, SourceLocation RParenLoc) {\n if (!Operand->getType()->isDependentType()) {\n if (UuidAttrs.size() > 1)\n return ExprError(Diag(TypeidLoc, diag::err_uuidof_with_multiple_guids));"},{Y,782,"/// Build a Microsoft __uuidof expression with an expression operand.\nExprResult Sema::BuildCXXUuidof(QualType Type, SourceLocation TypeidLoc, Expr *E, SourceLocation RParenLoc) {\n if (!E->getType()->isDependentType()) {\n if (E->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {\n } else {\n if (UuidAttrs.size() > 1)\n return ExprError(Diag(TypeidLoc, diag::err_uuidof_with_multiple_guids));"}}, | ||
[k]={ | |||
[sc]={"clang/test/Parser/MicrosoftExtensions.cpp:164:26: error: cannot call operator __uuidof on a type with multiple GUIDs","clang/test/Parser/MicrosoftExtensions.cpp:166:26: error: cannot call operator __uuidof on a type with multiple GUIDs"} | |||
} | |||
}, | }, | ||
["err_uuidof_without_guid"]={ | ["err_uuidof_without_guid"]={ | ||
[c]="cannot call operator __uuidof on a type with no GUID", | [c]="cannot call operator __uuidof on a type with no GUID", | ||
[d]=s, | [d]=s, | ||
[f]="cannot call operator __uuidof on a type with no GUID", | [f]=t, | ||
[g]= | [h]="cannot call operator __uuidof on a type with no GUID", | ||
[ | [b]=u, | ||
[g]="cannot call operator __uuidof on a type with no GUID", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"9dddd40a1caf",1292817063,"Emit an error if operator __uuidof() is called on a type with no associated GUID."}, | [i]={"9dddd40a1caf",1292817063,"Emit an error if operator __uuidof() is called on a type with no associated GUID."}, | ||
[j]={{ | [j]={{Y,758,"/// Build a Microsoft __uuidof expression with a type operand.\nExprResult Sema::BuildCXXUuidof(QualType Type, SourceLocation TypeidLoc, TypeSourceInfo *Operand, SourceLocation RParenLoc) {\n if (!Operand->getType()->isDependentType()) {\n if (UuidAttrs.empty())\n return ExprError(Diag(TypeidLoc, diag::err_uuidof_without_guid));"},{Y,780,"/// Build a Microsoft __uuidof expression with an expression operand.\nExprResult Sema::BuildCXXUuidof(QualType Type, SourceLocation TypeidLoc, Expr *E, SourceLocation RParenLoc) {\n if (!E->getType()->isDependentType()) {\n if (E->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {\n } else {\n if (UuidAttrs.empty())\n return ExprError(Diag(TypeidLoc, diag::err_uuidof_without_guid));"}}, | ||
[k]={ | |||
[sc]={"clang/test/Parser/MicrosoftExtensions.cpp:90:4: error: cannot call operator __uuidof on a type with no GUID","clang/test/Parser/MicrosoftExtensions.cpp:92:4: error: cannot call operator __uuidof on a type with no GUID","clang/test/Parser/MicrosoftExtensions.cpp:94:4: error: cannot call operator __uuidof on a type with no GUID","clang/test/Parser/MicrosoftExtensions.cpp:96:4: error: cannot call operator __uuidof on a type with no GUID","clang/test/Parser/MicrosoftExtensions.cpp:99:4: error: cannot call operator __uuidof on a type with no GUID","clang/test/Parser/MicrosoftExtensions.cpp:101:4: error: cannot call operator __uuidof on a type with no GUID","clang/test/Parser/MicrosoftExtensions.cpp:103:4: error: cannot call operator __uuidof on a type with no GUID","clang/test/Parser/MicrosoftExtensions.cpp:105:4: error: cannot call operator __uuidof on a type with no GUID","clang/test/Parser/MicrosoftExtensions.cpp:108:4: error: cannot call operator __uuidof on a type with no GUID","clang/test/Parser/MicrosoftExtensions.cpp:110:4: error: cannot call operator __uuidof on a type with no GUID","clang/test/Parser/MicrosoftExtensions.cpp:112:4: error: cannot call operator __uuidof on a type with no GUID","clang/test/Parser/MicrosoftExtensions.cpp:115:4: error: cannot call operator __uuidof on a type with no GUID","clang/test/Parser/MicrosoftExtensions.cpp:162:26: error: cannot call operator __uuidof on a type with no GUID"} | |||
} | |||
}, | }, | ||
["err_va_arg_in_device"]={ | ["err_va_arg_in_device"]={ | ||
[c]="CUDA device code does not support va_arg", | [c]="CUDA device code does not support va_arg", | ||
[d]=s, | [d]=s, | ||
[f]="CUDA device code does not support va_arg", | [f]=t, | ||
[g]= | [h]="CUDA device code does not support va_arg", | ||
[ | [b]=u, | ||
[g]="CUDA device code does not support va_arg", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"6644e366b01e",1453249620,"[CUDA] Bail, rather than crash, on va_arg in device code."}, | [i]={"6644e366b01e",1453249620,"[CUDA] Bail, rather than crash, on va_arg in device code."}, | ||
[j]={{ | [j]={{z,17165,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n // CUDA device code does not support varargs.\n if (getLangOpts().CUDA && getLangOpts().CUDAIsDevice) {\n if (const FunctionDecl *F = dyn_cast<FunctionDecl>(CurContext)) {\n if (T == CFT_Global || T == CFT_Device || T == CFT_HostDevice)\n return ExprError(Diag(E->getBeginLoc(), diag::err_va_arg_in_device));"},{z,17215,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n // NVPTX does not support va_arg expression.\n if (getLangOpts().OpenMP && getLangOpts().OpenMPIsTargetDevice && Context.getTargetInfo().getTriple().isNVPTX())\n targetDiag(E->getBeginLoc(), diag::err_va_arg_in_device);"}}, | ||
[k]={ | |||
["clang/test/SemaCUDA/vararg.cu"]={"clang/test/SemaCUDA/vararg.cu:15:10: error: CUDA device code does not support va_arg"} | |||
} | |||
}, | }, | ||
["err_va_start_captured_stmt"]={ | ["err_va_start_captured_stmt"]={ | ||
[c]="\'va_start\' cannot be used in a captured statement", | [c]="\'va_start\' cannot be used in a captured statement", | ||
[d]=s, | [d]=s, | ||
[f]="\'va_start\' cannot be used in a captured statement", | [f]=t, | ||
[g]= | [h]="\'va_start\' cannot be used in a captured statement", | ||
[ | [b]=u, | ||
[g]="\'va_start\' cannot be used in a captured statement", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"f1deb837eee3",1493927465,"Fix bugs checking va_start in lambdas and erroneous contexts"}, | [i]={"f1deb837eee3",1493927465,"Fix bugs checking va_start in lambdas and erroneous contexts"}, | ||
[j]={{bb,8082,"static bool checkVAStartIsInVariadicFunction(Sema &S, Expr *Fn, ParmVarDecl **LastParam = nullptr) {\n if (auto *Block = dyn_cast<BlockDecl>(Caller)) {\n } else if (auto *FD = dyn_cast<FunctionDecl>(Caller)) {\n } else if (auto *MD = dyn_cast<ObjCMethodDecl>(Caller)) {\n } else if (isa<CapturedDecl>(Caller)) {\n S.Diag(Fn->getBeginLoc(), diag::err_va_start_captured_stmt);"}} | [j]={{bb,8082,"static bool checkVAStartIsInVariadicFunction(Sema &S, Expr *Fn, ParmVarDecl **LastParam = nullptr) {\n if (auto *Block = dyn_cast<BlockDecl>(Caller)) {\n } else if (auto *FD = dyn_cast<FunctionDecl>(Caller)) {\n } else if (auto *MD = dyn_cast<ObjCMethodDecl>(Caller)) {\n } else if (isa<CapturedDecl>(Caller)) {\n S.Diag(Fn->getBeginLoc(), diag::err_va_start_captured_stmt);"}}, | ||
[k]={ | |||
["clang/test/OpenMP/varargs.cpp"]={"clang/test/OpenMP/varargs.cpp:9:5: error: \'va_start\' cannot be used in a captured statement"} | |||
} | |||
}, | }, | ||
["err_va_start_fixed_function"]={ | ["err_va_start_fixed_function"]={ | ||
[c]="\'va_start\' used in function with fixed args", | [c]="\'va_start\' used in function with fixed args", | ||
[d]=s, | [d]=s, | ||
[f]="\'va_start\' used in function with fixed args", | [f]=t, | ||
[g]= | [h]="\'va_start\' used in function with fixed args", | ||
[ | [b]=u, | ||
[g]="\'va_start\' used in function with fixed args", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"f1deb837eee3",1493927465,"Fix bugs checking va_start in lambdas and erroneous contexts"}, | [i]={"f1deb837eee3",1493927465,"Fix bugs checking va_start in lambdas and erroneous contexts"}, | ||
[j]={{bb,8091,"static bool checkVAStartIsInVariadicFunction(Sema &S, Expr *Fn, ParmVarDecl **LastParam = nullptr) {\n if (!IsVariadic) {\n S.Diag(Fn->getBeginLoc(), diag::err_va_start_fixed_function);"}} | [j]={{bb,8091,"static bool checkVAStartIsInVariadicFunction(Sema &S, Expr *Fn, ParmVarDecl **LastParam = nullptr) {\n if (!IsVariadic) {\n S.Diag(Fn->getBeginLoc(), diag::err_va_start_fixed_function);"}}, | ||
[k]={ | |||
["clang/test/Sema/varargs-x86-64.c"]={"clang/test/Sema/varargs-x86-64.c:18:3: error: \'va_start\' used in function with fixed args","clang/test/Sema/varargs-x86-64.c:38:3: error: \'va_start\' used in function with fixed args"} | |||
} | |||
}, | }, | ||
["err_va_start_outside_function"]={ | ["err_va_start_outside_function"]={ | ||
[c]="\'va_start\' cannot be used outside a function", | [c]="\'va_start\' cannot be used outside a function", | ||
[d]=s, | [d]=s, | ||
[f]="\'va_start\' cannot be used outside a function", | [f]=t, | ||
[g]= | [h]="\'va_start\' cannot be used outside a function", | ||
[ | [b]=u, | ||
[g]="\'va_start\' cannot be used outside a function", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"f1deb837eee3",1493927465,"Fix bugs checking va_start in lambdas and erroneous contexts"}, | [i]={"f1deb837eee3",1493927465,"Fix bugs checking va_start in lambdas and erroneous contexts"}, | ||
[j]={{bb,8086,"static bool checkVAStartIsInVariadicFunction(Sema &S, Expr *Fn, ParmVarDecl **LastParam = nullptr) {\n if (auto *Block = dyn_cast<BlockDecl>(Caller)) {\n } else if (auto *FD = dyn_cast<FunctionDecl>(Caller)) {\n } else if (auto *MD = dyn_cast<ObjCMethodDecl>(Caller)) {\n } else if (isa<CapturedDecl>(Caller)) {\n } else {\n S.Diag(Fn->getBeginLoc(), diag::err_va_start_outside_function);"}} | [j]={{bb,8086,"static bool checkVAStartIsInVariadicFunction(Sema &S, Expr *Fn, ParmVarDecl **LastParam = nullptr) {\n if (auto *Block = dyn_cast<BlockDecl>(Caller)) {\n } else if (auto *FD = dyn_cast<FunctionDecl>(Caller)) {\n } else if (auto *MD = dyn_cast<ObjCMethodDecl>(Caller)) {\n } else if (isa<CapturedDecl>(Caller)) {\n } else {\n S.Diag(Fn->getBeginLoc(), diag::err_va_start_outside_function);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/varargs.cpp"]={"clang/test/SemaCXX/varargs.cpp:27:31: error: \'va_start\' cannot be used outside a function","clang/test/SemaCXX/varargs.cpp:86:14: error: \'va_start\' cannot be used outside a function"} | |||
} | |||
}, | }, | ||
["err_va_start_used_in_wrong_abi_function"]={ | ["err_va_start_used_in_wrong_abi_function"]={ | ||
[ | [c]="\'va_start\' used in ... ABI function", | ||
[d]=s, | |||
[f]=t, | |||
[h]="\'va_start\' used in %select{System V|Win64}0 ABI function", | |||
[b]=u, | |||
[g]="\'va_start\' used in (?:System V|Win64) ABI function", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"c7d5c94f78c7",1442523333,"Support __builtin_ms_va_list."}, | [i]={"c7d5c94f78c7",1442523333,"Support __builtin_ms_va_list."}, | ||
[j]={{bb,8052,"/// Check that the user is calling the appropriate va_start builtin for the\n/// target and calling convention.\nstatic bool checkVAStartABI(Sema &S, unsigned BuiltinID, Expr *Fn) {\n if (IsX64 || IsAArch64) {\n if (IsMSVAStart) {\n } else {\n // On x86-64/AArch64 Unix, don\'t allow this in Win64 ABI functions.\n // On x64 Windows, don\'t allow this in System V ABI functions.\n // (Yes, that means there\'s no corresponding way to support variadic\n // System V ABI functions on Windows.)\n if ((IsWindows && CC == CC_X86_64SysV) || (!IsWindows && CC == CC_Win64))\n return S.Diag(Fn->getBeginLoc(), diag::err_va_start_used_in_wrong_abi_function) << !IsWindows;"}} | [j]={{bb,8052,"/// Check that the user is calling the appropriate va_start builtin for the\n/// target and calling convention.\nstatic bool checkVAStartABI(Sema &S, unsigned BuiltinID, Expr *Fn) {\n if (IsX64 || IsAArch64) {\n if (IsMSVAStart) {\n } else {\n // On x86-64/AArch64 Unix, don\'t allow this in Win64 ABI functions.\n // On x64 Windows, don\'t allow this in System V ABI functions.\n // (Yes, that means there\'s no corresponding way to support variadic\n // System V ABI functions on Windows.)\n if ((IsWindows && CC == CC_X86_64SysV) || (!IsWindows && CC == CC_Win64))\n return S.Diag(Fn->getBeginLoc(), diag::err_va_start_used_in_wrong_abi_function) << !IsWindows;"}}, | ||
[k]={ | |||
["clang/test/Sema/varargs-aarch64.c"]={"clang/test/Sema/varargs-aarch64.c:10:3: error: \'va_start\' used in Win64 ABI function"} | |||
} | |||
}, | }, | ||
["err_value_init_for_array_type"]={ | ["err_value_init_for_array_type"]={ | ||
[c]="array types cannot be value-initialized", | [c]="array types cannot be value-initialized", | ||
[d]=s, | [d]=s, | ||
[f]="array types cannot be value\\-initialized", | [f]=t, | ||
[ | [h]="array types cannot be value-initialized", | ||
[ | [b]=u, | ||
[i]={ | [g]="array types cannot be value\\-initialized", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{Y,1565,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n if (Ty->isArrayType()) {\n if (!ListInitialization)\n return ExprError(Diag(TyBeginLoc, diag::err_value_init_for_array_type) << FullRange);"}}, | |||
[k]={ | |||
["clang/test/CXX/class.derived/class.abstract/p3.cpp"]={"clang/test/CXX/class.derived/class.abstract/p3.cpp:68:3: error: array types cannot be value-initialized"} | |||
} | |||
}, | }, | ||
["err_vaopt_paste_at_end"]={ | ["err_vaopt_paste_at_end"]={ | ||
[c]="\'##\' cannot appear at end of __VA_OPT__ argument", | [c]="\'##\' cannot appear at end of __VA_OPT__ argument", | ||
[d]=s, | [d]=s, | ||
[f]="\'\\#\\#\' cannot appear at end of __VA_OPT__ argument", | [f]=t, | ||
[ | [h]="\'##\' cannot appear at end of __VA_OPT__ argument", | ||
[ | [b]=u, | ||
[g]="\'\\#\\#\' cannot appear at end of __VA_OPT__ argument", | |||
[a]=r, | |||
[e]=B, | |||
[i]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"}, | [i]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"}, | ||
[j]={{W,2934,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n } else {\n while (Tok.isNot(tok::eod)) {\n if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n if (VAOCtx.isVAOptToken(Tok)) {\n } else if (VAOCtx.isInVAOpt()) {\n if (Tok.is(tok::r_paren)) {\n if (VAOCtx.sawClosingParen()) {\n if (Tokens[Tokens.size() - 2].is(tok::hashhash)) {\n Diag(Tok, diag::err_vaopt_paste_at_end);"}} | [j]={{W,2934,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n } else {\n while (Tok.isNot(tok::eod)) {\n if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n if (VAOCtx.isVAOptToken(Tok)) {\n } else if (VAOCtx.isInVAOpt()) {\n if (Tok.is(tok::r_paren)) {\n if (VAOCtx.sawClosingParen()) {\n if (Tokens[Tokens.size() - 2].is(tok::hashhash)) {\n Diag(Tok, diag::err_vaopt_paste_at_end);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:41:36: error: \'##\' cannot appear at end of __VA_OPT__ argument"} | |||
} | |||
}, | }, | ||
["err_vaopt_paste_at_start"]={ | ["err_vaopt_paste_at_start"]={ | ||
[c]="\'##\' cannot appear at start of __VA_OPT__ argument", | [c]="\'##\' cannot appear at start of __VA_OPT__ argument", | ||
[d]=s, | [d]=s, | ||
[f]="\'\\#\\#\' cannot appear at start of __VA_OPT__ argument", | [f]=t, | ||
[ | [h]="\'##\' cannot appear at start of __VA_OPT__ argument", | ||
[ | [b]=u, | ||
[g]="\'\\#\\#\' cannot appear at start of __VA_OPT__ argument", | |||
[a]=r, | |||
[e]=B, | |||
[i]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"}, | [i]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"}, | ||
[j]={{W,2923,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n } else {\n while (Tok.isNot(tok::eod)) {\n if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n if (VAOCtx.isVAOptToken(Tok)) {\n if (Tok.is(tok::hashhash)) {\n Diag(Tok, diag::err_vaopt_paste_at_start);"}} | [j]={{W,2923,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n } else {\n while (Tok.isNot(tok::eod)) {\n if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n if (VAOCtx.isVAOptToken(Tok)) {\n if (Tok.is(tok::hashhash)) {\n Diag(Tok, diag::err_vaopt_paste_at_start);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:33:30: error: \'##\' cannot appear at start of __VA_OPT__ argument","clang/test/Preprocessor/macro_vaopt_check.cpp:37:30: error: \'##\' cannot appear at start of __VA_OPT__ argument","clang/test/Preprocessor/macro_vaopt_check.cpp:52:30: error: \'##\' cannot appear at start of __VA_OPT__ argument","clang/test/Preprocessor/macro_vaopt_check.cpp:56:51: error: \'##\' cannot appear at start of __VA_OPT__ argument"} | |||
} | |||
}, | }, | ||
["err_var_partial_spec_redeclared"]={ | ["err_var_partial_spec_redeclared"]={ | ||
[ | [c]="variable template partial specialization A cannot be redefined", | ||
[d]=s, | |||
[f]=t, | |||
[h]="variable template partial specialization %0 cannot be redefined", | |||
[b]=u, | |||
[g]="variable template partial specialization (.*?) cannot be redefined", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som..."}, | [i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som..."}, | ||
[j]={{ | [j]={{Jc,4367,"/// Instantiate the declaration of a variable template partial\n/// specialization.\n///\n/// \\param VarTemplate the (instantiated) variable template that is partially\n/// specialized by the instantiation of \\p PartialSpec.\n///\n/// \\param PartialSpec the (uninstantiated) variable template partial\n/// specialization that we are instantiating.\n///\n/// \\returns The instantiated partial specialization, if successful; otherwise,\n/// NULL to indicate an error.\nVarTemplatePartialSpecializationDecl *TemplateDeclInstantiator::InstantiateVarTemplatePartialSpecialization(VarTemplateDecl *VarTemplate, VarTemplatePartialSpecializationDecl *PartialSpec) {\n if (PrevDecl) {\n SemaRef.Diag(PartialSpec->getLocation(), diag::err_var_partial_spec_redeclared) << WrittenTy->getType();"}} | ||
}, | }, | ||
["err_var_spec_no_template"]={ | ["err_var_spec_no_template"]={ | ||
[ | [c]="no variable template matches... specialization", | ||
[d]=s, | |||
[f]=t, | |||
[h]="no variable template matches%select{| partial}0 specialization", | |||
[b]=u, | |||
[g]="no variable template matches(?:| partial) specialization", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som..."}, | [i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som..."}, | ||
[j]={{ | [j]={{F,4544,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n if (!VarTemplate) {\n return Diag(D.getIdentifierLoc(), diag::err_var_spec_no_template) << IsPartialSpecialization;"}}, | ||
[k]={ | |||
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:42:14: error: no variable template matches specialization"} | |||
} | |||
}, | }, | ||
["err_var_spec_no_template_but_method"]={ | ["err_var_spec_no_template_but_method"]={ | ||
[ | [c]="no variable template matches specialization; did you mean to use A as function template instead?", | ||
[d]=s, | |||
[f]=t, | |||
[h]="no variable template matches specialization; did you mean to use %0 as function template instead?", | |||
[b]=u, | |||
[g]="no variable template matches specialization; did you mean to use (.*?) as function template instead\\?", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"967c13d3fbfa",1399554980,"Fix PR19169 [Crash on invalid attempting to specialize a template method as a template variable]."}, | [i]={"967c13d3fbfa",1399554980,"Fix PR19169 [Crash on invalid attempting to specialize a template method as a template variable]."}, | ||
[j]={{ | [j]={{F,4542,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n if (!VarTemplate) {\n if (FnTemplate)\n return Diag(D.getIdentifierLoc(), diag::err_var_spec_no_template_but_method) << FnTemplate->getDeclName();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp"]={"clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:453:18: error: no variable template matches specialization; did you mean to use \'f\' as function template instead?","clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:456:18: error: no variable template matches specialization; did you mean to use \'g\' as function template instead?"} | |||
} | |||
}, | }, | ||
["err_variable_instantiates_to_function"]={ | ["err_variable_instantiates_to_function"]={ | ||
[ | [c]="... instantiated with function type A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%select{variable|static data member}0 instantiated with function type %1", | |||
[b]=u, | |||
[g]="(?:variable|static data member) instantiated with function type (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"6162334ce0f1",1284277044,"Diagnose the instantiation of variables (including static data"}, | [i]={"6162334ce0f1",1284277044,"Diagnose the instantiation of variables (including static data"}, | ||
[j]={{ | [j]={{Jc,1139,"Decl *TemplateDeclInstantiator::VisitVarDecl(VarDecl *D, bool InstantiatingVarTemplate, ArrayRef<BindingDecl *> *Bindings) {\n if (DI->getType()->isFunctionType()) {\n SemaRef.Diag(D->getLocation(), diag::err_variable_instantiates_to_function) << D->isStaticDataMember() << DI->getType();"},{Jc,3963,"Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(VarTemplateDecl *VarTemplate, VarDecl *D, const TemplateArgumentListInfo &TemplateArgsInfo, ArrayRef<TemplateArgument> Converted, VarTemplateSpecializationDecl *PrevDecl) {\n if (DI->getType()->isFunctionType()) {\n SemaRef.Diag(D->getLocation(), diag::err_variable_instantiates_to_function) << D->isStaticDataMember() << DI->getType();"},{Jc,4383,"/// Instantiate the declaration of a variable template partial\n/// specialization.\n///\n/// \\param VarTemplate the (instantiated) variable template that is partially\n/// specialized by the instantiation of \\p PartialSpec.\n///\n/// \\param PartialSpec the (uninstantiated) variable template partial\n/// specialization that we are instantiating.\n///\n/// \\returns The instantiated partial specialization, if successful; otherwise,\n/// NULL to indicate an error.\nVarTemplatePartialSpecializationDecl *TemplateDeclInstantiator::InstantiateVarTemplatePartialSpecialization(VarTemplateDecl *VarTemplate, VarTemplatePartialSpecializationDecl *PartialSpec) {\n if (DI->getType()->isFunctionType()) {\n SemaRef.Diag(PartialSpec->getLocation(), diag::err_variable_instantiates_to_function) << PartialSpec->isStaticDataMember() << DI->getType();"}}, | ||
[k]={ | |||
["clang/test/CXX/temp/temp.arg/temp.arg.type/p2.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.type/p2.cpp:6:12: error: static data member instantiated with function type \'int ()\'","clang/test/CXX/temp/temp.arg/temp.arg.type/p2.cpp:12:11: error: variable instantiated with function type \'int ()\'"} | |||
} | |||
}, | }, | ||
["err_variable_object_no_init"]={ | ["err_variable_object_no_init"]={ | ||
[c]="variable-sized object may not be initialized", | [c]="variable-sized object may not be initialized", | ||
[d]=s, | [d]=s, | ||
[f]="variable\\-sized object may not be initialized", | [f]=t, | ||
[ | [h]="variable-sized object may not be initialized", | ||
[ | [b]=u, | ||
[i]={ | [g]="variable\\-sized object may not be initialized", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{z,7679,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n if (literalType->isArrayType()) {\n if (literalType->isVariableArrayType()) {\n if ((LangOpts.CPlusPlus || NumInits.value_or(0)) && !tryToFixVariablyModifiedVarType(TInfo, literalType, LParenLoc, diag::err_variable_object_no_init))"},{U,1996,"void InitListChecker::CheckArrayType(const InitializedEntity &Entity, InitListExpr *IList, QualType &DeclType, llvm::APSInt elementIndex, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n if (const VariableArrayType *VAT = dyn_cast<VariableArrayType>(arrayType)) {\n if (!VerifyOnly) {\n // C2x 6.7.9p4: An entity of variable length array type shall not be\n // initialized except by an empty initializer.\n //\n // The C extension warnings are issued from ParseBraceInitializer() and\n // do not need to be issued here. However, we continue to issue an error\n // in the case there are initializers or we are compiling C++. We allow\n // use of VLAs in C++, but it\'s not clear we want to allow {} to zero\n // init a VLA in C++ in all cases (such as with non-trivial constructors).\n // FIXME: should we allow this construct in C++ when it makes sense to do\n // so?\n if (HasErr)\n SemaRef.Diag(VAT->getSizeExpr()->getBeginLoc(), diag::err_variable_object_no_init) << VAT->getSizeExpr()->getSourceRange();"},{U,5480,"static void TryOrBuildParenListInitialization(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result = nullptr) {\n if (const ArrayType *AT = S.getASTContext().getAsArrayType(Entity.getType())) {\n // C++ [dcl.init]p16.5\n // if the destination type is an array, the object is initialized as\n // follows. Let x1, . . . , xk be the elements of the expression-list. If\n // the destination type is an array of unknown bound, it is defined as\n // having k elements.\n if (const ConstantArrayType *CAT = S.getASTContext().getAsConstantArrayType(Entity.getType())) {\n } else if (const VariableArrayType *VAT = S.getASTContext().getAsVariableArrayType(Entity.getType())) {\n S.Diag(SE->getBeginLoc(), diag::err_variable_object_no_init) << SE->getSourceRange();"},{U,9619,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n case FK_VariableLengthArrayHasInitializer:\n S.Diag(Kind.getLocation(), diag::err_variable_object_no_init) << Args[0]->getSourceRange();"}}, | |||
[k]={ | |||
[bc]={"clang/test/Sema/vla.c:56:26: error: variable-sized object may not be initialized"} | |||
} | |||
}, | }, | ||
["err_variably_modified_new_type"]={ | ["err_variably_modified_new_type"]={ | ||
[ | [c]="\'new\' cannot allocate object of variably modified type A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="\'new\' cannot allocate object of variably modified type %0", | |||
[b]=u, | |||
[g]="\'new\' cannot allocate object of variably modified type (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"3999e15d93d4",1286380831,"Reject the allocation of variably-modified types in C++ \'new\'"}, | [i]={"3999e15d93d4",1286380831,"Reject the allocation of variably-modified types in C++ \'new\'"}, | ||
[j]={{ | [j]={{Y,2471,"/// Checks that a type is suitable as the allocated type\n/// in a new-expression.\nbool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, SourceRange R) {\n // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n // abstract class type or array thereof.\n if (AllocType->isFunctionType())\n else if (AllocType->isReferenceType())\n else if (!AllocType->isDependentType() && RequireCompleteSizedType(Loc, AllocType, diag::err_new_incomplete_or_sizeless_type, R))\n else if (RequireNonAbstractType(Loc, AllocType, diag::err_allocation_of_abstract_type))\n else if (AllocType->isVariablyModifiedType())\n return Diag(Loc, diag::err_variably_modified_new_type) << AllocType;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/new-delete-0x.cpp"]={"clang/test/SemaCXX/new-delete-0x.cpp:24:17: error: \'new\' cannot allocate object of variably modified type \'int (*)[[] {"} | |||
} | |||
}, | }, | ||
["err_variably_modified_nontype_template_param"]={ | ["err_variably_modified_nontype_template_param"]={ | ||
[ | [c]="non-type template parameter of variably modified type A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="non-type template parameter of variably modified type %0", | |||
[b]=u, | |||
[g]="non\\-type template parameter of variably modified type (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"959d5a0cbd78",1274545050,"Implement support for variable length arrays in C++. VLAs are limited"}, | [i]={"959d5a0cbd78",1274545050,"Implement support for variable length arrays in C++. VLAs are limited"}, | ||
[j]={{ | [j]={{F,1431,"QualType Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {\n // We don\'t allow variably-modified types as the type of non-type template\n // parameters.\n if (T->isVariablyModifiedType()) {\n Diag(Loc, diag::err_variably_modified_nontype_template_param) << T;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/c99-variable-length-array.cpp"]={"clang/test/SemaCXX/c99-variable-length-array.cpp:60:18: error: non-type template parameter of variably modified type \'int (&)[HasNonConstantValue::value]\'"} | |||
} | |||
}, | }, | ||
["err_variably_modified_template_arg"]={ | ["err_variably_modified_template_arg"]={ | ||
[ | [c]="variably modified type A cannot be used as a template argument", | ||
[d]=s, | |||
[f]=t, | |||
[h]="variably modified type %0 cannot be used as a template argument", | |||
[b]=u, | |||
[g]="variably modified type (.*?) cannot be used as a template argument", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"959d5a0cbd78",1274545050,"Implement support for variable length arrays in C++. VLAs are limited"}, | [i]={"959d5a0cbd78",1274545050,"Implement support for variable length arrays in C++. VLAs are limited"}, | ||
[j]={{ | [j]={{F,6509,"/// Check a template argument against its corresponding\n/// template type parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.type]. It\n/// returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateArgument(TypeSourceInfo *ArgInfo) {\n if (CanonArg->isVariablyModifiedType()) {\n return Diag(SR.getBegin(), diag::err_variably_modified_template_arg) << Arg;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/c99-variable-length-array.cpp"]={"clang/test/SemaCXX/c99-variable-length-array.cpp:55:6: error: variably modified type \'typeof (array)\' (aka \'int[N]\') cannot be used as a template argument"} | |||
} | |||
}, | }, | ||
["err_variably_modified_typeid"]={ | ["err_variably_modified_typeid"]={ | ||
[ | [c]="\'typeid\' of variably modified type A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="\'typeid\' of variably modified type %0", | |||
[b]=u, | |||
[g]="\'typeid\' of variably modified type (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"6f3150a7d262",1416604152,"Sema: Don\'t permit variably modified types in typeid"}, | [i]={"6f3150a7d262",1416604152,"Sema: Don\'t permit variably modified types in typeid"}, | ||
[j]={{ | [j]={{Y,564,"/// Build a C++ typeid expression with a type operand.\nExprResult Sema::BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc, TypeSourceInfo *Operand, SourceLocation RParenLoc) {\n if (T->isVariablyModifiedType())\n return ExprError(Diag(TypeidLoc, diag::err_variably_modified_typeid) << T);"},{Y,634,"/// Build a C++ typeid expression with an expression operand.\nExprResult Sema::BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc, Expr *E, SourceLocation RParenLoc) {\n if (E->getType()->isVariablyModifiedType())\n return ExprError(Diag(TypeidLoc, diag::err_variably_modified_typeid) << E->getType());"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/typeid.cpp"]={"clang/test/SemaCXX/typeid.cpp:27:3: error: \'typeid\' of variably modified type \'char[i]\'","clang/test/SemaCXX/typeid.cpp:28:3: error: \'typeid\' of variably modified type \'char[i]\'"} | |||
} | |||
}, | }, | ||
["err_variadic_device_fn"]={ | ["err_variadic_device_fn"]={ | ||
[c]="CUDA device code does not support variadic functions", | [c]="CUDA device code does not support variadic functions", | ||
[d]=s, | [d]=s, | ||
[f]="CUDA device code does not support variadic functions", | [f]=t, | ||
[g]= | [h]="CUDA device code does not support variadic functions", | ||
[ | [b]=u, | ||
[g]="CUDA device code does not support variadic functions", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"e48cd6c5304d",1453584497,"[CUDA] Disallow variadic functions other than printf in device code."}, | [i]={"e48cd6c5304d",1453584497,"[CUDA] Disallow variadic functions other than printf in device code."}, | ||
[j]={{ | [j]={{x,10680,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (getLangOpts().CUDA) {\n // Variadic functions, other than a *declaration* of printf, are not allowed\n // in device-side CUDA code, unless someone passed\n // -fcuda-allow-variadic-functions.\n if (!getLangOpts().CUDAAllowVariadicFunctions && NewFD->isVariadic() && (NewFD->hasAttr<CUDADeviceAttr>() || NewFD->hasAttr<CUDAGlobalAttr>()) && !(II && II->isStr(\"printf\") && NewFD->isExternC() && !D.isFunctionDefinition())) {\n Diag(NewFD->getLocation(), diag::err_variadic_device_fn);"}}, | ||
[k]={ | |||
["clang/test/SemaCUDA/vararg.cu"]={"clang/test/SemaCUDA/vararg.cu:33:17: error: CUDA device code does not support variadic functions","clang/test/SemaCUDA/vararg.cu:39:17: error: CUDA device code does not support variadic functions","clang/test/SemaCUDA/vararg.cu:47:27: error: CUDA device code does not support variadic functions","clang/test/SemaCUDA/vararg.cu:53:16: error: CUDA device code does not support variadic functions"} | |||
} | |||
}, | }, | ||
["err_vec_builtin_incompatible_vector"]={ | ["err_vec_builtin_incompatible_vector"]={ | ||
[ | [c]="first two arguments to A must have the same type", | ||
[d]=s, | |||
[f]=t, | |||
[h]="first two arguments to %0 must have the same type", | |||
[b]=u, | |||
[g]="first two arguments to (.*?) must have the same type", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"edc7849b1bdd",1495637157,"Generalize two diagnostic messages to take function name as parameter."}, | [i]={"edc7849b1bdd",1495637157,"Generalize two diagnostic messages to take function name as parameter."}, | ||
[j]={{bb,8422,"// Customized Sema Checking for VSX builtins that have the following signature:\n// vector [...] builtinName(vector [...], vector [...], const int);\n// Which takes the same type of vectors (any legal vector type) for the first\n// two arguments and takes compile time constant for the third argument.\n// Example builtins are :\n// vector double vec_xxpermdi(vector double, vector double, int);\n// vector short vec_xxsldwi(vector short, vector short, int);\nbool Sema::SemaBuiltinVSX(CallExpr *TheCall) {\n // Check the first two arguments are the same type.\n if (!Context.hasSameUnqualifiedType(Arg1Ty, Arg2Ty)) {\n return Diag(BuiltinLoc, diag::err_vec_builtin_incompatible_vector) << TheCall->getDirectCallee() << SourceRange(TheCall->getArg(0)->getBeginLoc(), TheCall->getArg(1)->getEndLoc());"},{bb,8473,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n if (!TheCall->getArg(0)->isTypeDependent() && !TheCall->getArg(1)->isTypeDependent()) {\n // Check to see if we have a call with 2 vector arguments, the unary shuffle\n // with mask. If so, verify that RHS is an integer vector type with the\n // same number of elts as lhs.\n if (TheCall->getNumArgs() == 2) {\n if (!RHSType->hasIntegerRepresentation() || RHSType->castAs<VectorType>()->getNumElements() != numElements)\n return ExprError(Diag(TheCall->getBeginLoc(), diag::err_vec_builtin_incompatible_vector) << TheCall->getDirectCallee() << SourceRange(TheCall->getArg(1)->getBeginLoc(), TheCall->getArg(1)->getEndLoc()));"},{bb,8479,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n if (!TheCall->getArg(0)->isTypeDependent() && !TheCall->getArg(1)->isTypeDependent()) {\n // Check to see if we have a call with 2 vector arguments, the unary shuffle\n // with mask. If so, verify that RHS is an integer vector type with the\n // same number of elts as lhs.\n if (TheCall->getNumArgs() == 2) {\n } else if (!Context.hasSameUnqualifiedType(LHSType, RHSType)) {\n return ExprError(Diag(TheCall->getBeginLoc(), diag::err_vec_builtin_incompatible_vector) << TheCall->getDirectCallee() << SourceRange(TheCall->getArg(0)->getBeginLoc(), TheCall->getArg(1)->getEndLoc()));"}} | [j]={{bb,8422,"// Customized Sema Checking for VSX builtins that have the following signature:\n// vector [...] builtinName(vector [...], vector [...], const int);\n// Which takes the same type of vectors (any legal vector type) for the first\n// two arguments and takes compile time constant for the third argument.\n// Example builtins are :\n// vector double vec_xxpermdi(vector double, vector double, int);\n// vector short vec_xxsldwi(vector short, vector short, int);\nbool Sema::SemaBuiltinVSX(CallExpr *TheCall) {\n // Check the first two arguments are the same type.\n if (!Context.hasSameUnqualifiedType(Arg1Ty, Arg2Ty)) {\n return Diag(BuiltinLoc, diag::err_vec_builtin_incompatible_vector) << TheCall->getDirectCallee() << SourceRange(TheCall->getArg(0)->getBeginLoc(), TheCall->getArg(1)->getEndLoc());"},{bb,8473,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n if (!TheCall->getArg(0)->isTypeDependent() && !TheCall->getArg(1)->isTypeDependent()) {\n // Check to see if we have a call with 2 vector arguments, the unary shuffle\n // with mask. If so, verify that RHS is an integer vector type with the\n // same number of elts as lhs.\n if (TheCall->getNumArgs() == 2) {\n if (!RHSType->hasIntegerRepresentation() || RHSType->castAs<VectorType>()->getNumElements() != numElements)\n return ExprError(Diag(TheCall->getBeginLoc(), diag::err_vec_builtin_incompatible_vector) << TheCall->getDirectCallee() << SourceRange(TheCall->getArg(1)->getBeginLoc(), TheCall->getArg(1)->getEndLoc()));"},{bb,8479,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n if (!TheCall->getArg(0)->isTypeDependent() && !TheCall->getArg(1)->isTypeDependent()) {\n // Check to see if we have a call with 2 vector arguments, the unary shuffle\n // with mask. If so, verify that RHS is an integer vector type with the\n // same number of elts as lhs.\n if (TheCall->getNumArgs() == 2) {\n } else if (!Context.hasSameUnqualifiedType(LHSType, RHSType)) {\n return ExprError(Diag(TheCall->getBeginLoc(), diag::err_vec_builtin_incompatible_vector) << TheCall->getDirectCallee() << SourceRange(TheCall->getArg(0)->getBeginLoc(), TheCall->getArg(1)->getEndLoc()));"}}, | ||
[k]={ | |||
["clang/test/CodeGen/PowerPC/builtins-ppc-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-error.c:36:3: error: first two arguments to \'__builtin_vsx_xxpermdi\' must have the same type","clang/test/CodeGen/PowerPC/builtins-ppc-error.c:44:3: error: first two arguments to \'__builtin_vsx_xxsldwi\' must have the same type"} | |||
} | |||
}, | }, | ||
["err_vec_builtin_non_vector"]={ | ["err_vec_builtin_non_vector"]={ | ||
[ | [c]="first two arguments to A must be vectors", | ||
[d]=s, | |||
[f]=t, | |||
[h]="first two arguments to %0 must be vectors", | |||
[b]=u, | |||
[g]="first two arguments to (.*?) must be vectors", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"edc7849b1bdd",1495637157,"Generalize two diagnostic messages to take function name as parameter."}, | [i]={"edc7849b1bdd",1495637157,"Generalize two diagnostic messages to take function name as parameter."}, | ||
[j]={{bb,8414,"// Customized Sema Checking for VSX builtins that have the following signature:\n// vector [...] builtinName(vector [...], vector [...], const int);\n// Which takes the same type of vectors (any legal vector type) for the first\n// two arguments and takes compile time constant for the third argument.\n// Example builtins are :\n// vector double vec_xxpermdi(vector double, vector double, int);\n// vector short vec_xxsldwi(vector short, vector short, int);\nbool Sema::SemaBuiltinVSX(CallExpr *TheCall) {\n if ((!Arg1Ty->isVectorType() && !Arg1Ty->isDependentType()) || (!Arg2Ty->isVectorType() && !Arg2Ty->isDependentType())) {\n return Diag(BuiltinLoc, diag::err_vec_builtin_non_vector) << TheCall->getDirectCallee() << SourceRange(TheCall->getArg(0)->getBeginLoc(), TheCall->getArg(1)->getEndLoc());"},{bb,8458,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n if (!TheCall->getArg(0)->isTypeDependent() && !TheCall->getArg(1)->isTypeDependent()) {\n if (!LHSType->isVectorType() || !RHSType->isVectorType())\n return ExprError(Diag(TheCall->getBeginLoc(), diag::err_vec_builtin_non_vector) << TheCall->getDirectCallee() << SourceRange(TheCall->getArg(0)->getBeginLoc(), TheCall->getArg(1)->getEndLoc()));"}} | [j]={{bb,8414,"// Customized Sema Checking for VSX builtins that have the following signature:\n// vector [...] builtinName(vector [...], vector [...], const int);\n// Which takes the same type of vectors (any legal vector type) for the first\n// two arguments and takes compile time constant for the third argument.\n// Example builtins are :\n// vector double vec_xxpermdi(vector double, vector double, int);\n// vector short vec_xxsldwi(vector short, vector short, int);\nbool Sema::SemaBuiltinVSX(CallExpr *TheCall) {\n if ((!Arg1Ty->isVectorType() && !Arg1Ty->isDependentType()) || (!Arg2Ty->isVectorType() && !Arg2Ty->isDependentType())) {\n return Diag(BuiltinLoc, diag::err_vec_builtin_non_vector) << TheCall->getDirectCallee() << SourceRange(TheCall->getArg(0)->getBeginLoc(), TheCall->getArg(1)->getEndLoc());"},{bb,8458,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n if (!TheCall->getArg(0)->isTypeDependent() && !TheCall->getArg(1)->isTypeDependent()) {\n if (!LHSType->isVectorType() || !RHSType->isVectorType())\n return ExprError(Diag(TheCall->getBeginLoc(), diag::err_vec_builtin_non_vector) << TheCall->getDirectCallee() << SourceRange(TheCall->getArg(0)->getBeginLoc(), TheCall->getArg(1)->getEndLoc()));"}}, | ||
[k]={ | |||
["clang/test/CodeGen/PowerPC/builtins-ppc-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-error.c:35:3: error: first two arguments to \'__builtin_vsx_xxpermdi\' must be vectors","clang/test/CodeGen/PowerPC/builtins-ppc-error.c:43:3: error: first two arguments to \'__builtin_vsx_xxsldwi\' must be vectors"} | |||
} | |||
}, | }, | ||
["err_vecstep_non_scalar_vector_type"]={ | ["err_vecstep_non_scalar_vector_type"]={ | ||
[ | [c]="\'vec_step\' requires built-in scalar or vector type, A invalid", | ||
[d]=s, | |||
[f]=t, | |||
[h]="\'vec_step\' requires built-in scalar or vector type, %0 invalid", | |||
[b]=u, | |||
[g]="\'vec_step\' requires built\\-in scalar or vector type, (.*?) invalid", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"e190dee7a548",1299871489,"Add support for the OpenCL vec_step operator, by generalising and"}, | [i]={"e190dee7a548",1299871489,"Add support for the OpenCL vec_step operator, by generalising and"}, | ||
[j]={{ | [j]={{z,4302,"static bool CheckVecStepTraitOperandType(Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange) {\n // [OpenCL 1.1 6.11.12] \"The vec_step built-in function takes a built-in\n // scalar or vector data type argument...\"\n // Every built-in scalar type (OpenCL 1.1 6.1.1) is either an arithmetic\n // type (C99 6.2.5p18) or void.\n if (!(T->isArithmeticType() || T->isVoidType() || T->isVectorType())) {\n S.Diag(Loc, diag::err_vecstep_non_scalar_vector_type) << T << ArgRange;"}}, | ||
[k]={ | |||
["clang/test/SemaOpenCL/vec_step.cl"]={"clang/test/SemaOpenCL/vec_step.cl:29:24: error: \'vec_step\' requires built-in scalar or vector type, \'__private struct S\' invalid","clang/test/SemaOpenCL/vec_step.cl:30:15: error: \'vec_step\' requires built-in scalar or vector type, \'__private int16 *\' invalid","clang/test/SemaOpenCL/vec_step.cl:31:15: error: \'vec_step\' requires built-in scalar or vector type, \'void (void)\' invalid"} | |||
} | |||
}, | }, | ||
["err_vector_incorrect_num_initializers"]={ | ["err_vector_incorrect_num_initializers"]={ | ||
[ | [c]="... elements in vector initialization (expected A elements, have B)", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%select{too many|too few}0 elements in vector initialization (expected %1 elements, have %2)", | |||
[b]=u, | |||
[g]="(?:too many|too few) elements in vector initialization \\(expected (.*?) elements, have (.*?)\\)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"a96114ed087b",1249840544,"AltiVec-style vector initializer syntax, vec4 a = (vec4)(a, b, c, d);"}, | [i]={"a96114ed087b",1249840544,"AltiVec-style vector initializer syntax, vec4 a = (vec4)(a, b, c, d);"}, | ||
[j]={{ | [j]={{U,1908,"void InitListChecker::CheckVectorType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n // OpenCL and HLSL require all elements to be initialized.\n if (numEltsInit != maxElements) {\n if (!VerifyOnly)\n SemaRef.Diag(IList->getBeginLoc(), diag::err_vector_incorrect_num_initializers) << (numEltsInit < maxElements) << maxElements << numEltsInit;"}}, | ||
[k]={ | |||
["clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl"]={"clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:14:32: error: too few elements in vector initialization (expected 3 elements, have 2)","clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:21:32: error: too few elements in vector initialization (expected 2 elements, have 1)"} | |||
} | |||
}, | }, | ||
["err_verify_ambiguous_marker"]={ | ["err_verify_ambiguous_marker"]={ | ||
[ | [c]="reference to marker \'A\' is ambiguous", | ||
[d]=s, | |||
[f]=t, | |||
[h]="reference to marker \'%0\' is ambiguous", | |||
[b]=u, | |||
[g]="reference to marker \'(.*?)\' is ambiguous", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"4e8144a0d140",1555130019,"[verify] Add support for location markers in directives."}, | [i]={"4e8144a0d140",1555130019,"[verify] Add support for location markers in directives."}, | ||
[j]={{ | [j]={{ob,386,"// Tracker for markers in the input files. A marker is a comment of the form\n//\n// n = 123; // #123\n//\n// ... that can be referred to by a later expected-* directive:\n//\n// // expected-error@#123 {{undeclared identifier \'n\'}}\n//\n// Marker declarations must be at the start of a comment or preceded by\n// whitespace to distinguish them from uses of markers in directives.\nclass VerifyDiagnosticConsumer::MarkerTracker {\n // Ensure we have no remaining deferred directives, and no\n // multiply-defined-and-used markers.\n void finalize() {\n for (auto &MarkerInfo : Markers) {\n if (M.RedefLoc.isValid() && M.UseLoc.isValid()) {\n Diags.Report(M.UseLoc, diag::err_verify_ambiguous_marker) << Name;"}} | ||
}, | }, | ||
["err_verify_inconsistent_diags"]={ | ["err_verify_inconsistent_diags"]={ | ||
[ | [c]="\'A\' diagnostics ... but not ...: B", | ||
[d]=s, | |||
[f]=t, | |||
[h]="\'%0\' diagnostics %select{expected|seen}1 but not %select{seen|expected}1: %2", | |||
[b]=u, | |||
[g]="\'(.*?)\' diagnostics (?:expected|seen) but not (?:seen|expected)\\: (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"348185548eb2",1258168999,"Add VerifyDiagnosticsClient, to replace old -verify."}, | [i]={"348185548eb2",1258168999,"Add VerifyDiagnosticsClient, to replace old -verify."}, | ||
[j]={{ | [j]={{ob,880,"/// Takes a list of diagnostics that have been generated but not matched\n/// by an expected-* directive and produces a diagnostic to the user from this.\nstatic unsigned PrintUnexpected(DiagnosticsEngine &Diags, SourceManager *SourceMgr, const_diag_iterator diag_begin, const_diag_iterator diag_end, const char *Kind) {\n Diags.Report(diag::err_verify_inconsistent_diags).setForceEmit() << Kind << /*Unexpected=*/true << OS.str();"},{ob,911,"/// Takes a list of diagnostics that were expected to have been generated\n/// but were not and produces a diagnostic to the user from this.\nstatic unsigned PrintExpected(DiagnosticsEngine &Diags, SourceManager &SourceMgr, std::vector<Directive *> &DL, const char *Kind) {\n Diags.Report(diag::err_verify_inconsistent_diags).setForceEmit() << Kind << /*Unexpected=*/false << OS.str();"}} | ||
}, | }, | ||
["err_verify_invalid_content"]={ | ["err_verify_invalid_content"]={ | ||
[ | [c]="invalid expected A: B", | ||
[d]=s, | |||
[f]=t, | |||
[h]="invalid expected %0: %1", | |||
[b]=u, | |||
[g]="invalid expected (.*?)\\: (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"e82411b47f76",1272484950,"add regex support for -verify mode. You can now do things like"}, | [i]={"e82411b47f76",1272484950,"add regex support for -verify mode. You can now do things like"}, | ||
[j]={{ | [j]={{ob,308,"// Attach the specified directive to the line of code indicated by\n// \\p ExpectedLoc.\nvoid attachDirective(DiagnosticsEngine &Diags, const UnattachedDirective &UD, SourceLocation ExpectedLoc, bool MatchAnyFileAndLine = false, bool MatchAnyLine = false) {\n if (!D->isValid(Error)) {\n Diags.Report(UD.ContentBegin, diag::err_verify_invalid_content) << (UD.RegexKind ? \"regex\" : \"string\") << Error;"}} | ||
}, | }, | ||
["err_verify_invalid_no_diags"]={ | ["err_verify_invalid_no_diags"]={ | ||
[ | [c]="... directive cannot follow ...", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%select{expected|\'expected-no-diagnostics\'}0 directive cannot follow %select{\'expected-no-diagnostics\' directive|other expected directives}0", | |||
[b]=u, | |||
[g]="(?:expected|\'expected\\-no\\-diagnostics\') directive cannot follow (?:\'expected\\-no\\-diagnostics\' directive|other expected directives)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"0fea04509a64",1350650972,"Change VerifyDiagnosticConsumer so that it *must* contain at least one \"expected-*\" directive. As a..."}, | [i]={"0fea04509a64",1350650972,"Change VerifyDiagnosticConsumer so that it *must* contain at least one \"expected-*\" directive. As a..."}, | ||
[j]={{ | [j]={{ob,483,"/// ParseDirective - Go through the comment and see if it indicates expected\n/// diagnostics. If so, then put them in the appropriate directive list.\n///\n/// Returns true if any valid directives were found.\nstatic bool ParseDirective(StringRef S, ExpectedData *ED, SourceManager &SM, Preprocessor *PP, SourceLocation Pos, VerifyDiagnosticConsumer::DirectiveStatus &Status, VerifyDiagnosticConsumer::MarkerTracker &Markers) {\n for (ParseHelper PH(S); !PH.Done();) {\n if (NoDiag) {\n if (Status == VerifyDiagnosticConsumer::HasOtherExpectedDirectives)\n Diags.Report(Pos, diag::err_verify_invalid_no_diags) << /*IsExpectedNoDiagnostics=*/true;"},{ob,490,"/// ParseDirective - Go through the comment and see if it indicates expected\n/// diagnostics. If so, then put them in the appropriate directive list.\n///\n/// Returns true if any valid directives were found.\nstatic bool ParseDirective(StringRef S, ExpectedData *ED, SourceManager &SM, Preprocessor *PP, SourceLocation Pos, VerifyDiagnosticConsumer::DirectiveStatus &Status, VerifyDiagnosticConsumer::MarkerTracker &Markers) {\n for (ParseHelper PH(S); !PH.Done();) {\n if (Status == VerifyDiagnosticConsumer::HasExpectedNoDiagnostics) {\n Diags.Report(Pos, diag::err_verify_invalid_no_diags) << /*IsExpectedNoDiagnostics=*/false;"}} | ||
}, | }, | ||
["err_verify_invalid_range"]={ | ["err_verify_invalid_range"]={ | ||
[ | [c]="invalid range following \'-\' in expected A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="invalid range following \'-\' in expected %0", | |||
[b]=u, | |||
[g]="invalid range following \'\\-\' in expected (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"b8b2ca6ffbfb",1341889046,"Allow -verify directives to specify a min and max count, not just \"+\"."}, | [i]={"b8b2ca6ffbfb",1341889046,"Allow -verify directives to specify a min and max count, not just \"+\"."}, | ||
[j]={{ | [j]={{ob,594,"/// ParseDirective - Go through the comment and see if it indicates expected\n/// diagnostics. If so, then put them in the appropriate directive list.\n///\n/// Returns true if any valid directives were found.\nstatic bool ParseDirective(StringRef S, ExpectedData *ED, SourceManager &SM, Preprocessor *PP, SourceLocation Pos, VerifyDiagnosticConsumer::DirectiveStatus &Status, VerifyDiagnosticConsumer::MarkerTracker &Markers) {\n for (ParseHelper PH(S); !PH.Done();) {\n // Next optional token: positive integer or a \'+\'.\n if (PH.Next(D.Min)) {\n // A positive integer can be followed by a \'+\' meaning min\n // or more, or by a \'-\' meaning a range from min to max.\n if (PH.Next(\"+\")) {\n } else if (PH.Next(\"-\")) {\n if (!PH.Next(D.Max) || D.Max < D.Min) {\n Diags.Report(Pos.getLocWithOffset(PH.C - PH.Begin), diag::err_verify_invalid_range) << KindStr;"}} | ||
}, | }, | ||
["err_verify_missing_end"]={ | ["err_verify_missing_end"]={ | ||
[ | [c]="cannot find end (\'}}\') of expected A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot find end (\'}}\') of expected %0", | |||
[b]=u, | |||
[g]="cannot find end \\(\'\\}\\}\'\\) of expected (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"348185548eb2",1258168999,"Add VerifyDiagnosticsClient, to replace old -verify."}, | [i]={"348185548eb2",1258168999,"Add VerifyDiagnosticsClient, to replace old -verify."}, | ||
[j]={{ | [j]={{ob,621,"/// ParseDirective - Go through the comment and see if it indicates expected\n/// diagnostics. If so, then put them in the appropriate directive list.\n///\n/// Returns true if any valid directives were found.\nstatic bool ParseDirective(StringRef S, ExpectedData *ED, SourceManager &SM, Preprocessor *PP, SourceLocation Pos, VerifyDiagnosticConsumer::DirectiveStatus &Status, VerifyDiagnosticConsumer::MarkerTracker &Markers) {\n for (ParseHelper PH(S); !PH.Done();) {\n // Search for token: }}\n if (!PH.SearchClosingBrace(\"{{\", \"}}\")) {\n Diags.Report(Pos.getLocWithOffset(PH.C - PH.Begin), diag::err_verify_missing_end) << KindStr;"}} | ||
}, | }, | ||
["err_verify_missing_file"]={ | ["err_verify_missing_file"]={ | ||
[ | [c]="file \'A\' could not be located in expected B", | ||
[d]=s, | |||
[f]=t, | |||
[h]="file \'%0\' could not be located in expected %1", | |||
[b]=u, | |||
[g]="file \'(.*?)\' could not be located in expected (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"fcc699aee8db",1366186006,"Extended VerifyDiagnosticConsumer to also verify source file for diagnostic."}, | [i]={"fcc699aee8db",1366186006,"Extended VerifyDiagnosticConsumer to also verify source file for diagnostic."}, | ||
[j]={{ | [j]={{ob,550,"/// ParseDirective - Go through the comment and see if it indicates expected\n/// diagnostics. If so, then put them in the appropriate directive list.\n///\n/// Returns true if any valid directives were found.\nstatic bool ParseDirective(StringRef S, ExpectedData *ED, SourceManager &SM, Preprocessor *PP, SourceLocation Pos, VerifyDiagnosticConsumer::DirectiveStatus &Status, VerifyDiagnosticConsumer::MarkerTracker &Markers) {\n for (ParseHelper PH(S); !PH.Done();) {\n if (!PH.Next(\"@\")) {\n } else {\n if (FoundPlus || PH.Next(\"-\")) {\n } else if (PH.Next(Line)) {\n } else if (PH.NextMarker()) {\n } else if (PP && PH.Search(\":\")) {\n if (Filename == \"*\") {\n } else {\n if (!File) {\n Diags.Report(Pos.getLocWithOffset(PH.C - PH.Begin), diag::err_verify_missing_file) << Filename << KindStr;"}} | ||
}, | }, | ||
["err_verify_missing_line"]={ | ["err_verify_missing_line"]={ | ||
[ | [c]="missing or invalid line number following \'@\' in expected A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="missing or invalid line number following \'@\' in expected %0", | |||
[b]=u, | |||
[g]="missing or invalid line number following \'@\' in expected (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"e1572eb3e27c",1341889023,"Allow line numbers on -verify directives."}, | [i]={"e1572eb3e27c",1341889023,"Allow line numbers on -verify directives."}, | ||
[j]={{ | [j]={{ob,537,"/// ParseDirective - Go through the comment and see if it indicates expected\n/// diagnostics. If so, then put them in the appropriate directive list.\n///\n/// Returns true if any valid directives were found.\nstatic bool ParseDirective(StringRef S, ExpectedData *ED, SourceManager &SM, Preprocessor *PP, SourceLocation Pos, VerifyDiagnosticConsumer::DirectiveStatus &Status, VerifyDiagnosticConsumer::MarkerTracker &Markers) {\n for (ParseHelper PH(S); !PH.Done();) {\n if (!PH.Next(\"@\")) {\n } else {\n if (FoundPlus || PH.Next(\"-\")) {\n } else if (PH.Next(Line)) {\n } else if (PH.NextMarker()) {\n } else if (PP && PH.Search(\":\")) {\n if (Filename == \"*\") {\n if (!PH.Next(\"*\")) {\n Diags.Report(Pos.getLocWithOffset(PH.C - PH.Begin), diag::err_verify_missing_line) << \"\'*\'\";"},{ob,573,"/// ParseDirective - Go through the comment and see if it indicates expected\n/// diagnostics. If so, then put them in the appropriate directive list.\n///\n/// Returns true if any valid directives were found.\nstatic bool ParseDirective(StringRef S, ExpectedData *ED, SourceManager &SM, Preprocessor *PP, SourceLocation Pos, VerifyDiagnosticConsumer::DirectiveStatus &Status, VerifyDiagnosticConsumer::MarkerTracker &Markers) {\n for (ParseHelper PH(S); !PH.Done();) {\n if (!PH.Next(\"@\")) {\n } else {\n if (ExpectedLoc.isInvalid() && !MatchAnyLine && Marker.empty()) {\n Diags.Report(Pos.getLocWithOffset(PH.C - PH.Begin), diag::err_verify_missing_line) << KindStr;"}} | ||
}, | }, | ||
["err_verify_missing_regex"]={ | ["err_verify_missing_regex"]={ | ||
[ | [c]="cannot find start of regex (\'{{\') in A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot find start of regex (\'{{\') in %0", | |||
[b]=u, | |||
[g]="cannot find start of regex \\(\'\\{\\{\'\\) in (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"cda4b6dd007c",1386805250,"Change semantics of regex expectations in the diagnostic verifier"}, | [i]={"cda4b6dd007c",1386805250,"Change semantics of regex expectations in the diagnostic verifier"}, | ||
[j]={{ | [j]={{ob,645,"/// ParseDirective - Go through the comment and see if it indicates expected\n/// diagnostics. If so, then put them in the appropriate directive list.\n///\n/// Returns true if any valid directives were found.\nstatic bool ParseDirective(StringRef S, ExpectedData *ED, SourceManager &SM, Preprocessor *PP, SourceLocation Pos, VerifyDiagnosticConsumer::DirectiveStatus &Status, VerifyDiagnosticConsumer::MarkerTracker &Markers) {\n for (ParseHelper PH(S); !PH.Done();) {\n // Check that regex directives contain at least one regex.\n if (D.RegexKind && D.Text.find(\"{{\") == StringRef::npos) {\n Diags.Report(D.ContentBegin, diag::err_verify_missing_regex) << D.Text;"}} | ||
}, | }, | ||
["err_verify_missing_start"]={ | ["err_verify_missing_start"]={ | ||
[ | [c]="cannot find start (\'{{\') of expected A", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot find start (\'{{\') of expected %0", | |||
[b]=u, | |||
[g]="cannot find start \\(\'\\{\\{\'\\) of expected (.*?)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"348185548eb2",1258168999,"Add VerifyDiagnosticsClient, to replace old -verify."}, | [i]={"348185548eb2",1258168999,"Add VerifyDiagnosticsClient, to replace old -verify."}, | ||
[j]={{ | [j]={{ob,613,"/// ParseDirective - Go through the comment and see if it indicates expected\n/// diagnostics. If so, then put them in the appropriate directive list.\n///\n/// Returns true if any valid directives were found.\nstatic bool ParseDirective(StringRef S, ExpectedData *ED, SourceManager &SM, Preprocessor *PP, SourceLocation Pos, VerifyDiagnosticConsumer::DirectiveStatus &Status, VerifyDiagnosticConsumer::MarkerTracker &Markers) {\n for (ParseHelper PH(S); !PH.Done();) {\n // Next token: {{\n if (!PH.Next(\"{{\")) {\n Diags.Report(Pos.getLocWithOffset(PH.C - PH.Begin), diag::err_verify_missing_start) << KindStr;"}} | ||
}, | }, | ||
["err_verify_no_directives"]={ | ["err_verify_no_directives"]={ | ||
[c]="no expected directives found: consider use of \'expected-no-diagnostics\'", | [c]="no expected directives found: consider use of \'expected-no-diagnostics\'", | ||
[d]=s, | [d]=s, | ||
[f]="no expected directives found\\: consider use of \'expected\\-no\\-diagnostics\'", | [f]=t, | ||
[ | [h]="no expected directives found: consider use of \'expected-no-diagnostics\'", | ||
[ | [b]=u, | ||
[g]="no expected directives found\\: consider use of \'expected\\-no\\-diagnostics\'", | |||
[a]=r, | |||
[e]=r, | |||
[i]={"0fea04509a64",1350650972,"Change VerifyDiagnosticConsumer so that it *must* contain at least one \"expected-*\" directive. As a..."}, | [i]={"0fea04509a64",1350650972,"Change VerifyDiagnosticConsumer so that it *must* contain at least one \"expected-*\" directive. As a..."}, | ||
[j]={{ | [j]={{ob,1099,"#endif // !NDEBUG\n if (SrcManager) {\n // Produce an error if no expected-* directives could be found in the\n // source file(s) processed.\n if (Status == HasNoDirectives) {\n Diags.Report(diag::err_verify_no_directives).setForceEmit();"}} | ||
}, | }, | ||
["err_verify_no_such_marker"]={ | ["err_verify_no_such_marker"]={ | ||
[ | [c]="use of undefined marker \'A\'", | ||
[d]=s, | |||
[f]=t, | |||
[h]="use of undefined marker \'%0\'", | |||
[b]=u, | |||
[g]="use of undefined marker \'(.*?)\'", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"4e8144a0d140",1555130019,"[verify] Add support for location markers in directives."}, | [i]={"4e8144a0d140",1555130019,"[verify] Add support for location markers in directives."}, | ||
[j]={{ | [j]={{ob,394,"// Tracker for markers in the input files. A marker is a comment of the form\n//\n// n = 123; // #123\n//\n// ... that can be referred to by a later expected-* directive:\n//\n// // expected-error@#123 {{undeclared identifier \'n\'}}\n//\n// Marker declarations must be at the start of a comment or preceded by\n// whitespace to distinguish them from uses of markers in directives.\nclass VerifyDiagnosticConsumer::MarkerTracker {\n // Ensure we have no remaining deferred directives, and no\n // multiply-defined-and-used markers.\n void finalize() {\n for (auto &DeferredPair : DeferredDirectives) {\n Diags.Report(DeferredPair.second.front().DirectivePos, diag::err_verify_no_such_marker) << DeferredPair.first();"}} | ||
}, | }, | ||
["err_verify_nonconst_addrspace"]={ | ["err_verify_nonconst_addrspace"]={ | ||
[ | [c]="qualifier \'const\' is needed for variables in address space \'A\'", | ||
[d]=s, | |||
[f]=t, | |||
[h]="qualifier \'const\' is needed for variables in address space \'%0\'", | |||
[b]=u, | |||
[g]="qualifier \'const\' is needed for variables in address space \'(.*?)\'", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={"b714f73defc8",1611802254,"Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock"}, | [i]={"b714f73defc8",1611802254,"Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock"}, | ||
[j]={{"clang/lib/CodeGen/Targets/AVR.cpp",128,"class AVRTargetCodeGenInfo : public TargetCodeGenInfo {\n LangAS getGlobalVarAddressSpace(CodeGenModule &CGM, const VarDecl *D) const override {\n // Check if global/static variable is defined in address space\n // 1~6 (__flash, __flash1, __flash2, __flash3, __flash4, __flash5)\n // but not constant.\n if (D) {\n if (isTargetAddressSpace(AS) && 1 <= toTargetAddressSpace(AS) && toTargetAddressSpace(AS) <= 6 && !D->getType().isConstQualified())\n CGM.getDiags().Report(D->getLocation(), diag::err_verify_nonconst_addrspace) << \"__flash*\";"}} | [j]={{"clang/lib/CodeGen/Targets/AVR.cpp",128,"class AVRTargetCodeGenInfo : public TargetCodeGenInfo {\n LangAS getGlobalVarAddressSpace(CodeGenModule &CGM, const VarDecl *D) const override {\n // Check if global/static variable is defined in address space\n // 1~6 (__flash, __flash1, __flash2, __flash3, __flash4, __flash5)\n // but not constant.\n if (D) {\n if (isTargetAddressSpace(AS) && 1 <= toTargetAddressSpace(AS) && toTargetAddressSpace(AS) <= 6 && !D->getType().isConstQualified())\n CGM.getDiags().Report(D->getLocation(), diag::err_verify_nonconst_addrspace) << \"__flash*\";"}} | ||
}, | }, | ||
["err_vftable_ambiguous_component"]={ | ["err_vftable_ambiguous_component"]={ | ||
[ | [c]="ambiguous vftable component for A introduced via covariant thunks; this is an inherent limitation of the ABI", | ||
[d]=s, | |||
[f]=t, | |||
[h]="ambiguous vftable component for %0 introduced via covariant thunks; this is an inherent limitation of the ABI", | |||
[b]=u, | |||
[g]="ambiguous vftable component for (.*?) introduced via covariant thunks; this is an inherent limitation of the ABI", | |||
[a]=r, | [a]=r, | ||
[ | [e]="VTable ABI Issue", | ||
[i]={"70e6a00170a4",1430516145,"[MS ABI] Detect and diagnose vftables which cannot be created"}, | [i]={"70e6a00170a4",1430516145,"[MS ABI] Detect and diagnose vftables which cannot be created"}, | ||
[j]={{"clang/lib/AST/VTableBuilder.cpp",3553,"// We want to select the path which introduces the most covariant overrides. If\n// two paths introduce overrides which the other path doesn\'t contain, issue a\n// diagnostic.\nstatic const FullPathTy *selectBestPath(ASTContext &Context, const CXXRecordDecl *RD, const VPtrInfo &Info, std::list<FullPathTy> &FullPaths) {\n for (const FullPathTy &SpecificPath : FullPaths) {\n if (MissingOverrides.empty()) {\n } else {\n Diags.Report(RD->getLocation(), diag::err_vftable_ambiguous_component) << RD;"}} | [j]={{"clang/lib/AST/VTableBuilder.cpp",3553,"// We want to select the path which introduces the most covariant overrides. If\n// two paths introduce overrides which the other path doesn\'t contain, issue a\n// diagnostic.\nstatic const FullPathTy *selectBestPath(ASTContext &Context, const CXXRecordDecl *RD, const VPtrInfo &Info, std::list<FullPathTy> &FullPaths) {\n for (const FullPathTy &SpecificPath : FullPaths) {\n if (MissingOverrides.empty()) {\n } else {\n Diags.Report(RD->getLocation(), diag::err_vftable_ambiguous_component) << RD;"}} | ||
}, | }, | ||
["err_virt_specifier_outside_class"]={ | ["err_virt_specifier_outside_class"]={ | ||
[ | [c]="\'A\' specifier is not allowed outside a class definition", | ||
[d]=s, | |||
[f]=t, | |||
[h]="\'%0\' specifier is not allowed outside a class definition", | |||
[b]=u, | |||
[g]="\'(.*?)\' specifier is not allowed outside a class definition", | |||
[a]=r, | [a]=r, | ||
[ | [e]=y, | ||
[i]={tb,1612659633,vb}, | |||
[j]={{H,2174,"/// ParseDeclGroup - Having concluded that this is either a function\n/// definition or a group of object declarations, actually parse the\n/// result.\nParser::DeclGroupPtrTy Parser::ParseDeclGroup(ParsingDeclSpec &DS, DeclaratorContext Context, ParsedAttributes &Attrs, SourceLocation *DeclEnd, ForRangeInit *FRI) {\n if (D.isFunctionDeclarator()) {\n // We\'re at the point where the parsing of function declarator is finished.\n //\n // A common error is that users accidently add a virtual specifier\n // (e.g. override) in an out-line method definition.\n // We attempt to recover by stripping all these specifiers coming after\n // the declarator.\n while (auto Specifier = isCXX11VirtSpecifier()) {\n Diag(Tok, diag::err_virt_specifier_outside_class) << VirtSpecifiers::getSpecifierName(Specifier) << FixItHint::CreateRemoval(Tok.getLocation());"}}, | |||
[k]={ | |||
["clang/test/Parser/cxx-extra-virtual-specifiers.cpp"]={"clang/test/Parser/cxx-extra-virtual-specifiers.cpp:10:15: error: \'override\' specifier is not allowed outside a class definition","clang/test/Parser/cxx-extra-virtual-specifiers.cpp:13:11: error: \'override\' specifier is not allowed outside a class definition","clang/test/Parser/cxx-extra-virtual-specifiers.cpp:15:11: error: \'override\' specifier is not allowed outside a class definition","clang/test/Parser/cxx-extra-virtual-specifiers.cpp:18:12: error: \'override\' specifier is not allowed outside a class definition"} | |||
} | |||
[i]={tb,1612659633, | |||
[j]={{ | |||
}, | }, | ||
["err_virtual_in_union"]={ | ["err_virtual_in_union"]={ | ||
[c]="unions cannot have virtual functions", | [c]="unions cannot have virtual functions", | ||
[d]=s, | [d]=s, | ||
[f]="unions cannot have virtual functions", | [f]=t, | ||
[g]= | [h]="unions cannot have virtual functions", | ||
[ | [b]=u, | ||
[g]="unions cannot have virtual functions", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"43899d44c2f4",1435432735,"[Sema] Unions cannot have virtual functions."}, | [i]={"43899d44c2f4",1435432735,"[Sema] Unions cannot have virtual functions."}, | ||
[j]={{ | [j]={{x,9756,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (getLangOpts().CPlusPlus) {\n // If this is a method defined in an __interface, and is not a constructor\n // or an overloaded operator, then set the pure flag (isVirtual will already\n // return true).\n if (const CXXRecordDecl *Parent = dyn_cast<CXXRecordDecl>(NewFD->getDeclContext())) {\n // C++ [class.union]p2\n // A union can have member functions, but not virtual functions.\n if (isVirtual && Parent->isUnion()) {\n Diag(D.getDeclSpec().getVirtualSpecLoc(), diag::err_virtual_in_union);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/virtual-function-in-union.cpp"]={"clang/test/SemaCXX/virtual-function-in-union.cpp:5:3: error: unions cannot have virtual functions"} | |||
} | |||
}, | }, | ||
["err_virtual_member_function_template"]={ | ["err_virtual_member_function_template"]={ | ||
[c]="\'virtual\' cannot be specified on member function templates", | [c]="\'virtual\' cannot be specified on member function templates", | ||
[d]=s, | [d]=s, | ||
[f]="\'virtual\' cannot be specified on member function templates", | [f]=t, | ||
[g]= | [h]="\'virtual\' cannot be specified on member function templates", | ||
[ | [b]=u, | ||
[g]="\'virtual\' cannot be specified on member function templates", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"e973899f4687",1295707436,"A member function template cannot be virtual."}, | [i]={"e973899f4687",1295707436,"A member function template cannot be virtual."}, | ||
[j]={{ | [j]={{x,9889,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (getLangOpts().CPlusPlus) {\n // C++ [dcl.fct.spec]p5:\n // The virtual specifier shall only be used in declarations of\n // nonstatic class member functions that appear within a\n // member-specification of a class declaration; see 10.3.\n //\n if (isVirtual && !NewFD->isInvalidDecl()) {\n if (!isVirtualOkay) {\n } else if (!CurContext->isRecord()) {\n } else if (NewFD->getDescribedFunctionTemplate()) {\n Diag(D.getDeclSpec().getVirtualSpecLoc(), diag::err_virtual_member_function_template) << FixItHint::CreateRemoval(D.getDeclSpec().getVirtualSpecLoc());"}}, | ||
[k]={ | |||
["clang/test/CXX/temp/temp.decls/temp.mem/p3.cpp"]={"clang/test/CXX/temp/temp.decls/temp.mem/p3.cpp:4:22: error: \'virtual\' cannot be specified on member function templates"} | |||
} | |||
}, | }, | ||
["err_virtual_non_function"]={ | ["err_virtual_non_function"]={ | ||
[c]="\'virtual\' can only appear on non-static member functions", | [c]="\'virtual\' can only appear on non-static member functions", | ||
[d]=s, | [d]=s, | ||
[f]="\'virtual\' can only appear on non\\-static member functions", | [f]=t, | ||
[ | [h]="\'virtual\' can only appear on non-static member functions", | ||
[ | [b]=u, | ||
[i]={ | [g]="\'virtual\' can only appear on non\\-static member functions", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={C,1236199783,D}, | |||
[j]={{x,6645,"/// Diagnose function specifiers on a declaration of an identifier that\n/// does not identify a function.\nvoid Sema::DiagnoseFunctionSpecifiers(const DeclSpec &DS) {\n // FIXME: We should probably indicate the identifier in question to avoid\n // confusion for constructs like \"virtual int a(), b;\"\n if (DS.isVirtualSpecified())\n Diag(DS.getVirtualSpecLoc(), diag::err_virtual_non_function);"},{x,9879,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (getLangOpts().CPlusPlus) {\n // C++ [dcl.fct.spec]p5:\n // The virtual specifier shall only be used in declarations of\n // nonstatic class member functions that appear within a\n // member-specification of a class declaration; see 10.3.\n //\n if (isVirtual && !NewFD->isInvalidDecl()) {\n if (!isVirtualOkay) {\n Diag(D.getDeclSpec().getVirtualSpecLoc(), diag::err_virtual_non_function);"}}, | |||
[k]={ | |||
["clang/test/CXX/temp/temp.deduct.guide/p1.cpp"]={"clang/test/CXX/temp/temp.deduct.guide/p1.cpp:73:1: error: \'virtual\' can only appear on non-static member functions"} | |||
} | |||
}, | }, | ||
["err_virtual_out_of_class"]={ | ["err_virtual_out_of_class"]={ | ||
[c]="\'virtual\' can only be specified inside the class definition", | [c]="\'virtual\' can only be specified inside the class definition", | ||
[d]=s, | [d]=s, | ||
[f]="\'virtual\' can only be specified inside the class definition", | [f]=t, | ||
[g]= | [h]="\'virtual\' can only be specified inside the class definition", | ||
[ | [b]=u, | ||
[i]={ | [g]="\'virtual\' can only be specified inside the class definition", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{x,9883,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (getLangOpts().CPlusPlus) {\n // C++ [dcl.fct.spec]p5:\n // The virtual specifier shall only be used in declarations of\n // nonstatic class member functions that appear within a\n // member-specification of a class declaration; see 10.3.\n //\n if (isVirtual && !NewFD->isInvalidDecl()) {\n if (!isVirtualOkay) {\n } else if (!CurContext->isRecord()) {\n Diag(D.getDeclSpec().getVirtualSpecLoc(), diag::err_virtual_out_of_class) << FixItHint::CreateRemoval(D.getDeclSpec().getVirtualSpecLoc());"}}, | |||
[k]={ | |||
["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:18:1: error: \'virtual\' can only be specified inside the class definition"} | |||
} | |||
}, | }, | ||
["err_vla_decl_has_extern_linkage"]={ | ["err_vla_decl_has_extern_linkage"]={ | ||
[c]="variable length array declaration cannot have \'extern\' linkage", | [c]="variable length array declaration cannot have \'extern\' linkage", | ||
[d]=s, | [d]=s, | ||
[f]="variable length array declaration cannot have \'extern\' linkage", | [f]=t, | ||
[g]= | [h]="variable length array declaration cannot have \'extern\' linkage", | ||
[ | [b]=u, | ||
[i]={ | [g]="variable length array declaration cannot have \'extern\' linkage", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{x,8710,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n if ((isVM && NewVD->hasLinkage()) || (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {\n if ((!FixedTInfo || FixedT.isNull()) && T->isVariableArrayType()) {\n if (NewVD->isFileVarDecl())\n else if (NewVD->isStaticLocal())\n else\n Diag(NewVD->getLocation(), diag::err_vla_decl_has_extern_linkage) << SizeRange;"}}, | |||
[k]={ | |||
[bc]={"clang/test/Sema/vla.c:22:14: error: variable length array declaration cannot have \'extern\' linkage","clang/test/Sema/vla.c:38:14: error: variable length array declaration cannot have \'extern\' linkage"} | |||
} | |||
}, | }, | ||
["err_vla_decl_has_static_storage"]={ | ["err_vla_decl_has_static_storage"]={ | ||
[c]="variable length array declaration cannot have \'static\' storage duration", | [c]="variable length array declaration cannot have \'static\' storage duration", | ||
[d]=s, | [d]=s, | ||
[f]="variable length array declaration cannot have \'static\' storage duration", | [f]=t, | ||
[g]= | [h]="variable length array declaration cannot have \'static\' storage duration", | ||
[ | [b]=u, | ||
[i]={ | [g]="variable length array declaration cannot have \'static\' storage duration", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{x,8707,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n if ((isVM && NewVD->hasLinkage()) || (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {\n if ((!FixedTInfo || FixedT.isNull()) && T->isVariableArrayType()) {\n if (NewVD->isFileVarDecl())\n else if (NewVD->isStaticLocal())\n Diag(NewVD->getLocation(), diag::err_vla_decl_has_static_storage) << SizeRange;"}}, | |||
[k]={ | |||
[bc]={"clang/test/Sema/vla.c:37:14: error: variable length array declaration cannot have \'static\' storage duration"} | |||
} | |||
}, | }, | ||
["err_vla_decl_in_file_scope"]={ | ["err_vla_decl_in_file_scope"]={ | ||
[c]="variable length array declaration not allowed at file scope", | [c]="variable length array declaration not allowed at file scope", | ||
[d]=s, | [d]=s, | ||
[f]="variable length array declaration not allowed at file scope", | [f]=t, | ||
[g]= | [h]="variable length array declaration not allowed at file scope", | ||
[ | [b]=u, | ||
[i]={ | [g]="variable length array declaration not allowed at file scope", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{x,6728,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n if (T->isVariablyModifiedType()) {\n if (S->getFnParent() == nullptr) {\n if (FixedTInfo) {\n } else {\n if (SizeIsNegative)\n else if (T->isVariableArrayType())\n Diag(NewTD->getLocation(), diag::err_vla_decl_in_file_scope);"},{x,8704,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n if ((isVM && NewVD->hasLinkage()) || (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {\n if ((!FixedTInfo || FixedT.isNull()) && T->isVariableArrayType()) {\n if (NewVD->isFileVarDecl())\n Diag(NewVD->getLocation(), diag::err_vla_decl_in_file_scope) << SizeRange;"}}, | |||
[k]={ | |||
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:38:9: error: variable length array declaration not allowed at file scope"} | |||
} | |||
}, | }, | ||
["err_vla_in_sfinae"]={ | ["err_vla_in_sfinae"]={ | ||
[c]="variable length array cannot be formed during template argument deduction", | [c]="variable length array cannot be formed during template argument deduction", | ||
[d]=s, | [d]=s, | ||
[f]="variable length array cannot be formed during template argument deduction", | [f]=t, | ||
[g]= | [h]="variable length array cannot be formed during template argument deduction", | ||
[ | [b]=u, | ||
[g]="variable length array cannot be formed during template argument deduction", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"a09387df9ffb",1274644621,"It turns out that people love using VLAs in templates, too. Weaken our"}, | [i]={"a09387df9ffb",1274644621,"It turns out that people love using VLAs in templates, too. Weaken our"}, | ||
[j]={{ | [j]={{S,2586,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n if (getLangOpts().OpenCL) {\n } else if (getLangOpts().C99) {\n } else if (isSFINAEContext()) {\n VLADiag = diag::err_vla_in_sfinae;"}} | ||
}, | }, | ||
["err_vla_unsupported"]={ | ["err_vla_unsupported"]={ | ||
[ | [c]="variable length arrays are not supported for ...", | ||
[d]=s, | |||
[f]=t, | |||
[h]="variable length arrays are not supported for %select{the current target|\'%1\'}0", | |||
[b]=u, | |||
[g]="variable length arrays are not supported for (?:the current target|\'(.*?)\')", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"87d44269885f",1511038846,"[OpenMP] Show error if VLAs are not supported"}, | [i]={"87d44269885f",1511038846,"[OpenMP] Show error if VLAs are not supported"}, | ||
[j]={{ | [j]={{Y,4990,"static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT, SourceLocation KeyLoc, QualType T) {\n case UTT_IsBoundedArray:\n Self.Diag(KeyLoc, diag::err_vla_unsupported) << 1 << tok::kw___is_bounded_array;"},{Y,4998,"static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT, SourceLocation KeyLoc, QualType T) {\n case UTT_IsUnboundedArray:\n Self.Diag(KeyLoc, diag::err_vla_unsupported) << 1 << tok::kw___is_unbounded_array;"},{S,2673,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n if (T->isVariableArrayType() && !Context.getTargetInfo().isVLASupported()) {\n targetDiag(Loc, IsCUDADevice ? diag::err_cuda_vla : diag::err_vla_unsupported) << (IsCUDADevice ? CurrentCUDATarget() : 0);"}}, | ||
[k]={ | |||
["clang/test/OpenMP/target_vla_messages.cpp"]={"clang/test/OpenMP/target_vla_messages.cpp:24:10: error: variable length arrays are not supported for the current target","clang/test/OpenMP/target_vla_messages.cpp:62:12: error: variable length arrays are not supported for the current target","clang/test/OpenMP/target_vla_messages.cpp:72:14: error: variable length arrays are not supported for the current target","clang/test/OpenMP/target_vla_messages.cpp:52:10: error: variable length arrays are not supported for the current target"} | |||
} | |||
}, | }, | ||
["err_vm_decl_has_extern_linkage"]={ | ["err_vm_decl_has_extern_linkage"]={ | ||
[c]="variably modified type declaration cannot have \'extern\' linkage", | [c]="variably modified type declaration cannot have \'extern\' linkage", | ||
[d]=s, | [d]=s, | ||
[f]="variably modified type declaration cannot have \'extern\' linkage", | [f]=t, | ||
[g]= | [h]="variably modified type declaration cannot have \'extern\' linkage", | ||
[ | [b]=u, | ||
[i]={ | [g]="variably modified type declaration cannot have \'extern\' linkage", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{x,8720,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n if ((isVM && NewVD->hasLinkage()) || (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {\n if (!FixedTInfo) {\n if (NewVD->isFileVarDecl())\n else\n Diag(NewVD->getLocation(), diag::err_vm_decl_has_extern_linkage);"}}, | |||
[k]={ | |||
[bc]={"clang/test/Sema/vla.c:40:16: error: variably modified type declaration cannot have \'extern\' linkage"} | |||
} | |||
}, | }, | ||
["err_vm_decl_in_file_scope"]={ | ["err_vm_decl_in_file_scope"]={ | ||
[c]="variably modified type declaration not allowed at file scope", | [c]="variably modified type declaration not allowed at file scope", | ||
[d]=s, | [d]=s, | ||
[f]="variably modified type declaration not allowed at file scope", | [f]=t, | ||
[g]= | [h]="variably modified type declaration not allowed at file scope", | ||
[ | [b]=u, | ||
[i]={ | [g]="variably modified type declaration not allowed at file scope", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{x,6733,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n if (T->isVariablyModifiedType()) {\n if (S->getFnParent() == nullptr) {\n if (FixedTInfo) {\n } else {\n if (SizeIsNegative)\n else if (T->isVariableArrayType())\n else if (Oversized.getBoolValue())\n else\n Diag(NewTD->getLocation(), diag::err_vm_decl_in_file_scope);"},{x,8718,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n if ((isVM && NewVD->hasLinkage()) || (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {\n if (!FixedTInfo) {\n if (NewVD->isFileVarDecl())\n Diag(NewVD->getLocation(), diag::err_vm_decl_in_file_scope);"}}, | |||
[k]={ | |||
[bc]={"clang/test/Sema/vla.c:30:5: error: variably modified type declaration not allowed at file scope","clang/test/Sema/vla.c:33:7: error: variably modified type declaration not allowed at file scope"} | |||
} | |||
}, | }, | ||
["err_vm_func_decl"]={ | ["err_vm_func_decl"]={ | ||
[c]="function declaration cannot have variably modified type", | [c]="function declaration cannot have variably modified type", | ||
[d]=s, | [d]=s, | ||
[f]="function declaration cannot have variably modified type", | [f]=t, | ||
[g]= | [h]="function declaration cannot have variably modified type", | ||
[ | [b]=u, | ||
[g]="function declaration cannot have variably modified type", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"4f8b8ed2ac98",1242482280,"Missing change for r71941 (PR2044)."}, | [i]={"4f8b8ed2ac98",1242482280,"Missing change for r71941 (PR2044)."}, | ||
[j]={{ | [j]={{x,10198,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // Functions returning a variably modified type violate C99 6.7.5.2p2\n // because all functions have linkage.\n if (!NewFD->isInvalidDecl() && NewFD->getReturnType()->isVariablyModifiedType()) {\n Diag(NewFD->getLocation(), diag::err_vm_func_decl);"}}, | ||
[k]={ | |||
[bc]={"clang/test/Sema/vla.c:51:26: error: function declaration cannot have variably modified type","clang/test/Sema/vla.c:53:7: error: function declaration cannot have variably modified type"} | |||
} | |||
}, | }, | ||
["err_void_only_param"]={ | ["err_void_only_param"]={ | ||
[c]="\'void\' must be the first and only parameter if specified", | [c]="\'void\' must be the first and only parameter if specified", | ||
[d]=s, | [d]=s, | ||
[f]="\'void\' must be the first and only parameter if specified", | [f]=t, | ||
[g]= | [h]="\'void\' must be the first and only parameter if specified", | ||
[ | [b]=u, | ||
[i]={ | [g]="\'void\' must be the first and only parameter if specified", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={C,1236199783,D}, | |||
[j]={{S,5503,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n case DeclaratorChunk::Function: {\n // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n // strict prototypes as in C2x because it allows a function definition to\n // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n } else {\n for (unsigned i = 0, e = FTI.NumParams; i != e; ++i) {\n // Look for \'void\'. void is allowed only as a single parameter to a\n // function with no other parameters (C99 6.7.5.3p10). We record\n // int(void) as a FunctionProtoType with an empty parameter list.\n if (ParamTy->isVoidType()) {\n // If this is something like \'float(int, void)\', reject it. \'void\'\n // is an incomplete type (C99 6.2.5p19) and function decls cannot\n // have parameters of incomplete type.\n if (FTI.NumParams != 1 || FTI.isVariadic) {\n S.Diag(FTI.Params[i].IdentLoc, diag::err_void_only_param);"}}, | |||
[k]={ | |||
["clang/test/Sema/void_arg.c"]={"clang/test/Sema/void_arg.c:10:28: error: \'void\' must be the first and only parameter if specified","clang/test/Sema/void_arg.c:11:23: error: \'void\' must be the first and only parameter if specified","clang/test/Sema/void_arg.c:14:28: error: \'void\' must be the first and only parameter if specified","clang/test/Sema/void_arg.c:15:23: error: \'void\' must be the first and only parameter if specified"} | |||
} | |||
}, | }, | ||
["err_void_param_qualified"]={ | ["err_void_param_qualified"]={ | ||
[c]="\'void\' as parameter must not have type qualifiers", | [c]="\'void\' as parameter must not have type qualifiers", | ||
[d]=s, | [d]=s, | ||
[f]="\'void\' as parameter must not have type qualifiers", | [f]=t, | ||
[g]= | [h]="\'void\' as parameter must not have type qualifiers", | ||
[ | [b]=u, | ||
[i]={ | [g]="\'void\' as parameter must not have type qualifiers", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={C,1236199783,D}, | |||
[j]={{S,5514,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n case DeclaratorChunk::Function: {\n // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n // strict prototypes as in C2x because it allows a function definition to\n // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n } else {\n for (unsigned i = 0, e = FTI.NumParams; i != e; ++i) {\n // Look for \'void\'. void is allowed only as a single parameter to a\n // function with no other parameters (C99 6.7.5.3p10). We record\n // int(void) as a FunctionProtoType with an empty parameter list.\n if (ParamTy->isVoidType()) {\n // If this is something like \'float(int, void)\', reject it. \'void\'\n // is an incomplete type (C99 6.2.5p19) and function decls cannot\n // have parameters of incomplete type.\n if (FTI.NumParams != 1 || FTI.isVariadic) {\n } else if (FTI.Params[i].Ident) {\n } else {\n // Reject, but continue to parse \'float(const void)\'.\n if (ParamTy.hasQualifiers())\n S.Diag(DeclType.Loc, diag::err_void_param_qualified);"}}, | |||
[k]={ | |||
["clang/test/Sema/void_arg.c"]={"clang/test/Sema/void_arg.c:26:7: error: \'void\' as parameter must not have type qualifiers"} | |||
} | |||
}, | }, | ||
["err_volatile_comparison_operator"]={ | ["err_volatile_comparison_operator"]={ | ||
[c]="defaulted comparison function must not be volatile", | [c]="defaulted comparison function must not be volatile", | ||
[d]=s, | [d]=s, | ||
[f]="defaulted comparison function must not be volatile", | [f]=t, | ||
[g]= | [h]="defaulted comparison function must not be volatile", | ||
[ | [b]=u, | ||
[i]={ | [g]="defaulted comparison function must not be volatile", | ||
[j]={{ | [a]=r, | ||
[e]=n, | |||
[i]={O,1625925174,N}, | |||
[j]={{A,8742,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n if (IsMethod) {\n if (MD->isVolatile()) {\n Diag(MD->getLocation(), diag::err_volatile_comparison_operator);"}}, | |||
[k]={ | |||
["clang/test/CXX/class/class.compare/class.compare.default/p1.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:19:8: error: defaulted comparison function must not be volatile"} | |||
} | |||
}, | }, | ||
["err_vsx_builtin_nonconstant_argument"]={ | ["err_vsx_builtin_nonconstant_argument"]={ | ||
[ | [c]="argument A to B must be a 2-bit unsigned literal (i.e. 0, 1, 2 or 3)", | ||
[d]=s, | |||
[f]=t, | |||
[h]="argument %0 to %1 must be a 2-bit unsigned literal (i.e. 0, 1, 2 or 3)", | |||
[b]=u, | |||
[g]="argument (.*?) to (.*?) must be a 2\\-bit unsigned literal \\(i\\.e\\. 0, 1, 2 or 3\\)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"bbc48e91643b",1495638812,"[PowerPC] Implement vec_xxpermdi builtin."}, | [i]={"bbc48e91643b",1495638812,"[PowerPC] Implement vec_xxpermdi builtin."}, | ||
[j]={{bb,8402,"// Customized Sema Checking for VSX builtins that have the following signature:\n// vector [...] builtinName(vector [...], vector [...], const int);\n// Which takes the same type of vectors (any legal vector type) for the first\n// two arguments and takes compile time constant for the third argument.\n// Example builtins are :\n// vector double vec_xxpermdi(vector double, vector double, int);\n// vector short vec_xxsldwi(vector short, vector short, int);\nbool Sema::SemaBuiltinVSX(CallExpr *TheCall) {\n // Check the third argument is a compile time constant\n if (!TheCall->getArg(2)->isIntegerConstantExpr(Context))\n return Diag(TheCall->getBeginLoc(), diag::err_vsx_builtin_nonconstant_argument) << 3 /* argument index */ << TheCall->getDirectCallee() << SourceRange(TheCall->getArg(2)->getBeginLoc(), TheCall->getArg(2)->getEndLoc());"}} | [j]={{bb,8402,"// Customized Sema Checking for VSX builtins that have the following signature:\n// vector [...] builtinName(vector [...], vector [...], const int);\n// Which takes the same type of vectors (any legal vector type) for the first\n// two arguments and takes compile time constant for the third argument.\n// Example builtins are :\n// vector double vec_xxpermdi(vector double, vector double, int);\n// vector short vec_xxsldwi(vector short, vector short, int);\nbool Sema::SemaBuiltinVSX(CallExpr *TheCall) {\n // Check the third argument is a compile time constant\n if (!TheCall->getArg(2)->isIntegerConstantExpr(Context))\n return Diag(TheCall->getBeginLoc(), diag::err_vsx_builtin_nonconstant_argument) << 3 /* argument index */ << TheCall->getDirectCallee() << SourceRange(TheCall->getArg(2)->getBeginLoc(), TheCall->getArg(2)->getEndLoc());"}}, | ||
[k]={ | |||
["clang/test/CodeGen/PowerPC/builtins-ppc-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-error.c:34:3: error: argument 3 to \'__builtin_vsx_xxpermdi\' must be a 2-bit unsigned literal (i.e. 0, 1, 2 or 3)","clang/test/CodeGen/PowerPC/builtins-ppc-error.c:42:3: error: argument 3 to \'__builtin_vsx_xxsldwi\' must be a 2-bit unsigned literal (i.e. 0, 1, 2 or 3)"} | |||
} | |||
}, | }, | ||
["err_wasm_builtin_arg_must_be_integer_type"]={ | ["err_wasm_builtin_arg_must_be_integer_type"]={ | ||
[ | [c]="A argument must be an integer", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%ordinal0 argument must be an integer", | |||
[b]=u, | |||
[g]="(.*?) argument must be an integer", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={O,1625925174,N}, | |||
[j]={{bb,19017,"/// Checks the argument at the given index is an integer.\nstatic bool CheckWasmBuiltinArgIsInteger(Sema &S, CallExpr *E, unsigned ArgIndex) {\n if (!ArgExpr->getType()->isIntegerType()) {\n return S.Diag(ArgExpr->getBeginLoc(), diag::err_wasm_builtin_arg_must_be_integer_type) << ArgIndex + 1 << ArgExpr->getSourceRange();"}}, | |||
[k]={ | |||
["clang/test/Sema/builtins-wasm.c"]={"clang/test/Sema/builtins-wasm.c:28:41: error: 3rd argument must be an integer","clang/test/Sema/builtins-wasm.c:37:36: error: 2nd argument must be an integer","clang/test/Sema/builtins-wasm.c:39:48: error: 4th argument must be an integer","clang/test/Sema/builtins-wasm.c:48:43: error: 3rd argument must be an integer","clang/test/Sema/builtins-wasm.c:49:52: error: 4th argument must be an integer","clang/test/Sema/builtins-wasm.c:50:61: error: 5th argument must be an integer"} | |||
} | |||
[i]={ | |||
[j]={{bb,19017,"/// Checks the argument at the given index is an integer.\nstatic bool CheckWasmBuiltinArgIsInteger(Sema &S, CallExpr *E, unsigned ArgIndex) {\n if (!ArgExpr->getType()->isIntegerType()) {\n return S.Diag(ArgExpr->getBeginLoc(), diag::err_wasm_builtin_arg_must_be_integer_type) << ArgIndex + 1 << ArgExpr->getSourceRange();"}} | |||
}, | }, | ||
["err_wasm_builtin_arg_must_be_table_type"]={ | ["err_wasm_builtin_arg_must_be_table_type"]={ | ||
[ | [c]="A argument must be a WebAssembly table", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%ordinal0 argument must be a WebAssembly table", | |||
[b]=u, | |||
[g]="(.*?) argument must be a WebAssembly table", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={O,1625925174,N}, | |||
[j]={{bb,19004,"/// Checks the argument at the given index is a WebAssembly table and if it\n/// is, sets ElTy to the element type.\nstatic bool CheckWasmBuiltinArgIsTable(Sema &S, CallExpr *E, unsigned ArgIndex, QualType &ElTy) {\n if (!ATy || !ATy->getElementType().isWebAssemblyReferenceType()) {\n return S.Diag(ArgExpr->getBeginLoc(), diag::err_wasm_builtin_arg_must_be_table_type) << ArgIndex + 1 << ArgExpr->getSourceRange();"}}, | |||
[k]={ | |||
["clang/test/Sema/builtins-wasm.c"]={"clang/test/Sema/builtins-wasm.c:14:29: error: 1st argument must be a WebAssembly table","clang/test/Sema/builtins-wasm.c:15:29: error: 1st argument must be a WebAssembly table","clang/test/Sema/builtins-wasm.c:16:29: error: 1st argument must be a WebAssembly table","clang/test/Sema/builtins-wasm.c:17:29: error: 1st argument must be a WebAssembly table","clang/test/Sema/builtins-wasm.c:26:29: error: 1st argument must be a WebAssembly table","clang/test/Sema/builtins-wasm.c:36:29: error: 1st argument must be a WebAssembly table","clang/test/Sema/builtins-wasm.c:46:29: error: 1st argument must be a WebAssembly table","clang/test/Sema/builtins-wasm.c:47:36: error: 2nd argument must be a WebAssembly table"} | |||
} | |||
[i]={ | |||
[j]={{bb,19004,"/// Checks the argument at the given index is a WebAssembly table and if it\n/// is, sets ElTy to the element type.\nstatic bool CheckWasmBuiltinArgIsTable(Sema &S, CallExpr *E, unsigned ArgIndex, QualType &ElTy) {\n if (!ATy || !ATy->getElementType().isWebAssemblyReferenceType()) {\n return S.Diag(ArgExpr->getBeginLoc(), diag::err_wasm_builtin_arg_must_be_table_type) << ArgIndex + 1 << ArgExpr->getSourceRange();"}} | |||
}, | }, | ||
["err_wasm_builtin_arg_must_match_table_element_type"]={ | ["err_wasm_builtin_arg_must_match_table_element_type"]={ | ||
[ | [c]="A argument must match the element type of the WebAssembly table in the B argument", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%ordinal0 argument must match the element type of the WebAssembly table in the %ordinal1 argument", | |||
[b]=u, | |||
[g]="(.*?) argument must match the element type of the WebAssembly table in the (.*?) argument", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={O,1625925174,N}, | |||
[j]={{bb,19091,"/// Check that the first argument is a WebAssembly table, the second is the\n/// value to use for new elements (of a type matching the table type), the\n/// third value is an integer.\nbool Sema::BuiltinWasmTableGrow(CallExpr *TheCall) {\n if (!Context.hasSameType(ElTy, NewElemArg->getType())) {\n return Diag(NewElemArg->getBeginLoc(), diag::err_wasm_builtin_arg_must_match_table_element_type) << 2 << 1 << NewElemArg->getSourceRange();"},{bb,19118,"/// Check that the first argument is a WebAssembly table, the second is an\n/// integer, the third is the value to use to fill the table (of a type\n/// matching the table type), and the fourth is an integer.\nbool Sema::BuiltinWasmTableFill(CallExpr *TheCall) {\n if (!Context.hasSameType(ElTy, NewElemArg->getType())) {\n return Diag(NewElemArg->getBeginLoc(), diag::err_wasm_builtin_arg_must_match_table_element_type) << 3 << 1 << NewElemArg->getSourceRange();"},{bb,19146,"/// Check that the first argument is a WebAssembly table, the second is also a\n/// WebAssembly table (of the same element type), and the third to fifth\n/// arguments are integers.\nbool Sema::BuiltinWasmTableCopy(CallExpr *TheCall) {\n if (!Context.hasSameType(XElTy, YElTy)) {\n return Diag(TableYArg->getBeginLoc(), diag::err_wasm_builtin_arg_must_match_table_element_type) << 2 << 1 << TableYArg->getSourceRange();"}}, | |||
[k]={ | |||
["clang/test/Sema/builtins-wasm.c"]={"clang/test/Sema/builtins-wasm.c:27:36: error: 2nd argument must match the element type of the WebAssembly table in the 1st argument","clang/test/Sema/builtins-wasm.c:38:43: error: 3rd argument must match the element type of the WebAssembly table in the 1st argument"} | |||
} | |||
[i]={ | |||
[j]={{bb,19091,"/// Check that the first argument is a WebAssembly table, the second is the\n/// value to use for new elements (of a type matching the table type), the\n/// third value is an integer.\nbool Sema::BuiltinWasmTableGrow(CallExpr *TheCall) {\n if (!Context.hasSameType(ElTy, NewElemArg->getType())) {\n return Diag(NewElemArg->getBeginLoc(), diag::err_wasm_builtin_arg_must_match_table_element_type) << 2 << 1 << NewElemArg->getSourceRange();"},{bb,19118,"/// Check that the first argument is a WebAssembly table, the second is an\n/// integer, the third is the value to use to fill the table (of a type\n/// matching the table type), and the fourth is an integer.\nbool Sema::BuiltinWasmTableFill(CallExpr *TheCall) {\n if (!Context.hasSameType(ElTy, NewElemArg->getType())) {\n return Diag(NewElemArg->getBeginLoc(), diag::err_wasm_builtin_arg_must_match_table_element_type) << 3 << 1 << NewElemArg->getSourceRange();"},{bb,19146,"/// Check that the first argument is a WebAssembly table, the second is also a\n/// WebAssembly table (of the same element type), and the third to fifth\n/// arguments are integers.\nbool Sema::BuiltinWasmTableCopy(CallExpr *TheCall) {\n if (!Context.hasSameType(XElTy, YElTy)) {\n return Diag(TableYArg->getBeginLoc(), diag::err_wasm_builtin_arg_must_match_table_element_type) << 2 << 1 << TableYArg->getSourceRange();"}} | |||
}, | }, | ||
["err_wasm_ca_reference"]={ | ["err_wasm_ca_reference"]={ | ||
[ | [c]="cannot ... WebAssembly reference", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot %select{capture|take address of}0 WebAssembly reference", | |||
[b]=u, | |||
[g]="cannot (?:capture|take address of) WebAssembly reference", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={O,1625925174,N}, | |||
[j]={{z,15078,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n // Cannot take the address of WebAssembly references or tables.\n if (Context.getTargetInfo().getTriple().isWasm()) {\n if (OpTy.isWebAssemblyReferenceType()) {\n Diag(OpLoc, diag::err_wasm_ca_reference) << 1 << OrigOp.get()->getSourceRange();"},{z,19393,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n if (BuildAndDiagnose && S.Context.getTargetInfo().getTriple().isWasm() && CaptureType.getNonReferenceType().isWebAssemblyReferenceType()) {\n S.Diag(Loc, diag::err_wasm_ca_reference) << 0;"}}, | |||
[k]={ | |||
[Cb]={"clang/test/Sema/wasm-refs-and-tables.c:62:3: error: cannot take address of WebAssembly reference"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_wasm_cast_table"]={ | ["err_wasm_cast_table"]={ | ||
[ | [c]="cannot cast ... a WebAssembly table", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot cast %select{to|from}0 a WebAssembly table", | |||
[b]=u, | |||
[g]="cannot cast (?:to|from) a WebAssembly table", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={O,1625925174,N}, | |||
[j]={{Bb,2780,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n if (SrcType->isWebAssemblyTableType()) {\n Self.Diag(OpRange.getBegin(), diag::err_wasm_cast_table) << 1 << SrcExpr.get()->getSourceRange();"},{Bb,2962,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n if (SrcType->isWebAssemblyTableType()) {\n Self.Diag(OpRange.getBegin(), diag::err_wasm_cast_table) << 1 << SrcExpr.get()->getSourceRange();"}}, | |||
[k]={ | |||
[Cb]={"clang/test/Sema/wasm-refs-and-tables.c:101:3: error: cannot cast from a WebAssembly table"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_wasm_funcref_not_wasm"]={ | ["err_wasm_funcref_not_wasm"]={ | ||
[c]="invalid use of \'__funcref\' keyword outside the WebAssembly triple", | [c]="invalid use of \'__funcref\' keyword outside the WebAssembly triple", | ||
[d]=s, | [d]=s, | ||
[f]="invalid use of \'__funcref\' keyword outside the WebAssembly triple", | [f]=t, | ||
[g]= | [h]="invalid use of \'__funcref\' keyword outside the WebAssembly triple", | ||
[ | [b]=u, | ||
[i]={ | [g]="invalid use of \'__funcref\' keyword outside the WebAssembly triple", | ||
[j]={{ | [a]=r, | ||
[e]=r, | |||
[i]={O,1625925174,N}, | |||
[j]={{H,863,"void Parser::ParseWebAssemblyFuncrefTypeAttribute(ParsedAttributes &attrs) {\n if (!getTargetInfo().getTriple().isWasm()) {\n Diag(StartLoc, diag::err_wasm_funcref_not_wasm);"}}, | |||
[k]={ | |||
["clang/test/Parser/wasm-funcref.c"]={"clang/test/Parser/wasm-funcref.c:5:16: error: invalid use of \'__funcref\' keyword outside the WebAssembly triple","clang/test/Parser/wasm-funcref.c:6:15: error: invalid use of \'__funcref\' keyword outside the WebAssembly triple"} | |||
} | |||
}, | }, | ||
["err_wasm_reference_pr"]={ | ["err_wasm_reference_pr"]={ | ||
[ | [c]="... to WebAssembly reference type is not allowed", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%select{pointer|reference}0 to WebAssembly reference type is not allowed", | |||
[b]=u, | |||
[g]="(?:pointer|reference) to WebAssembly reference type is not allowed", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={O,1625925174,N}, | |||
[j]={{S,2210,"/// Build a pointer type.\n///\n/// \\param T The type to which we\'ll be building a pointer.\n///\n/// \\param Loc The location of the entity whose type involves this\n/// pointer type or, if there is no such entity, the location of the\n/// type that will have pointer type.\n///\n/// \\param Entity The name of the entity that involves the pointer\n/// type, if known.\n///\n/// \\returns A suitable pointer type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildPointerType(QualType T, SourceLocation Loc, DeclarationName Entity) {\n // In WebAssembly, pointers to reference types and pointers to tables are\n // illegal.\n if (getASTContext().getTargetInfo().getTriple().isWasm()) {\n if (T.isWebAssemblyReferenceType()) {\n Diag(Loc, diag::err_wasm_reference_pr) << 0;"},{S,2299,"/// Build a reference type.\n///\n/// \\param T The type to which we\'ll be building a reference.\n///\n/// \\param Loc The location of the entity whose type involves this\n/// reference type or, if there is no such entity, the location of the\n/// type that will have reference type.\n///\n/// \\param Entity The name of the entity that involves the reference\n/// type, if known.\n///\n/// \\returns A suitable reference type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildReferenceType(QualType T, bool SpelledAsLValue, SourceLocation Loc, DeclarationName Entity) {\n // In WebAssembly, references to reference types and tables are illegal.\n if (getASTContext().getTargetInfo().getTriple().isWasm() && T.isWebAssemblyReferenceType()) {\n Diag(Loc, diag::err_wasm_reference_pr) << 1;"}}, | |||
[k]={ | |||
[Cb]={"clang/test/Sema/wasm-refs-and-tables.c:12:15: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:13:15: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:14:15: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:31:17: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:32:17: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:41:17: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:42:17: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:48:39: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:49:39: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:53:15: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:54:15: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:64:18: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:65:18: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:71:24: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:72:24: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:80:26: error: pointer to WebAssembly reference type is not allowed","clang/test/Sema/wasm-refs-and-tables.c:81:26: error: pointer to WebAssembly reference type is not allowed"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_wasm_reftype_exception_spec"]={ | ["err_wasm_reftype_exception_spec"]={ | ||
[c]="WebAssembly reference type not allowed in exception specification", | [c]="WebAssembly reference type not allowed in exception specification", | ||
[d]=s, | [d]=s, | ||
[f]="WebAssembly reference type not allowed in exception specification", | [f]=t, | ||
[g]= | [h]="WebAssembly reference type not allowed in exception specification", | ||
[ | [b]=u, | ||
[i]={ | [g]="WebAssembly reference type not allowed in exception specification", | ||
[j]={{ | [a]=r, | ||
[e]=r, | |||
[i]={O,1625925174,N}, | |||
[j]={{Ab,178,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T The exception type. This will be decayed to a pointer type\n/// when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n // WebAssembly reference types can\'t be used in exception specifications.\n if (PointeeT.isWebAssemblyReferenceType()) {\n Diag(Range.getBegin(), diag::err_wasm_reftype_exception_spec);"}} | |||
}, | }, | ||
["err_wasm_reftype_multidimensional_array"]={ | ["err_wasm_reftype_multidimensional_array"]={ | ||
[c]="multi-dimensional arrays of WebAssembly references are not allowed", | [c]="multi-dimensional arrays of WebAssembly references are not allowed", | ||
[d]=s, | [d]=s, | ||
[f]="multi\\-dimensional arrays of WebAssembly references are not allowed", | [f]=t, | ||
[ | [h]="multi-dimensional arrays of WebAssembly references are not allowed", | ||
[ | [b]=u, | ||
[i]={ | [g]="multi\\-dimensional arrays of WebAssembly references are not allowed", | ||
[j]={{ | [a]=r, | ||
[e]=r, | |||
[i]={O,1625925174,N}, | |||
[j]={{S,2520,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n // Multi-dimensional arrays of WebAssembly references are not allowed.\n if (Context.getTargetInfo().getTriple().isWasm() && T->isArrayType()) {\n if (ATy && ATy->getElementType().isWebAssemblyReferenceType()) {\n Diag(Loc, diag::err_wasm_reftype_multidimensional_array);"}}, | |||
[k]={ | |||
[Cb]={"clang/test/Sema/wasm-refs-and-tables.c:19:24: error: multi-dimensional arrays of WebAssembly references are not allowed","clang/test/Sema/wasm-refs-and-tables.c:30:19: error: multi-dimensional arrays of WebAssembly references are not allowed","clang/test/Sema/wasm-refs-and-tables.c:40:19: error: multi-dimensional arrays of WebAssembly references are not allowed","clang/test/Sema/wasm-refs-and-tables.c:47:44: error: multi-dimensional arrays of WebAssembly references are not allowed","clang/test/Sema/wasm-refs-and-tables.c:70:23: error: multi-dimensional arrays of WebAssembly references are not allowed","clang/test/Sema/wasm-refs-and-tables.c:79:25: error: multi-dimensional arrays of WebAssembly references are not allowed","clang/test/Sema/wasm-refs-and-tables.c:86:27: error: multi-dimensional arrays of WebAssembly references are not allowed"} | |||
} | |||
}, | }, | ||
["err_wasm_reftype_tc"]={ | ["err_wasm_reftype_tc"]={ | ||
[ | [c]="cannot ... a WebAssembly reference type", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot %select{throw|catch}0 a WebAssembly reference type", | |||
[b]=u, | |||
[g]="cannot (?:throw|catch) a WebAssembly reference type", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={O,1625925174,N}, | |||
[j]={{A,16650,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n if (!Invalid && BaseType.isWebAssemblyReferenceType()) {\n Diag(Loc, diag::err_wasm_reftype_tc) << 1;"},{Y,988,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n // Cannot throw WebAssembly reference type.\n if (Ty.isWebAssemblyReferenceType()) {\n Diag(ThrowLoc, diag::err_wasm_reftype_tc) << 0 << E->getSourceRange();"}}, | |||
[k]={ | |||
["clang/test/SemaCXX/wasm-refs-and-tables.cpp"]={"clang/test/SemaCXX/wasm-refs-and-tables.cpp:22:3: error: cannot throw a WebAssembly reference type","clang/test/SemaCXX/wasm-refs-and-tables.cpp:23:3: error: cannot throw a WebAssembly reference type","clang/test/SemaCXX/wasm-refs-and-tables.cpp:25:24: error: cannot catch a WebAssembly reference type"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_wasm_table_art"]={ | ["err_wasm_table_art"]={ | ||
[ | [c]="cannot ... a WebAssembly table", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot %select{assign|return|throw|subscript}0 a WebAssembly table", | |||
[b]=u, | |||
[g]="cannot (?:assign|return|throw|subscript) a WebAssembly table", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={O,1625925174,N}, | |||
[j]={{bb,12965,"void Sema::CheckReturnValExpr(Expr *RetValExp, QualType lhsType, SourceLocation ReturnLoc, bool isObjCMethod, const AttrVec *Attrs, const FunctionDecl *FD) {\n if (RetValExp && RetValExp->getType()->isWebAssemblyTableType()) {\n Diag(ReturnLoc, diag::err_wasm_table_art) << 1;"},{x,13148,"/// 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 // WebAssembly tables can\'t be used to initialise a variable.\n if (Init && !Init->getType().isNull() && Init->getType()->isWebAssemblyTableType()) {\n Diag(Init->getExprLoc(), diag::err_wasm_table_art) << 0;"},{z,5052,"ExprResult Sema::ActOnArraySubscriptExpr(Scope *S, Expr *base, SourceLocation lbLoc, MultiExprArg ArgExprs, SourceLocation rbLoc) {\n if (base->getType()->isWebAssemblyTableType()) {\n Diag(base->getExprLoc(), diag::err_wasm_table_art) << SourceRange(base->getBeginLoc(), rbLoc) << 3;"},{z,14482,"// C99 6.5.16.1\nQualType Sema::CheckAssignmentOperands(Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType, BinaryOperatorKind Opc) {\n // WebAssembly tables can\'t be used on RHS of an assignment expression.\n if (RHSType->isWebAssemblyTableType()) {\n Diag(Loc, diag::err_wasm_table_art) << 0;"},{Y,994,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n // Cannot throw WebAssembly table.\n if (isPointer && Ty.isWebAssemblyReferenceType()) {\n Diag(ThrowLoc, diag::err_wasm_table_art) << 2 << E->getSourceRange();"},{Ob,3991,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n if (RetValExp) {\n if (ATy && ATy->getElementType().isWebAssemblyReferenceType()) {\n Diag(ReturnLoc, diag::err_wasm_table_art) << 1;"}}, | |||
[k]={ | |||
["clang/test/SemaCXX/wasm-refs-and-tables.cpp"]={"clang/test/SemaCXX/wasm-refs-and-tables.cpp:29:3: error: cannot return a WebAssembly table"} | |||
} | |||
[i]={ | |||
[j]={{bb,12965,"void Sema::CheckReturnValExpr(Expr *RetValExp, QualType lhsType, SourceLocation ReturnLoc, bool isObjCMethod, const AttrVec *Attrs, const FunctionDecl *FD) {\n if (RetValExp && RetValExp->getType()->isWebAssemblyTableType()) {\n Diag(ReturnLoc, diag::err_wasm_table_art) << 1;"},{ | |||
}, | }, | ||
["err_wasm_table_as_function_parameter"]={ | ["err_wasm_table_as_function_parameter"]={ | ||
[c]="cannot use WebAssembly table as a function parameter", | [c]="cannot use WebAssembly table as a function parameter", | ||
[d]=s, | [d]=s, | ||
[f]="cannot use WebAssembly table as a function parameter", | [f]=t, | ||
[g]= | [h]="cannot use WebAssembly table as a function parameter", | ||
[ | [b]=u, | ||
[i]={ | [g]="cannot use WebAssembly table as a function parameter", | ||
[j]={{bb,16708,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n for (ParmVarDecl *Param : Parameters) {\n if (!Param->isInvalidDecl() && Param->getOriginalType()->isWebAssemblyTableType()) {\n Diag(Param->getLocation(), diag::err_wasm_table_as_function_parameter);"},{ | [a]=r, | ||
[e]=r, | |||
[i]={O,1625925174,N}, | |||
[j]={{bb,16708,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n for (ParmVarDecl *Param : Parameters) {\n if (!Param->isInvalidDecl() && Param->getOriginalType()->isWebAssemblyTableType()) {\n Diag(Param->getLocation(), diag::err_wasm_table_as_function_parameter);"},{x,10755,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n for (const ParmVarDecl *Param : NewFD->parameters()) {\n // WebAssembly tables can\'t be used as function parameters.\n if (Context.getTargetInfo().getTriple().isWasm()) {\n if (PT->getUnqualifiedDesugaredType()->isWebAssemblyTableType()) {\n Diag(Param->getTypeSpecStartLoc(), diag::err_wasm_table_as_function_parameter);"},{z,7533,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy. The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n // WebAssembly tables can\'t be used as arguments.\n if (Context.getTargetInfo().getTriple().isWasm()) {\n for (const Expr *Arg : Args) {\n if (Arg && Arg->getType()->isWebAssemblyTableType()) {\n return ExprError(Diag(Arg->getExprLoc(), diag::err_wasm_table_as_function_parameter));"},{S,3034,"QualType Sema::BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes, SourceLocation Loc, DeclarationName Entity, const FunctionProtoType::ExtProtoInfo &EPI) {\n for (unsigned Idx = 0, Cnt = ParamTypes.size(); Idx < Cnt; ++Idx) {\n if (ParamType->isVoidType()) {\n } else if (ParamType->isHalfType() && !getLangOpts().NativeHalfArgsAndReturns && !Context.getTargetInfo().allowHalfArgsAndReturns()) {\n } else if (ParamType->isWebAssemblyTableType()) {\n Diag(Loc, diag::err_wasm_table_as_function_parameter);"}}, | |||
[k]={ | |||
[Cb]={"clang/test/Sema/wasm-refs-and-tables.c:46:25: error: cannot use WebAssembly table as a function parameter","clang/test/Sema/wasm-refs-and-tables.c:51:25: error: cannot use WebAssembly table as a function parameter","clang/test/Sema/wasm-refs-and-tables.c:91:14: error: cannot use WebAssembly table as a function parameter"} | |||
} | |||
}, | }, | ||
["err_wasm_table_conditional_expression"]={ | ["err_wasm_table_conditional_expression"]={ | ||
[c]="cannot use a WebAssembly table within a branch of a conditional expression", | [c]="cannot use a WebAssembly table within a branch of a conditional expression", | ||
[d]=s, | [d]=s, | ||
[f]="cannot use a WebAssembly table within a branch of a conditional expression", | [f]=t, | ||
[g]= | [h]="cannot use a WebAssembly table within a branch of a conditional expression", | ||
[ | [b]=u, | ||
[i]={ | [g]="cannot use a WebAssembly table within a branch of a conditional expression", | ||
[j]={{ | [a]=r, | ||
[e]=r, | |||
[i]={O,1625925174,N}, | |||
[j]={{z,9124,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n if (LHSTy->isWebAssemblyTableType() || RHSTy->isWebAssemblyTableType()) {\n Diag(QuestionLoc, diag::err_wasm_table_conditional_expression) << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{Y,6604,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n/// (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n/// (most-significant-bit-set(a[0]) ? b[0] : c[0], .. ,\n/// most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // WebAssembly tables are not allowed as conditional LHS or RHS.\n if (LTy->isWebAssemblyTableType() || RTy->isWebAssemblyTableType()) {\n Diag(QuestionLoc, diag::err_wasm_table_conditional_expression) << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | |||
[k]={ | |||
[Cb]={"clang/test/Sema/wasm-refs-and-tables.c:99:5: error: cannot use a WebAssembly table within a branch of a conditional expression","clang/test/Sema/wasm-refs-and-tables.c:100:9: error: cannot use a WebAssembly table within a branch of a conditional expression"} | |||
} | |||
}, | }, | ||
["err_wasm_table_in_function"]={ | ["err_wasm_table_in_function"]={ | ||
[c]="WebAssembly table cannot be declared within a function", | [c]="WebAssembly table cannot be declared within a function", | ||
[d]=s, | [d]=s, | ||
[f]="WebAssembly table cannot be declared within a function", | [f]=t, | ||
[g]= | [h]="WebAssembly table cannot be declared within a function", | ||
[ | [b]=u, | ||
[i]={ | [g]="WebAssembly table cannot be declared within a function", | ||
[j]={{ | [a]=r, | ||
[e]=r, | |||
[i]={O,1625925174,N}, | |||
[j]={{x,8659,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // WebAssembly tables must be static with a zero length and can\'t be\n // declared within functions.\n if (T->isWebAssemblyTableType()) {\n if (getCurScope()->getParent()) { // Parent is null at top-level\n Diag(NewVD->getLocation(), diag::err_wasm_table_in_function);"}}, | |||
[k]={ | |||
[Cb]={"clang/test/Sema/wasm-refs-and-tables.c:84:17: error: WebAssembly table cannot be declared within a function","clang/test/Sema/wasm-refs-and-tables.c:85:24: error: WebAssembly table cannot be declared within a function","clang/test/Sema/wasm-refs-and-tables.c:112:17: error: WebAssembly table cannot be declared within a function","clang/test/Sema/wasm-refs-and-tables.c:118:24: error: WebAssembly table cannot be declared within a function","clang/test/Sema/wasm-refs-and-tables.c:120:26: error: WebAssembly table cannot be declared within a function","clang/test/Sema/wasm-refs-and-tables.c:122:28: error: WebAssembly table cannot be declared within a function","clang/test/Sema/wasm-refs-and-tables.c:126:26: error: WebAssembly table cannot be declared within a function"} | |||
} | |||
}, | }, | ||
["err_wasm_table_invalid_uett_operand"]={ | ["err_wasm_table_invalid_uett_operand"]={ | ||
[ | [c]="invalid application of \'A\' to WebAssembly table", | ||
[d]=s, | |||
[f]=t, | |||
[h]="invalid application of \'%0\' to WebAssembly table", | |||
[b]=u, | |||
[g]="invalid application of \'(.*?)\' to WebAssembly table", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={O,1625925174,N}, | |||
[j]={{z,4411,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // WebAssembly tables are always illegal operands to unary expressions and\n // type traits.\n if (Context.getTargetInfo().getTriple().isWasm() && E->getType()->isWebAssemblyTableType()) {\n Diag(E->getExprLoc(), diag::err_wasm_table_invalid_uett_operand) << getTraitSpelling(ExprKind);"},{z,4782,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n/// Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n/// The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n/// standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n // WebAssembly tables are always illegal operands to unary expressions and\n // type traits.\n if (Context.getTargetInfo().getTriple().isWasm() && ExprType->isWebAssemblyTableType()) {\n Diag(OpLoc, diag::err_wasm_table_invalid_uett_operand) << getTraitSpelling(ExprKind);"}}, | |||
[k]={ | |||
[Cb]={"clang/test/Sema/wasm-refs-and-tables.c:68:3: error: invalid application of \'sizeof\' to WebAssembly table","clang/test/Sema/wasm-refs-and-tables.c:69:9: error: invalid application of \'sizeof\' to WebAssembly table","clang/test/Sema/wasm-refs-and-tables.c:78:11: error: invalid application of \'alignof\' to WebAssembly table"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_wasm_table_must_be_static"]={ | ["err_wasm_table_must_be_static"]={ | ||
[c]="WebAssembly table must be static", | [c]="WebAssembly table must be static", | ||
[d]=s, | [d]=s, | ||
[f]="WebAssembly table must be static", | [f]=t, | ||
[g]= | [h]="WebAssembly table must be static", | ||
[ | [b]=u, | ||
[i]={ | [g]="WebAssembly table must be static", | ||
[j]={{ | [a]=r, | ||
[e]=r, | |||
[i]={O,1625925174,N}, | |||
[j]={{x,8664,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // WebAssembly tables must be static with a zero length and can\'t be\n // declared within functions.\n if (T->isWebAssemblyTableType()) {\n if (NewVD->getStorageClass() != SC_Static) {\n Diag(NewVD->getLocation(), diag::err_wasm_table_must_be_static);"}}, | |||
[k]={ | |||
[Cb]={"clang/test/Sema/wasm-refs-and-tables.c:18:15: error: WebAssembly table must be static"} | |||
} | |||
}, | }, | ||
["err_wasm_table_pr"]={ | ["err_wasm_table_pr"]={ | ||
[ | [c]="cannot form a ... to a WebAssembly table", | ||
[d]=s, | |||
[f]=t, | |||
[h]="cannot form a %select{pointer|reference}0 to a WebAssembly table", | |||
[b]=u, | |||
[g]="cannot form a (?:pointer|reference) to a WebAssembly table", | |||
[a]=r, | [a]=r, | ||
[ | [e]=r, | ||
[i]={O,1625925174,N}, | |||
[j]={{z,15141,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n // Cannot take the address of WebAssembly references or tables.\n if (Context.getTargetInfo().getTriple().isWasm()) {\n if (OpTy->isWebAssemblyTableType()) {\n Diag(OpLoc, diag::err_wasm_table_pr) << 1 << OrigOp.get()->getSourceRange();"},{S,2216,"/// Build a pointer type.\n///\n/// \\param T The type to which we\'ll be building a pointer.\n///\n/// \\param Loc The location of the entity whose type involves this\n/// pointer type or, if there is no such entity, the location of the\n/// type that will have pointer type.\n///\n/// \\param Entity The name of the entity that involves the pointer\n/// type, if known.\n///\n/// \\returns A suitable pointer type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildPointerType(QualType T, SourceLocation Loc, DeclarationName Entity) {\n // In WebAssembly, pointers to reference types and pointers to tables are\n // illegal.\n if (getASTContext().getTargetInfo().getTriple().isWasm()) {\n // We need to desugar the type here in case T is a ParenType.\n if (T->getUnqualifiedDesugaredType()->isWebAssemblyTableType()) {\n Diag(Loc, diag::err_wasm_table_pr) << 0;"},{S,2303,"/// Build a reference type.\n///\n/// \\param T The type to which we\'ll be building a reference.\n///\n/// \\param Loc The location of the entity whose type involves this\n/// reference type or, if there is no such entity, the location of the\n/// type that will have reference type.\n///\n/// \\param Entity The name of the entity that involves the reference\n/// type, if known.\n///\n/// \\returns A suitable reference type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildReferenceType(QualType T, bool SpelledAsLValue, SourceLocation Loc, DeclarationName Entity) {\n if (T->isWebAssemblyTableType()) {\n Diag(Loc, diag::err_wasm_table_pr) << 1;"}}, | |||
[k]={ | |||
[Cb]={"clang/test/Sema/wasm-refs-and-tables.c:20:23: error: cannot form a pointer to a WebAssembly table","clang/test/Sema/wasm-refs-and-tables.c:33:18: error: cannot form a pointer to a WebAssembly table","clang/test/Sema/wasm-refs-and-tables.c:43:18: error: cannot form a pointer to a WebAssembly table","clang/test/Sema/wasm-refs-and-tables.c:50:40: error: cannot form a pointer to a WebAssembly table","clang/test/Sema/wasm-refs-and-tables.c:55:16: error: cannot form a pointer to a WebAssembly table","clang/test/Sema/wasm-refs-and-tables.c:87:24: error: cannot form a pointer to a WebAssembly table","clang/test/Sema/wasm-refs-and-tables.c:105:3: error: cannot form a reference to a WebAssembly table"} | |||
} | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["err_weak_property"]={ | ["err_weak_property"]={ | ||
[ | [c]="existing instance variable A for __weak property B must be __weak", | ||
[d]=s, | |||
[f]=t, | |||
[h]="existing instance variable %1 for __weak property %0 must be __weak", | |||
[b]=u, | |||
[g]="existing instance variable (.*?) for __weak property (.*?) must be __weak", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"f881267db9a9",1480718311,"Mass-rename the handful of error_* diagnostics to err_*."}, | [i]={"f881267db9a9",1480718311,"Mass-rename the handful of error_* diagnostics to err_*."}, | ||
[j]={{ | [j]={{Hc,771,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n case Qualifiers::OCL_Weak:\n S.Diag(ivar->getLocation(), diag::err_weak_property) << property->getDeclName() << ivar->getDeclName();"},{Hc,1401,"/// 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 // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // Check that type of property and its ivar are type compatible.\n if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n // __weak is explicit. So it works on Canonical type.\n if ((PropType.isObjCGCWeak() && !IvarType.isObjCGCWeak() && getLangOpts().getGC() != LangOptions::NonGC)) {\n Diag(PropertyDiagLoc, diag::err_weak_property) << property->getDeclName() << Ivar->getDeclName();"}}, | ||
[k]={ | |||
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:20:6: error: existing instance variable \'_wa\' for __weak property \'wa\' must be __weak","clang/test/SemaObjC/mrc-weak.m:22:26: error: existing instance variable \'_wc\' for __weak property \'wc\' must be __weak"} | |||
} | |||
}, | }, | ||
["err_while_loop_outside_of_a_function"]={ | ["err_while_loop_outside_of_a_function"]={ | ||
[c]="while loop outside of a function", | [c]="while loop outside of a function", | ||
[d]=s, | [d]=s, | ||
[f]="while loop outside of a function", | [f]=t, | ||
[g]= | [h]="while loop outside of a function", | ||
[ | [b]=u, | ||
[g]="while loop outside of a function", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"edaae251cca0",1657642332,"[clang] better error message for while loops outside of control flow"}, | [i]={"edaae251cca0",1657642332,"[clang] better error message for while loops outside of control flow"}, | ||
[j]={{ | [j]={{H,6618,"/// ParseDirectDeclarator\n/// direct-declarator: [C99 6.7.5]\n/// [C99] identifier\n/// \'(\' declarator \')\'\n/// [GNU] \'(\' attributes declarator \')\'\n/// [C90] direct-declarator \'[\' constant-expression[opt] \']\'\n/// [C99] direct-declarator \'[\' type-qual-list[opt] assignment-expr[opt] \']\'\n/// [C99] direct-declarator \'[\' \'static\' type-qual-list[opt] assign-expr \']\'\n/// [C99] direct-declarator \'[\' type-qual-list \'static\' assignment-expr \']\'\n/// [C99] direct-declarator \'[\' type-qual-list[opt] \'*\' \']\'\n/// [C++11] direct-declarator \'[\' constant-expression[opt] \']\'\n/// attribute-specifier-seq[opt]\n/// direct-declarator \'(\' parameter-type-list \')\'\n/// direct-declarator \'(\' identifier-list[opt] \')\'\n/// [GNU] direct-declarator \'(\' parameter-forward-declarations\n/// parameter-type-list[opt] \')\'\n/// [C++] direct-declarator \'(\' parameter-declaration-clause \')\'\n/// cv-qualifier-seq[opt] exception-specification[opt]\n/// [C++11] direct-declarator \'(\' parameter-declaration-clause \')\'\n/// attribute-specifier-seq[opt] cv-qualifier-seq[opt]\n/// ref-qualifier[opt] exception-specification[opt]\n/// [C++] declarator-id\n/// [C++11] declarator-id attribute-specifier-seq[opt]\n///\n/// declarator-id: [C++ 8]\n/// \'...\'[opt] id-expression\n/// \'::\'[opt] nested-name-specifier[opt] type-name\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/// C++17 adds the following, which we also handle here:\n///\n/// simple-declaration:\n/// <decl-spec> \'[\' identifier-list \']\' brace-or-equal-initializer \';\'\n///\n/// Note, any additional constructs added here may need corresponding changes\n/// in isConstructorDeclarator.\nvoid Parser::ParseDirectDeclarator(Declarator &D) {\n if (Tok.is(tok::l_paren)) {\n } else if (D.mayOmitIdentifier()) {\n } else {\n if (D.getContext() == DeclaratorContext::Member) {\n } else {\n if (Tok.getKind() == tok::TokenKind::kw_while) {\n Diag(Tok, diag::err_while_loop_outside_of_a_function);"}}, | ||
[k]={ | |||
["clang/test/Parser/while-loop-outside-function.cpp"]={"clang/test/Parser/while-loop-outside-function.cpp:3:1: error: while loop outside of a function","clang/test/Parser/while-loop-outside-function.cpp:7:1: error: while loop outside of a function","clang/test/Parser/while-loop-outside-function.cpp:14:1: error: while loop outside of a function"} | |||
} | |||
}, | }, | ||
["err_wrong_sampler_addressspace"]={ | ["err_wrong_sampler_addressspace"]={ | ||
[c]="sampler type cannot be used with the __local and __global address space qualifiers", | [c]="sampler type cannot be used with the __local and __global address space qualifiers", | ||
[d]=s, | [d]=s, | ||
[f]="sampler type cannot be used with the __local and __global address space qualifiers", | [f]=t, | ||
[g]= | [h]="sampler type cannot be used with the __local and __global address space qualifiers", | ||
[ | [b]=u, | ||
[g]="sampler type cannot be used with the __local and __global address space qualifiers", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions."}, | [i]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions."}, | ||
[j]={{ | [j]={{x,7384,"/// Returns true if there hasn\'t been any invalid type diagnosed.\nstatic bool diagnoseOpenCLTypes(Sema &Se, VarDecl *NewVD) {\n if (R->isSamplerT()) {\n // OpenCL v1.2 s6.9.b p4:\n // The sampler type cannot be used with the __local and __global address\n // space qualifiers.\n if (R.getAddressSpace() == LangAS::opencl_local || R.getAddressSpace() == LangAS::opencl_global) {\n Se.Diag(NewVD->getLocation(), diag::err_wrong_sampler_addressspace);"}}, | ||
[k]={ | |||
["clang/test/SemaOpenCL/sampler_t.cl"]={"clang/test/SemaOpenCL/sampler_t.cl:18:18: error: sampler type cannot be used with the __local and __global address space qualifiers","clang/test/SemaOpenCL/sampler_t.cl:19:24: error: sampler type cannot be used with the __local and __global address space qualifiers","clang/test/SemaOpenCL/sampler_t.cl:56:19: error: sampler type cannot be used with the __local and __global address space qualifiers"} | |||
} | |||
}, | }, | ||
["err_x86_builtin_invalid_rounding"]={ | ["err_x86_builtin_invalid_rounding"]={ | ||
[c]="invalid rounding argument", | [c]="invalid rounding argument", | ||
[d]=s, | [d]=s, | ||
[f]="invalid rounding argument", | [f]=t, | ||
[g]= | [h]="invalid rounding argument", | ||
[ | [b]=u, | ||
[g]="invalid rounding argument", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"a7e253e8fb06",1474606111,"[AVX-512] Add initial support for checking rounding mode arguments of builtins."}, | [i]={"a7e253e8fb06",1474606111,"[AVX-512] Add initial support for checking rounding mode arguments of builtins."}, | ||
[j]={{bb,5790,"// Check if the rounding mode is legal.\nbool Sema::CheckX86BuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall) {\n return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_invalid_rounding) << Arg->getSourceRange();"}} | [j]={{bb,5790,"// Check if the rounding mode is legal.\nbool Sema::CheckX86BuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall) {\n return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_invalid_rounding) << Arg->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/Sema/builtins-x86.c"]={"clang/test/Sema/builtins-x86.c:81:10: error: invalid rounding argument","clang/test/Sema/builtins-x86.c:98:10: error: invalid rounding argument","clang/test/Sema/builtins-x86.c:102:10: error: invalid rounding argument"} | |||
} | |||
}, | }, | ||
["err_x86_builtin_invalid_scale"]={ | ["err_x86_builtin_invalid_scale"]={ | ||
[c]="scale argument must be 1, 2, 4, or 8", | [c]="scale argument must be 1, 2, 4, or 8", | ||
[d]=s, | [d]=s, | ||
[f]="scale argument must be 1, 2, 4, or 8", | [f]=t, | ||
[g]= | [h]="scale argument must be 1, 2, 4, or 8", | ||
[ | [b]=u, | ||
[g]="scale argument must be 1, 2, 4, or 8", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"df5beb2d6f83",1489425410,"[X86] Add checking of the scale argument to scatter/gather builtins"}, | [i]={"df5beb2d6f83",1489425410,"[X86] Add checking of the scale argument to scatter/gather builtins"}, | ||
[j]={{bb,5893,"// Check if the gather/scatter scale is legal.\nbool Sema::CheckX86BuiltinGatherScatterScale(unsigned BuiltinID, CallExpr *TheCall) {\n return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_invalid_scale) << Arg->getSourceRange();"}} | [j]={{bb,5893,"// Check if the gather/scatter scale is legal.\nbool Sema::CheckX86BuiltinGatherScatterScale(unsigned BuiltinID, CallExpr *TheCall) {\n return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_invalid_scale) << Arg->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/Sema/builtins-x86.c"]={"clang/test/Sema/builtins-x86.c:106:10: error: scale argument must be 1, 2, 4, or 8","clang/test/Sema/builtins-x86.c:110:3: error: scale argument must be 1, 2, 4, or 8"} | |||
} | |||
}, | }, | ||
["err_x86_builtin_tile_arg_duplicate"]={ | ["err_x86_builtin_tile_arg_duplicate"]={ | ||
[c]="tile arguments must refer to different tiles", | [c]="tile arguments must refer to different tiles", | ||
[d]=s, | [d]=s, | ||
[f]="tile arguments must refer to different tiles", | [f]=t, | ||
[g]= | [h]="tile arguments must refer to different tiles", | ||
[ | [b]=u, | ||
[g]="tile arguments must refer to different tiles", | |||
[a]=r, | |||
[e]=n, | |||
[i]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata"}, | [i]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata"}, | ||
[j]={{bb,5926,"bool Sema::CheckX86BuiltinTileDuplicate(CallExpr *TheCall, ArrayRef<int> ArgNums) {\n for (int ArgNum : ArgNums) {\n if (ArgValues.test(ArgExtValue))\n return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_tile_arg_duplicate) << TheCall->getArg(ArgNum)->getSourceRange();"}} | [j]={{bb,5926,"bool Sema::CheckX86BuiltinTileDuplicate(CallExpr *TheCall, ArrayRef<int> ArgNums) {\n for (int ArgNum : ArgNums) {\n if (ArgValues.test(ArgExtValue))\n return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_tile_arg_duplicate) << TheCall->getArg(ArgNum)->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/CodeGen/X86/amxcomplex-errors.c"]={"clang/test/CodeGen/X86/amxcomplex-errors.c:10:3: error: tile arguments must refer to different tiles","clang/test/CodeGen/X86/amxcomplex-errors.c:17:3: error: tile arguments must refer to different tiles"} | |||
} | |||
}, | }, | ||
["err_zero_version"]={ | ["err_zero_version"]={ | ||
[c]="version number must have non-zero major, minor, or sub-minor version", | [c]="version number must have non-zero major, minor, or sub-minor version", | ||
[d]=s, | [d]=s, | ||
[f]="version number must have non\\-zero major, minor, or sub\\-minor version", | [f]=t, | ||
[ | [h]="version number must have non-zero major, minor, or sub-minor version", | ||
[ | [b]=u, | ||
[g]="version number must have non\\-zero major, minor, or sub\\-minor version", | |||
[a]=r, | |||
[e]=y, | |||
[i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"}, | [i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify"}, | ||
[j]={{ | [j]={{H,1037,"/// 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 if (AfterMajor == ActualLength) {\n // We only had a single version component.\n if (Major == 0) {\n Diag(Tok, diag::err_zero_version);"},{H,1066,"/// 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 if (AfterMinor == ActualLength) {\n // We had major.minor.\n if (Major == 0 && Minor == 0) {\n Diag(Tok, diag::err_zero_version);"}} | ||
}, | }, | ||
["error_cconv_unsupported"]={ | ["error_cconv_unsupported"]={ | ||
[ | [c]="A calling convention is not supported ...", | ||
[d]=s, | |||
[f]=t, | |||
[h]="%0 calling convention is not supported %select{for this target|on variadic function|on constructor/destructor|on builtin function}1", | |||
[b]=u, | |||
[g]="(.*?) calling convention is not supported (?:for this target|on variadic function|on constructor\\/destructor|on builtin function)", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"f4038e75d202",1563572314,"Disallow most calling convention attributes on PS4"}, | [i]={"f4038e75d202",1563572314,"Disallow most calling convention attributes on PS4"}, | ||
[j]={{ | [j]={{Sb,5448,"bool Sema::CheckCallingConvAttr(const ParsedAttr &Attrs, CallingConv &CC, const FunctionDecl *FD) {\n case TargetInfo::CCCR_Error:\n Diag(Attrs.getLoc(), diag::error_cconv_unsupported) << Attrs << (int)CallingConventionIgnoredReason::ForThisTarget;"}}, | ||
[k]={ | |||
["clang/test/Sema/no_callconv.cpp"]={"clang/test/Sema/no_callconv.cpp:7:6: error: \'__vectorcall\' calling convention is not supported for this target","clang/test/Sema/no_callconv.cpp:8:6: error: \'__regcall\' calling convention is not supported for this target","clang/test/Sema/no_callconv.cpp:9:21: error: \'vectorcall\' calling convention is not supported for this target","clang/test/Sema/no_callconv.cpp:10:21: error: \'regcall\' calling convention is not supported for this target","clang/test/Sema/no_callconv.cpp:11:21: error: \'ms_abi\' calling convention is not supported for this target","clang/test/Sema/no_callconv.cpp:12:21: error: \'intel_ocl_bicc\' calling convention is not supported for this target","clang/test/Sema/no_callconv.cpp:13:21: error: \'swiftcall\' calling convention is not supported for this target","clang/test/Sema/no_callconv.cpp:14:21: error: \'swiftasynccall\' calling convention is not supported for this target","clang/test/Sema/no_callconv.cpp:15:21: error: \'pascal\' calling convention is not supported for this target","clang/test/Sema/no_callconv.cpp:16:21: error: \'preserve_most\' calling convention is not supported for this target","clang/test/Sema/no_callconv.cpp:17:21: error: \'preserve_all\' calling convention is not supported for this target","clang/test/Sema/no_callconv.cpp:18:21: error: \'stdcall\' calling convention is not supported for this target","clang/test/Sema/no_callconv.cpp:19:21: error: \'fastcall\' calling convention is not supported for this target","clang/test/Sema/no_callconv.cpp:20:21: error: \'thiscall\' calling convention is not supported for this target"} | |||
} | |||
}, | }, | ||
["error_duplicate_asm_operand_name"]={ | ["error_duplicate_asm_operand_name"]={ | ||
[ | [c]="duplicate use of asm operand name \"A\"", | ||
[d]=s, | |||
[f]=t, | |||
[h]="duplicate use of asm operand name \"%0\"", | |||
[b]=u, | |||
[g]="duplicate use of asm operand name \"(.*?)\"", | |||
[a]=r, | [a]=r, | ||
[ | [e]="Inline Assembly Issue", | ||
[i]={"954ec09aed4f",1559178346,"clang support gnu asm goto."}, | [i]={"954ec09aed4f",1559178346,"clang support gnu asm goto."}, | ||
[j]={{"clang/lib/Sema/SemaStmtAsm.cpp",736,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n if (Found != NamedOperandList.end()) {\n Diag((Found + 1)->second->getBeginLoc(), diag::error_duplicate_asm_operand_name) << (Found + 1)->first;"}} | [j]={{"clang/lib/Sema/SemaStmtAsm.cpp",736,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n if (Found != NamedOperandList.end()) {\n Diag((Found + 1)->second->getBeginLoc(), diag::error_duplicate_asm_operand_name) << (Found + 1)->first;"}}, | ||
[k]={ | |||
["clang/test/Sema/asm.c"]={"clang/test/Sema/asm.c:300:29: error: duplicate use of asm operand name \"lab\"","clang/test/Sema/asm.c:303:69: error: duplicate use of asm operand name \"lab\"","clang/test/Sema/asm.c:309:40: error: duplicate use of asm operand name \"lab\"","clang/test/Sema/asm.c:312:42: error: duplicate use of asm operand name \"lab\""} | |||
} | |||
}, | }, | ||
["error_inoutput_conflict_with_clobber"]={ | ["error_inoutput_conflict_with_clobber"]={ | ||
[c]="asm-specifier for input or output variable conflicts with asm clobber list", | [c]="asm-specifier for input or output variable conflicts with asm clobber list", | ||
[d]=s, | [d]=s, | ||
[f]="asm\\-specifier for input or output variable conflicts with asm clobber list", | [f]=t, | ||
[ | [h]="asm-specifier for input or output variable conflicts with asm clobber list", | ||
[ | [b]=u, | ||
[g]="asm\\-specifier for input or output variable conflicts with asm clobber list", | |||
[a]=r, | |||
[e]=r, | |||
[i]={"c42fd03bf854",1482755022,"[inline-asm]No error for conflict between inputs\\outputs and clobber list"}, | [i]={"c42fd03bf854",1482755022,"[inline-asm]No error for conflict between inputs\\outputs and clobber list"}, | ||
[j]={{"clang/lib/Sema/SemaStmtAsm.cpp",717,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n if (ConstraintLoc.isValid())\n targetDiag(ConstraintLoc, diag::error_inoutput_conflict_with_clobber);"}} | [j]={{"clang/lib/Sema/SemaStmtAsm.cpp",717,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n if (ConstraintLoc.isValid())\n targetDiag(ConstraintLoc, diag::error_inoutput_conflict_with_clobber);"}}, | ||
[k]={ | |||
["clang/test/Sema/arm64-inline-asm.c"]={"clang/test/Sema/arm64-inline-asm.c:13:34: error: asm-specifier for input or output variable conflicts with asm clobber list","clang/test/Sema/arm64-inline-asm.c:14:35: error: asm-specifier for input or output variable conflicts with asm clobber list"} | |||
} | |||
}, | }, | ||
["error_subscript_overload"]={ | ["error_subscript_overload"]={ | ||
[ | [c]="overloaded A cannot have ... parameter before C++23", | ||
[d]=s, | |||
[f]=t, | |||
[h]="overloaded %0 cannot have %select{no|a defaulted|more than one}1 parameter before C++23", | |||
[b]=u, | |||
[g]="overloaded (.*?) cannot have (?:no|a defaulted|more than one) parameter before C\\+\\+23", | |||
[a]=r, | [a]=r, | ||
[ | [e]=n, | ||
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | [i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | ||
[j]={{ | [j]={{A,16193,"/// 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 // C++ [over.oper]p8:\n // An operator function cannot have default arguments (8.3.6),\n // except where explicitly stated below.\n //\n // Only the function-call operator (C++ [over.call]p1) and the subscript\n // operator (CWG2507) allow default arguments.\n if (Op != OO_Call) {\n if (FirstDefaultedParam) {\n if (Op == OO_Subscript) {\n Diag(FnDecl->getLocation(), LangOpts.CPlusPlus23 ? diag::ext_subscript_overload : diag::error_subscript_overload) << FnDecl->getDeclName() << 1 << FirstDefaultedParam->getDefaultArgRange();"},{A,16244,"#include \"clang/Basic/OperatorKinds.def\"\n if (Op == OO_Subscript && NumParams != 2) {\n Diag(FnDecl->getLocation(), LangOpts.CPlusPlus23 ? diag::ext_subscript_overload : diag::error_subscript_overload) << FnDecl->getDeclName() << (NumParams == 1 ? 0 : 2);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx2b-subscript.cpp"]={"clang/test/Parser/cxx2b-subscript.cpp:10:17: error: overloaded \'operator[]\' cannot have more than one parameter before C++23","clang/test/Parser/cxx2b-subscript.cpp:13:17: error: overloaded \'operator[]\' cannot have no parameter before C++23","clang/test/Parser/cxx2b-subscript.cpp:19:17: error: overloaded \'operator[]\' cannot have a defaulted parameter before C++23","clang/test/Parser/cxx2b-subscript.cpp:22:17: error: overloaded \'operator[]\' cannot have a defaulted parameter before C++23","clang/test/Parser/cxx2b-subscript.cpp:22:17: error: overloaded \'operator[]\' cannot have more than one parameter before C++23","clang/test/Parser/cxx2b-subscript.cpp:30:18: error: overloaded \'operator[]\' cannot have no parameter before C++23","clang/test/Parser/cxx2b-subscript.cpp:30:18: error: overloaded \'operator[]\' cannot have more than one parameter before C++23"} | |||
} | |||
}, | }, | ||
["escaped_newline_block_comment_end"]={ | ["escaped_newline_block_comment_end"]={ | ||
[ | [c]="escaped newline between */ characters at block comment end [-Wcomment]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={jb,qb,rc,"comments",sb}, | |||
[m]=rc, | |||
[h]="escaped newline between */ characters at block comment end", | |||
[b]=o, | [b]=o, | ||
[ | [g]="escaped newline between \\*\\/ characters at block comment end", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wcomment[^\\]]*\\]", | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[j]={{ab,2695,"/// isBlockCommentEndOfEscapedNewLine - Return true if the specified newline\n/// character (either \\\\n or \\\\r) is part of an escaped newline sequence. Issue\n/// a diagnostic if so. We know that the newline is inside of a block comment.\nstatic bool isEndOfBlockCommentWithEscapedNewLine(const char *CurPtr, Lexer *L, bool Trigraphs) {\n // Warn about having an escaped newline between the */ characters.\n if (!L->isLexingRawMode())\n L->Diag(CurPtr + 1, diag::escaped_newline_block_comment_end);"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Lexer/comment-escape.c"]={"clang/test/Lexer/comment-escape.c:9:6: warning: escaped newline between */ characters at block comment end [-Wcomment]","clang/test/Lexer/comment-escape.c:14:6: warning: escaped newline between */ characters at block comment end [-Wcomment]","clang/test/Lexer/comment-escape.c:21:5: warning: escaped newline between */ characters at block comment end [-Wcomment]","clang/test/Lexer/comment-escape.c:26:5: warning: escaped newline between */ characters at block comment end [-Wcomment]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_abstract_pack_declarator_parens"]={ | ["ext_abstract_pack_declarator_parens"]={ | ||
[ | [c]="ISO C++11 requires a parenthesized pack declaration to have a name [-Wanonymous-pack-parens]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"anonymous-pack-parens"}, | |||
[m]="anonymous-pack-parens", | |||
[h]="ISO C++11 requires a parenthesized pack declaration to have a name", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+11 requires a parenthesized pack declaration to have a name", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wanonymous\\-pack\\-parens[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"b19337fbe474",1361391567,"PR15311: Finish implementation of the suggested resolution of core issue 1488,"}, | [i]={"b19337fbe474",1361391567,"PR15311: Finish implementation of the suggested resolution of core issue 1488,"}, | ||
[j]={{ | [j]={{H,6590,"/// ParseDirectDeclarator\n/// direct-declarator: [C99 6.7.5]\n/// [C99] identifier\n/// \'(\' declarator \')\'\n/// [GNU] \'(\' attributes declarator \')\'\n/// [C90] direct-declarator \'[\' constant-expression[opt] \']\'\n/// [C99] direct-declarator \'[\' type-qual-list[opt] assignment-expr[opt] \']\'\n/// [C99] direct-declarator \'[\' \'static\' type-qual-list[opt] assign-expr \']\'\n/// [C99] direct-declarator \'[\' type-qual-list \'static\' assignment-expr \']\'\n/// [C99] direct-declarator \'[\' type-qual-list[opt] \'*\' \']\'\n/// [C++11] direct-declarator \'[\' constant-expression[opt] \']\'\n/// attribute-specifier-seq[opt]\n/// direct-declarator \'(\' parameter-type-list \')\'\n/// direct-declarator \'(\' identifier-list[opt] \')\'\n/// [GNU] direct-declarator \'(\' parameter-forward-declarations\n/// parameter-type-list[opt] \')\'\n/// [C++] direct-declarator \'(\' parameter-declaration-clause \')\'\n/// cv-qualifier-seq[opt] exception-specification[opt]\n/// [C++11] direct-declarator \'(\' parameter-declaration-clause \')\'\n/// attribute-specifier-seq[opt] cv-qualifier-seq[opt]\n/// ref-qualifier[opt] exception-specification[opt]\n/// [C++] declarator-id\n/// [C++11] declarator-id attribute-specifier-seq[opt]\n///\n/// declarator-id: [C++ 8]\n/// \'...\'[opt] id-expression\n/// \'::\'[opt] nested-name-specifier[opt] type-name\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/// C++17 adds the following, which we also handle here:\n///\n/// simple-declaration:\n/// <decl-spec> \'[\' identifier-list \']\' brace-or-equal-initializer \';\'\n///\n/// Note, any additional constructs added here may need corresponding changes\n/// in isConstructorDeclarator.\nvoid Parser::ParseDirectDeclarator(Declarator &D) {\n if (Tok.is(tok::l_paren)) {\n } else if (D.mayOmitIdentifier()) {\n // The grammar for abstract-pack-declarator does not allow grouping parens.\n // FIXME: Revisit this once core issue 1488 is resolved.\n if (D.hasEllipsis() && D.hasGroupingParens())\n Diag(PP.getLocForEndOfToken(D.getEllipsisLoc()), diag::ext_abstract_pack_declarator_parens);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx0x-ambig.cpp"]={"clang/test/Parser/cxx0x-ambig.cpp:125:17: warning: ISO C++11 requires a parenthesized pack declaration to have a name [-Wanonymous-pack-parens]","clang/test/Parser/cxx0x-ambig.cpp:140:20: warning: ISO C++11 requires a parenthesized pack declaration to have a name [-Wanonymous-pack-parens]","clang/test/Parser/cxx0x-ambig.cpp:141:20: warning: ISO C++11 requires a parenthesized pack declaration to have a name [-Wanonymous-pack-parens]","clang/test/Parser/cxx0x-ambig.cpp:142:28: warning: ISO C++11 requires a parenthesized pack declaration to have a name [-Wanonymous-pack-parens]"} | |||
} | |||
}, | }, | ||
["ext_adl_only_template_id"]={ | ["ext_adl_only_template_id"]={ | ||
[ | [c]="use of function template name with no prior declaration in function call with explicit template arguments is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="use of function template name with no prior declaration in function call with explicit template arguments is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of function template name with no prior declaration in function call with explicit template arguments is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"b23c5e8c3df8",1557372687,"[c++20] Implement P0846R0: allow (ADL-only) calls to template-ids whose"}, | [i]={"b23c5e8c3df8",1557372687,"[c++20] Implement P0846R0: allow (ADL-only) calls to template-ids whose"}, | ||
[j]={{ | [j]={{z,7080,"ExprResult Sema::ActOnCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig) {\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();"}}, | ||
[k]={ | |||
["clang/test/CXX/basic/basic.lookup/basic.lookup.unqual/p3.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.unqual/p3.cpp:44:11: warning: use of function template name with no prior declaration in function call with explicit template arguments is a C++20 extension [-Wc++20-extensions]"} | |||
} | |||
}, | }, | ||
["ext_aggregate_init_not_constant"]={ | ["ext_aggregate_init_not_constant"]={ | ||
[ | [c]="initializer for aggregate is not a compile-time constant [-Wc99-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={V,v}, | |||
[m]=V, | |||
[h]="initializer for aggregate is not a compile-time constant", | |||
[b]=o, | [b]=o, | ||
[ | [g]="initializer for aggregate is not a compile\\-time constant", | ||
[a]=Gb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"1aac546d3108",1374490706,"Implement the part of C89 6.5.7 p3 requiring a constant initializer list"}, | [i]={"1aac546d3108",1374490706,"Implement the part of C89 6.5.7 p3 requiring a constant initializer list"}, | ||
[j]={{ | [j]={{x,13435,"/// 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 if (VDecl->isLocalVarDecl()) {\n // Don\'t check the initializer if the declaration is malformed.\n if (VDecl->isInvalidDecl()) {\n } else if (VDecl->getType().getAddressSpace() == LangAS::opencl_constant) {\n } else if (getLangOpts().CPlusPlus) {\n } else if (VDecl->getStorageClass() == SC_Static) {\n } else if (!getLangOpts().C99 && VDecl->getType()->isAggregateType() && isa<InitListExpr>(Init)) {\n if (!Init->isConstantInitializer(Context, false, &Culprit)) {\n Diag(Culprit->getExprLoc(), diag::ext_aggregate_init_not_constant) << Culprit->getSourceRange();"}}, | ||
[k]={ | |||
[mc]={"clang/test/Sema/c89.c:121:16: warning: initializer for aggregate is not a compile-time constant [-Wc99-extensions]","clang/test/Sema/c89.c:122:24: warning: initializer for aggregate is not a compile-time constant [-Wc99-extensions]"} | |||
} | |||
}, | }, | ||
["ext_alias_declaration"]={ | ["ext_alias_declaration"]={ | ||
[ | [c]="alias declarations are a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="alias declarations are a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="alias declarations are a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"dda56e4b4a9c",1302877477,"Support for C++11 (non-template) alias declarations."}, | [i]={"dda56e4b4a9c",1302877477,"Support for C++11 (non-template) alias declarations."}, | ||
[j]={{ | [j]={{M,879,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_alias_declaration : diag::ext_alias_declaration);"}}, | ||
[k]={ | |||
["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:62:14: warning: alias declarations are a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_alias_in_init_statement"]={ | ["ext_alias_in_init_statement"]={ | ||
[ | [c]="alias declaration in this context is a C++23 extension [-Wc++23-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={fb,Eb}, | |||
[m]=fb, | |||
[h]="alias declaration in this context is a C++23 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="alias declaration in this context is a C\\+\\+23 extension", | ||
[a]=Fb, | |||
[e]=y, | |||
[i]={tb,1612659633,vb}, | |||
[j]={{wb,2003,"Parser::DeclGroupPtrTy Parser::ParseAliasDeclarationInInitStatement(DeclaratorContext Context, ParsedAttributes &Attrs) {\n Diag(DeclStart, !getLangOpts().CPlusPlus23 ? diag::ext_alias_in_init_statement : diag::warn_cxx20_alias_in_init_statement) << SourceRange(DeclStart, DeclEnd);"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Parser/cxx2b-init-statement.cpp"]={"clang/test/Parser/cxx2b-init-statement.cpp:10:10: warning: alias declaration in this context is a C++23 extension [-Wc++23-extensions]","clang/test/Parser/cxx2b-init-statement.cpp:12:12: warning: alias declaration in this context is a C++23 extension [-Wc++23-extensions]","clang/test/Parser/cxx2b-init-statement.cpp:16:8: warning: alias declaration in this context is a C++23 extension [-Wc++23-extensions]"} | ||
[i]={tb,1612659633, | } | ||
[j]={{ | |||
}, | }, | ||
["ext_alignof_expr"]={ | ["ext_alignof_expr"]={ | ||
[ | [c]="A applied to an expression is a GNU extension [-Wgnu-alignof-expression]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={L,"gnu-alignof-expression"}, | |||
[m]="gnu-alignof-expression", | |||
[h]="%0 applied to an expression is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(.*?) applied to an expression is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-alignof\\-expression[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"7dd5fe5ce60c",1359454698,"Produce a diagnostic if alignas is applied to an expression. Neither C11 nor"}, | [i]={"7dd5fe5ce60c",1359454698,"Produce a diagnostic if alignas is applied to an expression. Neither C11 nor"}, | ||
[j]={{ub,2529,"/// 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 if (OpTok.isOneOf(tok::kw_alignof, tok::kw__Alignof))\n Diag(OpTok, diag::ext_alignof_expr) << OpTok.getIdentifierInfo();"}} | [j]={{ub,2529,"/// 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 if (OpTok.isOneOf(tok::kw_alignof, tok::kw__Alignof))\n Diag(OpTok, diag::ext_alignof_expr) << OpTok.getIdentifierInfo();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/alignof-sizeof-reference.cpp"]={"clang/test/SemaCXX/alignof-sizeof-reference.cpp:7:17: warning: \'alignof\' applied to an expression is a GNU extension [-Wgnu-alignof-expression]","clang/test/SemaCXX/alignof-sizeof-reference.cpp:23:9: warning: \'alignof\' applied to an expression is a GNU extension [-Wgnu-alignof-expression]"} | |||
} | |||
}, | }, | ||
["ext_anonymous_record_with_anonymous_type"]={ | ["ext_anonymous_record_with_anonymous_type"]={ | ||
[ | [c]="anonymous types declared in an anonymous ... are an extension [-Wnested-anon-types]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"nested-anon-types",v}, | |||
[m]="nested-anon-types", | |||
[h]="anonymous types declared in an anonymous %select{struct|union}0 are an extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="anonymous types declared in an anonymous (?:struct|union) are an extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wnested\\-anon\\-types[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"254d2666e435",1359334445,"Add a -pedantic warning: an anonymous union within an anonymous union is not"}, | [i]={"254d2666e435",1359334445,"Add a -pedantic warning: an anonymous union within an anonymous union is not"}, | ||
[j]={{ | [j]={{x,5635,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n if (getLangOpts().CPlusPlus) {\n // C++ [class.union]p2:\n // The member-specification of an anonymous union shall only\n // define non-static data members. [Note: nested types and\n // functions cannot be declared within an anonymous union. ]\n for (auto *Mem : Record->decls()) {\n if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n } else if (Mem->isImplicit()) {\n } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n if (!MemRecord->isAnonymousStructOrUnion() && MemRecord->getDeclName()) {\n } else {\n Diag(MemRecord->getLocation(), diag::ext_anonymous_record_with_anonymous_type) << Record->isUnion();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:12:5: warning: anonymous types declared in an anonymous union are an extension [-Wnested-anon-types]","clang/test/SemaCXX/anonymous-union.cpp:113:5: warning: anonymous types declared in an anonymous union are an extension [-Wnested-anon-types]","clang/test/SemaCXX/anonymous-union.cpp:140:7: warning: anonymous types declared in an anonymous struct are an extension [-Wnested-anon-types]","clang/test/SemaCXX/anonymous-union.cpp:148:7: warning: anonymous types declared in an anonymous union are an extension [-Wnested-anon-types]","clang/test/SemaCXX/anonymous-union.cpp:199:7: warning: anonymous types declared in an anonymous union are an extension [-Wnested-anon-types]"} | |||
} | |||
}, | }, | ||
["ext_anonymous_record_with_type"]={ | ["ext_anonymous_record_with_type"]={ | ||
[ | [c]="types declared in an anonymous ... are a Microsoft extension [-Wmicrosoft-anon-tag]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={G,"microsoft-anon-tag",v}, | |||
[m]="microsoft-anon-tag", | |||
[h]="types declared in an anonymous %select{struct|union}0 are a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="types declared in an anonymous (?:struct|union) are a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-anon\\-tag[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"4ad4b5863947",1283945545,"Allow type definitions inside anonymous struct/union in Microsoft mode."}, | [i]={"4ad4b5863947",1283945545,"Allow type definitions inside anonymous struct/union in Microsoft mode."}, | ||
[j]={{ | [j]={{x,5622,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n if (getLangOpts().CPlusPlus) {\n // C++ [class.union]p2:\n // The member-specification of an anonymous union shall only\n // define non-static data members. [Note: nested types and\n // functions cannot be declared within an anonymous union. ]\n for (auto *Mem : Record->decls()) {\n if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n } else if (Mem->isImplicit()) {\n } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n if (!MemRecord->isAnonymousStructOrUnion() && MemRecord->getDeclName()) {\n // Visual C++ allows type definition in anonymous struct or union.\n if (getLangOpts().MicrosoftExt)\n Diag(MemRecord->getLocation(), diag::ext_anonymous_record_with_type) << Record->isUnion();"},{x,5656,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n if (getLangOpts().CPlusPlus) {\n // C++ [class.union]p2:\n // The member-specification of an anonymous union shall only\n // define non-static data members. [Note: nested types and\n // functions cannot be declared within an anonymous union. ]\n for (auto *Mem : Record->decls()) {\n if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n } else if (Mem->isImplicit()) {\n } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n } else if (isa<AccessSpecDecl>(Mem)) {\n } else if (isa<StaticAssertDecl>(Mem)) {\n } else {\n // Visual C++ allows type definition in anonymous struct or union.\n if (getLangOpts().MicrosoftExt && DK == diag::err_anonymous_record_with_type)\n Diag(Mem->getLocation(), diag::ext_anonymous_record_with_type) << Record->isUnion();"}}, | ||
[k]={ | |||
[Kc]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:15:12: warning: types declared in an anonymous union are a Microsoft extension [-Wmicrosoft-anon-tag]","clang/test/SemaCXX/MicrosoftExtensions.cpp:20:11: warning: types declared in an anonymous union are a Microsoft extension [-Wmicrosoft-anon-tag]","clang/test/SemaCXX/MicrosoftExtensions.cpp:26:17: warning: types declared in an anonymous union are a Microsoft extension [-Wmicrosoft-anon-tag]","clang/test/SemaCXX/MicrosoftExtensions.cpp:27:12: warning: types declared in an anonymous union are a Microsoft extension [-Wmicrosoft-anon-tag]","clang/test/SemaCXX/MicrosoftExtensions.cpp:34:12: warning: types declared in an anonymous struct are a Microsoft extension [-Wmicrosoft-anon-tag]","clang/test/SemaCXX/MicrosoftExtensions.cpp:39:8: warning: types declared in an anonymous struct are a Microsoft extension [-Wmicrosoft-anon-tag]","clang/test/SemaCXX/MicrosoftExtensions.cpp:45:17: warning: types declared in an anonymous struct are a Microsoft extension [-Wmicrosoft-anon-tag]","clang/test/SemaCXX/MicrosoftExtensions.cpp:46:12: warning: types declared in an anonymous struct are a Microsoft extension [-Wmicrosoft-anon-tag]"} | |||
} | |||
}, | }, | ||
["ext_anonymous_struct_union_qualified"]={ | ["ext_anonymous_struct_union_qualified"]={ | ||
[ | [c]="anonymous ... cannot be \'A\' [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="anonymous %select{struct|union}0 cannot be \'%1\'", | |||
[b]=o, | [b]=o, | ||
[ | [g]="anonymous (?:struct|union) cannot be \'(.*?)\'", | ||
[a]=X, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"0f8bc97abd6d",1304982333,"Ignore const/volatile/restrict qualifiers on anonymous structs and"}, | [i]={"0f8bc97abd6d",1304982333,"Ignore const/volatile/restrict qualifiers on anonymous structs and"}, | ||
[j]={{ | [j]={{x,5556,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n if (getLangOpts().CPlusPlus) {\n // Ignore const/volatile/restrict qualifiers.\n if (DS.getTypeQualifiers()) {\n if (DS.getTypeQualifiers() & DeclSpec::TQ_const)\n Diag(DS.getConstSpecLoc(), diag::ext_anonymous_struct_union_qualified) << Record->isUnion() << \"const\" << FixItHint::CreateRemoval(DS.getConstSpecLoc());"},{x,5561,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n if (getLangOpts().CPlusPlus) {\n // Ignore const/volatile/restrict qualifiers.\n if (DS.getTypeQualifiers()) {\n if (DS.getTypeQualifiers() & DeclSpec::TQ_volatile)\n Diag(DS.getVolatileSpecLoc(), diag::ext_anonymous_struct_union_qualified) << Record->isUnion() << \"volatile\" << FixItHint::CreateRemoval(DS.getVolatileSpecLoc());"},{x,5566,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n if (getLangOpts().CPlusPlus) {\n // Ignore const/volatile/restrict qualifiers.\n if (DS.getTypeQualifiers()) {\n if (DS.getTypeQualifiers() & DeclSpec::TQ_restrict)\n Diag(DS.getRestrictSpecLoc(), diag::ext_anonymous_struct_union_qualified) << Record->isUnion() << \"restrict\" << FixItHint::CreateRemoval(DS.getRestrictSpecLoc());"},{x,5571,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n if (getLangOpts().CPlusPlus) {\n // Ignore const/volatile/restrict qualifiers.\n if (DS.getTypeQualifiers()) {\n if (DS.getTypeQualifiers() & DeclSpec::TQ_atomic)\n Diag(DS.getAtomicSpecLoc(), diag::ext_anonymous_struct_union_qualified) << Record->isUnion() << \"_Atomic\" << FixItHint::CreateRemoval(DS.getAtomicSpecLoc());"},{x,5576,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n if (getLangOpts().CPlusPlus) {\n // Ignore const/volatile/restrict qualifiers.\n if (DS.getTypeQualifiers()) {\n if (DS.getTypeQualifiers() & DeclSpec::TQ_unaligned)\n Diag(DS.getUnalignedSpecLoc(), diag::ext_anonymous_struct_union_qualified) << Record->isUnion() << \"__unaligned\" << FixItHint::CreateRemoval(DS.getUnalignedSpecLoc());"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:198:5: warning: anonymous union cannot be \'const\' [-Wpedantic]"} | |||
} | |||
}, | }, | ||
["ext_anonymous_union"]={ | ["ext_anonymous_union"]={ | ||
[ | [c]="anonymous unions are a C11 extension [-Wc11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={Pb,v}, | |||
[m]=Pb, | |||
[h]="anonymous unions are a C11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="anonymous unions are a C11 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc11\\-extensions[^\\]]*\\]", | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[ | [j]={{x,5508,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n // Diagnose whether this anonymous struct/union is an extension.\n if (Record->isUnion() && !getLangOpts().CPlusPlus && !getLangOpts().C11)\n Diag(Record->getLocation(), diag::ext_anonymous_union);"}}, | ||
[k]={ | |||
["clang/test/Sema/anonymous-struct-union-c11.c"]={"clang/test/Sema/anonymous-struct-union-c11.c:16:3: warning: anonymous unions are a C11 extension [-Wc11-extensions]"} | |||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_array_init_copy"]={ | ["ext_array_init_copy"]={ | ||
[ | [c]="initialization of an array of type A from a compound literal of type B is a GNU extension [-Wgnu-compound-literal-initializer]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-compound-literal-initializer",v}, | |||
[m]="gnu-compound-literal-initializer", | |||
[h]="initialization of an array %diff{of type $ from a compound literal of type $|from a compound literal}0,1 is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="initialization of an array (?:of type (.*?) from a compound literal of type (.*?)|from a compound literal) is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-compound\\-literal\\-initializer[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"e2f943b5cb44",1298399391,"Implement the GNU C extension which permits the initialization of an"}, | [i]={"e2f943b5cb44",1298399391,"Implement the GNU C extension which permits the initialization of an"}, | ||
[j]={{ | [j]={{U,9223,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n case SK_GNUArrayInit:\n S.Diag(Kind.getLocation(), diag::ext_array_init_copy) << Step->Type << CurInit.get()->getType() << CurInit.get()->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/Sema/array-init.c"]={"clang/test/Sema/array-init.c:284:5: warning: initialization of an array of type \'int[5]\' from a compound literal of type \'int[5]\' is a GNU extension [-Wgnu-compound-literal-initializer]","clang/test/Sema/array-init.c:285:5: warning: initialization of an array of type \'int[5]\' from a compound literal of type \'int[5]\' is a GNU extension [-Wgnu-compound-literal-initializer]","clang/test/Sema/array-init.c:286:5: warning: initialization of an array of type \'int[]\' from a compound literal of type \'int[5]\' is a GNU extension [-Wgnu-compound-literal-initializer]","clang/test/Sema/array-init.c:287:5: warning: initialization of an array of type \'int[]\' from a compound literal of type \'int[5]\' is a GNU extension [-Wgnu-compound-literal-initializer]","clang/test/Sema/array-init.c:288:5: warning: initialization of an array of type \'int[]\' from a compound literal of type \'int5\' (aka \'int[5]\') is a GNU extension [-Wgnu-compound-literal-initializer]"} | |||
} | |||
}, | }, | ||
["ext_array_init_parens"]={ | ["ext_array_init_parens"]={ | ||
[ | [c]="parenthesized initialization of a member array is a GNU extension [-Wgnu-array-member-paren-init]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"gnu-array-member-paren-init"}, | ||
[ | [m]="gnu-array-member-paren-init", | ||
[ | [h]="parenthesized initialization of a member array is a GNU extension", | ||
[ | [b]=R, | ||
[ | [g]="parenthesized initialization of a member array is a GNU extension", | ||
[ | [a]=" \\[[^\\]]*\\-Wgnu\\-array\\-member\\-paren\\-init[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"ebeed415870b",1329345489,"Support GCC\'s bug^Wextension allowing class array members to be initalized by a"}, | [i]={"ebeed415870b",1329345489,"Support GCC\'s bug^Wextension allowing class array members to be initalized by a"}, | ||
[j]={{ | [j]={{U,9249,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n case SK_ParenthesizedArrayInit:\n S.Diag(Kind.getLocation(), diag::ext_array_init_parens) << CurInit.get()->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp:73:28: error: parenthesized initialization of a member array is a GNU extension [-Wgnu-array-member-paren-init]"} | |||
} | |||
}, | }, | ||
["ext_array_size_conversion"]={ | ["ext_array_size_conversion"]={ | ||
[ | [c]="implicit conversion from array size expression of type A to ... type B is a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={T,E,v}, | |||
[m]=E, | |||
[h]="implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="implicit conversion from array size expression of type (.*?) to (?:integral|enumeration) type (.*?) is a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class"}, | [i]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class"}, | ||
[j]={{ | [j]={{Y,2187,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n if (getLangOpts().CPlusPlus14) {\n } else {\n class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n SemaDiagnosticBuilder diagnoseConversion(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_array_size_conversion : diag::ext_array_size_conversion) << T << ConvTy->isEnumeralType() << ConvTy; }"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/new-array-size-conv.cpp"]={"clang/test/SemaCXX/new-array-size-conv.cpp:25:9: warning: implicit conversion from array size expression of type \'ValueInt\' to integral type \'int\' is a C++11 extension [-Wc++11-extensions]","clang/test/SemaCXX/new-array-size-conv.cpp:30:9: warning: implicit conversion from array size expression of type \'ValueEnum\' to enumeration type \'E\' is a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_auto_new_list_init"]={ | ["ext_auto_new_list_init"]={ | ||
[ | [c]="ISO C++ standards before C++17 do not allow new expression for type A to use list-initialization [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={P,hb,v}, | |||
[m]=P, | |||
[h]="ISO C++ standards before C++17 do not allow new expression for type %0 to use list-initialization", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+ standards before C\\+\\+17 do not allow new expression for type (.*?) to use list\\-initialization", | ||
[a]=ib, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"00c9dfdfd094",1513016994,"P0620 follow-up: deducing `auto` from braced-init-list in new expr"}, | [i]={"00c9dfdfd094",1513016994,"P0620 follow-up: deducing `auto` from braced-init-list in new expr"}, | ||
[j]={{ | [j]={{Y,2060,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n } else if (Deduced && !Deduced->isDeduced()) {\n if (Braced && !getLangOpts().CPlusPlus17)\n Diag(Initializer->getBeginLoc(), diag::ext_auto_new_list_init) << AllocType << TypeRange;"}}, | ||
[k]={ | |||
["clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:5:12: warning: ISO C++ standards before C++17 do not allow new expression for type \'auto\' to use list-initialization [-Wc++17-extensions]"} | |||
} | |||
}, | }, | ||
["ext_auto_storage_class"]={ | ["ext_auto_storage_class"]={ | ||
[ | [c]="\'auto\' storage class specifier is not permitted in C++11, and will not be supported in future releases [-Wauto-storage-class]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"auto-storage-class"}, | |||
[m]="auto-storage-class", | |||
[h]="\'auto\' storage class specifier is not permitted in C++11, and will not be supported in future releases", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'auto\' storage class specifier is not permitted in C\\+\\+11, and will not be supported in future releases", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wauto\\-storage\\-class[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ..."}, | [i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ..."}, | ||
[j]={{ | [j]={{H,3969,"/// 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 while (true) {\n case tok::kw_auto:\n if (getLangOpts().CPlusPlus11) {\n if (isKnownToBeTypeSpecifier(GetLookAheadToken(1))) {\n if (!isInvalid)\n Diag(Tok, diag::ext_auto_storage_class) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/auto-cxx0x.cpp"]={"clang/test/SemaCXX/auto-cxx0x.cpp:4:3: warning: \'auto\' storage class specifier is not permitted in C++11, and will not be supported in future releases [-Wauto-storage-class]"} | |||
} | |||
}, | }, | ||
["ext_auto_type"]={ | ["ext_auto_type"]={ | ||
[ | [c]="\'__auto_type\' is a GNU extension [-Wgnu-auto-type]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-auto-type",v}, | |||
[m]="gnu-auto-type", | |||
[h]="\'__auto_type\' is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'__auto_type\' is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-auto\\-type[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"}, | [i]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"}, | ||
[j]={{ | [j]={{H,3980,"/// 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 while (true) {\n case tok::kw___auto_type:\n Diag(Tok, diag::ext_auto_type);"}}, | ||
[k]={ | |||
["clang/test/Sema/auto-type.c"]={"clang/test/Sema/auto-type.c:3:1: warning: \'__auto_type\' is a GNU extension [-Wgnu-auto-type]"} | |||
} | |||
}, | }, | ||
["ext_auto_type_specifier"]={ | ["ext_auto_type_specifier"]={ | ||
[ | [c]="\'auto\' type specifier is a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="\'auto\' type specifier is a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'auto\' type specifier is a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ..."}, | [i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ..."}, | ||
[j]={{ | [j]={{wc,1369,"/// 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 // Diagnose if we\'ve recovered from an ill-formed \'auto\' storage class\n // specifier in a pre-C++11 dialect of C++.\n if (!S.getLangOpts().CPlusPlus11 && TypeSpecType == TST_auto)\n S.Diag(TSTLoc, diag::ext_auto_type_specifier);"}}, | ||
[k]={ | |||
["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:77:1: warning: \'auto\' type specifier is a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_bad_cxx_cast_qualifiers_away_incoherent"]={ | ["ext_bad_cxx_cast_qualifiers_away_incoherent"]={ | ||
[ | [c]="ISO C++ does not allow ... from A to B because it casts away qualifiers, even though the source and destination types are unrelated [-Wcast-qual-unrelated]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"cast-qual-unrelated"}, | |||
[m]="cast-qual-unrelated", | |||
[h]="ISO C++ does not allow %select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2 because it casts away qualifiers, even though the source and destination types are unrelated", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+ does not allow (?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?) because it casts away qualifiers, even though the source and destination types are unrelated", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wcast\\-qual\\-unrelated[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"f276e2dc4618",1531263875,"Fix determination of whether a reinterpret_cast casts away constness."}, | [i]={"f276e2dc4618",1531263875,"Fix determination of whether a reinterpret_cast casts away constness."}, | ||
[j]={{ | [j]={{Bb,771,"static TryCastResult getCastAwayConstnessCastKind(CastAwayConstnessKind CACK, unsigned &DiagID) {\n case CastAwayConstnessKind::CACK_Incoherent:\n DiagID = diag::ext_bad_cxx_cast_qualifiers_away_incoherent;"}}, | ||
[k]={ | |||
["clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp"]={"clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:15:9: warning: ISO C++ does not allow reinterpret_cast from \'const int *X::*Y::**\' to \'double Y::*X::***\' because it casts away qualifiers, even though the source and destination types are unrelated [-Wcast-qual-unrelated]","clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:18:9: warning: ISO C++ does not allow reinterpret_cast from \'const int *X::*Y::**\' to \'const volatile double Y::*X::***\' because it casts away qualifiers, even though the source and destination types are unrelated [-Wcast-qual-unrelated]","clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:19:9: warning: ISO C++ does not allow reinterpret_cast from \'const int *X::*Y::**\' to \'const volatile double Y::*const X::*const **\' because it casts away qualifiers, even though the source and destination types are unrelated [-Wcast-qual-unrelated]","clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:20:9: warning: ISO C++ does not allow reinterpret_cast from \'const int *X::*Y::**\' to \'const volatile double Y::*const X::**const *\' because it casts away qualifiers, even though the source and destination types are unrelated [-Wcast-qual-unrelated]","clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:21:9: warning: ISO C++ does not allow reinterpret_cast from \'const int *X::*Y::**\' to \'const volatile double Y::*X::*const *const *\' because it casts away qualifiers, even though the source and destination types are unrelated [-Wcast-qual-unrelated]","clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:24:9: warning: ISO C++ does not allow reinterpret_cast from \'const int *X::*Y::**\' to \'const double Y::*volatile X::**const *\' because it casts away qualifiers, even though the source and destination types are unrelated [-Wcast-qual-unrelated]"} | |||
} | |||
}, | }, | ||
["ext_binary_literal"]={ | ["ext_binary_literal"]={ | ||
[ | [c]="binary integer literals are a GNU extension [-Wgnu-binary-literal]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"binary-literal",L,"gnu-binary-literal",v}, | |||
[m]="gnu-binary-literal", | |||
[h]="binary integer literals are a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="binary integer literals are a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-binary\\-literal[^\\]]*\\]", | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[ | [j]={{db,1349,"/// 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 // Handle simple binary numbers 0b01010\n if ((c1 == \'b\' || c1 == \'B\') && (s[1] == \'0\' || s[1] == \'1\')) {\n Diags.Report(TokLoc, LangOpts.CPlusPlus14 ? diag::warn_cxx11_compat_binary_literal : LangOpts.CPlusPlus ? diag::ext_binary_literal_cxx14 : diag::ext_binary_literal);"}}, | ||
[k]={ | |||
["clang/test/Lexer/gnu-flags.c"]={"clang/test/Lexer/gnu-flags.c:45:9: warning: binary integer literals are a GNU extension [-Wgnu-binary-literal]"} | |||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_binary_literal_cxx14"]={ | ["ext_binary_literal_cxx14"]={ | ||
[ | [c]="binary integer literals are a C++14 extension [-Wc++14-binary-literal]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"binary-literal","c++14-binary-literal",kb,Kb,v}, | |||
[m]="c++14-binary-literal", | |||
[h]="binary integer literals are a C++14 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="binary integer literals are a C\\+\\+14 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+14\\-binary\\-literal[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"dd69ef38dba7",1408463755,"C++1y is now C++14!"}, | [i]={"dd69ef38dba7",1408463755,"C++1y is now C++14!"}, | ||
[j]={{ | [j]={{db,1348,"/// 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 // Handle simple binary numbers 0b01010\n if ((c1 == \'b\' || c1 == \'B\') && (s[1] == \'0\' || s[1] == \'1\')) {\n Diags.Report(TokLoc, LangOpts.CPlusPlus14 ? diag::warn_cxx11_compat_binary_literal : LangOpts.CPlusPlus ? diag::ext_binary_literal_cxx14 : diag::ext_binary_literal);"}}, | ||
[k]={ | |||
["clang/test/Lexer/warn_binary_literals.cpp"]={"clang/test/Lexer/warn_binary_literals.cpp:4:9: warning: binary integer literals are a C++14 extension [-Wc++14-binary-literal]"} | |||
} | |||
}, | }, | ||
["ext_bit_int"]={ | ["ext_bit_int"]={ | ||
[ | [c]="\'_BitInt\' in ... is a Clang extension [-Wbit-int-extension]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"bit-int-extension",v}, | |||
[m]="bit-int-extension", | |||
[h]="\'_BitInt\' in %select{C17 and earlier|C++}0 is a Clang extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'_BitInt\' in (?:C17 and earlier|C\\+\\+) is a Clang extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wbit\\-int\\-extension[^\\]]*\\]", | |||
[e]=y, | |||
[i]={tb,1612659633,vb}, | |||
[j]={{H,7962,"void Parser::DiagnoseBitIntUse(const Token &Tok) {\n if (Tok.is(tok::kw__ExtInt)) {\n } else {\n // In C2x mode, diagnose that the use is not compatible with pre-C2x modes.\n // Otherwise, diagnose that the use is a Clang extension.\n if (getLangOpts().C2x)\n else\n Diag(Loc, diag::ext_bit_int) << getLangOpts().CPlusPlus;"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/builtins-elementwise-math.c"]={"clang/test/Sema/builtins-elementwise-math.c:80:3: warning: \'_BitInt\' in C17 and earlier is a Clang extension [-Wbit-int-extension]","clang/test/Sema/builtins-elementwise-math.c:138:3: warning: \'_BitInt\' in C17 and earlier is a Clang extension [-Wbit-int-extension]","clang/test/Sema/builtins-elementwise-math.c:193:3: warning: \'_BitInt\' in C17 and earlier is a Clang extension [-Wbit-int-extension]","clang/test/Sema/builtins-elementwise-math.c:248:3: warning: \'_BitInt\' in C17 and earlier is a Clang extension [-Wbit-int-extension]","clang/test/Sema/builtins-elementwise-math.c:665:3: warning: \'_BitInt\' in C17 and earlier is a Clang extension [-Wbit-int-extension]"} | ||
[ | } | ||
[i]={tb,1612659633, | |||
[j]={{ | |||
}, | }, | ||
["ext_bitfield_member_init"]={ | ["ext_bitfield_member_init"]={ | ||
[ | [c]="default member initializer for bit-field is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="default member initializer for bit-field is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="default member initializer for bit\\-field is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"6b8e3c02ca44",1503880094,"[c++2a] P0683R1: Permit default member initializers for bit-fields."}, | [i]={"6b8e3c02ca44",1503880094,"[c++2a] P0683R1: Permit default member initializers for bit-fields."}, | ||
[j]={{ | [j]={{M,3037,"/// 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 while (true) {\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 } else if (DeclaratorInfo.isDeclarationOfFunction()) {\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);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/member-init.cpp"]={"clang/test/SemaCXX/member-init.cpp:4:13: warning: default member initializer for bit-field is a C++20 extension [-Wc++20-extensions]"} | |||
} | |||
}, | }, | ||
["ext_c11_anonymous_struct"]={ | ["ext_c11_anonymous_struct"]={ | ||
[ | [c]="anonymous structs are a C11 extension [-Wc11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={Pb,v}, | |||
[m]=Pb, | |||
[h]="anonymous structs are a C11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="anonymous structs are a C11 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc11\\-extensions[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"b64a1fa65ca1",1328284024,"Don\'t warn about anonymous struct/union in C11."}, | [i]={"b64a1fa65ca1",1328284024,"Don\'t warn about anonymous struct/union in C11."}, | ||
[j]={{ | [j]={{x,5512,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n // Diagnose whether this anonymous struct/union is an extension.\n if (Record->isUnion() && !getLangOpts().CPlusPlus && !getLangOpts().C11)\n else if (!Record->isUnion() && getLangOpts().CPlusPlus)\n else if (!Record->isUnion() && !getLangOpts().C11)\n Diag(Record->getLocation(), diag::ext_c11_anonymous_struct);"}}, | ||
[k]={ | |||
["clang/test/Sema/anonymous-struct-union-c11.c"]={"clang/test/Sema/anonymous-struct-union-c11.c:9:3: warning: anonymous structs are a C11 extension [-Wc11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_c11_feature"]={ | ["ext_c11_feature"]={ | ||
[ | [c]="\'A\' is a C11 extension [-Wc11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={Pb,v}, | |||
[m]=Pb, | |||
[h]="\'%0\' is a C11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'(.*?)\' is a C11 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc11\\-extensions[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"774bd6ef1c93",1566848647,"Diagnose use of _Thread_local as an extension when not in C11 mode."}, | [i]={"774bd6ef1c93",1566848647,"Diagnose use of _Thread_local as an extension when not in C11 mode."}, | ||
[j]={{ | [j]={{H,4015,"/// 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 while (true) {\n case tok::kw__Thread_local:\n if (!getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"},{H,4072,"/// 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 while (true) {\n case tok::kw__Noreturn:\n if (!getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"},{H,4079,"/// 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 while (true) {\n // alignment-specifier\n case tok::kw__Alignas:\n if (!getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"},{H,4409,"#include \"clang/Basic/TransformTypeTraits.def\"\n case tok::kw__Atomic:\n // C11 6.7.2.4/4:\n // If the _Atomic keyword is immediately followed by a left parenthesis,\n // it is interpreted as a type specifier (with a type name), not as a\n // type qualifier.\n if (!getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"},{H,5967,"/// ParseTypeQualifierListOpt\n/// type-qualifier-list: [C99 6.7.5]\n/// type-qualifier\n/// [vendor] attributes\n/// [ only if AttrReqs & AR_VendorAttributesParsed ]\n/// type-qualifier-list type-qualifier\n/// [vendor] type-qualifier-list attributes\n/// [ only if AttrReqs & AR_VendorAttributesParsed ]\n/// [C++0x] attribute-specifier[opt] is allowed before cv-qualifier-seq\n/// [ only if AttReqs & AR_CXX11AttributesParsed ]\n/// Note: vendor can be GNU, MS, etc and can be explicitly controlled via\n/// AttrRequirements bitmask values.\nvoid Parser::ParseTypeQualifierListOpt(DeclSpec &DS, unsigned AttrReqs, bool AtomicAllowed, bool IdentifierRequired, std::optional<llvm::function_ref<void()>> CodeCompletionHandler) {\n while (true) {\n case tok::kw__Atomic:\n if (!getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"},{M,972,"/// 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 if (Tok.is(tok::kw__Static_assert) && !getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"},{ub,1437,"#include \"clang/Basic/TransformTypeTraits.def\"\n case tok::kw__Alignof: // unary-expression: \'_Alignof\' \'(\' type-name \')\'\n if (!getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"},{ub,3315,"/// ParseGenericSelectionExpression - Parse a C11 generic-selection\n/// [C11 6.5.1.1].\n///\n/// \\verbatim\n/// generic-selection:\n/// _Generic ( assignment-expression , generic-assoc-list )\n/// generic-assoc-list:\n/// generic-association\n/// generic-assoc-list , generic-association\n/// generic-association:\n/// type-name : assignment-expression\n/// default : assignment-expression\n/// \\endverbatim\n///\n/// As an extension, Clang also accepts:\n/// \\verbatim\n/// generic-selection:\n/// _Generic ( type-name, generic-assoc-list )\n/// \\endverbatim\nExprResult Parser::ParseGenericSelectionExpression() {\n if (!getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"}}, | ||
[k]={ | |||
["clang/test/SemaOpenCLCXX/restricted.clcpp"]={"clang/test/SemaOpenCLCXX/restricted.clcpp:32:12: warning: \'_Thread_local\' is a C11 extension [-Wc11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_c2x_bitint_suffix"]={ | ["ext_c2x_bitint_suffix"]={ | ||
[ | [c]="\'_BitInt\' suffix for literals is a C2x extension [-Wc2x-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={rb}, | |||
[m]=rb, | |||
[h]="\'_BitInt\' suffix for literals is a C2x extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'_BitInt\' suffix for literals is a C2x extension", | ||
[a]=Xb, | |||
[e]=r, | |||
[ | |||
[ | |||
[i]={"8cba72177dcd",1647264157,"Implement literal suffixes for _BitInt"}, | [i]={"8cba72177dcd",1647264157,"Implement literal suffixes for _BitInt"}, | ||
[j]={{ | [j]={{zc,341,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result. Return true if there was an error\n/// parsing. This function also returns information about the form of the\n/// expression in DT. See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n case tok::numeric_constant: {\n // \'wb/uwb\' literals are a C2x feature. We explicitly do not support the\n // suffix in C++ as an extension because a library-based UDL that resolves\n // to a library type may be more appropriate there.\n if (Literal.isBitInt)\n PP.Diag(PeekTok, PP.getLangOpts().C2x ? diag::warn_c2x_compat_bitint_suffix : diag::ext_c2x_bitint_suffix);"},{z,4069,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n if (Literal.isFixedPointLiteral()) {\n } else if (Literal.isFloatingLiteral()) {\n } else if (!Literal.isIntegerLiteral()) {\n } else {\n // \'wb/uwb\' literals are a C2x feature. We support _BitInt as a type in C++,\n // but we do not currently support the suffix in C++ mode because it\'s not\n // entirely clear whether WG21 will prefer this suffix to return a library\n // type such as std::bit_int instead of returning a _BitInt.\n if (Literal.isBitInt && !getLangOpts().CPlusPlus)\n PP.Diag(Tok.getLocation(), getLangOpts().C2x ? diag::warn_c2x_compat_bitint_suffix : diag::ext_c2x_bitint_suffix);"}}, | ||
[k]={ | |||
["clang/test/Lexer/bitint-constants-compat.c"]={"clang/test/Lexer/bitint-constants-compat.c:5:5: warning: \'_BitInt\' suffix for literals is a C2x extension [-Wc2x-extensions]","clang/test/Lexer/bitint-constants-compat.c:11:3: warning: \'_BitInt\' suffix for literals is a C2x extension [-Wc2x-extensions]"} | |||
} | |||
}, | }, | ||
["ext_c2x_pp_directive"]={ | ["ext_c2x_pp_directive"]={ | ||
[ | [c]="use of a \'#...\' directive is a C2x extension [-Wc2x-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={rb}, | |||
[m]=rb, | |||
[h]="use of a \'#%select{<BUG IF SEEN>|elifdef|elifndef}0\' directive is a C2x extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of a \'\\#(?:elifdef|elifndef)\' directive is a C2x extension", | ||
[a]=Xb, | |||
[e]=B, | |||
[i]={O,1625925174,N}, | |||
[j]={{W,772,"/// 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 while (true) {\n if (Directive.startswith(\"if\")) {\n } else if (Directive[0] == \'e\') {\n if (Sub == \"ndif\") { // \"endif\"\n } else if (Sub == \"lse\") { // \"else\".\n } else if (Sub == \"lif\") { // \"elif\".\n } else if (Sub == \"lifdef\" || // \"elifdef\"\n if (LangOpts.CPlusPlus)\n else\n DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"},{W,3458,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n case PED_Elifndef:\n if (LangOpts.CPlusPlus)\n else\n DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Preprocessor/if_warning.c"]={"clang/test/Preprocessor/if_warning.c:10:2: warning: use of a \'#elifdef\' directive is a C2x extension [-Wc2x-extensions]","clang/test/Preprocessor/if_warning.c:21:2: warning: use of a \'#elifdef\' directive is a C2x extension [-Wc2x-extensions]"} | ||
[i]={ | } | ||
[j]={{W,772,"/// 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 while (true) {\n if (Directive.startswith(\"if\")) {\n } else if (Directive[0] == \'e\') {\n if (Sub == \"ndif\") { // \"endif\"\n } else if (Sub == \"lse\") { // \"else\".\n } else if (Sub == \"lif\") { // \"elif\".\n } else if (Sub == \"lifdef\" || // \"elifdef\"\n if (LangOpts.CPlusPlus)\n else\n DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"},{W,3458,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n case PED_Elifndef:\n if (LangOpts.CPlusPlus)\n else\n DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"}} | |||
}, | }, | ||
["ext_c99_array_usage"]={ | ["ext_c99_array_usage"]={ | ||
[ | [c]="...array size ...is a C99 feature [-Wc99-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={V,v}, | |||
[m]=V, | |||
[h]="%select{qualifier in |static |}0array size %select{||\'[*] \'}0is a C99 feature", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(?:qualifier in |static |)array size (?:||\'\\[\\*\\] \')is a C99 feature", | ||
[a]=Gb, | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{S,2681,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n // If this is not C99, diagnose array size modifiers on non-VLAs.\n if (!getLangOpts().C99 && !T->isVariableArrayType() && (ASM != ArrayType::Normal || Quals != 0)) {\n Diag(Loc, getLangOpts().CPlusPlus ? diag::err_c99_array_usage_cxx : diag::ext_c99_array_usage) << ASM;"}}, | |||
[k]={ | |||
[ | [mc]={"clang/test/Sema/c89.c:61:19: warning: static array size is a C99 feature [-Wc99-extensions]","clang/test/Sema/c89.c:63:19: warning: qualifier in array size is a C99 feature [-Wc99-extensions]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_c99_compound_literal"]={ | ["ext_c99_compound_literal"]={ | ||
[ | [c]="compound literals are a C99-specific feature [-Wc99-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={V,v}, | |||
[m]=V, | |||
[h]="compound literals are a C99-specific feature", | |||
[b]=o, | [b]=o, | ||
[ | [g]="compound literals are a C99\\-specific feature", | ||
[a]=Gb, | |||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[j]={{ub,3243,"/// ParseCompoundLiteralExpression - We have parsed the parenthesized type-name\n/// and we are at the left brace.\n///\n/// \\verbatim\n/// postfix-expression: [C99 6.5.2]\n/// \'(\' type-name \')\' \'{\' initializer-list \'}\'\n/// \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n/// \\endverbatim\nExprResult Parser::ParseCompoundLiteralExpression(ParsedType Ty, SourceLocation LParenLoc, SourceLocation RParenLoc) {\n if (!getLangOpts().C99) // Compound literals don\'t exist in C90.\n Diag(LParenLoc, diag::ext_c99_compound_literal);"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/vector-gcc-compat.cpp"]={"clang/test/Sema/vector-gcc-compat.cpp:39:19: warning: compound literals are a C99-specific feature [-Wc99-extensions]","clang/test/Sema/vector-gcc-compat.cpp:62:19: warning: compound literals are a C99-specific feature [-Wc99-extensions]","clang/test/Sema/vector-gcc-compat.cpp:81:19: warning: compound literals are a C99-specific feature [-Wc99-extensions]","clang/test/Sema/vector-gcc-compat.cpp:82:19: warning: compound literals are a C99-specific feature [-Wc99-extensions]","clang/test/Sema/vector-gcc-compat.cpp:83:19: warning: compound literals are a C99-specific feature [-Wc99-extensions]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ub,3243,"/// ParseCompoundLiteralExpression - We have parsed the parenthesized type-name\n/// and we are at the left brace.\n///\n/// \\verbatim\n/// postfix-expression: [C99 6.5.2]\n/// \'(\' type-name \')\' \'{\' initializer-list \'}\'\n/// \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n/// \\endverbatim\nExprResult Parser::ParseCompoundLiteralExpression(ParsedType Ty, SourceLocation LParenLoc, SourceLocation RParenLoc) {\n if (!getLangOpts().C99) // Compound literals don\'t exist in C90.\n Diag(LParenLoc, diag::ext_c99_compound_literal);"}} | |||
}, | }, | ||
["ext_c99_feature"]={ | ["ext_c99_feature"]={ | ||
[ | [c]="\'A\' is a C99 extension [-Wc99-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={V,v}, | |||
[m]=V, | |||
[h]="\'%0\' is a C99 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'(.*?)\' is a C99 extension", | ||
[a]=Gb, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"9fac4a5d3522",1566933324,"Diagnose both _Complex and _Imaginary as C99 extensions."}, | [i]={"9fac4a5d3522",1566933324,"Diagnose both _Complex and _Imaginary as C99 extensions."}, | ||
[j]={{ | [j]={{H,4140,"/// 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 while (true) {\n case tok::kw__Complex:\n if (!getLangOpts().C99)\n Diag(Tok, diag::ext_c99_feature) << Tok.getName();"},{H,4146,"/// 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 while (true) {\n case tok::kw__Imaginary:\n if (!getLangOpts().C99)\n Diag(Tok, diag::ext_c99_feature) << Tok.getName();"},{H,4249,"/// 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 while (true) {\n case tok::kw__Bool:\n if (Tok.is(tok::kw__Bool) && !getLangOpts().C99)\n Diag(Tok, diag::ext_c99_feature) << Tok.getName();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/complex-init-list.cpp"]={"clang/test/SemaCXX/complex-init-list.cpp:13:1: warning: \'_Complex\' is a C99 extension [-Wc99-extensions]"} | |||
} | |||
}, | }, | ||
["ext_c99_flexible_array_member"]={ | ["ext_c99_flexible_array_member"]={ | ||
[ | [c]="flexible array members are a C99 feature [-Wc99-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={V,v}, | |||
[m]=V, | |||
[h]="flexible array members are a C99 feature", | |||
[b]=o, | [b]=o, | ||
[ | [g]="flexible array members are a C99 feature", | ||
[a]=Gb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"07518f249f91",1331900137,"Warn on flexible array members when in C89 mode, with -pedantic."}, | [i]={"07518f249f91",1331900137,"Warn on flexible array members when in C89 mode, with -pedantic."}, | ||
[j]={{ | [j]={{x,18823,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n if (FDTy->isFunctionType()) {\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n if (Record) {\n if (!getLangOpts().C99)\n Diag(FD->getLocation(), diag::ext_c99_flexible_array_member) << FD->getDeclName() << Record->getTagKind();"}}, | ||
[k]={ | |||
[mc]={"clang/test/Sema/c89.c:89:18: warning: flexible array members are a C99 feature [-Wc99-extensions]"} | |||
} | |||
}, | }, | ||
["ext_c99_longlong"]={ | ["ext_c99_longlong"]={ | ||
[ | [c]="\'long long\' is an extension when C99 mode is not enabled [-Wlong-long]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"long-long",v}, | |||
[m]="long-long", | |||
[h]="\'long long\' is an extension when C99 mode is not enabled", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'long long\' is an extension when C99 mode is not enabled", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wlong\\-long[^\\]]*\\]", | |||
[e]=r, | |||
[ | |||
[ | |||
[i]={"1cd230570394",1348510761,"Change the wording of the extension warning from"}, | [i]={"1cd230570394",1348510761,"Change the wording of the extension warning from"}, | ||
[j]={{ | [j]={{zc,324,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result. Return true if there was an error\n/// parsing. This function also returns information about the form of the\n/// expression in DT. See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n case tok::numeric_constant: {\n // \'long long\' is a C99 or C++11 feature.\n if (!PP.getLangOpts().C99 && Literal.isLongLong) {\n if (PP.getLangOpts().CPlusPlus)\n else\n PP.Diag(PeekTok, diag::ext_c99_longlong);"},{z,4237,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n if (Literal.isFixedPointLiteral()) {\n } else if (Literal.isFloatingLiteral()) {\n } else if (!Literal.isIntegerLiteral()) {\n } else {\n if (Literal.GetIntegerValue(ResultVal)) {\n } else {\n // Check long long if needed.\n if (Ty.isNull() && !Literal.isSizeT) {\n // Does it fit in a unsigned long long?\n if (ResultVal.isIntN(LongLongSize)) {\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 else if (!getLangOpts().C99)\n Diag(Tok.getLocation(), diag::ext_c99_longlong);"},{S,1413,"/// 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 case DeclSpec::TST_int: {\n if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n case TypeSpecifierWidth::LongLong:\n // \'long long\' is a C99 or C++11 feature.\n if (!S.getLangOpts().C99) {\n if (S.getLangOpts().CPlusPlus)\n else\n S.Diag(DS.getTypeSpecWidthLoc(), diag::ext_c99_longlong);"},{S,1438,"/// 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 case DeclSpec::TST_int: {\n if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n } else {\n case TypeSpecifierWidth::LongLong:\n // \'long long\' is a C99 or C++11 feature.\n if (!S.getLangOpts().C99) {\n if (S.getLangOpts().CPlusPlus)\n else\n S.Diag(DS.getTypeSpecWidthLoc(), diag::ext_c99_longlong);"}}, | ||
[k]={ | |||
["clang/test/Parser/extension.c"]={"clang/test/Parser/extension.c:18:21: warning: \'long long\' is an extension when C99 mode is not enabled [-Wlong-long]"} | |||
} | |||
}, | }, | ||
["ext_c99_variable_decl_in_for_loop"]={ | ["ext_c99_variable_decl_in_for_loop"]={ | ||
[ | [c]="variable declaration in for loop is a C99-specific feature [-Wc99-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={V,v}, | |||
[m]=V, | |||
[h]="variable declaration in for loop is a C99-specific feature", | |||
[b]=o, | [b]=o, | ||
[ | [g]="variable declaration in for loop is a C99\\-specific feature", | ||
[a]=Gb, | |||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[j]={{xb,2054,"/// 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 // Parse the first part of the for specifier.\n if (Tok.is(tok::semi)) { // for (;\n } else if (getLangOpts().CPlusPlus && Tok.is(tok::identifier) && isForRangeIdentifier()) {\n } else if (isForInitDeclaration()) { // for (int X = 4;\n // Parse declaration, which eats the \';\'.\n if (!C99orCXXorObjC) { // Use of C99-style for loops in C90 mode?\n Diag(Tok, diag::ext_c99_variable_decl_in_for_loop);"}}, | |||
[k]={ | |||
[ | ["clang/test/C/drs/dr2xx.c"]={"clang/test/C/drs/dr2xx.c:400:8: warning: variable declaration in for loop is a C99-specific feature [-Wc99-extensions]"} | ||
[ | } | ||
[i]={ | |||
[j]={{xb,2054,"/// 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 // Parse the first part of the for specifier.\n if (Tok.is(tok::semi)) { // for (;\n } else if (getLangOpts().CPlusPlus && Tok.is(tok::identifier) && isForRangeIdentifier()) {\n } else if (isForInitDeclaration()) { // for (int X = 4;\n // Parse declaration, which eats the \';\'.\n if (!C99orCXXorObjC) { // Use of C99-style for loops in C90 mode?\n Diag(Tok, diag::ext_c99_variable_decl_in_for_loop);"}} | |||
}, | }, | ||
["ext_c99_whitespace_required_after_macro_name"]={ | ["ext_c99_whitespace_required_after_macro_name"]={ | ||
[ | [c]="ISO C99 requires whitespace after the macro name [-Wc99-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={V}, | |||
[m]=V, | |||
[h]="ISO C99 requires whitespace after the macro name", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C99 requires whitespace after the macro name", | ||
[a]=Gb, | |||
[e]=B, | |||
[ | [i]={C,1236199783,D}, | ||
[ | [j]={{W,2857,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\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 } else if (Tok.hasLeadingSpace()) {\n } else if (Tok.is(tok::l_paren)) {\n } else if (LangOpts.C99 || LangOpts.CPlusPlus11) {\n Diag(Tok, diag::ext_c99_whitespace_required_after_macro_name);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/ucn-allowed-chars.c"]={"clang/test/Preprocessor/ucn-allowed-chars.c:85:12: warning: ISO C99 requires whitespace after the macro name [-Wc99-extensions]","clang/test/Preprocessor/ucn-allowed-chars.c:87:12: warning: ISO C99 requires whitespace after the macro name [-Wc99-extensions]","clang/test/Preprocessor/ucn-allowed-chars.c:89:12: warning: ISO C99 requires whitespace after the macro name [-Wc99-extensions]"} | |||
[i]={ | } | ||
[j]={{W,2857,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\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 } else if (Tok.hasLeadingSpace()) {\n } else if (Tok.is(tok::l_paren)) {\n } else if (LangOpts.C99 || LangOpts.CPlusPlus11) {\n Diag(Tok, diag::ext_c99_whitespace_required_after_macro_name);"}} | |||
}, | }, | ||
["ext_c_empty_initializer"]={ | ["ext_c_empty_initializer"]={ | ||
[ | [c]="use of an empty initializer is a C2x extension [-Wc2x-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={rb,v}, | |||
[m]=rb, | |||
[h]="use of an empty initializer is a C2x extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of an empty initializer is a C2x extension", | ||
[a]=Xb, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"5d8aaad4452f",1680549555,"[C2x] Implement support for empty brace initialization (WG14 N2900 and WG14 N3011)"}, | [i]={"5d8aaad4452f",1680549555,"[C2x] Implement support for empty brace initialization (WG14 N2900 and WG14 N3011)"}, | ||
[j]={{ | [j]={{Cc,457,"/// ParseBraceInitializer - Called when parsing an initializer that has a\n/// leading open brace.\n///\n/// initializer: [C99 6.7.8]\n/// \'{\' initializer-list \'}\'\n/// \'{\' initializer-list \',\' \'}\'\n/// [C2x] \'{\' \'}\'\n///\n/// initializer-list:\n/// designation[opt] initializer ...[opt]\n/// initializer-list \',\' designation[opt] initializer ...[opt]\n///\nExprResult Parser::ParseBraceInitializer() {\n if (Tok.is(tok::r_brace)) {\n // Empty initializers are a C++ feature and a GNU extension to C before C2x.\n if (!getLangOpts().CPlusPlus) {\n Diag(LBraceLoc, getLangOpts().C2x ? diag::warn_c2x_compat_empty_initializer : diag::ext_c_empty_initializer);"}}, | ||
[k]={ | |||
[bc]={"clang/test/Sema/vla.c:116:20: warning: use of an empty initializer is a C2x extension [-Wc2x-extensions]","clang/test/Sema/vla.c:123:23: warning: use of an empty initializer is a C2x extension [-Wc2x-extensions]"} | |||
} | |||
}, | }, | ||
["ext_c_label_end_of_compound_statement"]={ | ["ext_c_label_end_of_compound_statement"]={ | ||
[ | [c]="label at end of compound statement is a C2x extension [-Wc2x-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={rb}, | |||
[m]=rb, | |||
[h]="label at end of compound statement is a C2x extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="label at end of compound statement is a C2x extension", | ||
[a]=Xb, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl."}, | [i]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl."}, | ||
[j]={{xb,1081,"void Parser::DiagnoseLabelAtEndOfCompoundStatement() {\n if (getLangOpts().CPlusPlus) {\n } else {\n Diag(Tok, getLangOpts().C2x ? diag::warn_c2x_compat_label_end_of_compound_statement : diag::ext_c_label_end_of_compound_statement);"}} | [j]={{xb,1081,"void Parser::DiagnoseLabelAtEndOfCompoundStatement() {\n if (getLangOpts().CPlusPlus) {\n } else {\n Diag(Tok, getLangOpts().C2x ? diag::warn_c2x_compat_label_end_of_compound_statement : diag::ext_c_label_end_of_compound_statement);"}}, | ||
[k]={ | |||
["clang/test/Parser/c2x-label.c"]={"clang/test/Parser/c2x-label.c:9:1: warning: label at end of compound statement is a C2x extension [-Wc2x-extensions]","clang/test/Parser/c2x-label.c:19:5: warning: label at end of compound statement is a C2x extension [-Wc2x-extensions]","clang/test/Parser/c2x-label.c:26:5: warning: label at end of compound statement is a C2x extension [-Wc2x-extensions]"} | |||
} | |||
}, | }, | ||
["ext_c_nullptr"]={ | ["ext_c_nullptr"]={ | ||
[ | [c]="\'nullptr\' is a C2x extension [-Wc2x-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={rb,v}, | |||
[m]=rb, | |||
[h]="\'nullptr\' is a C2x extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'nullptr\' is a C2x extension", | ||
[a]=Xb, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"3a31970ee2af",1665756274,"[C2x] Implement support for nullptr and nullptr_t"}, | [i]={"3a31970ee2af",1665756274,"[C2x] Implement support for nullptr and nullptr_t"}, | ||
[j]={{ub,1015,"/// 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 case tok::kw_nullptr:\n if (getLangOpts().CPlusPlus)\n else\n Diag(Tok, getLangOpts().C2x ? diag::warn_c2x_compat_keyword : diag::ext_c_nullptr) << Tok.getName();"}} | [j]={{ub,1015,"/// 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 case tok::kw_nullptr:\n if (getLangOpts().CPlusPlus)\n else\n Diag(Tok, getLangOpts().C2x ? diag::warn_c2x_compat_keyword : diag::ext_c_nullptr) << Tok.getName();"}} | ||
}, | }, | ||
["ext_c_static_assert_no_message"]={ | ["ext_c_static_assert_no_message"]={ | ||
[ | [c]="\'_Static_assert\' with no message is a C2x extension [-Wc2x-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={rb}, | |||
[m]=rb, | |||
[h]="\'_Static_assert\' with no message is a C2x extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'_Static_assert\' with no message is a C2x extension", | ||
[a]=Xb, | |||
[e]=y, | |||
[ | [i]={tb,1612659633,vb}, | ||
[j]={{M,1011,"/// 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 if (Tok.is(tok::r_paren)) {\n if (getLangOpts().CPlusPlus17)\n else if (getLangOpts().CPlusPlus)\n else if (getLangOpts().C2x)\n else\n DiagVal = diag::ext_c_static_assert_no_message;"}}, | |||
[k]={ | |||
[ | ["clang/test/C/C11/n1330.c"]={"clang/test/C/C11/n1330.c:12:17: warning: \'_Static_assert\' with no message is a C2x extension [-Wc2x-extensions]","clang/test/C/C11/n1330.c:17:17: warning: \'_Static_assert\' with no message is a C2x extension [-Wc2x-extensions]"} | ||
[i]={tb,1612659633, | } | ||
[j]={{ | |||
}, | }, | ||
["ext_cannot_use_trivial_abi"]={ | ["ext_cannot_use_trivial_abi"]={ | ||
[ | [c]="\'trivial_abi\' cannot be applied to A [-Wignored-attributes]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"attributes","ignored-attributes"}, | |||
[m]="ignored-attributes", | |||
[h]="\'trivial_abi\' cannot be applied to %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'trivial_abi\' cannot be applied to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wignored\\-attributes[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"02914dc1278c",1517862202,"Add support for attribute \'trivial_abi\'."}, | [i]={"02914dc1278c",1517862202,"Add support for attribute \'trivial_abi\'."}, | ||
[j]={{ | [j]={{A,10302,"void Sema::checkIllFormedTrivialABIStruct(CXXRecordDecl &RD) {\n auto PrintDiagAndRemoveAttr = [&](unsigned N) {\n // No diagnostics if this is a template instantiation.\n if (!isTemplateInstantiation(RD.getTemplateSpecializationKind())) {\n Diag(RD.getAttr<TrivialABIAttr>()->getLocation(), diag::ext_cannot_use_trivial_abi) << &RD;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/attr-trivial-abi.cpp"]={"clang/test/SemaCXX/attr-trivial-abi.cpp:28:23: warning: \'trivial_abi\' cannot be applied to \'S3\' [-Wignored-attributes]","clang/test/SemaCXX/attr-trivial-abi.cpp:35:18: warning: \'trivial_abi\' cannot be applied to \'S3_2\' [-Wignored-attributes]","clang/test/SemaCXX/attr-trivial-abi.cpp:38:23: warning: \'trivial_abi\' cannot be applied to \'S3_3\' [-Wignored-attributes]","clang/test/SemaCXX/attr-trivial-abi.cpp:53:23: warning: \'trivial_abi\' cannot be applied to \'S3_4\' [-Wignored-attributes]","clang/test/SemaCXX/attr-trivial-abi.cpp:64:23: warning: \'trivial_abi\' cannot be applied to \'S5\' [-Wignored-attributes]","clang/test/SemaCXX/attr-trivial-abi.cpp:117:23: warning: \'trivial_abi\' cannot be applied to \'CopyMoveDeleted\' [-Wignored-attributes]","clang/test/SemaCXX/attr-trivial-abi.cpp:127:23: warning: \'trivial_abi\' cannot be applied to \'S18\' [-Wignored-attributes]","clang/test/SemaCXX/attr-trivial-abi.cpp:152:23: warning: \'trivial_abi\' cannot be applied to \'S19\' [-Wignored-attributes]"} | |||
} | |||
}, | }, | ||
["ext_capture_binding"]={ | ["ext_capture_binding"]={ | ||
[ | [c]="captured structured bindings are a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="captured structured bindings are a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="captured structured bindings are a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=n, | |||
[i]={O,1625925174,N}, | |||
[j]={{z,19211,"// 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 if (isa<BindingDecl>(Var)) {\n if (!IsLambda || !S.getLangOpts().CPlusPlus) {\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;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaCXX/cxx1z-decomposition.cpp"]={"clang/test/SemaCXX/cxx1z-decomposition.cpp:75:22: warning: captured structured bindings are a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/cxx1z-decomposition.cpp:76:10: warning: captured structured bindings are a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/cxx1z-decomposition.cpp:89:11: warning: captured structured bindings are a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/cxx1z-decomposition.cpp:98:22: warning: captured structured bindings are a C++20 extension [-Wc++20-extensions]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_cast_fn_obj"]={ | ["ext_cast_fn_obj"]={ | ||
[ | [c]="cast between pointer-to-function and pointer-to-object is an extension [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="cast between pointer-to-function and pointer-to-object is an extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="cast between pointer\\-to\\-function and pointer\\-to\\-object is an extension", | ||
[a]=X, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve..."}, | [i]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve..."}, | ||
[j]={{ | [j]={{Bb,2559,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n if (SrcType->isFunctionPointerType()) {\n Self.Diag(OpRange.getBegin(), Self.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_cast_fn_obj : diag::ext_cast_fn_obj) << OpRange;"},{Bb,2568,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n if (DestType->isFunctionPointerType()) {\n Self.Diag(OpRange.getBegin(), Self.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_cast_fn_obj : diag::ext_cast_fn_obj) << OpRange;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/reinterpret-fn-obj-pedantic.cpp"]={"clang/test/SemaCXX/reinterpret-fn-obj-pedantic.cpp:7:14: warning: cast between pointer-to-function and pointer-to-object is an extension [-Wpedantic]","clang/test/SemaCXX/reinterpret-fn-obj-pedantic.cpp:8:9: warning: cast between pointer-to-function and pointer-to-object is an extension [-Wpedantic]"} | |||
} | |||
}, | }, | ||
["ext_cce_narrowing"]={ | ["ext_cce_narrowing"]={ | ||
[ | [c]="... ... [-Wc++11-narrowing]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={qc,"c++0x-narrowing",Yb,Zb,Qb,"narrowing"}, | ||
[ | [m]=Qb, | ||
[ | [h]="%select{case value|enumerator value|non-type template argument|array size|explicit specifier argument|noexcept specifier argument}0 %select{cannot be narrowed from type %2 to %3|evaluates to %2, which cannot be narrowed to type %3}1", | ||
[ | [b]=R, | ||
[ | [g]="(?:case value|enumerator value|non\\-type template argument|array size|explicit specifier argument|noexcept specifier argument) (?:cannot be narrowed from type (.*?) to (.*?)|evaluates to (.*?), which cannot be narrowed to type (.*?))", | ||
[ | [a]=" \\[[^\\]]*\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"16e1b07597f3",1384224105,"Rather than duplicating extension diagnostics to allow them to cause a"}, | [i]={"16e1b07597f3",1384224105,"Rather than duplicating extension diagnostics to allow them to cause a"}, | ||
[j]={{ | [j]={{Lb,5929,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n case NK_Constant_Narrowing:\n S.Diag(From->getBeginLoc(), diag::ext_cce_narrowing) << CCE << /*Constant*/ 1 << PreNarrowingValue.getAsString(S.Context, PreNarrowingType) << T;"},{Lb,5937,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n case NK_Type_Narrowing:\n S.Diag(From->getBeginLoc(), diag::ext_cce_narrowing) << CCE << /*Constant*/ 0 << From->getType() << T;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/cxx0x-noexcept-expression.cpp"]={"clang/test/SemaCXX/cxx0x-noexcept-expression.cpp:86:19: error: noexcept specifier argument evaluates to 2, which cannot be narrowed to type \'bool\' [-Wc++11-narrowing]","clang/test/SemaCXX/cxx0x-noexcept-expression.cpp:92:19: error: noexcept specifier argument evaluates to 2, which cannot be narrowed to type \'bool\' [-Wc++11-narrowing]"} | |||
} | |||
}, | }, | ||
["ext_charize_microsoft"]={ | ["ext_charize_microsoft"]={ | ||
[ | [c]="charizing operator #@ is a Microsoft extension [-Wmicrosoft-charize]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={G,"microsoft-charize",v}, | |||
[m]="microsoft-charize", | |||
[h]="charizing operator #@ is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="charizing operator \\#@ is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-charize[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"a08713ce8610",1318888073,"Move about 20 random diagnostics under -W flags. Patch by Ahmed Charles!"}, | [i]={"a08713ce8610",1318888073,"Move about 20 random diagnostics under -W flags. Patch by Ahmed Charles!"}, | ||
[j]={{ | [j]={{ab,4073,"LexStart:\n case \'%\':\n if (Char == \'=\') {\n } else if (LangOpts.Digraphs && Char == \'>\') {\n } else if (LangOpts.Digraphs && Char == \':\') {\n if (Char == \'%\' && getCharAndSize(CurPtr + SizeTmp, SizeTmp2) == \':\') {\n } else if (Char == \'@\' && LangOpts.MicrosoftExt) { // %:@ -> #@ -> Charize\n if (!isLexingRawMode())\n Diag(BufferPtr, diag::ext_charize_microsoft);"},{ab,4262,"LexStart:\n case \'#\':\n if (Char == \'#\') {\n } else if (Char == \'@\' && LangOpts.MicrosoftExt) { // #@ -> Charize\n if (!isLexingRawMode())\n Diag(BufferPtr, diag::ext_charize_microsoft);"}} | ||
}, | }, | ||
["ext_clang_c_enum_fixed_underlying_type"]={ | ["ext_clang_c_enum_fixed_underlying_type"]={ | ||
[ | [c]="enumeration types with a fixed underlying type are a Clang extension [-Wfixed-enum-extension]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"fixed-enum-extension",v}, | |||
[m]="fixed-enum-extension", | |||
[h]="enumeration types with a fixed underlying type are a Clang extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="enumeration types with a fixed underlying type are a Clang extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wfixed\\-enum\\-extension[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"6f11db137034",1538166298,"Support enums with a fixed underlying type in all language modes."}, | [i]={"6f11db137034",1538166298,"Support enums with a fixed underlying type in all language modes."}, | ||
[j]={{ | [j]={{H,4949,"/// 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 // Parse the fixed underlying type.\n if (Tok.is(tok::colon)) {\n if (CanBeBitfield && !isEnumBase(CanBeOpaqueEnumDeclaration)) {\n } else if (CanHaveEnumBase || !ColonIsSacred) {\n if (!getLangOpts().ObjC) {\n if (getLangOpts().CPlusPlus11)\n else if (getLangOpts().CPlusPlus)\n else if (getLangOpts().MicrosoftExt)\n else\n Diag(ColonLoc, diag::ext_clang_c_enum_fixed_underlying_type) << BaseRange;"}}, | ||
[k]={ | |||
["clang/test/Sema/fixed-enum.c"]={"clang/test/Sema/fixed-enum.c:8:8: warning: enumeration types with a fixed underlying type are a Clang extension [-Wfixed-enum-extension]","clang/test/Sema/fixed-enum.c:22:10: warning: enumeration types with a fixed underlying type are a Clang extension [-Wfixed-enum-extension]","clang/test/Sema/fixed-enum.c:23:10: warning: enumeration types with a fixed underlying type are a Clang extension [-Wfixed-enum-extension]","clang/test/Sema/fixed-enum.c:30:13: warning: enumeration types with a fixed underlying type are a Clang extension [-Wfixed-enum-extension]","clang/test/Sema/fixed-enum.c:35:13: warning: enumeration types with a fixed underlying type are a Clang extension [-Wfixed-enum-extension]"} | |||
} | |||
}, | }, | ||
["ext_clang_diagnose_if"]={ | ["ext_clang_diagnose_if"]={ | ||
[ | [c]="\'diagnose_if\' is a clang extension [-Wgcc-compat]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={tc,v}, | |||
[m]=tc, | |||
[h]="\'diagnose_if\' is a clang extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'diagnose_if\' is a clang extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | |||
[e]=r, | |||
[ | |||
[ | |||
[i]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."}, | [i]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."}, | ||
[j]={{ | [j]={{Sb,1098,"static void handleDiagnoseIfAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n S.Diag(AL.getLoc(), diag::ext_clang_diagnose_if);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/diagnose_if-ext.cpp"]={"clang/test/SemaCXX/diagnose_if-ext.cpp:3:27: warning: \'diagnose_if\' is a clang extension [-Wgcc-compat]","clang/test/SemaCXX/diagnose_if-ext.cpp:4:32: warning: \'diagnose_if\' is a clang extension [-Wgcc-compat]"} | |||
} | |||
}, | }, | ||
["ext_clang_enable_if"]={ | ["ext_clang_enable_if"]={ | ||
[ | [c]="\'enable_if\' is a clang extension [-Wgcc-compat]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={tc,v}, | |||
[m]=tc, | |||
[h]="\'enable_if\' is a clang extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'enable_if\' is a clang extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | |||
[e]=r, | |||
[ | |||
[ | |||
[i]={"046ba5b66fae",1455778171,"Sema: provide an extension warning for enable_if"}, | [i]={"046ba5b66fae",1455778171,"Sema: provide an extension warning for enable_if"}, | ||
[j]={{ | [j]={{Sb,957,"static void handleEnableIfAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n S.Diag(AL.getLoc(), diag::ext_clang_enable_if);"}}, | ||
[k]={ | |||
["clang/test/Sema/enable_if-ext.c"]={"clang/test/Sema/enable_if-ext.c:11:18: warning: \'enable_if\' is a clang extension [-Wgcc-compat]","clang/test/Sema/enable_if-ext.c:17:18: warning: \'enable_if\' is a clang extension [-Wgcc-compat]","clang/test/Sema/enable_if-ext.c:23:18: warning: \'enable_if\' is a clang extension [-Wgcc-compat]","clang/test/Sema/enable_if-ext.c:29:18: warning: \'enable_if\' is a clang extension [-Wgcc-compat]"} | |||
} | |||
}, | }, | ||
["ext_comment_paste_microsoft"]={ | ["ext_comment_paste_microsoft"]={ | ||
[ | [c]="pasting two \'/\' tokens into a \'//\' comment is a Microsoft extension [-Wmicrosoft-comment-paste]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={G,"microsoft-comment-paste",v}, | |||
[m]="microsoft-comment-paste", | |||
[h]="pasting two \'/\' tokens into a \'//\' comment is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="pasting two \'\\/\' tokens into a \'\\/\\/\' comment is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-comment\\-paste[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"446cf25c2131",1451430377,"Emit a -Wmicrosoft warning when pasting /##/ into a comment token in MS mode."}, | [i]={"446cf25c2131",1451430377,"Emit a -Wmicrosoft warning when pasting /##/ into a comment token in MS mode."}, | ||
[j]={{"clang/lib/Lex/TokenLexer.cpp",947,"/// HandleMicrosoftCommentPaste - In microsoft compatibility mode, /##/ pastes\n/// together to form a comment that comments out everything in the current\n/// macro, other active macros, and anything left on the current physical\n/// source line of the expanded buffer. Handle this by returning the\n/// first token on the next line.\nvoid TokenLexer::HandleMicrosoftCommentPaste(Token &Tok, SourceLocation OpLoc) {\n PP.Diag(OpLoc, diag::ext_comment_paste_microsoft);"}} | [j]={{"clang/lib/Lex/TokenLexer.cpp",947,"/// HandleMicrosoftCommentPaste - In microsoft compatibility mode, /##/ pastes\n/// together to form a comment that comments out everything in the current\n/// macro, other active macros, and anything left on the current physical\n/// source line of the expanded buffer. Handle this by returning the\n/// first token on the next line.\nvoid TokenLexer::HandleMicrosoftCommentPaste(Token &Tok, SourceLocation OpLoc) {\n PP.Diag(OpLoc, diag::ext_comment_paste_microsoft);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/macro_paste_msextensions.c"]={"clang/test/Preprocessor/macro_paste_msextensions.c:15:1: warning: pasting two \'/\' tokens into a \'//\' comment is a Microsoft extension [-Wmicrosoft-comment-paste]","clang/test/Preprocessor/macro_paste_msextensions.c:24:1: warning: pasting two \'/\' tokens into a \'//\' comment is a Microsoft extension [-Wmicrosoft-comment-paste]"} | |||
} | |||
}, | }, | ||
["ext_complex_component_init"]={ | ["ext_complex_component_init"]={ | ||
[ | [c]="complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"complex-component-init",v}, | |||
[m]="complex-component-init", | |||
[h]="complex initialization specifying real and imaginary components is an extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="complex initialization specifying real and imaginary components is an extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wcomplex\\-component\\-init[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"6b9c41ea68f8",1316474264,"Add list initialization for complex numbers in C. Essentially, this allows \"_Complex float x = {1.0..."}, | [i]={"6b9c41ea68f8",1316474264,"Add list initialization for complex numbers in C. Essentially, this allows \"_Complex float x = {1.0..."}, | ||
[j]={{ | [j]={{U,1606,"void InitListChecker::CheckComplexType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n // This is an extension in C. (The builtin _Complex type does not exist\n // in the C++ standard.)\n if (!SemaRef.getLangOpts().CPlusPlus && !VerifyOnly)\n SemaRef.Diag(IList->getBeginLoc(), diag::ext_complex_component_init) << IList->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/Sema/complex-init-list.c"]={"clang/test/Sema/complex-init-list.c:20:25: warning: complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]","clang/test/Sema/complex-init-list.c:28:23: warning: complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]","clang/test/Sema/complex-init-list.c:30:30: warning: complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]","clang/test/Sema/complex-init-list.c:31:30: warning: complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]","clang/test/Sema/complex-init-list.c:31:44: warning: complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]","clang/test/Sema/complex-init-list.c:33:25: warning: complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]","clang/test/Sema/complex-init-list.c:39:27: warning: complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]","clang/test/Sema/complex-init-list.c:45:32: warning: complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]","clang/test/Sema/complex-init-list.c:45:46: warning: complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]","clang/test/Sema/complex-init-list.c:47:44: warning: complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]","clang/test/Sema/complex-init-list.c:51:41: warning: complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]","clang/test/Sema/complex-init-list.c:54:22: warning: complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]","clang/test/Sema/complex-init-list.c:56:21: warning: complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]"} | |||
} | |||
}, | }, | ||
["ext_consteval_if"]={ | ["ext_consteval_if"]={ | ||
[ | [c]="consteval if is a C++23 extension [-Wc++23-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={fb,Eb}, | |||
[m]=fb, | |||
[h]="consteval if is a C++23 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="consteval if is a C\\+\\+23 extension", | ||
[a]=Fb, | |||
[e]=y, | |||
[i]={tb,1612659633,vb}, | |||
[ | |||
[ | |||
[i]={tb,1612659633, | |||
[j]={{xb,1480,"/// 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 if (Tok.is(tok::kw_constexpr)) {\n } else {\n if (Tok.is(tok::kw_consteval)) {\n Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_consteval_if : diag::ext_consteval_if);"}} | [j]={{xb,1480,"/// 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 if (Tok.is(tok::kw_constexpr)) {\n } else {\n if (Tok.is(tok::kw_consteval)) {\n Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_consteval_if : diag::ext_consteval_if);"}} | ||
}, | }, | ||
["ext_constexpr_body_invalid_stmt"]={ | ["ext_constexpr_body_invalid_stmt"]={ | ||
[ | [c]="use of this statement in a constexpr ... is a C++14 extension [-Wc++14-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={kb,Kb}, | |||
[m]=kb, | |||
[h]="use of this statement in a constexpr %select{function|constructor}0 is a C++14 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of this statement in a constexpr (?:function|constructor) is a C\\+\\+14 extension", | ||
[a]=Wb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and"}, | [i]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and"}, | ||
[j]={{ | [j]={{A,2301,"/// 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 if (Kind == Sema::CheckConstexprKind::CheckValid) {\n } else if (Cxx2bLoc.isValid()) {\n } else if (Cxx2aLoc.isValid()) {\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);"}}, | ||
[k]={ | |||
[Mc]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:57:11: error: use of this statement in a constexpr constructor is a C++14 extension [-Werror,-Wc++14-extensions]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:106:5: error: use of this statement in a constexpr constructor is a C++14 extension [-Werror,-Wc++14-extensions]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:130:5: error: use of this statement in a constexpr constructor is a C++14 extension [-Werror,-Wc++14-extensions]"} | |||
} | |||
}, | }, | ||
["ext_constexpr_body_invalid_stmt_cxx20"]={ | ["ext_constexpr_body_invalid_stmt_cxx20"]={ | ||
[ | [c]="use of this statement in a constexpr ... is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="use of this statement in a constexpr %select{function|constructor}0 is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of this statement in a constexpr (?:function|constructor) is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=n, | |||
[i]={Jb,1576908663,Ib}, | |||
[j]={{A,2295,"/// 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 if (Kind == Sema::CheckConstexprKind::CheckValid) {\n } else if (Cxx2bLoc.isValid()) {\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);"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp:124:5: warning: use of this statement in a constexpr function is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp:140:3: warning: use of this statement in a constexpr function is a C++20 extension [-Wc++20-extensions]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_constexpr_body_invalid_stmt_cxx23"]={ | ["ext_constexpr_body_invalid_stmt_cxx23"]={ | ||
[ | [c]="use of this statement in a constexpr ... is a C++23 extension [-Wc++23-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={fb,Eb}, | |||
[m]=fb, | |||
[h]="use of this statement in a constexpr %select{function|constructor}0 is a C++23 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of this statement in a constexpr (?:function|constructor) is a C\\+\\+23 extension", | ||
[a]=Fb, | |||
[e]=n, | |||
[i]={O,1625925174,N}, | |||
[j]={{A,2289,"/// 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 if (Kind == Sema::CheckConstexprKind::CheckValid) {\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);"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:17:7: warning: use of this statement in a constexpr function is a C++23 extension [-Wc++23-extensions]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:23:5: warning: use of this statement in a constexpr function is a C++23 extension [-Wc++23-extensions]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_constexpr_body_multiple_return"]={ | ["ext_constexpr_body_multiple_return"]={ | ||
[ | [c]="multiple return statements in constexpr function is a C++14 extension [-Wc++14-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={kb,Kb}, | |||
[m]=kb, | |||
[h]="multiple return statements in constexpr function is a C++14 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="multiple return statements in constexpr function is a C\\+\\+14 extension", | ||
[a]=Wb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and"}, | [i]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and"}, | ||
[j]={{ | [j]={{A,2400,"/// 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 if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n } else {\n if (ReturnStmts.empty()) {\n } else if (ReturnStmts.size() > 1) {\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);"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp:132:5: warning: multiple return statements in constexpr function is a C++14 extension [-Wc++14-extensions]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp:218:3: warning: multiple return statements in constexpr function is a C++14 extension [-Wc++14-extensions]"} | |||
} | |||
}, | }, | ||
["ext_constexpr_ctor_missing_init"]={ | ["ext_constexpr_ctor_missing_init"]={ | ||
[ | [c]="constexpr constructor that does not initialize all members is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="constexpr constructor that does not initialize all members is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="constexpr constructor that does not initialize all members is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=n, | |||
[i]={Vb,1567434909,cc}, | |||
[j]={{A,2045,"/// 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 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);"}}, | |||
[ | [k]={ | ||
[ | [Mc]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:140:13: error: constexpr constructor that does not initialize all members is a C++20 extension [-Werror,-Wc++20-extensions]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:173:13: error: constexpr constructor that does not initialize all members is a C++20 extension [-Werror,-Wc++20-extensions]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:179:13: error: constexpr constructor that does not initialize all members is a C++20 extension [-Werror,-Wc++20-extensions]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:184:13: error: constexpr constructor that does not initialize all members is a C++20 extension [-Werror,-Wc++20-extensions]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:189:13: error: constexpr constructor that does not initialize all members is a C++20 extension [-Werror,-Wc++20-extensions]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_constexpr_function_never_constant_expr"]={ | ["ext_constexpr_function_never_constant_expr"]={ | ||
[ | [c]="... ... never produces a constant expression [-Winvalid-constexpr]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"invalid-constexpr"}, | ||
[ | [m]="invalid-constexpr", | ||
[ | [h]="%select{constexpr|consteval}1 %select{function|constructor}0 never produces a constant expression", | ||
[ | [b]=R, | ||
[ | [g]="(?:constexpr|consteval) (?:function|constructor) never produces a constant expression", | ||
[ | [a]=" \\[[^\\]]*\\-Winvalid\\-constexpr[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"f86b5dc7009e",1355032543,"PR14550: If a system header contains a bogus constexpr function definition,"}, | [i]={"f86b5dc7009e",1355032543,"PR14550: If a system header contains a bogus constexpr function definition,"}, | ||
[j]={{ | [j]={{A,2431,"/// 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 if (Kind == Sema::CheckConstexprKind::Diagnose && !Expr::isPotentialConstantExpr(Dcl, Diags)) {\n SemaRef.Diag(Dcl->getLocation(), diag::ext_constexpr_function_never_constant_expr) << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/literal-type.cpp"]={"clang/test/SemaCXX/literal-type.cpp:57:13: error: constexpr constructor never produces a constant expression [-Winvalid-constexpr]"} | |||
} | |||
}, | }, | ||
["ext_constexpr_function_try_block_cxx20"]={ | ["ext_constexpr_function_try_block_cxx20"]={ | ||
[ | [c]="function try block in constexpr ... is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="function try block in constexpr %select{function|constructor}0 is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="function try block in constexpr (?:function|constructor) is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=n, | |||
[i]={Jb,1576908663,Ib}, | |||
[j]={{A,2258,"/// 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 if (isa<CXXTryStmt>(Body)) {\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);"}}, | |||
[ | [k]={ | ||
[ | [Mc]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:53:5: error: function try block in constexpr constructor is a C++20 extension [-Werror,-Wc++20-extensions]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_constexpr_if"]={ | ["ext_constexpr_if"]={ | ||
[ | [c]="constexpr if is a C++17 extension [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={P,hb}, | |||
[m]=P, | |||
[h]="constexpr if is a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="constexpr if is a C\\+\\+17 extension", | ||
[a]=ib, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature."}, | [i]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature."}, | ||
[j]={{xb,1470,"/// 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 if (Tok.is(tok::kw_constexpr)) {\n Diag(Tok, getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_constexpr_if : diag::ext_constexpr_if);"}} | [j]={{xb,1470,"/// 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 if (Tok.is(tok::kw_constexpr)) {\n Diag(Tok, getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_constexpr_if : diag::ext_constexpr_if);"}}, | ||
[k]={ | |||
["clang/test/CodeGenCXX/nrvo.cpp"]={"clang/test/CodeGenCXX/nrvo.cpp:2568:6: warning: constexpr if is a C++17 extension [-Wc++17-extensions]","clang/test/CodeGenCXX/nrvo.cpp:2577:6: warning: constexpr if is a C++17 extension [-Wc++17-extensions]","clang/test/CodeGenCXX/nrvo.cpp:2927:6: warning: constexpr if is a C++17 extension [-Wc++17-extensions]"} | |||
} | |||
}, | }, | ||
["ext_constexpr_local_var"]={ | ["ext_constexpr_local_var"]={ | ||
[ | [c]="variable declaration in a constexpr ... is a C++14 extension [-Wc++14-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={kb,Kb}, | |||
[m]=kb, | |||
[h]="variable declaration in a constexpr %select{function|constructor}0 is a C++14 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="variable declaration in a constexpr (?:function|constructor) is a C\\+\\+14 extension", | ||
[a]=Wb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and"}, | [i]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and"}, | ||
[j]={{ | [j]={{A,1972,"/// 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 case Decl::Decomposition: {\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);"}}, | ||
[k]={ | |||
[Mc]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:100:19: error: variable declaration in a constexpr constructor is a C++14 extension [-Werror,-Wc++14-extensions]"} | |||
} | |||
}, | }, | ||
["ext_constexpr_local_var_no_init"]={ | ["ext_constexpr_local_var_no_init"]={ | ||
[ | [c]="uninitialized variable in a constexpr ... is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="uninitialized variable in a constexpr %select{function|constructor}0 is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="uninitialized variable in a constexpr (?:function|constructor) is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=n, | |||
[i]={Vb,1567434909,cc}, | |||
[j]={{A,1960,"/// 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 case Decl::Decomposition: {\n if (VD->isThisDeclarationADefinition()) {\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);"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp:167:7: warning: uninitialized variable in a constexpr function is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp:272:9: warning: uninitialized variable in a constexpr function is a C++20 extension [-Wc++20-extensions]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_constexpr_on_lambda_cxx17"]={ | ["ext_constexpr_on_lambda_cxx17"]={ | ||
[ | [c]="\'constexpr\' on lambda expressions is a C++17 extension [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={P,hb}, | |||
[m]=P, | |||
[h]="\'constexpr\' on lambda expressions is a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'constexpr\' on lambda expressions is a C\\+\\+17 extension", | ||
[a]=ib, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"b115e5dda202",1502667449,"Rename cxx1z -> cxx17 across all diagnostic IDs."}, | [i]={"b115e5dda202",1502667449,"Rename cxx1z -> cxx17 across all diagnostic IDs."}, | ||
[j]={{ | [j]={{wb,1227,"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);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx1z-constexpr-lambdas.cpp"]={"clang/test/Parser/cxx1z-constexpr-lambdas.cpp:7:15: warning: \'constexpr\' on lambda expressions is a C++17 extension [-Wc++17-extensions]","clang/test/Parser/cxx1z-constexpr-lambdas.cpp:33:23: warning: \'constexpr\' on lambda expressions is a C++17 extension [-Wc++17-extensions]","clang/test/Parser/cxx1z-constexpr-lambdas.cpp:34:16: warning: \'constexpr\' on lambda expressions is a C++17 extension [-Wc++17-extensions]","clang/test/Parser/cxx1z-constexpr-lambdas.cpp:35:16: warning: \'constexpr\' on lambda expressions is a C++17 extension [-Wc++17-extensions]"} | |||
} | |||
}, | }, | ||
["ext_constexpr_static_var"]={ | ["ext_constexpr_static_var"]={ | ||
[ | [c]="definition of a ... variable in a constexpr ... is a C++23 extension [-Wc++23-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={fb,Eb}, | |||
[m]=fb, | |||
[h]="definition of a %select{static|thread_local}1 variable in a constexpr %select{function|constructor}0 is a C++23 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="definition of a (?:static|thread_local) variable in a constexpr (?:function|constructor) is a C\\+\\+23 extension", | ||
[a]=Fb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."}, | [i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls."}, | ||
[j]={{ | [j]={{A,1935,"/// 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 case Decl::Decomposition: {\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);"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:38:18: warning: definition of a static variable in a constexpr function is a C++23 extension [-Wc++23-extensions]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:44:24: warning: definition of a thread_local variable in a constexpr function is a C++23 extension [-Wc++23-extensions]"} | |||
} | |||
}, | }, | ||
["ext_constexpr_type_definition"]={ | ["ext_constexpr_type_definition"]={ | ||
[ | [c]="type definition in a constexpr ... is a C++14 extension [-Wc++14-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={kb,Kb}, | |||
[m]=kb, | |||
[h]="type definition in a constexpr %select{function|constructor}0 is a C++14 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="type definition in a constexpr (?:function|constructor) is a C\\+\\+14 extension", | ||
[a]=Wb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and"}, | [i]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and"}, | ||
[j]={{ | [j]={{A,1907,"/// 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 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);"}}, | ||
[k]={ | |||
[Mc]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:112:5: error: type definition in a constexpr constructor is a C++14 extension [-Werror,-Wc++14-extensions]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:118:5: error: type definition in a constexpr constructor is a C++14 extension [-Werror,-Wc++14-extensions]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:124:5: error: type definition in a constexpr constructor is a C++14 extension [-Werror,-Wc++14-extensions]"} | |||
} | |||
}, | }, | ||
["ext_constexpr_union_ctor_no_init"]={ | ["ext_constexpr_union_ctor_no_init"]={ | ||
[ | [c]="constexpr union constructor that does not initialize any member is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="constexpr union constructor that does not initialize any member is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="constexpr union constructor that does not initialize any member is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=n, | |||
[i]={Vb,1567434909,cc}, | |||
[j]={{A,2322,"/// 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 if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\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);"}} | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_constinit_missing"]={ | ["ext_constinit_missing"]={ | ||
[ | [c]="\'constinit\' specifier missing on initializing declaration of A [-Wmissing-constinit]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"missing-constinit"}, | |||
[m]="missing-constinit", | |||
[h]="\'constinit\' specifier missing on initializing declaration of %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'constinit\' specifier missing on initializing declaration of (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-constinit[^\\]]*\\]", | |||
[e]=n, | |||
[i]={Vb,1567434909,cc}, | |||
[j]={{x,3165,"static void diagnoseMissingConstinit(Sema &S, const VarDecl *InitDecl, const ConstInitAttr *CIAttr, bool AttrBeforeInit) {\n if (AttrBeforeInit) {\n S.Diag(InitDecl->getLocation(), diag::ext_constinit_missing) << InitDecl << FixItHint::CreateInsertion(InsertLoc, SuitableSpelling);"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p2.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p2.cpp:8:5: warning: \'constinit\' specifier missing on initializing declaration of \'c\' [-Wmissing-constinit]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_ctrl_z_eof_microsoft"]={ | ["ext_ctrl_z_eof_microsoft"]={ | ||
[ | [c]="treating Ctrl-Z as end-of-file is a Microsoft extension [-Wmicrosoft-end-of-file]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={G,"microsoft-end-of-file",v}, | |||
[m]="microsoft-end-of-file", | |||
[h]="treating Ctrl-Z as end-of-file is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="treating Ctrl\\-Z as end\\-of\\-file is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-end\\-of\\-file[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"de2310bddf64",1451431047,"Emit a -Wmicrosoft warning when treating ^Z as EOF in MS mode."}, | [i]={"de2310bddf64",1451431047,"Emit a -Wmicrosoft warning when treating ^Z as EOF in MS mode."}, | ||
[j]={{ | [j]={{ab,3654,"LexStart:\n case 26: // DOS & CP/M EOF: \"^Z\".\n // If we\'re in Microsoft extensions mode, treat this as end of file.\n if (LangOpts.MicrosoftExt) {\n if (!isLexingRawMode())\n Diag(CurPtr - 1, diag::ext_ctrl_z_eof_microsoft);"}}, | ||
[k]={ | |||
["clang/test/Lexer/msdos-cpm-eof.c"]={"clang/test/Lexer/msdos-cpm-eof.c:6:1: warning: treating Ctrl-Z as end-of-file is a Microsoft extension [-Wmicrosoft-end-of-file]"} | |||
} | |||
}, | }, | ||
["ext_cxx11_attr_placement"]={ | ["ext_cxx11_attr_placement"]={ | ||
[ | [c]="ISO C++ does not allow ... to appear here [-Wcxx-attribute-extension]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"cxx-attribute-extension"}, | |||
[m]="cxx-attribute-extension", | |||
[h]="ISO C++ does not allow %select{an attribute list|%0}1 to appear here", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+ does not allow (?:an attribute list|(.*?)) to appear here", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wcxx\\-attribute\\-extension[^\\]]*\\]", | |||
[e]=y, | |||
[i]={tb,1612659633,vb}, | |||
[j]={{H,1782,"void Parser::DiagnoseCXX11AttributeExtension(ParsedAttributes &Attrs) {\n for (const ParsedAttr &PA : Attrs) {\n if (PA.isCXX11Attribute() || PA.isC2xAttribute() || PA.isRegularKeywordAttribute())\n Diag(PA.getLoc(), diag::ext_cxx11_attr_placement) << PA << PA.isRegularKeywordAttribute() << PA.getRange();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp"]={"clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:7:3: warning: ISO C++ does not allow an attribute list to appear here [-Wcxx-attribute-extension]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:10:3: warning: ISO C++ does not allow an attribute list to appear here [-Wcxx-attribute-extension]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:11:15: warning: ISO C++ does not allow an attribute list to appear here [-Wcxx-attribute-extension]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:15:10: warning: ISO C++ does not allow an attribute list to appear here [-Wcxx-attribute-extension]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:18:3: warning: ISO C++ does not allow an attribute list to appear here [-Wcxx-attribute-extension]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:18:40: warning: ISO C++ does not allow an attribute list to appear here [-Wcxx-attribute-extension]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:18:72: warning: ISO C++ does not allow an attribute list to appear here [-Wcxx-attribute-extension]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:22:5: warning: ISO C++ does not allow an attribute list to appear here [-Wcxx-attribute-extension]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:23:5: warning: ISO C++ does not allow an attribute list to appear here [-Wcxx-attribute-extension]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:25:25: warning: ISO C++ does not allow an attribute list to appear here [-Wcxx-attribute-extension]","clang/test/SemaCXX/cxx11-attributes-on-using-declaration.cpp:26:16: warning: ISO C++ does not allow an attribute list to appear here [-Wcxx-attribute-extension]"} | ||
[i]={tb,1612659633, | } | ||
[j]={{ | |||
}, | }, | ||
["ext_cxx11_enum_fixed_underlying_type"]={ | ["ext_cxx11_enum_fixed_underlying_type"]={ | ||
[ | [c]="enumeration types with a fixed underlying type are a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={T,E,v}, | |||
[m]=E, | |||
[h]="enumeration types with a fixed underlying type are a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="enumeration types with a fixed underlying type are a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"0d0355abfca9",1351820068,"Change diagnostics for enums with fixed underlying type so in C++98 mode, we cite C++11."}, | [i]={"0d0355abfca9",1351820068,"Change diagnostics for enums with fixed underlying type so in C++98 mode, we cite C++11."}, | ||
[j]={{ | [j]={{H,4943,"/// 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 // Parse the fixed underlying type.\n if (Tok.is(tok::colon)) {\n if (CanBeBitfield && !isEnumBase(CanBeOpaqueEnumDeclaration)) {\n } else if (CanHaveEnumBase || !ColonIsSacred) {\n if (!getLangOpts().ObjC) {\n if (getLangOpts().CPlusPlus11)\n else if (getLangOpts().CPlusPlus)\n Diag(ColonLoc, diag::ext_cxx11_enum_fixed_underlying_type) << BaseRange;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/enum.cpp"]={"clang/test/SemaCXX/enum.cpp:111:13: warning: enumeration types with a fixed underlying type are a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_cxx11_longlong"]={ | ["ext_cxx11_longlong"]={ | ||
[ | [c]="\'long long\' is a C++11 extension [-Wc++11-long-long]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={T,E,"c++11-long-long","long-long",v,v}, | |||
[m]="c++11-long-long", | |||
[h]="\'long long\' is a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'long long\' is a C\\+\\+11 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-long\\-long[^\\]]*\\]", | |||
[e]=r, | |||
[ | |||
[ | |||
[i]={"1cd230570394",1348510761,"Change the wording of the extension warning from"}, | [i]={"1cd230570394",1348510761,"Change the wording of the extension warning from"}, | ||
[j]={{ | [j]={{zc,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 case tok::numeric_constant: {\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);"},{z,4228,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n if (Literal.isFixedPointLiteral()) {\n } else if (Literal.isFloatingLiteral()) {\n } else if (!Literal.isIntegerLiteral()) {\n } else {\n if (Literal.GetIntegerValue(ResultVal)) {\n } else {\n // Check long long if needed.\n if (Ty.isNull() && !Literal.isSizeT) {\n // Does it fit in a unsigned long long?\n if (ResultVal.isIntN(LongLongSize)) {\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);"},{S,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 case DeclSpec::TST_int: {\n if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n case TypeSpecifierWidth::LongLong:\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);"},{S,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 case DeclSpec::TST_int: {\n if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n } else {\n case TypeSpecifierWidth::LongLong:\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);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/warn-c++11-extensions.cpp"]={"clang/test/SemaCXX/warn-c++11-extensions.cpp:3:1: warning: \'long long\' is a C++11 extension [-Wc++11-long-long]","clang/test/SemaCXX/warn-c++11-extensions.cpp:4:11: warning: \'long long\' is a C++11 extension [-Wc++11-long-long]","clang/test/SemaCXX/warn-c++11-extensions.cpp:5:10: warning: \'long long\' is a C++11 extension [-Wc++11-long-long]","clang/test/SemaCXX/warn-c++11-extensions.cpp:6:20: warning: \'long long\' is a C++11 extension [-Wc++11-long-long]"} | |||
} | |||
}, | }, | ||
["ext_cxx14_attr"]={ | ["ext_cxx14_attr"]={ | ||
[ | [c]="use of the A attribute is a C++14 extension [-Wc++14-attribute-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"c++14-attribute-extensions",kb,Kb,"future-attribute-extensions",v,v}, | |||
[m]="c++14-attribute-extensions", | |||
[h]="use of the %0 attribute is a C++14 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of the (.*?) attribute is a C\\+\\+14 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+14\\-attribute\\-extensions[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"4f902c7eccd4",1457397175,"P0188R1: add support for standard [[fallthrough]] attribute. This is almost"}, | [i]={"4f902c7eccd4",1457397175,"P0188R1: add support for standard [[fallthrough]] attribute. This is almost"}, | ||
[j]={{ | [j]={{Sb,8200,"static void handleDeprecatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (!S.getLangOpts().CPlusPlus14 && AL.isCXX11Attribute() && !AL.isGNUScope())\n S.Diag(AL.getLoc(), diag::ext_cxx14_attr) << AL;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/generalized-deprecated.cpp"]={"clang/test/SemaCXX/generalized-deprecated.cpp:6:3: warning: use of the \'deprecated\' attribute is a C++14 extension [-Wc++14-attribute-extensions]"} | |||
} | |||
}, | }, | ||
["ext_cxx17_attr"]={ | ["ext_cxx17_attr"]={ | ||
[ | [c]="use of the A attribute is a C++17 extension [-Wc++17-attribute-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"c++17-attribute-extensions",P,hb,"future-attribute-extensions",v,v}, | |||
[m]="c++17-attribute-extensions", | |||
[h]="use of the %0 attribute is a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of the (.*?) attribute is a C\\+\\+17 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+17\\-attribute\\-extensions[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"b115e5dda202",1502667449,"Rename cxx1z -> cxx17 across all diagnostic IDs."}, | [i]={"b115e5dda202",1502667449,"Rename cxx1z -> cxx17 across all diagnostic IDs."}, | ||
[j]={{ | [j]={{Sb,2336,"static void handleUnusedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // If this is spelled as the standard C++17 attribute, but not in C++17, warn\n // about using it as an extension.\n if (!S.getLangOpts().CPlusPlus17 && IsCXX17Attr)\n S.Diag(AL.getLoc(), diag::ext_cxx17_attr) << AL;"},{Sb,3176,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (AL.isStandardAttributeSyntax() && !AL.getScopeName()) {\n if (AL.getNumArgs() == 1) {\n } else if (LO.CPlusPlus && !LO.CPlusPlus17)\n S.Diag(AL.getLoc(), diag::ext_cxx17_attr) << AL;"},{"clang/lib/Sema/SemaStmtAttr.cpp",49,"static Attr *handleFallThroughAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n // If this is spelled as the standard C++17 attribute, but not in C++17, warn\n // about using it as an extension.\n if (!S.getLangOpts().CPlusPlus17 && A.isCXX11Attribute() && !A.getScopeName())\n S.Diag(A.getLoc(), diag::ext_cxx17_attr) << A;"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx0x-attributes.cpp"]={"clang/test/Parser/cxx0x-attributes.cpp:387:7: warning: use of the \'fallthrough\' attribute is a C++17 extension [-Wc++17-attribute-extensions]"} | |||
} | |||
}, | }, | ||
["ext_cxx20_attr"]={ | ["ext_cxx20_attr"]={ | ||
[ | [c]="use of the A attribute is a C++20 extension [-Wc++20-attribute-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"c++20-attribute-extensions",K,cb,"future-attribute-extensions",v,v}, | |||
[m]="c++20-attribute-extensions", | |||
[h]="use of the %0 attribute is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of the (.*?) attribute is a C\\+\\+20 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+20\\-attribute\\-extensions[^\\]]*\\]", | |||
[e]=n, | |||
[i]={Jb,1576908663,Ib}, | |||
[j]={{Sb,3167,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (AL.isStandardAttributeSyntax() && !AL.getScopeName()) {\n if (AL.getNumArgs() == 1) {\n if (LO.CPlusPlus && !LO.CPlusPlus20)\n S.Diag(AL.getLoc(), diag::ext_cxx20_attr) << AL;"},{"clang/lib/Sema/SemaStmtAttr.cpp",312,"static Attr *handleLikely(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n if (!S.getLangOpts().CPlusPlus20 && A.isCXX11Attribute() && !A.getScopeName())\n S.Diag(A.getLoc(), diag::ext_cxx20_attr) << A << Range;"},{"clang/lib/Sema/SemaStmtAttr.cpp",321,"static Attr *handleUnlikely(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n if (!S.getLangOpts().CPlusPlus20 && A.isCXX11Attribute() && !A.getScopeName())\n S.Diag(A.getLoc(), diag::ext_cxx20_attr) << A << Range;"}}, | |||
[k]={ | |||
[ | ["clang/test/SemaCXX/attr-likelihood.cpp"]={"clang/test/SemaCXX/attr-likelihood.cpp:7:7: warning: use of the \'likely\' attribute is a C++20 extension [-Wc++20-attribute-extensions]","clang/test/SemaCXX/attr-likelihood.cpp:9:7: warning: use of the \'unlikely\' attribute is a C++20 extension [-Wc++20-attribute-extensions]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_cxx23_pp_directive"]={ | ["ext_cxx23_pp_directive"]={ | ||
[ | [c]="use of a \'#...\' directive is a C++23 extension [-Wc++23-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={fb,Eb}, | |||
[m]=fb, | |||
[h]="use of a \'#%select{<BUG IF SEEN>|elifdef|elifndef}0\' directive is a C++23 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of a \'\\#(?:elifdef|elifndef)\' directive is a C\\+\\+23 extension", | ||
[a]=Fb, | |||
[e]=B, | |||
[i]={O,1625925174,N}, | |||
[j]={{W,769,"/// 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 while (true) {\n if (Directive.startswith(\"if\")) {\n } else if (Directive[0] == \'e\') {\n if (Sub == \"ndif\") { // \"endif\"\n } else if (Sub == \"lse\") { // \"else\".\n } else if (Sub == \"lif\") { // \"elif\".\n } else if (Sub == \"lifdef\" || // \"elifdef\"\n if (LangOpts.CPlusPlus)\n DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive : diag::ext_cxx23_pp_directive;"},{W,3455,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n case PED_Elifndef:\n if (LangOpts.CPlusPlus)\n DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive : diag::ext_cxx23_pp_directive;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Preprocessor/ext-pp-directive.c"]={"clang/test/Preprocessor/ext-pp-directive.c:18:2: warning: use of a \'#elifdef\' directive is a C++23 extension [-Wc++23-extensions]","clang/test/Preprocessor/ext-pp-directive.c:29:2: warning: use of a \'#elifndef\' directive is a C++23 extension [-Wc++23-extensions]","clang/test/Preprocessor/ext-pp-directive.c:40:2: warning: use of a \'#elifdef\' directive is a C++23 extension [-Wc++23-extensions]","clang/test/Preprocessor/ext-pp-directive.c:51:2: warning: use of a \'#elifndef\' directive is a C++23 extension [-Wc++23-extensions]"} | ||
[i]={ | } | ||
[j]={{W,769,"/// 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 while (true) {\n if (Directive.startswith(\"if\")) {\n } else if (Directive[0] == \'e\') {\n if (Sub == \"ndif\") { // \"endif\"\n } else if (Sub == \"lse\") { // \"else\".\n } else if (Sub == \"lif\") { // \"elif\".\n } else if (Sub == \"lifdef\" || // \"elifdef\"\n if (LangOpts.CPlusPlus)\n DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive : diag::ext_cxx23_pp_directive;"},{W,3455,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n case PED_Elifndef:\n if (LangOpts.CPlusPlus)\n DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive : diag::ext_cxx23_pp_directive;"}} | |||
}, | }, | ||
["ext_cxx23_size_t_suffix"]={ | ["ext_cxx23_size_t_suffix"]={ | ||
[ | [c]="\'size_t\' suffix for literals is a C++23 extension [-Wc++23-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={fb,Eb}, | |||
[m]=fb, | |||
[h]="\'size_t\' suffix for literals is a C++23 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'size_t\' suffix for literals is a C\\+\\+23 extension", | ||
[a]=Fb, | |||
[e]=r, | |||
[ | |||
[ | |||
[i]={"33ee5c466346",1680613513,"[clang] Add Parse and Sema support for RegularKeyword attributes"}, | [i]={"33ee5c466346",1680613513,"[clang] Add Parse and Sema support for RegularKeyword attributes"}, | ||
[j]={{ | [j]={{zc,332,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result. Return true if there was an error\n/// parsing. This function also returns information about the form of the\n/// expression in DT. See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n case tok::numeric_constant: {\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);"},{z,4059,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n if (Literal.isFixedPointLiteral()) {\n } else if (Literal.isFloatingLiteral()) {\n } else if (!Literal.isIntegerLiteral()) {\n } else {\n // \'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);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/size_t-literal.cpp"]={"clang/test/SemaCXX/size_t-literal.cpp:19:13: warning: \'size_t\' suffix for literals is a C++23 extension [-Wc++23-extensions]","clang/test/SemaCXX/size_t-literal.cpp:24:13: warning: \'size_t\' suffix for literals is a C++23 extension [-Wc++23-extensions]","clang/test/SemaCXX/size_t-literal.cpp:31:13: warning: \'size_t\' suffix for literals is a C++23 extension [-Wc++23-extensions]","clang/test/SemaCXX/size_t-literal.cpp:36:13: warning: \'size_t\' suffix for literals is a C++23 extension [-Wc++23-extensions]","clang/test/SemaCXX/size_t-literal.cpp:41:13: warning: \'size_t\' suffix for literals is a C++23 extension [-Wc++23-extensions]","clang/test/SemaCXX/size_t-literal.cpp:46:13: warning: \'size_t\' suffix for literals is a C++23 extension [-Wc++23-extensions]","clang/test/SemaCXX/size_t-literal.cpp:51:13: warning: \'size_t\' suffix for literals is a C++23 extension [-Wc++23-extensions]","clang/test/SemaCXX/size_t-literal.cpp:56:13: warning: \'size_t\' suffix for literals is a C++23 extension [-Wc++23-extensions]","clang/test/SemaCXX/size_t-literal.cpp:61:13: warning: \'size_t\' suffix for literals is a C++23 extension [-Wc++23-extensions]","clang/test/SemaCXX/size_t-literal.cpp:66:13: warning: \'size_t\' suffix for literals is a C++23 extension [-Wc++23-extensions]"} | |||
} | |||
}, | }, | ||
["ext_cxx_designated_init"]={ | ["ext_cxx_designated_init"]={ | ||
[ | [c]="designated initializers are a C++20 extension [-Wc++20-designator]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"c++20-designator",K,cb,zb,V,v}, | |||
[m]="c++20-designator", | |||
[h]="designated initializers are a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="designated initializers are a C\\+\\+20 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+20\\-designator[^\\]]*\\]", | |||
[e]=n, | |||
[i]={kc,1567205575,nc}, | |||
[j]={{z,7833,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\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);"}}, | |||
[k]={ | |||
[ | ["clang/test/SemaCXX/c99.cpp"]={"clang/test/SemaCXX/c99.cpp:11:14: warning: designated initializers are a C++20 extension [-Wc++20-designator]","clang/test/SemaCXX/c99.cpp:20:3: warning: designated initializers are a C++20 extension [-Wc++20-designator]","clang/test/SemaCXX/c99.cpp:53:3: warning: designated initializers are a C++20 extension [-Wc++20-designator]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_cxx_label_end_of_compound_statement"]={ | ["ext_cxx_label_end_of_compound_statement"]={ | ||
[ | [c]="label at end of compound statement is a C++23 extension [-Wc++23-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={fb,Eb}, | |||
[m]=fb, | |||
[h]="label at end of compound statement is a C++23 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="label at end of compound statement is a C\\+\\+23 extension", | ||
[a]=Fb, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl."}, | [i]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl."}, | ||
[j]={{xb,1077,"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);"}} | [j]={{xb,1077,"void Parser::DiagnoseLabelAtEndOfCompoundStatement() {\n if (getLangOpts().CPlusPlus) {\n Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_label_end_of_compound_statement : diag::ext_cxx_label_end_of_compound_statement);"}}, | ||
[k]={ | |||
["clang/test/Parser/switch-recovery.cpp"]={"clang/test/Parser/switch-recovery.cpp:164:3: warning: label at end of compound statement is a C++23 extension [-Wc++23-extensions]","clang/test/Parser/switch-recovery.cpp:171:3: warning: label at end of compound statement is a C++23 extension [-Wc++23-extensions]","clang/test/Parser/switch-recovery.cpp:182:3: warning: label at end of compound statement is a C++23 extension [-Wc++23-extensions]","clang/test/Parser/switch-recovery.cpp:213:3: warning: label at end of compound statement is a C++23 extension [-Wc++23-extensions]"} | |||
} | |||
}, | }, | ||
["ext_cxx_static_assert_no_message"]={ | ["ext_cxx_static_assert_no_message"]={ | ||
[ | [c]="\'static_assert\' with no message is a C++17 extension [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={P,hb}, | |||
[m]=P, | |||
[h]="\'static_assert\' with no message is a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'static_assert\' with no message is a C\\+\\+17 extension", | ||
[a]=ib, | |||
[e]=y, | |||
[i]={tb,1612659633,vb}, | |||
[j]={{M,1007,"/// 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 if (Tok.is(tok::r_paren)) {\n if (getLangOpts().CPlusPlus17)\n else if (getLangOpts().CPlusPlus)\n DiagVal = diag::ext_cxx_static_assert_no_message;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaCXX/static-assert.cpp"]={"clang/test/SemaCXX/static-assert.cpp:85:19: warning: \'static_assert\' with no message is a C++17 extension [-Wc++17-extensions]","clang/test/SemaCXX/static-assert.cpp:86:20: warning: \'static_assert\' with no message is a C++17 extension [-Wc++17-extensions]","clang/test/SemaCXX/static-assert.cpp:241:22: warning: \'static_assert\' with no message is a C++17 extension [-Wc++17-extensions]"} | ||
[i]={tb,1612659633, | } | ||
[j]={{ | |||
}, | }, | ||
["ext_decl_attrs_on_lambda"]={ | ["ext_decl_attrs_on_lambda"]={ | ||
[ | [c]="... in this position is a C++23 extension [-Wc++23-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={fb,Eb}, | |||
[m]=fb, | |||
[h]="%select{an attribute specifier sequence|%0}1 in this position is a C++23 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(?:an attribute specifier sequence|(.*?)) in this position is a C\\+\\+23 extension", | ||
[a]=Fb, | |||
[e]=y, | |||
[i]={tb,1612659633,vb}, | |||
[j]={{wb,1368,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\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();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Parser/cxx0x-lambda-expressions.cpp"]={"clang/test/Parser/cxx0x-lambda-expressions.cpp:129:7: warning: an attribute specifier sequence in this position is a C++23 extension [-Wc++23-extensions]","clang/test/Parser/cxx0x-lambda-expressions.cpp:134:17: warning: an attribute specifier sequence in this position is a C++23 extension [-Wc++23-extensions]","clang/test/Parser/cxx0x-lambda-expressions.cpp:139:7: warning: an attribute specifier sequence in this position is a C++23 extension [-Wc++23-extensions]"} | ||
[i]={tb,1612659633, | } | ||
[j]={{ | |||
}, | }, | ||
["ext_decltype_auto_type_specifier"]={ | ["ext_decltype_auto_type_specifier"]={ | ||
[ | [c]="\'decltype(auto)\' type specifier is a C++14 extension [-Wc++14-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={kb,Kb}, | |||
[m]=kb, | |||
[h]="\'decltype(auto)\' type specifier is a C++14 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'decltype\\(auto\\)\' type specifier is a C\\+\\+14 extension", | ||
[a]=Wb, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"74aeef50a0cc",1366992935,"Implement C++1y decltype(auto)."}, | [i]={"74aeef50a0cc",1366992935,"Implement C++1y decltype(auto)."}, | ||
[j]={{ | [j]={{M,1105,"/// ParseDecltypeSpecifier - Parse a C++11 decltype specifier.\n///\n/// \'decltype\' ( expression )\n/// \'decltype\' ( \'auto\' ) [C++1y]\n///\nSourceLocation Parser::ParseDecltypeSpecifier(DeclSpec &DS) {\n if (Tok.is(tok::annot_decltype)) {\n } else {\n // Check for C++1y \'decltype(auto)\'.\n if (Tok.is(tok::kw_auto) && NextToken().is(tok::r_paren)) {\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_decltype_auto_type_specifier : diag::ext_decltype_auto_type_specifier);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/trailing-return-0x.cpp"]={"clang/test/SemaCXX/trailing-return-0x.cpp:21:10: warning: \'decltype(auto)\' type specifier is a C++14 extension [-Wc++14-extensions]"} | |||
} | |||
}, | }, | ||
["ext_decomp_decl"]={ | ["ext_decomp_decl"]={ | ||
[ | [c]="decomposition declarations are a C++17 extension [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={P,hb}, | |||
[m]=P, | |||
[h]="decomposition declarations are a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="decomposition declarations are a C\\+\\+17 extension", | ||
[a]=ib, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z"}, | [i]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z"}, | ||
[j]={{ | [j]={{A,752,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\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();"}}, | ||
[k]={ | |||
["clang/test/CodeGenCXX/mangle.cpp"]={"clang/test/CodeGenCXX/mangle.cpp:1209:10: warning: decomposition declarations are a C++17 extension [-Wc++17-extensions]","clang/test/CodeGenCXX/mangle.cpp:1216:8: warning: decomposition declarations are a C++17 extension [-Wc++17-extensions]"} | |||
} | |||
}, | }, | ||
["ext_decomp_decl_cond"]={ | ["ext_decomp_decl_cond"]={ | ||
[ | [c]="ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"binding-in-condition"}, | |||
[m]="binding-in-condition", | |||
[h]="ISO C++17 does not permit structured binding declaration in a condition", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+17 does not permit structured binding declaration in a condition", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wbinding\\-in\\-condition[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"c81f4538ecd9",1512630195,"Allow conditions to be decomposed with structured bindings"}, | [i]={"c81f4538ecd9",1512630195,"Allow conditions to be decomposed with structured bindings"}, | ||
[j]={{ | [j]={{A,754,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\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();"}}, | ||
[k]={ | |||
["clang/test/Parser/decomposed-condition.cpp"]={"clang/test/Parser/decomposed-condition.cpp:36:12: warning: ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]","clang/test/Parser/decomposed-condition.cpp:38:12: warning: ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]","clang/test/Parser/decomposed-condition.cpp:40:12: warning: ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]","clang/test/Parser/decomposed-condition.cpp:47:15: warning: ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]","clang/test/Parser/decomposed-condition.cpp:49:15: warning: ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]","clang/test/Parser/decomposed-condition.cpp:51:15: warning: ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]","clang/test/Parser/decomposed-condition.cpp:58:15: warning: ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]","clang/test/Parser/decomposed-condition.cpp:60:15: warning: ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]","clang/test/Parser/decomposed-condition.cpp:62:15: warning: ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]","clang/test/Parser/decomposed-condition.cpp:77:16: warning: ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]","clang/test/Parser/decomposed-condition.cpp:79:16: warning: ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]","clang/test/Parser/decomposed-condition.cpp:81:16: warning: ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]"} | |||
} | |||
}, | }, | ||
["ext_decomp_decl_empty"]={ | ["ext_decomp_decl_empty"]={ | ||
[ | [c]="ISO C++17 does not allow a decomposition group to be empty [-Wempty-decomposition]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"empty-decomposition"}, | |||
[m]="empty-decomposition", | |||
[h]="ISO C++17 does not allow a decomposition group to be empty", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+17 does not allow a decomposition group to be empty", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wempty\\-decomposition[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z"}, | [i]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z"}, | ||
[j]={{ | [j]={{H,6783,"void Parser::ParseDecompositionDeclarator(Declarator &D) {\n if (Tok.isNot(tok::r_square))\n else {\n // C++17 does not allow the identifier-list in a structured binding\n // to be empty.\n if (Bindings.empty())\n Diag(Tok.getLocation(), diag::ext_decomp_decl_empty);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/cxx1z-decomposition.cpp"]={"clang/test/SemaCXX/cxx1z-decomposition.cpp:12:9: warning: ISO C++17 does not allow a decomposition group to be empty [-Wempty-decomposition]","clang/test/SemaCXX/cxx1z-decomposition.cpp:14:9: warning: ISO C++17 does not allow a decomposition group to be empty [-Wempty-decomposition]","clang/test/SemaCXX/cxx1z-decomposition.cpp:17:9: warning: ISO C++17 does not allow a decomposition group to be empty [-Wempty-decomposition]","clang/test/SemaCXX/cxx1z-decomposition.cpp:162:9: warning: ISO C++17 does not allow a decomposition group to be empty [-Wempty-decomposition]","clang/test/SemaCXX/cxx1z-decomposition.cpp:196:13: warning: ISO C++17 does not allow a decomposition group to be empty [-Wempty-decomposition]"} | |||
} | |||
}, | }, | ||
["ext_decomp_decl_spec"]={ | ["ext_decomp_decl_spec"]={ | ||
[ | [c]="decomposition declaration declared \'A\' is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="decomposition declaration declared %plural{1:\'%1\'|:with \'%1\' specifiers}0 is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="decomposition declaration declared (?:\'(.*?)\'|with \'(.*?)\' specifiers) is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"13bf9892dc2a",1558554775,"Part of P1091R3: permit structured bindings to be declared \'static\' and"}, | [i]={"13bf9892dc2a",1558554775,"Part of P1091R3: permit structured bindings to be declared \'static\' and"}, | ||
[j]={{ | [j]={{A,813,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n {\n if (!BadSpecifiers.empty()) {\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);"}}, | ||
[k]={ | |||
["clang/test/CodeGenCXX/cxx1z-decomposition.cpp"]={"clang/test/CodeGenCXX/cxx1z-decomposition.cpp:122:3: warning: decomposition declaration declared \'static\' is a C++20 extension [-Wc++20-extensions]","clang/test/CodeGenCXX/cxx1z-decomposition.cpp:138:3: warning: decomposition declaration declared \'static\' is a C++20 extension [-Wc++20-extensions]"} | |||
} | |||
}, | }, | ||
["ext_default_init_const"]={ | ["ext_default_init_const"]={ | ||
[ | [c]="default initialization of an object of const type A... is a Microsoft extension [-Wmicrosoft-const-init]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-const-init"}, | |||
[m]="microsoft-const-init", | |||
[h]="default initialization of an object of const type %0%select{| without a user-provided default constructor}1 is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="default initialization of an object of const type (.*?)(?:| without a user\\-provided default constructor) is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-const\\-init[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"337d5aa58fc2",1429259558,"Move fixit for const init from note to diag, weaken to warning in MS mode."}, | [i]={"337d5aa58fc2",1429259558,"Move fixit for const init from note to diag, weaken to warning in MS mode."}, | ||
[j]={{ | [j]={{U,8537,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n if (!ZeroInitializationFixit.empty()) {\n // The initialization would have succeeded with this fixit. Since the fixit\n // is on the error, we need to build a valid AST in this case, so this isn\'t\n // handled in the Failed() branch above.\n if (!DestType->isRecordType() && VD && VD->isConstexpr()) {\n } else {\n if (S.getLangOpts().MSVCCompat && D && D->hasAttr<SelectAnyAttr>())\n DiagID = diag::ext_default_init_const;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/attr-selectany.cpp"]={"clang/test/SemaCXX/attr-selectany.cpp:48:47: warning: default initialization of an object of const type \'const SomeStruct\' without a user-provided default constructor is a Microsoft extension [-Wmicrosoft-const-init]"} | |||
} | |||
}, | }, | ||
["ext_defaulted_comparison"]={ | ["ext_defaulted_comparison"]={ | ||
[ | [c]="defaulted comparison operators are a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="defaulted comparison operators are a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="defaulted comparison operators are a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=n, | |||
[i]={Vb,1567434909,cc}, | |||
[j]={{A,17884,"void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {\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);"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaCXX/cxx17-compat.cpp"]={"clang/test/SemaCXX/cxx17-compat.cpp:93:56: warning: defaulted comparison operators are a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/cxx17-compat.cpp:94:56: warning: defaulted comparison operators are a C++20 extension [-Wc++20-extensions]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_defaulted_comparison_constexpr_mismatch"]={ | ["ext_defaulted_comparison_constexpr_mismatch"]={ | ||
[ | [c]="defaulted definition of ... that is declared ... but... invokes a non-constexpr comparison function is a C++23 extension [-Wc++23-default-comp-relaxed-constexpr]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"c++23-default-comp-relaxed-constexpr",v}, | |||
[m]="c++23-default-comp-relaxed-constexpr", | |||
[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 a C++23 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="defaulted definition of (?:(?:equality|three\\-way|equality|relational) comparison operator|three\\-way comparison operator) that is declared (?:constexpr|consteval) but(?:|for which the corresponding implicit \'operator\\=\\=\' ) invokes a non\\-constexpr comparison function is a C\\+\\+23 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+23\\-default\\-comp\\-relaxed\\-constexpr[^\\]]*\\]", | |||
[e]=n, | |||
[i]={O,1625925174,N}, | |||
[j]={{A,8968,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\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();"}}, | |||
[k]={ | |||
[ | ["clang/test/CXX/class/class.compare/class.compare.default/p4.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p4.cpp:87:3: warning: defaulted definition of three-way comparison operator that is declared constexpr butfor which the corresponding implicit \'operator==\' invokes a non-constexpr comparison function is a C++23 extension [-Wc++23-default-comp-relaxed-constexpr]","clang/test/CXX/class/class.compare/class.compare.default/p4.cpp:153:5: warning: defaulted definition of equality comparison operator that is declared constexpr but invokes a non-constexpr comparison function is a C++23 extension [-Wc++23-default-comp-relaxed-constexpr]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_defaulted_deleted_function"]={ | ["ext_defaulted_deleted_function"]={ | ||
[ | [c]="... function definitions are a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="%select{defaulted|deleted}0 function definitions are a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(?:defaulted|deleted) function definitions are a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select."}, | [i]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select."}, | ||
[j]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",72,"/// 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 if (TryConsumeToken(tok::equal)) {\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",82,"/// 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 if (TryConsumeToken(tok::equal)) {\n if (TryConsumeToken(tok::kw_delete, KWLoc)) {\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 */;"},{ | [j]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",72,"/// 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 if (TryConsumeToken(tok::equal)) {\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",82,"/// 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 if (TryConsumeToken(tok::equal)) {\n if (TryConsumeToken(tok::kw_delete, KWLoc)) {\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 */;"},{yb,1368,"/// 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 if (TryConsumeToken(tok::equal)) {\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 */;"},{yb,1374,"/// 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 if (TryConsumeToken(tok::equal)) {\n if (TryConsumeToken(tok::kw_delete, KWLoc)) {\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 */;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/aggregate-init-cxx98.cpp"]={"clang/test/SemaCXX/aggregate-init-cxx98.cpp:4:9: warning: defaulted function definitions are a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_delete_void_ptr_operand"]={ | ["ext_delete_void_ptr_operand"]={ | ||
[ | [c]="cannot delete expression with pointer-to-\'void\' type A [-Wdelete-incomplete]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"delete-incomplete"}, | |||
[m]="delete-incomplete", | |||
[h]="cannot delete expression with pointer-to-\'void\' type %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="cannot delete expression with pointer\\-to\\-\'void\' type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdelete\\-incomplete[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"bb3348ed33ac",1274720516,"Downgrade deletion of a void* from an error (which is should be) to an"}, | [i]={"bb3348ed33ac",1274720516,"Downgrade deletion of a void* from an error (which is should be) to an"}, | ||
[j]={{ | [j]={{Y,3686,"/// 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 if (!Ex.get()->isTypeDependent()) {\n if (Pointee->isVoidType() && !isSFINAEContext()) {\n Diag(StartLoc, diag::ext_delete_void_ptr_operand) << Type << Ex.get()->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:174:3: warning: cannot delete expression with pointer-to-\'void\' type \'void *\' [-Wdelete-incomplete]"} | |||
} | |||
}, | }, | ||
["ext_delimited_escape_sequence"]={ | ["ext_delimited_escape_sequence"]={ | ||
[ | [c]="... escape sequences are a ... extension [-Wdelimited-escape-sequence-extension]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"delimited-escape-sequence-extension",v}, | |||
[m]="delimited-escape-sequence-extension", | |||
[h]="%select{delimited|named}0 escape sequences are a %select{Clang|C++23}1 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(?:delimited|named) escape sequences are a (?:Clang|C\\+\\+23) extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdelimited\\-escape\\-sequence\\-extension[^\\]]*\\]", | |||
[e]=B, | |||
[i]={O,1625925174,N}, | |||
[j]={{ab,3354,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n if (Delimited && PP) {\n Diag(SlashLoc, PP->getLangOpts().CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*delimited*/ 0 << (PP->getLangOpts().CPlusPlus ? 1 : 0);"},{ab,3442,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\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);"},{db,357,"/// 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 if (Delimited && Diags) {\n if (!EndDelimiterFound)\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);"},{db,700,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n if ((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);"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/ucn-identifiers.c"]={"clang/test/Sema/ucn-identifiers.c:20:3: warning: delimited escape sequences are a C++23 extension [-Wdelimited-escape-sequence-extension]","clang/test/Sema/ucn-identifiers.c:21:3: warning: named escape sequences are a C++23 extension [-Wdelimited-escape-sequence-extension]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_deprecated_string_literal_conversion"]={ | ["ext_deprecated_string_literal_conversion"]={ | ||
[ | [c]="ISO C++11 does not allow conversion from string literal to A [-Wwritable-strings]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"writable-strings","write-strings"}, | |||
[m]="writable-strings", | |||
[h]="ISO C++11 does not allow conversion from string literal to %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+11 does not allow conversion from string literal to (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wwritable\\-strings[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"1121de36c26b",1389992932,"Fix string-literal to char* conversion in overload resolution for C++11"}, | [i]={"1121de36c26b",1389992932,"Fix string-literal to char* conversion in overload resolution for C++11"}, | ||
[j]={{ | [j]={{Y,4752,"/// 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 case ICK_Qualification: {\n if (SCS.DeprecatedStringLiteralToCharPtr && !getLangOpts().WritableStrings) {\n Diag(From->getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::ext_deprecated_string_literal_conversion : diag::warn_deprecated_string_literal_conversion) << ToType.getNonReferenceType();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/cxx0x-type-convert-construct.cpp"]={"clang/test/SemaCXX/cxx0x-type-convert-construct.cpp:12:10: warning: ISO C++11 does not allow conversion from string literal to \'char *\' [-Wwritable-strings]","clang/test/SemaCXX/cxx0x-type-convert-construct.cpp:14:11: warning: ISO C++11 does not allow conversion from string literal to \'wchar_t *\' [-Wwritable-strings]"} | |||
} | |||
}, | }, | ||
["ext_designated_init"]={ | ["ext_designated_init"]={ | ||
[ | [c]="designated initializers are a C99 feature [-Wc99-designator]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={zb,V,v}, | |||
[m]=zb, | |||
[h]="designated initializers are a C99 feature", | |||
[b]=o, | [b]=o, | ||
[ | [g]="designated initializers are a C99 feature", | ||
[a]=Ic, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"c124e59c90a3",1295194396,"Emit an extension diagnostic for C99 designated initializers that appear in C++ code"}, | [i]={"c124e59c90a3",1295194396,"Emit an extension diagnostic for C99 designated initializers that appear in C++ code"}, | ||
[j]={{ | [j]={{z,7959,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\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 } else if (!getLangOpts().CPlusPlus && !getLangOpts().C99) {\n Diag(FirstDesignator, diag::ext_designated_init);"}}, | ||
[k]={ | |||
[mc]={"clang/test/Sema/c89.c:80:19: warning: designated initializers are a C99 feature [-Wc99-designator]"} | |||
} | |||
}, | }, | ||
["ext_designated_init_array"]={ | ["ext_designated_init_array"]={ | ||
[ | [c]="array designators are a C99 extension [-Wc99-designator]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={zb,V}, | |||
[m]=zb, | |||
[h]="array designators are a C99 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="array designators are a C99 extension", | ||
[a]=Ic, | |||
[e]=n, | |||
[ | [i]={kc,1567205575,nc}, | ||
[j]={{z,7808,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n // Check that any designated initializers are syntactically valid in the\n // current language mode.\n for (unsigned I = 0, E = InitArgList.size(); I != E; ++I) {\n if (auto *DIE = dyn_cast<DesignatedInitExpr>(InitArgList[I])) {\n for (auto &Desig : DIE->designators()) {\n if (!Desig.isFieldDesignator() && !DiagnosedArrayDesignator) {\n Diag(Desig.getBeginLoc(), diag::ext_designated_init_array) << Desig.getSourceRange();"}}, | |||
[k]={ | |||
[ | ["clang/test/SemaCXX/eval-crashes.cpp"]={"clang/test/SemaCXX/eval-crashes.cpp:40:22: warning: array designators are a C99 extension [-Wc99-designator]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_designated_init_brace_elision"]={ | ["ext_designated_init_brace_elision"]={ | ||
[ | [c]="brace elision for designated initializer is a C99 extension [-Wc99-designator]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={zb,V}, | |||
[m]=zb, | |||
[h]="brace elision for designated initializer is a C99 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="brace elision for designated initializer is a C99 extension", | ||
[a]=Ic, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"}, | [i]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"}, | ||
[j]={{ | [j]={{U,1560,"void InitListChecker::CheckSubElementType(const InitializedEntity &Entity, InitListExpr *IList, QualType ElemType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool DirectlyDesignated) {\n // C++ [dcl.init.aggr]p12:\n //\n // [...] Otherwise, if the member is itself a non-empty\n // subaggregate, brace elision is assumed and the initializer is\n // considered for the initialization of the first member of\n // the subaggregate.\n // OpenCL vector initializer is handled elsewhere.\n if ((!SemaRef.getLangOpts().OpenCL && ElemType->isVectorType()) || ElemType->isAggregateType()) {\n // In C++20, brace elision is not permitted for a designated initializer.\n if (DirectlyDesignated && SemaRef.getLangOpts().CPlusPlus && !hadError) {\n if (!VerifyOnly) {\n SemaRef.Diag(expr->getBeginLoc(), diag::ext_designated_init_brace_elision) << expr->getSourceRange() << FixItHint::CreateInsertion(expr->getBeginLoc(), \"{\") << FixItHint::CreateInsertion(SemaRef.getLocForEndOfToken(expr->getEndLoc()), \"}\");"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp"]={"clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:57:14: error: brace elision for designated initializer is a C99 extension [-Werror,-Wc99-designator]","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:58:14: error: brace elision for designated initializer is a C99 extension [-Werror,-Wc99-designator]","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:59:14: error: brace elision for designated initializer is a C99 extension [-Werror,-Wc99-designator]"} | |||
} | |||
}, | }, | ||
["ext_designated_init_mixed"]={ | ["ext_designated_init_mixed"]={ | ||
[ | [c]="mixture of designated and non-designated initializers in the same initializer list is a C99 extension [-Wc99-designator]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={zb,V}, | |||
[m]=zb, | |||
[h]="mixture of designated and non-designated initializers in the same initializer list is a C99 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="mixture of designated and non\\-designated initializers in the same initializer list is a C99 extension", | ||
[a]=Ic, | |||
[e]=n, | |||
[i]={kc,1567205575,nc}, | |||
[j]={{z,7810,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n // Check that any designated initializers are syntactically valid in the\n // current language mode.\n for (unsigned I = 0, E = InitArgList.size(); I != E; ++I) {\n if (auto *DIE = dyn_cast<DesignatedInitExpr>(InitArgList[I])) {\n if (!DiagnosedMixedDesignator && !isa<DesignatedInitExpr>(InitArgList[0])) {\n Diag(DIE->getBeginLoc(), diag::ext_designated_init_mixed) << DIE->getSourceRange();"},{z,7819,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n // Check that any designated initializers are syntactically valid in the\n // current language mode.\n for (unsigned I = 0, E = InitArgList.size(); I != E; ++I) {\n if (auto *DIE = dyn_cast<DesignatedInitExpr>(InitArgList[I])) {\n } else if (getLangOpts().CPlusPlus && !DiagnosedMixedDesignator && isa<DesignatedInitExpr>(InitArgList[0])) {\n Diag(DIE->getBeginLoc(), diag::ext_designated_init_mixed) << DIE->getSourceRange();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaCXX/designated-initializers-base-class.cpp"]={"clang/test/SemaCXX/designated-initializers-base-class.cpp:11:25: warning: mixture of designated and non-designated initializers in the same initializer list is a C99 extension [-Wc99-designator]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_designated_init_nested"]={ | ["ext_designated_init_nested"]={ | ||
[ | [c]="nested designators are a C99 extension [-Wc99-designator]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={zb,V}, | |||
[m]=zb, | |||
[h]="nested designators are a C99 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="nested designators are a C99 extension", | ||
[a]=Ic, | |||
[e]=n, | |||
[ | [i]={kc,1567205575,nc}, | ||
[j]={{z,7800,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n // Check that any designated initializers are syntactically valid in the\n // current language mode.\n for (unsigned I = 0, E = InitArgList.size(); I != E; ++I) {\n if (auto *DIE = dyn_cast<DesignatedInitExpr>(InitArgList[I])) {\n if (!DiagnosedNestedDesignator && DIE->size() > 1) {\n Diag(DIE->getBeginLoc(), diag::ext_designated_init_nested) << DIE->getDesignatorsSourceRange();"}}, | |||
[k]={ | |||
[ | ["clang/test/SemaTemplate/instantiate-init.cpp"]={"clang/test/SemaTemplate/instantiate-init.cpp:162:13: warning: nested designators are a C99 extension [-Wc99-designator]","clang/test/SemaTemplate/instantiate-init.cpp:163:13: warning: nested designators are a C99 extension [-Wc99-designator]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_designated_init_reordered"]={ | ["ext_designated_init_reordered"]={ | ||
[ | [c]="ISO C++ requires field designators to be specified in declaration order; field A will be initialized after field B [-Wreorder-init-list]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={jb,qb,sb,"reorder","reorder-init-list"}, | |||
[m]="reorder-init-list", | |||
[h]="ISO C++ requires field designators to be specified in declaration order; field %1 will be initialized after field %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+ requires field designators to be specified in declaration order; field (.*?) will be initialized after field (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wreorder\\-init\\-list[^\\]]*\\]", | |||
[e]=n, | |||
[i]={kc,1567205575,nc}, | |||
[j]={{U,2848,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n if (D->isFieldDesignator()) {\n // C++20 [dcl.init.list]p3:\n // The ordered identifiers in the designators of the designated-\n // initializer-list shall form a subsequence of the ordered identifiers\n // in the direct non-static data members of T.\n //\n // Note that this is not a condition on forming the aggregate\n // initialization, only on actually performing initialization,\n // so it is not checked in VerifyOnly mode.\n //\n // FIXME: This is the only reordering diagnostic we produce, and it only\n // catches cases where we have a top-level field designator that jumps\n // backwards. This is the only such case that is reachable in an\n // otherwise-valid C++20 program, so is the only case that\'s required for\n // conformance, but for consistency, we should diagnose all the other\n // cases where a designator takes us backwards too.\n if (IsFirstDesignator && !VerifyOnly && SemaRef.getLangOpts().CPlusPlus && NextField && (*NextField == RD->field_end() || (*NextField)->getFieldIndex() > Field->getFieldIndex() + 1)) {\n if (PrevField && PrevField->getFieldIndex() > KnownField->getFieldIndex()) {\n SemaRef.Diag(DIE->getBeginLoc(), diag::ext_designated_init_reordered) << KnownField << PrevField << DIE->getSourceRange();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp"]={"clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:37:3: error: ISO C++ requires field designators to be specified in declaration order; field \'y\' will be initialized after field \'x\' [-Werror,-Wreorder-init-list]","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:67:3: error: ISO C++ requires field designators to be specified in declaration order; field \'y\' will be initialized after field \'x\' [-Werror,-Wreorder-init-list]","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:109:16: error: ISO C++ requires field designators to be specified in declaration order; field \'y\' will be initialized after field \'x\' [-Werror,-Wreorder-init-list]","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:206:4: error: ISO C++ requires field designators to be specified in declaration order; field \'z\' will be initialized after field \'y\' [-Werror,-Wreorder-init-list]","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:208:4: error: ISO C++ requires field designators to be specified in declaration order; field \'y\' will be initialized after field \'x\' [-Werror,-Wreorder-init-list]","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:210:4: error: ISO C++ requires field designators to be specified in declaration order; field \'b\' will be initialized after field \'a\' [-Werror,-Wreorder-init-list]","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:213:5: error: ISO C++ requires field designators to be specified in declaration order; field \'e\' will be initialized after field \'d\' [-Werror,-Wreorder-init-list]","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:215:5: error: ISO C++ requires field designators to be specified in declaration order; field \'d\' will be initialized after field \'c\' [-Werror,-Wreorder-init-list]","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:216:5: error: ISO C++ requires field designators to be specified in declaration order; field \'c\' will be initialized after field \'b\' [-Werror,-Wreorder-init-list]","clang/test/SemaCXX/cxx2a-initializer-aggregates.cpp:217:5: error: ISO C++ requires field designators to be specified in declaration order; field \'b\' will be initialized after field \'a\' [-Werror,-Wreorder-init-list]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_destructor_typedef_name"]={ | ["ext_destructor_typedef_name"]={ | ||
[ | [c]="destructor cannot be declared using a ... A of the class name [-Wdtor-typedef]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"dtor-typedef"}, | ||
[ | [m]="dtor-typedef", | ||
[ | [h]="destructor cannot be declared using a %select{typedef|type alias}1 %0 of the class name", | ||
[ | [b]=R, | ||
[ | [g]="destructor cannot be declared using a (?:typedef|type alias) (.*?) of the class name", | ||
[ | [a]=" \\[[^\\]]*\\-Wdtor\\-typedef[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={ | [i]={Nc,1576809732,Oc}, | ||
[j]={{ | [j]={{A,10869,"/// CheckDestructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formednes of the destructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the declarator to invalid. Even if this happens,\n/// will be updated to reflect a well-formed type for the destructor and\n/// returned.\nQualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>())\n Diag(D.getIdentifierLoc(), diag::ext_destructor_typedef_name) << DeclaratorType << isa<TypeAliasDecl>(TT->getDecl());"},{A,10874,"/// CheckDestructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formednes of the destructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the declarator to invalid. Even if this happens,\n/// will be updated to reflect a well-formed type for the destructor and\n/// returned.\nQualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>())\n else if (const TemplateSpecializationType *TST = DeclaratorType->getAs<TemplateSpecializationType>())\n if (TST->isTypeAlias())\n Diag(D.getIdentifierLoc(), diag::ext_destructor_typedef_name) << DeclaratorType << 1;"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:114:3: error: destructor cannot be declared using a type alias \'X\' (aka \'CtorDtorName\') of the class name [-Wdtor-typedef]"} | |||
} | |||
}, | }, | ||
["ext_dollar_in_identifier"]={ | ["ext_dollar_in_identifier"]={ | ||
[ | [c]="\'$\' in identifier [-Wdollar-in-identifier-extension]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"dollar-in-identifier-extension",v}, | |||
[m]="dollar-in-identifier-extension", | |||
[h]="\'$\' in identifier", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'\\$\' in identifier", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdollar\\-in\\-identifier\\-extension[^\\]]*\\]", | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[j]={{ab,1847,"bool Lexer::LexIdentifierContinue(Token &Result, const char *CurPtr) {\n // Match [_A-Za-z0-9]*, we have already matched an identifier start.\n while (true) {\n if (C == \'$\') {\n // Otherwise, emit a diagnostic and continue.\n if (!isLexingRawMode())\n Diag(CurPtr, diag::ext_dollar_in_identifier);"},{ab,3881,"LexStart:\n case \'$\': // $ in identifiers.\n if (LangOpts.DollarIdents) {\n if (!isLexingRawMode())\n Diag(CurPtr - 1, diag::ext_dollar_in_identifier);"}}, | |||
[k]={ | |||
[ | ["clang/test/Preprocessor/c90.c"]={"clang/test/Preprocessor/c90.c:10:13: error: \'$\' in identifier [-Werror,-Wdollar-in-identifier-extension]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_dtor_name_ambiguous"]={ | ["ext_dtor_name_ambiguous"]={ | ||
[ | [c]="ISO C++ considers this destructor name lookup to be ambiguous [-Wdtor-name]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={hc,v}, | |||
[m]=hc, | |||
[h]="ISO C++ considers this destructor name lookup to be ambiguous", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+ considers this destructor name lookup to be ambiguous", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdtor\\-name[^\\]]*\\]", | |||
[e]=n, | |||
[i]={Jb,1576908663,Ib}, | |||
[j]={{Y,228,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n auto CheckLookupResult = [&](LookupResult &Found) -> ParsedType {\n // As an extension, attempt to \"fix\" an ambiguity by erasing all non-type\n // results, and all non-matching results if we have a search type. It\'s not\n // clear what the right behavior is if destructor lookup hits an ambiguity,\n // but other compilers do generally accept at least some kinds of\n // ambiguity.\n if (Found.isAmbiguous() && NumAcceptableResults == 1) {\n Diag(NameLoc, diag::ext_dtor_name_ambiguous);"}} | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_dtor_named_in_wrong_scope"]={ | ["ext_dtor_named_in_wrong_scope"]={ | ||
[ | [c]="ISO C++ requires the name after \'::~\' to be found in the same scope as the name before \'::~\' [-Wdtor-name]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={hc,v}, | |||
[m]=hc, | |||
[h]="ISO C++ requires the name after \'::~\' to be found in the same scope as the name before \'::~\'", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+ requires the name after \'\\:\\:~\' to be found in the same scope as the name before \'\\:\\:~\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdtor\\-name[^\\]]*\\]", | |||
[e]=n, | |||
[i]={Nc,1576809732,Oc}, | |||
[j]={{Y,385,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n if (SS.isSet()) {\n // For compatibility with older broken C++ rules and existing code,\n //\n // nested-name-specifier :: ~ type-name\n //\n // also looks for type-name within the nested-name-specifier.\n if (ParsedType T = LookupInNestedNameSpec(SS)) {\n Diag(SS.getEndLoc(), diag::ext_dtor_named_in_wrong_scope) << SS.getRange() << FixItHint::CreateInsertion(SS.getEndLoc(), (\"::\" + II.getName()).str());"}}, | |||
[k]={ | |||
[ | ["clang/test/CXX/drs/dr2xx.cpp"]={"clang/test/CXX/drs/dr2xx.cpp:544:8: error: ISO C++ requires the name after \'::~\' to be found in the same scope as the name before \'::~\' [-Werror,-Wdtor-name]","clang/test/CXX/drs/dr2xx.cpp:550:11: error: ISO C++ requires the name after \'::~\' to be found in the same scope as the name before \'::~\' [-Werror,-Wdtor-name]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_duplicate_declspec"]={ | ["ext_duplicate_declspec"]={ | ||
[ | [c]="duplicate \'A\' declaration specifier [-Wduplicate-decl-specifier]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"duplicate-decl-specifier",v}, | |||
[m]="duplicate-decl-specifier", | |||
[h]="duplicate \'%0\' declaration specifier", | |||
[b]=o, | [b]=o, | ||
[ | [g]="duplicate \'(.*?)\' declaration specifier", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-decl\\-specifier[^\\]]*\\]", | |||
[e]=r, | |||
[i]={C,1236199783,D}, | |||
[j]={{H,4487,"#include \"clang/Basic/TransformTypeTraits.def\"\n // If the specifier wasn\'t legal, issue a diagnostic.\n if (isInvalid) {\n if (DiagID == diag::ext_duplicate_declspec || DiagID == diag::ext_warn_duplicate_declspec || DiagID == diag::err_duplicate_declspec)"},{S,1894,"#include \"clang/Basic/OpenCLImageTypes.def\"\n // Apply const/volatile/restrict qualifiers to T.\n if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n // C90 6.5.3 constraints: \"The same type qualifier shall not appear more\n // than once in the same specifier-list or qualifier-list, either directly\n // or via one or more typedefs.\"\n if (!S.getLangOpts().C99 && !S.getLangOpts().CPlusPlus && TypeQuals & Result.getCVRQualifiers()) {\n if (TypeQuals & DeclSpec::TQ_const && Result.isConstQualified()) {\n S.Diag(DS.getConstSpecLoc(), diag::ext_duplicate_declspec) << \"const\";"},{S,1899,"#include \"clang/Basic/OpenCLImageTypes.def\"\n // Apply const/volatile/restrict qualifiers to T.\n if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n // C90 6.5.3 constraints: \"The same type qualifier shall not appear more\n // than once in the same specifier-list or qualifier-list, either directly\n // or via one or more typedefs.\"\n if (!S.getLangOpts().C99 && !S.getLangOpts().CPlusPlus && TypeQuals & Result.getCVRQualifiers()) {\n if (TypeQuals & DeclSpec::TQ_volatile && Result.isVolatileQualified()) {\n S.Diag(DS.getVolatileSpecLoc(), diag::ext_duplicate_declspec) << \"volatile\";"}}, | |||
[k]={ | |||
[ | ["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:25:20: warning: duplicate \'__forceinline\' declaration specifier [-Wduplicate-decl-specifier]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_dynamic_exception_spec"]={ | ["ext_dynamic_exception_spec"]={ | ||
[ | [c]="ISO C++17 does not allow dynamic exception specifications [-Wdynamic-exception-spec]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"dynamic-exception-spec"}, | ||
[ | [m]="dynamic-exception-spec", | ||
[ | [h]="ISO C++17 does not allow dynamic exception specifications", | ||
[ | [b]=R, | ||
[ | [g]="ISO C\\+\\+17 does not allow dynamic exception specifications", | ||
[ | [a]=" \\[[^\\]]*\\-Wdynamic\\-exception\\-spec[^\\]]*\\]", | ||
[ | [e]=y, | ||
[i]={"82da19ddb327",1481165347,"[c++1z] P0003R5: Removing dynamic exception specifications."}, | [i]={"82da19ddb327",1481165347,"[c++1z] P0003R5: Removing dynamic exception specifications."}, | ||
[j]={{ | [j]={{M,4010,"static void diagnoseDynamicExceptionSpecification(Parser &P, SourceRange Range, bool IsNoexcept) {\n if (P.getLangOpts().CPlusPlus11) {\n P.Diag(Range.getBegin(), P.getLangOpts().CPlusPlus17 && !IsNoexcept ? diag::ext_dynamic_exception_spec : diag::warn_exception_spec_deprecated) << Range;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/ms-exception-spec.cpp"]={"clang/test/SemaCXX/ms-exception-spec.cpp:11:10: error: ISO C++17 does not allow dynamic exception specifications [-Wdynamic-exception-spec]","clang/test/SemaCXX/ms-exception-spec.cpp:19:11: error: ISO C++17 does not allow dynamic exception specifications [-Wdynamic-exception-spec]"} | |||
} | |||
}, | }, | ||
["ext_elaborated_enum_class"]={ | ["ext_elaborated_enum_class"]={ | ||
[ | [c]="reference to enumeration must use \'enum\' not \'enum ...\' [-Welaborated-enum-class]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"elaborated-enum-class"}, | ||
[ | [m]="elaborated-enum-class", | ||
[ | [h]="reference to enumeration must use \'enum\' not \'enum %select{struct|class}0\'", | ||
[ | [b]=R, | ||
[ | [g]="reference to enumeration must use \'enum\' not \'enum (?:struct|class)\'", | ||
[ | [a]=" \\[[^\\]]*\\-Welaborated\\-enum\\-class[^\\]]*\\]", | ||
[ | [e]=y, | ||
[i]={"d6425e2c1437",1589141691,"Properly implement \'enum class\' parsing."}, | [i]={"d6425e2c1437",1589141691,"Properly implement \'enum class\' parsing."}, | ||
[j]={{ | [j]={{H,5059,"/// 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 // An elaborated-type-specifier has a much more constrained grammar:\n //\n // \'enum\' nested-name-specifier[opt] identifier\n //\n // If we parsed any other bits, reject them now.\n //\n // MSVC and (for now at least) Objective-C permit a full enum-specifier\n // or opaque-enum-declaration anywhere.\n if (IsElaboratedTypeSpecifier && !getLangOpts().MicrosoftExt && !getLangOpts().ObjC) {\n if (BaseType.isUsable())\n else if (ScopedEnumKWLoc.isValid())\n Diag(ScopedEnumKWLoc, diag::ext_elaborated_enum_class) << FixItHint::CreateRemoval(ScopedEnumKWLoc) << IsScopedUsingClassTag;"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx0x-decl.cpp"]={"clang/test/Parser/cxx0x-decl.cpp:47:10: error: reference to enumeration must use \'enum\' not \'enum struct\' [-Welaborated-enum-class]","clang/test/Parser/cxx0x-decl.cpp:48:10: error: reference to enumeration must use \'enum\' not \'enum class\' [-Welaborated-enum-class]","clang/test/Parser/cxx0x-decl.cpp:54:10: error: reference to enumeration must use \'enum\' not \'enum struct\' [-Welaborated-enum-class]","clang/test/Parser/cxx0x-decl.cpp:55:10: error: reference to enumeration must use \'enum\' not \'enum class\' [-Welaborated-enum-class]"} | |||
} | |||
}, | }, | ||
["ext_ellipsis_exception_spec"]={ | ["ext_ellipsis_exception_spec"]={ | ||
[ | [c]="exception specification of \'...\' is a Microsoft extension [-Wmicrosoft-exception-spec]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={G,Hb,v}, | |||
[m]=Hb, | |||
[h]="exception specification of \'...\' is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="exception specification of \'\\.\\.\\.\' is a Microsoft extension", | ||
[a]=Pc, | |||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[j]={{M,4047,"/// ParseDynamicExceptionSpecification - Parse a C++\n/// dynamic-exception-specification (C++ [except.spec]).\n///\n/// dynamic-exception-specification:\n/// \'throw\' \'(\' type-id-list [opt] \')\'\n/// [MS] \'throw\' \'(\' \'...\' \')\'\n///\n/// type-id-list:\n/// type-id ... [opt]\n/// type-id-list \',\' type-id ... [opt]\n///\nExceptionSpecificationType Parser::ParseDynamicExceptionSpecification(SourceRange &SpecificationRange, SmallVectorImpl<ParsedType> &Exceptions, SmallVectorImpl<SourceRange> &Ranges) {\n // Parse throw(...), a Microsoft extension that means \"this function\n // can throw anything\".\n if (Tok.is(tok::ellipsis)) {\n if (!getLangOpts().MicrosoftExt)\n Diag(EllipsisLoc, diag::ext_ellipsis_exception_spec);"}} | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_embedded_directive"]={ | ["ext_embedded_directive"]={ | ||
[ | [c]="embedding a directive within macro arguments has undefined behavior [-Wembedded-directive]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"embedded-directive",v}, | |||
[m]="embedded-directive", | |||
[h]="embedding a directive within macro arguments has undefined behavior", | |||
[b]=o, | [b]=o, | ||
[ | [g]="embedding a directive within macro arguments has undefined behavior", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wembedded\\-directive[^\\]]*\\]", | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[ | [j]={{W,1185,"/// 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 // C99 6.10.3p11: Is this preprocessor directive in macro invocation? e.g.:\n // #define A(x) #x\n // A(abc\n // #warning blah\n // def)\n // If so, the user is relying on undefined behavior, emit a diagnostic. Do\n // not support this for #include-like directives, since that can result in\n // terrible diagnostics, and does not work in GCC.\n if (InMacroArgs) {\n Diag(Result, diag::ext_embedded_directive);"}}, | ||
[k]={ | |||
["clang/test/C/drs/dr2xx.c"]={"clang/test/C/drs/dr2xx.c:218:2: warning: embedding a directive within macro arguments has undefined behavior [-Wembedded-directive]"} | |||
[ | } | ||
[i]={ | |||
[j]={{W,1185,"/// 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 // C99 6.10.3p11: Is this preprocessor directive in macro invocation? e.g.:\n // #define A(x) #x\n // A(abc\n // #warning blah\n // def)\n // If so, the user is relying on undefined behavior, emit a diagnostic. Do\n // not support this for #include-like directives, since that can result in\n // terrible diagnostics, and does not work in GCC.\n if (InMacroArgs) {\n Diag(Result, diag::ext_embedded_directive);"}} | |||
}, | }, | ||
["ext_empty_character"]={ | ["ext_empty_character"]={ | ||
[ | [c]="empty character constant [-Winvalid-pp-token]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"invalid-pp-token"}, | |||
[m]="invalid-pp-token", | |||
[h]="empty character constant", | |||
[b]=o, | [b]=o, | ||
[ | [g]="empty character constant", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-pp\\-token[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"608c0b65d785",1340869916,"Add warning flag -Winvalid-pp-token for preprocessing-tokens which have"}, | [i]={"608c0b65d785",1340869916,"Add warning flag -Winvalid-pp-token for preprocessing-tokens which have"}, | ||
[j]={{ | [j]={{ab,2312,"/// 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 if (C == \'\\\'\') {\n if (!isLexingRawMode() && !LangOpts.AsmPreprocessor)\n Diag(BufferPtr, diag::ext_empty_character);"}}, | ||
[k]={ | |||
["clang/test/CodeGen/opt-record-MIR.c"]={"build/tools/clang/test/CodeGen/Output/opt-record-MIR.c.tmp.yaml:206:22: warning: empty character constant [-Winvalid-pp-token]"} | |||
} | |||
}, | }, | ||
["ext_empty_fnmacro_arg"]={ | ["ext_empty_fnmacro_arg"]={ | ||
[ | [c]="empty macro arguments are a C99 feature [-Wc99-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={V,v}, | |||
[m]=V, | |||
[h]="empty macro arguments are a C99 feature", | |||
[b]=o, | [b]=o, | ||
[ | [g]="empty macro arguments are a C99 feature", | ||
[a]=Gb, | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[ | [j]={{"clang/lib/Lex/PPMacroExpansion.cpp",905,"/// 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 while (Tok.isNot(tok::r_paren)) {\n // Empty arguments are standard in C99 and C++0x, and are supported as an\n // extension in other modes.\n if (ArgTokens.size() == ArgTokenStart && !getLangOpts().C99)\n Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_empty_fnmacro_arg : diag::ext_empty_fnmacro_arg);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:16:7: warning: empty macro arguments are a C99 feature [-Wc99-extensions]","clang/test/Preprocessor/macro_fn.c:23:8: warning: empty macro arguments are a C99 feature [-Wc99-extensions]","clang/test/Preprocessor/macro_fn.c:26:5: warning: empty macro arguments are a C99 feature [-Wc99-extensions]","clang/test/Preprocessor/macro_fn.c:27:5: warning: empty macro arguments are a C99 feature [-Wc99-extensions]","clang/test/Preprocessor/macro_fn.c:29:5: warning: empty macro arguments are a C99 feature [-Wc99-extensions]","clang/test/Preprocessor/macro_fn.c:30:5: warning: empty macro arguments are a C99 feature [-Wc99-extensions]","clang/test/Preprocessor/macro_fn.c:30:6: warning: empty macro arguments are a C99 feature [-Wc99-extensions]"} | |||
[ | } | ||
[i]={ | |||
[j]={{"clang/lib/Lex/PPMacroExpansion.cpp",905,"/// 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 while (Tok.isNot(tok::r_paren)) {\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);"}} | |||
}, | }, | ||
["ext_empty_struct_union"]={ | ["ext_empty_struct_union"]={ | ||
[ | [c]="empty ... is a GNU extension [-Wgnu-empty-struct]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,yc,v}, | |||
[m]=yc, | |||
[h]="empty %select{struct|union}0 is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="empty (?:struct|union) is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-empty\\-struct[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"da2955ed744e",1280413774,"Reword the empty struct/union warning in C to note that such structs and unions have size 0 in C, si..."}, | [i]={"da2955ed744e",1280413774,"Reword the empty struct/union warning in C to note that such structs and unions have size 0 in C, si..."}, | ||
[j]={{ | [j]={{x,19135,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // Okay, we successfully defined \'Record\'.\n if (Record) {\n if (CheckForZeroSize) {\n // Structs without named members are extension in C (C99 6.7.2.1p7),\n // but are accepted by GCC.\n if (NonBitFields == 0 && !getLangOpts().CPlusPlus) {\n Diag(RecLoc, IsEmpty ? diag::ext_empty_struct_union : diag::ext_no_named_members_in_struct_union) << Record->isUnion();"}}, | ||
[k]={ | |||
["clang/test/Sema/empty2.c"]={"clang/test/Sema/empty2.c:3:1: warning: empty struct is a GNU extension [-Wgnu-empty-struct]","clang/test/Sema/empty2.c:6:1: warning: empty union is a GNU extension [-Wgnu-empty-struct]"} | |||
} | |||
}, | }, | ||
["ext_empty_translation_unit"]={ | ["ext_empty_translation_unit"]={ | ||
[ | [c]="ISO C requires a translation unit to contain at least one declaration [-Wempty-translation-unit]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"empty-translation-unit",v}, | |||
[m]="empty-translation-unit", | |||
[h]="ISO C requires a translation unit to contain at least one declaration", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C requires a translation unit to contain at least one declaration", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wempty\\-translation\\-unit[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"ccf43ca05cb1",1339003521,"Add pedantic warning -Wempty-translation-unit (C11 6.9p1)."}, | [i]={"ccf43ca05cb1",1339003521,"Add pedantic warning -Wempty-translation-unit (C11 6.9p1)."}, | ||
[j]={{ | [j]={{yb,604,"/// Parse the first top-level declaration in a translation unit.\n///\n/// translation-unit:\n/// [C] external-declaration\n/// [C] translation-unit external-declaration\n/// [C++] top-level-declaration-seq[opt]\n/// [C++20] global-module-fragment[opt] module-declaration\n/// top-level-declaration-seq[opt] private-module-fragment[opt]\n///\n/// Note that in C, it is an error if there is no first declaration.\nbool Parser::ParseFirstTopLevelDecl(DeclGroupPtrTy &Result, Sema::ModuleImportState &ImportState) {\n // C11 6.9p1 says translation units must have at least one top-level\n // declaration. C++ doesn\'t have this restriction. We also don\'t want to\n // complain if we have a precompiled header, although technically if the PCH\n // is empty we should still emit the (pedantic) diagnostic.\n // If the main file is a header, we\'re only pretending it\'s a TU; don\'t warn.\n if (NoTopLevelDecls && !Actions.getASTContext().getExternalSource() && !getLangOpts().CPlusPlus && !getLangOpts().IsHeaderFile)\n Diag(diag::ext_empty_translation_unit);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/comment_save_if.c"]={"clang/test/Preprocessor/comment_save_if.c:12:1: warning: ISO C requires a translation unit to contain at least one declaration [-Wempty-translation-unit]"} | |||
} | |||
}, | }, | ||
["ext_enum_base_in_type_specifier"]={ | ["ext_enum_base_in_type_specifier"]={ | ||
[ | [c]="non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration... [-Welaborated-enum-base]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"elaborated-enum-base"}, | ||
[ | [m]="elaborated-enum-base", | ||
[ | [h]="non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration%select{|; missing list of enumerators?}0", | ||
[ | [b]=R, | ||
[ | [g]="non\\-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration(?:|; missing list of enumerators\\?)", | ||
[ | [a]=" \\[[^\\]]*\\-Welaborated\\-enum\\-base[^\\]]*\\]", | ||
[ | [e]=y, | ||
[i]={"c90e19810743",1588991058,"Fix parsing of enum-base to follow C++11 rules."}, | [i]={"c90e19810743",1588991058,"Fix parsing of enum-base to follow C++11 rules."}, | ||
[j]={{ | [j]={{H,5056,"/// 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 // An elaborated-type-specifier has a much more constrained grammar:\n //\n // \'enum\' nested-name-specifier[opt] identifier\n //\n // If we parsed any other bits, reject them now.\n //\n // MSVC and (for now at least) Objective-C permit a full enum-specifier\n // or opaque-enum-declaration anywhere.\n if (IsElaboratedTypeSpecifier && !getLangOpts().MicrosoftExt && !getLangOpts().ObjC) {\n if (BaseType.isUsable())\n Diag(BaseRange.getBegin(), diag::ext_enum_base_in_type_specifier) << (AllowEnumSpecifier == AllowDefiningTypeSpec::Yes) << BaseRange;"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx0x-decl.cpp"]={"clang/test/Parser/cxx0x-decl.cpp:33:10: error: non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration; missing list of enumerators? [-Welaborated-enum-base]","clang/test/Parser/cxx0x-decl.cpp:34:18: error: non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration; missing list of enumerators? [-Welaborated-enum-base]","clang/test/Parser/cxx0x-decl.cpp:35:18: error: non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration; missing list of enumerators? [-Welaborated-enum-base]","clang/test/Parser/cxx0x-decl.cpp:37:20: error: non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration; missing list of enumerators? [-Welaborated-enum-base]","clang/test/Parser/cxx0x-decl.cpp:41:20: error: non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration; missing list of enumerators? [-Welaborated-enum-base]","clang/test/Parser/cxx0x-decl.cpp:44:23: error: non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration; missing list of enumerators? [-Welaborated-enum-base]","clang/test/Parser/cxx0x-decl.cpp:49:12: error: non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration; missing list of enumerators? [-Welaborated-enum-base]","clang/test/Parser/cxx0x-decl.cpp:50:19: error: non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration; missing list of enumerators? [-Welaborated-enum-base]","clang/test/Parser/cxx0x-decl.cpp:51:18: error: non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration; missing list of enumerators? [-Welaborated-enum-base]","clang/test/Parser/cxx0x-decl.cpp:56:12: error: non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration; missing list of enumerators? [-Welaborated-enum-base]","clang/test/Parser/cxx0x-decl.cpp:57:19: error: non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration; missing list of enumerators? [-Welaborated-enum-base]","clang/test/Parser/cxx0x-decl.cpp:58:18: error: non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration; missing list of enumerators? [-Welaborated-enum-base]"} | |||
} | |||
}, | }, | ||
["ext_enum_friend"]={ | ["ext_enum_friend"]={ | ||
[ | [c]="befriending enumeration type A is a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="befriending enumeration type %0 is a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="befriending enumeration type (.*?) is a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"3b4abb679211",1270663032,"Improve handling of friend types in several ways:"}, | [i]={"3b4abb679211",1270663032,"Improve handling of friend types in several ways:"}, | ||
[j]={{ | [j]={{A,17229,"/// 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 // 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 } else {\n if (!T->isElaboratedTypeSpecifier()) {\n } else if (T->getAs<EnumType>()) {\n Diag(FriendLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_enum_friend : diag::ext_enum_friend) << T << TypeRange;"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p3.cpp:19:3: warning: befriending enumeration type \'enum E\' is a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_enum_too_large"]={ | ["ext_enum_too_large"]={ | ||
[ | [c]="enumeration values exceed range of largest integer [-Wenum-too-large]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"enum-too-large"}, | |||
[m]="enum-too-large", | |||
[h]="enumeration values exceed range of largest integer", | |||
[b]=o, | [b]=o, | ||
[ | [g]="enumeration values exceed range of largest integer", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wenum\\-too\\-large[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"faf156ad158b",1394060098,"Tests for DR370-380."}, | [i]={"faf156ad158b",1394060098,"Tests for DR370-380."}, | ||
[j]={{ | [j]={{x,19818,"void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange, Decl *EnumDeclX, ArrayRef<Decl *> Elements, Scope *S, const ParsedAttributesView &Attrs) {\n // If the enum already has a type because it is fixed or dictated by the\n // target, promote that type instead of analyzing the enumerators.\n if (Enum->isComplete()) {\n } else if (NumNegativeBits) {\n // If there is a negative value, figure out the smallest integer type (of\n // int/long/longlong) that fits.\n // If it\'s packed, check also if it fits a char or a short.\n if (Packed && NumNegativeBits <= CharWidth && NumPositiveBits < CharWidth) {\n } else if (Packed && NumNegativeBits <= ShortWidth && NumPositiveBits < ShortWidth) {\n } else if (NumNegativeBits <= IntWidth && NumPositiveBits < IntWidth) {\n } else {\n if (NumNegativeBits <= BestWidth && NumPositiveBits < BestWidth) {\n } else {\n if (NumNegativeBits > BestWidth || NumPositiveBits >= BestWidth)\n Diag(Enum->getLocation(), diag::ext_enum_too_large);"}}, | ||
[k]={ | |||
["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:17:6: warning: enumeration values exceed range of largest integer [-Wenum-too-large]"} | |||
} | |||
}, | }, | ||
["ext_enum_value_not_int"]={ | ["ext_enum_value_not_int"]={ | ||
[ | [c]="ISO C restricts enumerator values to range of \'int\' (A is too ...) [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="ISO C restricts enumerator values to range of \'int\' (%0 is too %select{small|large}1)", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C restricts enumerator values to range of \'int\' \\((.*?) is too (?:small|large)\\)", | ||
[a]=X, | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{x,19321,"EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum, EnumConstantDecl *LastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, Expr *Val) {\n if (Val) {\n if (Enum->isDependentType() || Val->isTypeDependent() || Val->containsErrors())\n else {\n // FIXME: We don\'t allow folding in C++11 mode for an enum with a fixed\n // underlying type, but do allow it in all other contexts.\n if (getLangOpts().CPlusPlus11 && Enum->isFixed()) {\n } else if (!Val->isValueDependent() && !(Val = VerifyIntegerConstantExpression(Val, &EnumVal, AllowFold).get())) {\n } else {\n if (Enum->isComplete()) {\n } else if (getLangOpts().CPlusPlus) {\n } else {\n // Complain if the value is not representable in an int.\n if (!isRepresentableIntegerValue(Context, EnumVal, Context.IntTy))\n Diag(IdLoc, diag::ext_enum_value_not_int) << toString(EnumVal, 10) << Val->getSourceRange() << (EnumVal.isUnsigned() || EnumVal.isNonNegative());"},{x,19408,"EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum, EnumConstantDecl *LastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, Expr *Val) {\n if (!Val) {\n if (Enum->isDependentType())\n else if (!LastEnumConst) {\n } else {\n // Check for overflow on increment.\n if (EnumVal < LastEnumConst->getInitVal()) {\n } else if (!getLangOpts().CPlusPlus && !EltTy->isDependentType() && !isRepresentableIntegerValue(Context, EnumVal, EltTy)) {\n Diag(IdLoc, diag::ext_enum_value_not_int) << toString(EnumVal, 10) << 1;"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:3:9: warning: ISO C restricts enumerator values to range of \'int\' (180388626432 is too large) [-Wpedantic]","clang/test/Sema/enum.c:9:4: warning: ISO C restricts enumerator values to range of \'int\' (-2147483649 is too small) [-Wpedantic]","clang/test/Sema/enum.c:12:4: warning: ISO C restricts enumerator values to range of \'int\' (2147483648 is too large) [-Wpedantic]","clang/test/Sema/enum.c:13:3: warning: ISO C restricts enumerator values to range of \'int\' (4294901760 is too large) [-Wpedantic]","clang/test/Sema/enum.c:18:3: warning: ISO C restricts enumerator values to range of \'int\' (-9223372036854775808 is too small) [-Wpedantic]","clang/test/Sema/enum.c:19:1: warning: ISO C restricts enumerator values to range of \'int\' (9223372036854775808 is too large) [-Wpedantic]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_enumerator_increment_too_large"]={ | ["ext_enumerator_increment_too_large"]={ | ||
[ | [c]="incremented enumerator value A is not representable in the largest integer type [-Wenum-too-large]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"enum-too-large"}, | |||
[m]="enum-too-large", | |||
[h]="incremented enumerator value %0 is not representable in the largest integer type", | |||
[b]=o, | [b]=o, | ||
[ | [g]="incremented enumerator value (.*?) is not representable in the largest integer type", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wenum\\-too\\-large[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"faf156ad158b",1394060098,"Tests for DR370-380."}, | [i]={"faf156ad158b",1394060098,"Tests for DR370-380."}, | ||
[j]={{ | [j]={{x,19383,"EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum, EnumConstantDecl *LastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, Expr *Val) {\n if (!Val) {\n if (Enum->isDependentType())\n else if (!LastEnumConst) {\n } else {\n // Check for overflow on increment.\n if (EnumVal < LastEnumConst->getInitVal()) {\n if (T.isNull() || Enum->isFixed()) {\n if (Enum->isFixed())\n else\n Diag(IdLoc, diag::ext_enumerator_increment_too_large) << toString(EnumVal, 10);"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.dcl/dcl.enum/p5.cpp"]={"clang/test/CXX/dcl.dcl/dcl.enum/p5.cpp:51:3: warning: incremented enumerator value 18446744073709551616 is not representable in the largest integer type [-Wenum-too-large]"} | |||
} | |||
}, | }, | ||
["ext_enumerator_list_comma_c"]={ | ["ext_enumerator_list_comma_c"]={ | ||
[ | [c]="commas at the end of enumerator lists are a C99-specific feature [-Wc99-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={V,v}, | |||
[m]=V, | |||
[h]="commas at the end of enumerator lists are a C99-specific feature", | |||
[b]=o, | [b]=o, | ||
[ | [g]="commas at the end of enumerator lists are a C99\\-specific feature", | ||
[a]=Gb, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"87f5dc53b23e",1343022325,"Add diagnostics for comma at end of enum and for extra semicolon at namespace"}, | [i]={"87f5dc53b23e",1343022325,"Add diagnostics for comma at end of enum and for extra semicolon at namespace"}, | ||
[j]={{ | [j]={{H,5259,"/// 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 // Parse the enumerator-list.\n while (Tok.isNot(tok::r_brace)) {\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 Diag(CommaLoc, getLangOpts().CPlusPlus ? diag::ext_enumerator_list_comma_cxx : diag::ext_enumerator_list_comma_c) << FixItHint::CreateRemoval(CommaLoc);"}} | ||
}, | }, | ||
["ext_enumerator_list_comma_cxx"]={ | ["ext_enumerator_list_comma_cxx"]={ | ||
[ | [c]="commas at the end of enumerator lists are a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={T,E,v}, | |||
[m]=E, | |||
[h]="commas at the end of enumerator lists are a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="commas at the end of enumerator lists are a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"87f5dc53b23e",1343022325,"Add diagnostics for comma at end of enum and for extra semicolon at namespace"}, | [i]={"87f5dc53b23e",1343022325,"Add diagnostics for comma at end of enum and for extra semicolon at namespace"}, | ||
[j]={{ | [j]={{H,5258,"/// 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 // Parse the enumerator-list.\n while (Tok.isNot(tok::r_brace)) {\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 Diag(CommaLoc, getLangOpts().CPlusPlus ? diag::ext_enumerator_list_comma_cxx : diag::ext_enumerator_list_comma_c) << FixItHint::CreateRemoval(CommaLoc);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx-decl.cpp"]={"clang/test/Parser/cxx-decl.cpp:53:19: error: commas at the end of enumerator lists are a C++11 extension [-Werror,-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_enumerator_too_large"]={ | ["ext_enumerator_too_large"]={ | ||
[ | [c]="enumerator value is not representable in the underlying type A [-Wmicrosoft-enum-value]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={G,"microsoft-enum-value",v}, | |||
[m]="microsoft-enum-value", | |||
[h]="enumerator value is not representable in the underlying type %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="enumerator value is not representable in the underlying type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-enum\\-value[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"a310806ae57f",1287414073,"Microsoft enum extensions. 2 things will change on -fms-extensions:"}, | [i]={"a310806ae57f",1287414073,"Microsoft enum extensions. 2 things will change on -fms-extensions:"}, | ||
[j]={{ | [j]={{x,19295,"EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum, EnumConstantDecl *LastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, Expr *Val) {\n if (Val) {\n if (Enum->isDependentType() || Val->isTypeDependent() || Val->containsErrors())\n else {\n // FIXME: We don\'t allow folding in C++11 mode for an enum with a fixed\n // underlying type, but do allow it in all other contexts.\n if (getLangOpts().CPlusPlus11 && Enum->isFixed()) {\n } else if (!Val->isValueDependent() && !(Val = VerifyIntegerConstantExpression(Val, &EnumVal, AllowFold).get())) {\n } else {\n if (Enum->isComplete()) {\n // In Obj-C and Microsoft mode, require the enumeration value to be\n // representable in the underlying type of the enumeration. In C++11,\n // we perform a non-narrowing conversion as part of converted constant\n // expression checking.\n if (!isRepresentableIntegerValue(Context, EnumVal, EltTy)) {\n if (Context.getTargetInfo().getTriple().isWindowsMSVCEnvironment()) {\n Diag(IdLoc, diag::ext_enumerator_too_large) << EltTy;"}}, | ||
[k]={ | |||
["clang/test/Sema/MicrosoftCompatibility.c"]={"clang/test/Sema/MicrosoftCompatibility.c:18:3: warning: enumerator value is not representable in the underlying type \'int\' [-Wmicrosoft-enum-value]","clang/test/Sema/MicrosoftCompatibility.c:19:3: warning: enumerator value is not representable in the underlying type \'int\' [-Wmicrosoft-enum-value]"} | |||
} | |||
}, | }, | ||
["ext_equals_this_lambda_capture_cxx20"]={ | ["ext_equals_this_lambda_capture_cxx20"]={ | ||
[ | [c]="explicit capture of \'this\' with a capture default of \'=\' is a C++20 extension [-Wc++20-extensions]", | ||
[a | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="explicit capture of \'this\' with a capture default of \'=\' is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="explicit capture of \'this\' with a capture default of \'\\=\' is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]="Lambda Issue", | |||
[i]={Jb,1576908663,Ib}, | |||
[j]={{"clang/lib/Sema/SemaLambda.cpp",1043,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\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 // C++20 [expr.prim.lambda]p8:\n // If a lambda-capture includes a capture-default that is =,\n // each simple-capture of that lambda-capture shall be of the form\n // \"&identifier\", \"this\", or \"* this\". [ Note: The form [&,this] is\n // redundant but accepted for compatibility with ISO C++14. --end note ]\n if (Intro.Default == LCD_ByCopy && C->Kind != LCK_StarThis)\n Diag(C->Loc, !getLangOpts().CPlusPlus20 ? diag::ext_equals_this_lambda_capture_cxx20 : diag::warn_cxx17_compat_equals_this_lambda_capture);"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:11:15: warning: explicit capture of \'this\' with a capture default of \'=\' is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:26:13: warning: explicit capture of \'this\' with a capture default of \'=\' is a C++20 extension [-Wc++20-extensions]"} | ||
[i]={ | } | ||
[j]={{"clang/lib/Sema/SemaLambda.cpp",1043,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\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 // 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);"}} | |||
}, | }, | ||
["ext_equivalent_internal_linkage_decl_in_modules"]={ | ["ext_equivalent_internal_linkage_decl_in_modules"]={ | ||
[ | [c]="ambiguous use of internal linkage declaration A defined in multiple modules [-Wmodules-ambiguous-internal-linkage]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"modules-ambiguous-internal-linkage"}, | |||
[m]="modules-ambiguous-internal-linkage", | |||
[h]="ambiguous use of internal linkage declaration %0 defined in multiple modules", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ambiguous use of internal linkage declaration (.*?) defined in multiple modules", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmodules\\-ambiguous\\-internal\\-linkage[^\\]]*\\]", | |||
[e]=Gc, | |||
[ | |||
[ | |||
[i]={"2dbe4043e8f5",1446665192,"[modules] Generalize the workaround for multiple ambiguous definitions of"}, | [i]={"2dbe4043e8f5",1446665192,"[modules] Generalize the workaround for multiple ambiguous definitions of"}, | ||
[j]={{ | [j]={{Lb,10303,"void Sema::diagnoseEquivalentInternalLinkageDeclarations(SourceLocation Loc, const NamedDecl *D, ArrayRef<const NamedDecl *> Equiv) {\n Diag(Loc, diag::ext_equivalent_internal_linkage_decl_in_modules) << D;"}}, | ||
[k]={ | |||
["clang/test/Modules/submodules-merge-defs.cpp"]={"clang/test/Modules/submodules-merge-defs.cpp:110:28: warning: ambiguous use of internal linkage declaration \'g\' defined in multiple modules [-Wmodules-ambiguous-internal-linkage]","clang/test/Modules/submodules-merge-defs.cpp:116:24: warning: ambiguous use of internal linkage declaration \'g\' defined in multiple modules [-Wmodules-ambiguous-internal-linkage]","clang/test/Modules/submodules-merge-defs.cpp:116:24: warning: ambiguous use of internal linkage declaration \'g\' defined in multiple modules [-Wmodules-ambiguous-internal-linkage]","clang/test/Modules/submodules-merge-defs.cpp:116:24: warning: ambiguous use of internal linkage declaration \'g\' defined in multiple modules [-Wmodules-ambiguous-internal-linkage]"} | |||
} | |||
}, | }, | ||
["ext_excess_initializers"]={ | ["ext_excess_initializers"]={ | ||
[ | [c]="excess elements in ... initializer [-Wexcess-initializers]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={Nb}, | |||
[m]=Nb, | |||
[h]="excess elements in %select{array|vector|scalar|union|struct}0 initializer", | |||
[b]=o, | [b]=o, | ||
[ | [g]="excess elements in (?:array|vector|scalar|union|struct) initializer", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wexcess\\-initializers[^\\]]*\\]", | |||
[e]=n, | |||
[i]={nb,1405733957,lb}, | |||
[j]={{U,1289,"/// 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 // Don\'t complain for incomplete types, since we\'ll get an error elsewhere.\n if (Index < IList->getNumInits() && !T->isIncompleteType()) {\n if (VerifyOnly) {\n } else if (StructuredIndex == 1 && IsStringInit(StructuredList->getInit(0), T, SemaRef.Context) == SIF_None) {\n } else if (T->isSizelessBuiltinType()) {\n } else {\n unsigned DK = ExtraInitsIsError ? diag::err_excess_initializers : diag::ext_excess_initializers;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/CodeGen/2011-03-08-ZeroFieldUnionInitializer.c"]={"clang/test/CodeGen/2011-03-08-ZeroFieldUnionInitializer.c:7:32: warning: excess elements in struct initializer [-Wexcess-initializers]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_excess_initializers_for_sizeless_type"]={ | ["ext_excess_initializers_for_sizeless_type"]={ | ||
[ | [c]="excess elements in initializer for indivisible sizeless type A [-Wexcess-initializers]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={Nb}, | |||
[m]=Nb, | |||
[h]="excess elements in initializer for indivisible sizeless type %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="excess elements in initializer for indivisible sizeless type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wexcess\\-initializers[^\\]]*\\]", | |||
[e]=n, | |||
[i]={Jb,1576908663,Ib}, | |||
[j]={{U,1278,"/// 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 // Don\'t complain for incomplete types, since we\'ll get an error elsewhere.\n if (Index < IList->getNumInits() && !T->isIncompleteType()) {\n if (VerifyOnly) {\n } else if (StructuredIndex == 1 && IsStringInit(StructuredList->getInit(0), T, SemaRef.Context) == SIF_None) {\n } else if (T->isSizelessBuiltinType()) {\n unsigned DK = ExtraInitsIsError ? diag::err_excess_initializers_for_sizeless_type : diag::ext_excess_initializers_for_sizeless_type;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Sema/sizeless-1.c"]={"clang/test/Sema/sizeless-1.c:89:49: warning: excess elements in initializer for indivisible sizeless type \'svint8_t\' (aka \'__SVInt8_t\') [-Wexcess-initializers]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_excess_initializers_in_char_array_initializer"]={ | ["ext_excess_initializers_in_char_array_initializer"]={ | ||
[ | [c]="excess elements in char array initializer [-Wexcess-initializers]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={Nb}, | |||
[m]=Nb, | |||
[h]="excess elements in char array initializer", | |||
[b]=o, | [b]=o, | ||
[ | [g]="excess elements in char array initializer", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wexcess\\-initializers[^\\]]*\\]", | |||
[e]=n, | |||
[ | [i]={nb,1405733957,lb}, | ||
[j]={{U,1272,"/// 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 // Don\'t complain for incomplete types, since we\'ll get an error elsewhere.\n if (Index < IList->getNumInits() && !T->isIncompleteType()) {\n if (VerifyOnly) {\n } else if (StructuredIndex == 1 && IsStringInit(StructuredList->getInit(0), T, SemaRef.Context) == SIF_None) {\n unsigned DK = ExtraInitsIsError ? diag::err_excess_initializers_in_char_array_initializer : diag::ext_excess_initializers_in_char_array_initializer;"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/array-init.c"]={"clang/test/Sema/array-init.c:160:41: warning: excess elements in char array initializer [-Wexcess-initializers]","clang/test/Sema/array-init.c:172:26: warning: excess elements in char array initializer [-Wexcess-initializers]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_expected_semi_decl_list"]={ | ["ext_expected_semi_decl_list"]={ | ||
[ | [c]="expected \';\' at end of declaration list", | ||
[ | [d]=q, | ||
[f]=p, | |||
[h]="expected \';\' at end of declaration list", | |||
[b]=o, | [b]=o, | ||
[ | [g]="expected \';\' at end of declaration list", | ||
[ | [a]=Mb, | ||
[ | [e]=y, | ||
[i]={C,1236199783,D}, | |||
[j]={{H,4716,"/// ParseStructUnionBody\n/// struct-contents:\n/// struct-declaration-list\n/// [EXT] empty\n/// [GNU] \"struct-declaration-list\" without terminating \';\'\n/// struct-declaration-list:\n/// struct-declaration\n/// struct-declaration-list struct-declaration\n/// [OBC] \'@\' \'defs\' \'(\' class-name \')\'\n///\nvoid Parser::ParseStructUnionBody(SourceLocation RecordLoc, DeclSpec::TST TagType, RecordDecl *TagDecl) {\n // While we still have something to read, read the declarations in the struct.\n while (!tryParseMisplacedModuleImport() && Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {\n if (Tok.is(tok::r_brace)) {\n ExpectAndConsume(tok::semi, diag::ext_expected_semi_decl_list);"}}, | |||
[i]={ | [k]={ | ||
[j]={{ | [Tb]={"clang/test/Parser/declarators.c:76:8: warning: expected \';\' at end of declaration list"} | ||
} | |||
}, | }, | ||
["ext_explicit_bool"]={ | ["ext_explicit_bool"]={ | ||
[ | [c]="explicit(bool) is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="explicit(bool) is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="explicit\\(bool\\) is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"}, | [i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"}, | ||
[j]={{ | [j]={{H,4048,"/// 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 while (true) {\n case tok::kw_explicit: {\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);"}}, | ||
[k]={ | |||
["clang/test/Parser/explicit-bool.cpp"]={"clang/test/Parser/explicit-bool.cpp:47:12: warning: explicit(bool) is a C++20 extension [-Wc++20-extensions]","clang/test/Parser/explicit-bool.cpp:52:12: warning: explicit(bool) is a C++20 extension [-Wc++20-extensions]"} | |||
} | |||
}, | }, | ||
["ext_explicit_conversion_functions"]={ | ["ext_explicit_conversion_functions"]={ | ||
[ | [c]="explicit conversion functions are a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="explicit conversion functions are a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="explicit conversion functions are a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"0bf8a492fd75",1318970984,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 1."}, | [i]={"0bf8a492fd75",1318970984,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 1."}, | ||
[j]={{ | [j]={{A,11141,"/// 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 // 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());"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p6.cpp:9:3: warning: explicit conversion functions are a C++11 extension [-Wc++11-extensions]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p6.cpp:20:1: warning: explicit conversion functions are a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_explicit_instantiation_duplicate"]={ | ["ext_explicit_instantiation_duplicate"]={ | ||
[ | [c]="duplicate explicit instantiation of A ignored as a Microsoft extension [-Wmicrosoft-template]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,eb}, | |||
[m]=eb, | |||
[h]="duplicate explicit instantiation of %0 ignored as a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="duplicate explicit instantiation of (.*?) ignored as a Microsoft extension", | ||
[a]=Db, | |||
[e]=n, | |||
[i]={nb,1405733957,lb}, | |||
[j]={{F,9297,"/// 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 case TSK_ExplicitInstantiationDefinition:\n case TSK_ExplicitInstantiationDefinition:\n Diag(NewLoc, (getLangOpts().MSVCCompat) ? diag::ext_explicit_instantiation_duplicate : diag::err_explicit_instantiation_duplicate) << PrevDecl;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaTemplate/ms-class-specialization-duplicate.cpp"]={"clang/test/SemaTemplate/ms-class-specialization-duplicate.cpp:9:16: warning: duplicate explicit instantiation of \'A<int>\' ignored as a Microsoft extension [-Wmicrosoft-template]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_explicit_instantiation_without_qualified_id"]={ | ["ext_explicit_instantiation_without_qualified_id"]={ | ||
[ | [c]="qualifier in explicit instantiation of A requires a template-id (a typedef is not permitted) [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="qualifier in explicit instantiation of %q0 requires a template-id (a typedef is not permitted)", | |||
[b]=o, | [b]=o, | ||
[ | [g]="qualifier in explicit instantiation of (.*?) requires a template\\-id \\(a typedef is not permitted\\)", | ||
[a]=X, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"010815a20b7a",1276705607,"Downgrade the error when using a typedef in the nested-name-specifier"}, | [i]={"010815a20b7a",1276705607,"Downgrade the error when using a typedef in the nested-name-specifier"}, | ||
[j]={{ | [j]={{F,10285,"// Explicit instantiation of a member class of a class template.\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr) {\n // C++0x [temp.explicit]p2:\n // If the explicit instantiation is for a class or member class, the\n // elaborated-type-specifier in the declaration shall include a\n // simple-template-id.\n //\n // C++98 has the same restriction, just worded differently.\n if (!ScopeSpecifierHasTemplateId(SS))\n Diag(TemplateLoc, diag::ext_explicit_instantiation_without_qualified_id) << Record << SS.getRange();"},{F,10532,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n if (!R->isFunctionType()) {\n // C++0x [temp.explicit]p2:\n // If the explicit instantiation is for a member function, a member class\n // or a static data member of a class template specialization, the name of\n // the class template specialization in the qualified-id for the member\n // name shall be a simple-template-id.\n //\n // C++98 has the same restriction, just worded differently.\n //\n // This does not apply to variable template specializations, where the\n // template-id is in the unqualified-id instead.\n if (!ScopeSpecifierHasTemplateId(D.getCXXScopeSpec()) && !PrevTemplate)\n Diag(D.getIdentifierLoc(), diag::ext_explicit_instantiation_without_qualified_id) << Prev << D.getCXXScopeSpec().getRange();"},{F,10754,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n if (D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId && !FunTmpl && D.getCXXScopeSpec().isSet() && !ScopeSpecifierHasTemplateId(D.getCXXScopeSpec()))\n Diag(D.getIdentifierLoc(), diag::ext_explicit_instantiation_without_qualified_id) << Specialization << D.getCXXScopeSpec().getRange();"}}, | ||
[k]={ | |||
["clang/test/CXX/temp/temp.spec/temp.explicit/p2.cpp"]={"clang/test/CXX/temp/temp.spec/temp.explicit/p2.cpp:30:1: warning: qualifier in explicit instantiation of \'X0<int>::Inner\' requires a template-id (a typedef is not permitted) [-Wpedantic]","clang/test/CXX/temp/temp.spec/temp.explicit/p2.cpp:31:21: warning: qualifier in explicit instantiation of \'X0<int>::f\' requires a template-id (a typedef is not permitted) [-Wpedantic]","clang/test/CXX/temp/temp.spec/temp.explicit/p2.cpp:32:20: warning: qualifier in explicit instantiation of \'X0<int>::value\' requires a template-id (a typedef is not permitted) [-Wpedantic]"} | |||
} | |||
}, | }, | ||
["ext_explicit_specialization_storage_class"]={ | ["ext_explicit_specialization_storage_class"]={ | ||
[ | [c]="explicit specialization cannot have a storage class", | ||
[ | [d]=q, | ||
[f]=p, | |||
[h]="explicit specialization cannot have a storage class", | |||
[b]=o, | [b]=o, | ||
[ | [g]="explicit specialization cannot have a storage class", | ||
[ | [a]=Mb, | ||
[e]=n, | |||
[ | |||
[i]={"c976f01d3f9e",1308282095,"Downgrade the error complaining about presence of a storage class"}, | [i]={"c976f01d3f9e",1308282095,"Downgrade the error complaining about presence of a storage class"}, | ||
[j]={{ | [j]={{x,10434,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (!getLangOpts().CPlusPlus) {\n } else {\n // If it\'s a friend (and only if it\'s a friend), it\'s possible\n // that either the specialized function type or the specialized\n // template is dependent, and therefore matching will fail. In\n // this case, don\'t check the specialization yet.\n if (isFunctionTemplateSpecialization && isFriend && (NewFD->getType()->isDependentType() || DC->isDependentContext() || TemplateSpecializationType::anyInstantiationDependentTemplateArguments(TemplateArgs.arguments()))) {\n } else if (isFunctionTemplateSpecialization) {\n if (Info && SC != SC_None) {\n if (SC != Info->getTemplate()->getTemplatedDecl()->getStorageClass())\n else\n Diag(NewFD->getLocation(), diag::ext_explicit_specialization_storage_class) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p1.cpp:16:24: warning: explicit specialization cannot have a storage class"} | |||
} | |||
}, | }, | ||
["ext_expr_not_ice"]={ | ["ext_expr_not_ice"]={ | ||
[ | [c]="expression is not an ... constant expression; folding it to a constant is a GNU extension [-Wgnu-folding-constant]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,oc,v}, | |||
[m]=oc, | |||
[h]="expression is not an %select{integer|integral}0 constant expression; folding it to a constant is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="expression is not an (?:integer|integral) constant expression; folding it to a constant is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-folding\\-constant[^\\]]*\\]", | |||
[e]=n, | |||
[i]={C,1236199783,D}, | |||
[j]={{z,17861,"Sema::SemaDiagnosticBuilder Sema::VerifyICEDiagnoser::diagnoseFold(Sema &S, SourceLocation Loc) { return S.Diag(Loc, diag::ext_expr_not_ice) << S.LangOpts.CPlusPlus; }"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/PR2963-enum-constant.c"]={"clang/test/Sema/PR2963-enum-constant.c:16:21: warning: expression is not an integer constant expression; folding it to a constant is a GNU extension [-Wgnu-folding-constant]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_extern_template"]={ | ["ext_extern_template"]={ | ||
[ | [c]="extern templates are a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={T,E,v}, | |||
[m]=E, | |||
[h]="extern templates are a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="extern templates are a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"f411196d15a9",1319135758,"\'extern template\' is a C++11 feature. Add an Extension for C++98 (this matches"}, | [i]={"f411196d15a9",1319135758,"\'extern template\' is a C++11 feature. Add an Extension for C++98 (this matches"}, | ||
[j]={{ | [j]={{yb,1012,"/// ParseExternalDeclaration:\n///\n/// The `Attrs` that are passed in are C++11 attributes and appertain to the\n/// declaration.\n///\n/// external-declaration: [C99 6.9], declaration: [C++ dcl.dcl]\n/// function-definition\n/// declaration\n/// [GNU] asm-definition\n/// [GNU] __extension__ external-declaration\n/// [OBJC] objc-class-definition\n/// [OBJC] objc-class-declaration\n/// [OBJC] objc-alias-declaration\n/// [OBJC] objc-protocol-definition\n/// [OBJC] objc-method-definition\n/// [OBJC] @end\n/// [C++] linkage-specification\n/// [GNU] asm-definition:\n/// simple-asm-expr \';\'\n/// [C++11] empty-declaration\n/// [C++11] attribute-declaration\n///\n/// [C++11] empty-declaration:\n/// \';\'\n///\n/// [C++0x/GNU] \'extern\' \'template\' declaration\n///\n/// [C++20] module-import-declaration\n///\nParser::DeclGroupPtrTy Parser::ParseExternalDeclaration(ParsedAttributes &Attrs, ParsedAttributes &DeclSpecAttrs, ParsingDeclSpec *DS) {\n case tok::kw_extern:\n if (getLangOpts().CPlusPlus && NextToken().is(tok::kw_template)) {\n Diag(ExternLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_extern_template : diag::ext_extern_template) << SourceRange(ExternLoc, TemplateLoc);"}}, | ||
[k]={ | |||
["clang/test/CXX/drs/dr0xx.cpp"]={"clang/test/CXX/drs/dr0xx.cpp:969:3: error: extern templates are a C++11 extension [-Werror,-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_extra_semi"]={ | ["ext_extra_semi"]={ | ||
[ | [c]="extra \';\' ... [-Wextra-semi]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"extra-semi",v}, | |||
[m]="extra-semi", | |||
[h]="extra \';\' %select{outside of a function|inside a %1|inside instance variable list|after member function definition}0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="extra \';\' (?:outside of a function|inside a (.*?)|inside instance variable list|after member function definition)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wextra\\-semi[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"2f7dc46a5868",1337195099,"Move the warnings for extra semi-colons under -Wextra-semi. Also, added"}, | [i]={"2f7dc46a5868",1337195099,"Move the warnings for extra semi-colons under -Wextra-semi. Also, added"}, | ||
[j]={{ | [j]={{yb,207,"void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) {\n if (Kind != AfterMemberFunctionDefinition || HadMultipleSemis)\n Diag(StartLoc, diag::ext_extra_semi) << Kind << DeclSpec::getSpecifierName(TST, Actions.getASTContext().getPrintingPolicy()) << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));"}}, | ||
[k]={ | |||
["clang/test/Parser/objc-quirks.m"]={"clang/test/Parser/objc-quirks.m:9:2: warning: extra \';\' outside of a function [-Wextra-semi]"} | |||
} | |||
}, | }, | ||
["ext_extra_semi_cxx11"]={ | ["ext_extra_semi_cxx11"]={ | ||
[ | [c]="extra \';\' outside of a function is a C++11 extension [-Wc++11-extra-semi]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={T,E,"c++11-extra-semi","extra-semi",v}, | |||
[m]="c++11-extra-semi", | |||
[h]="extra \';\' outside of a function is a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="extra \';\' outside of a function is a C\\+\\+11 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-extra\\-semi[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"87f5dc53b23e",1343022325,"Add diagnostics for comma at end of enum and for extra semicolon at namespace"}, | [i]={"87f5dc53b23e",1343022325,"Add diagnostics for comma at end of enum and for extra semicolon at namespace"}, | ||
[j]={{ | [j]={{yb,201,"void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) {\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 else\n Diag(StartLoc, diag::ext_extra_semi_cxx11) << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/extra-semi.cpp"]={"clang/test/SemaCXX/extra-semi.cpp:14:1: warning: extra \';\' outside of a function is a C++11 extension [-Wc++11-extra-semi]","clang/test/SemaCXX/extra-semi.cpp:26:1: warning: extra \';\' outside of a function is a C++11 extension [-Wc++11-extra-semi]","clang/test/SemaCXX/extra-semi.cpp:29:1: warning: extra \';\' outside of a function is a C++11 extension [-Wc++11-extra-semi]"} | |||
} | |||
}, | }, | ||
["ext_flexible_array_empty_aggregate_gnu"]={ | ["ext_flexible_array_empty_aggregate_gnu"]={ | ||
[ | [c]="flexible array member A in otherwise empty ... is a GNU extension [-Wgnu-empty-struct]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,yc,v}, | |||
[m]=yc, | |||
[h]="flexible array member %0 in otherwise empty %select{struct|interface|union|class|enum}1 is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="flexible array member (.*?) in otherwise empty (?:struct|interface|union|class|enum) is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-empty\\-struct[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"7e25a95600fe",1299528244,"g++ is more permissive regarding flexible arrays."}, | [i]={"7e25a95600fe",1299528244,"g++ is more permissive regarding flexible arrays."}, | ||
[j]={{ | [j]={{x,18808,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n if (FDTy->isFunctionType()) {\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n if (Record) {\n if (!Record->isUnion() && !IsLastField) {\n } else if (Record->isUnion())\n else if (NumNamedMembers < 1)\n DiagID = getLangOpts().MicrosoftExt ? diag::ext_flexible_array_empty_aggregate_ms : getLangOpts().CPlusPlus ? diag::ext_flexible_array_empty_aggregate_gnu : diag::err_flexible_array_empty_aggregate;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/gnu-flags.cpp"]={"clang/test/SemaCXX/gnu-flags.cpp:99:18: warning: flexible array member \'a\' in otherwise empty struct is a GNU extension [-Wgnu-empty-struct]"} | |||
} | |||
}, | }, | ||
["ext_flexible_array_empty_aggregate_ms"]={ | ["ext_flexible_array_empty_aggregate_ms"]={ | ||
[ | [c]="flexible array member A in otherwise empty ... is a Microsoft extension [-Wmicrosoft-flexible-array]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={G,"microsoft-flexible-array",v}, | |||
[m]="microsoft-flexible-array", | |||
[h]="flexible array member %0 in otherwise empty %select{struct|interface|union|class|enum}1 is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="flexible array member (.*?) in otherwise empty (?:struct|interface|union|class|enum) is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-flexible\\-array[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"7e25a95600fe",1299528244,"g++ is more permissive regarding flexible arrays."}, | [i]={"7e25a95600fe",1299528244,"g++ is more permissive regarding flexible arrays."}, | ||
[j]={{ | [j]={{x,18806,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n if (FDTy->isFunctionType()) {\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n if (Record) {\n if (!Record->isUnion() && !IsLastField) {\n } else if (Record->isUnion())\n else if (NumNamedMembers < 1)\n DiagID = getLangOpts().MicrosoftExt ? diag::ext_flexible_array_empty_aggregate_ms : getLangOpts().CPlusPlus ? diag::ext_flexible_array_empty_aggregate_gnu : diag::err_flexible_array_empty_aggregate;"}}, | ||
[k]={ | |||
["clang/test/Sema/MicrosoftExtensions.c"]={"clang/test/Sema/MicrosoftExtensions.c:5:8: warning: flexible array member \'a\' in otherwise empty struct is a Microsoft extension [-Wmicrosoft-flexible-array]","clang/test/Sema/MicrosoftExtensions.c:11:7: warning: flexible array member \'a\' in otherwise empty struct is a Microsoft extension [-Wmicrosoft-flexible-array]"} | |||
} | |||
}, | }, | ||
["ext_flexible_array_in_array"]={ | ["ext_flexible_array_in_array"]={ | ||
[ | [c]="A may not be used as an array element due to flexible array member [-Wflexible-array-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"flexible-array-extensions",v}, | |||
[m]="flexible-array-extensions", | |||
[h]="%0 may not be used as an array element due to flexible array member", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(.*?) may not be used as an array element due to flexible array member", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wflexible\\-array\\-extensions[^\\]]*\\]", | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{S,2540,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n if (const RecordType *EltTy = T->getAs<RecordType>()) {\n // If the element type is a struct or union that contains a variadic\n // array, accept it as a GNU extension: C99 6.7.2.1p2.\n if (EltTy->getDecl()->hasFlexibleArrayMember())\n Diag(Loc, diag::ext_flexible_array_in_array) << T;"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/array-constraint.c"]={"clang/test/Sema/array-constraint.c:23:32: warning: \'struct vari\' may not be used as an array element due to flexible array member [-Wflexible-array-extensions]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_flexible_array_in_struct"]={ | ["ext_flexible_array_in_struct"]={ | ||
[ | [c]="A may not be nested in a struct due to flexible array member [-Wflexible-array-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"flexible-array-extensions",v}, | |||
[m]="flexible-array-extensions", | |||
[h]="%0 may not be nested in a struct due to flexible array member", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(.*?) may not be nested in a struct due to flexible array member", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wflexible\\-array\\-extensions[^\\]]*\\]", | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{x,18869,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n if (FDTy->isFunctionType()) {\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n if (Record && FDTTy->getDecl()->hasFlexibleArrayMember()) {\n if (!Record->isUnion()) {\n // If this is a struct/class and this is not the last element, reject\n // it. Note that GCC supports variable sized arrays in the middle of\n // structures.\n if (!IsLastField)\n else {\n Diag(FD->getLocation(), diag::ext_flexible_array_in_struct) << FD->getDeclName();"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/flexible-array-init.c"]={"clang/test/Sema/flexible-array-init.c:22:25: warning: \'z\' may not be nested in a struct due to flexible array member [-Wflexible-array-extensions]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_flexible_array_init"]={ | ["ext_flexible_array_init"]={ | ||
[ | [c]="flexible array initialization is a GNU extension [-Wgnu-flexible-array-initializer]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-flexible-array-initializer",v}, | |||
[m]="gnu-flexible-array-initializer", | |||
[h]="flexible array initialization is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="flexible array initialization is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-flexible\\-array\\-initializer[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"07d8e3a50047",1237509176,"Allow flexible array initializers that are not surrounded by"}, | [i]={"07d8e3a50047",1237509176,"Allow flexible array initializers that are not surrounded by"}, | ||
[j]={{ | [j]={{U,2103,"bool InitListChecker::CheckFlexibleArrayInit(const InitializedEntity &Entity, Expr *InitExpr, FieldDecl *Field, bool TopLevelObject) {\n if (isa<InitListExpr>(InitExpr) && cast<InitListExpr>(InitExpr)->getNumInits() == 0) {\n FlexArrayDiag = diag::ext_flexible_array_init;"},{U,2115,"bool InitListChecker::CheckFlexibleArrayInit(const InitializedEntity &Entity, Expr *InitExpr, FieldDecl *Field, bool TopLevelObject) {\n if (isa<InitListExpr>(InitExpr) && cast<InitListExpr>(InitExpr)->getNumInits() == 0) {\n } else if (!TopLevelObject) {\n } else if (Entity.getKind() != InitializedEntity::EK_Variable) {\n } else if (cast<VarDecl>(Entity.getDecl())->hasLocalStorage()) {\n } else {\n FlexArrayDiag = diag::ext_flexible_array_init;"},{U,2125,"bool InitListChecker::CheckFlexibleArrayInit(const InitializedEntity &Entity, Expr *InitExpr, FieldDecl *Field, bool TopLevelObject) {\n return FlexArrayDiag != diag::ext_flexible_array_init;"}}, | ||
[k]={ | |||
["clang/test/Sema/flexible-array-init.c"]={"clang/test/Sema/flexible-array-init.c:5:11: warning: flexible array initialization is a GNU extension [-Wgnu-flexible-array-initializer]","clang/test/Sema/flexible-array-init.c:7:22: warning: flexible array initialization is a GNU extension [-Wgnu-flexible-array-initializer]","clang/test/Sema/flexible-array-init.c:13:25: warning: flexible array initialization is a GNU extension [-Wgnu-flexible-array-initializer]","clang/test/Sema/flexible-array-init.c:24:21: warning: flexible array initialization is a GNU extension [-Wgnu-flexible-array-initializer]","clang/test/Sema/flexible-array-init.c:26:23: warning: flexible array initialization is a GNU extension [-Wgnu-flexible-array-initializer]","clang/test/Sema/flexible-array-init.c:32:31: warning: flexible array initialization is a GNU extension [-Wgnu-flexible-array-initializer]","clang/test/Sema/flexible-array-init.c:33:33: warning: flexible array initialization is a GNU extension [-Wgnu-flexible-array-initializer]"} | |||
} | |||
}, | }, | ||
["ext_flexible_array_union_gnu"]={ | ["ext_flexible_array_union_gnu"]={ | ||
[ | [c]="flexible array member A in a union is a GNU extension [-Wgnu-flexible-array-union-member]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-flexible-array-union-member",v}, | |||
[m]="gnu-flexible-array-union-member", | |||
[h]="flexible array member %0 in a union is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="flexible array member (.*?) in a union is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-flexible\\-array\\-union\\-member[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"7e25a95600fe",1299528244,"g++ is more permissive regarding flexible arrays."}, | [i]={"7e25a95600fe",1299528244,"g++ is more permissive regarding flexible arrays."}, | ||
[j]={{ | [j]={{x,18802,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n if (FDTy->isFunctionType()) {\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n if (Record) {\n if (!Record->isUnion() && !IsLastField) {\n } else if (Record->isUnion())\n DiagID = getLangOpts().MicrosoftExt ? diag::ext_flexible_array_union_ms : getLangOpts().CPlusPlus ? diag::ext_flexible_array_union_gnu : diag::err_flexible_array_union;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/gnu-flags.cpp"]={"clang/test/SemaCXX/gnu-flags.cpp:81:12: warning: flexible array member \'c1\' in a union is a GNU extension [-Wgnu-flexible-array-union-member]"} | |||
} | |||
}, | }, | ||
["ext_flexible_array_union_ms"]={ | ["ext_flexible_array_union_ms"]={ | ||
[ | [c]="flexible array member A in a union is a Microsoft extension [-Wmicrosoft-flexible-array]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={G,"microsoft-flexible-array",v}, | |||
[m]="microsoft-flexible-array", | |||
[h]="flexible array member %0 in a union is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="flexible array member (.*?) in a union is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-flexible\\-array[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"7e25a95600fe",1299528244,"g++ is more permissive regarding flexible arrays."}, | [i]={"7e25a95600fe",1299528244,"g++ is more permissive regarding flexible arrays."}, | ||
[j]={{ | [j]={{x,18800,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n if (FDTy->isFunctionType()) {\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n if (Record) {\n if (!Record->isUnion() && !IsLastField) {\n } else if (Record->isUnion())\n DiagID = getLangOpts().MicrosoftExt ? diag::ext_flexible_array_union_ms : getLangOpts().CPlusPlus ? diag::ext_flexible_array_union_gnu : diag::err_flexible_array_union;"}}, | ||
[k]={ | |||
["clang/test/Sema/MicrosoftExtensions.c"]={"clang/test/Sema/MicrosoftExtensions.c:17:12: warning: flexible array member \'c1\' in a union is a Microsoft extension [-Wmicrosoft-flexible-array]","clang/test/Sema/MicrosoftExtensions.c:18:13: warning: flexible array member \'c2\' in a union is a Microsoft extension [-Wmicrosoft-flexible-array]"} | |||
} | |||
}, | }, | ||
["ext_fold_expression"]={ | ["ext_fold_expression"]={ | ||
[ | [c]="pack fold expression is a C++17 extension [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={P,hb}, | |||
[m]=P, | |||
[h]="pack fold expression is a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="pack fold expression is a C\\+\\+17 extension", | ||
[a]=ib, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"0f0af19b0581",1415423236,"[c++1z] N4295: fold-expressions."}, | [i]={"0f0af19b0581",1415423236,"[c++1z] N4295: fold-expressions."}, | ||
[j]={{ub,3455,"/// 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 Diag(EllipsisLoc, getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_fold_expression : diag::ext_fold_expression);"}} | [j]={{ub,3455,"/// 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 Diag(EllipsisLoc, getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_fold_expression : diag::ext_fold_expression);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx0x-attributes.cpp"]={"clang/test/Parser/cxx0x-attributes.cpp:273:41: warning: pack fold expression is a C++17 extension [-Wc++17-extensions]"} | |||
} | |||
}, | }, | ||
["ext_for_range"]={ | ["ext_for_range"]={ | ||
[ | [c]="range-based for loop is a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="range-based for loop is a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="range\\-based for loop is a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ..."}, | [i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ..."}, | ||
[j]={{xb,2075,"/// 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 // Parse the first part of the for specifier.\n if (Tok.is(tok::semi)) { // for (;\n } else if (getLangOpts().CPlusPlus && Tok.is(tok::identifier) && isForRangeIdentifier()) {\n } else if (isForInitDeclaration()) { // for (int X = 4;\n if (Tok.is(tok::kw_using)) {\n } else {\n if (ForRangeInfo.ParsedForRangeDecl()) {\n Diag(ForRangeInfo.ColonLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_for_range : diag::ext_for_range);"}} | [j]={{xb,2075,"/// 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 // Parse the first part of the for specifier.\n if (Tok.is(tok::semi)) { // for (;\n } else if (getLangOpts().CPlusPlus && Tok.is(tok::identifier) && isForRangeIdentifier()) {\n } else if (isForInitDeclaration()) { // for (int X = 4;\n if (Tok.is(tok::kw_using)) {\n } else {\n if (ForRangeInfo.ParsedForRangeDecl()) {\n Diag(ForRangeInfo.ColonLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_for_range : diag::ext_for_range);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/PR10458.cpp"]={"clang/test/SemaCXX/PR10458.cpp:5:16: warning: range-based for loop is a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_for_range_begin_end_types_differ"]={ | ["ext_for_range_begin_end_types_differ"]={ | ||
[ | [c]="\'begin\' and \'end\' returning different types (A and B) is a C++17 extension [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={P,hb}, | |||
[m]=P, | |||
[h]="\'begin\' and \'end\' returning different types (%0 and %1) is a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'begin\' and \'end\' returning different types \\((.*?) and (.*?)\\) is a C\\+\\+17 extension", | ||
[a]=ib, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"01694c340db8",1458470020,"P0184R0: Allow types of \'begin\' and \'end\' expressions in range-based for loops to differ."}, | [i]={"01694c340db8",1458470020,"P0184R0: Allow types of \'begin\' and \'end\' expressions in range-based for loops to differ."}, | ||
[j]={{Ob,2969,"/// 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 if (RangeVarType->isDependentType()) {\n } else if (!BeginDeclStmt.get()) {\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;"}} | [j]={{Ob,2969,"/// 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 if (RangeVarType->isDependentType()) {\n } else if (!BeginDeclStmt.get()) {\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;"}}, | ||
[k]={ | |||
["clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp"]={"clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp:141:17: warning: \'begin\' and \'end\' returning different types (\'int *\' and \'null_t\') is a C++17 extension [-Wc++17-extensions]"} | |||
} | |||
}, | }, | ||
["ext_for_range_init_stmt"]={ | ["ext_for_range_init_stmt"]={ | ||
[ | [c]="range-based for loop initialization statements are a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="range-based for loop initialization statements are a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="range\\-based for loop initialization statements are a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"8baa50013c86",1538160249,"[cxx2a] P0614R1: Support init-statements in range-based for loops."}, | [i]={"8baa50013c86",1538160249,"[cxx2a] P0614R1: Support init-statements in range-based for loops."}, | ||
[j]={{xb,2172,"/// 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 // 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 } else if (Tok.is(tok::r_paren)) {\n } else {\n if (getLangOpts().CPlusPlus) {\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());"}} | [j]={{xb,2172,"/// 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 // 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 } else if (Tok.is(tok::r_paren)) {\n } else {\n if (getLangOpts().CPlusPlus) {\n if (ForRangeInfo.ParsedForRangeDecl()) {\n Diag(FirstPart.get() ? FirstPart.get()->getBeginLoc() : ForRangeInfo.ColonLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_for_range_init_stmt : diag::ext_for_range_init_stmt) << (FirstPart.get() ? FirstPart.get()->getSourceRange() : SourceRange());"}}, | ||
[k]={ | |||
["clang/test/SemaObjCXX/foreach.mm"]={"clang/test/SemaObjCXX/foreach.mm:18:8: warning: range-based for loop initialization statements are a C++20 extension [-Wc++20-extensions]","clang/test/SemaObjCXX/foreach.mm:21:8: warning: range-based for loop initialization statements are a C++20 extension [-Wc++20-extensions]"} | |||
} | |||
}, | }, | ||
["ext_forward_ref_enum"]={ | ["ext_forward_ref_enum"]={ | ||
[ | [c]="ISO C forbids forward references to \'enum\' types [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="ISO C forbids forward references to \'enum\' types", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C forbids forward references to \'enum\' types", | ||
[a]=X, | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{x,17510,"CreateNewDecl:\n if (Kind == TTK_Enum) {\n // If this is an undefined enum, warn.\n if (TUK != TUK_Definition && !Invalid) {\n if (IsFixed && cast<EnumDecl>(New)->isFixed()) {\n } else if (PrevDecl && (Def = cast<EnumDecl>(PrevDecl)->getDefinition())) {\n } else {\n unsigned DiagID = diag::ext_forward_ref_enum;"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:25:6: warning: ISO C forbids forward references to \'enum\' types [-Wpedantic]","clang/test/Sema/enum.c:40:13: warning: ISO C forbids forward references to \'enum\' types [-Wpedantic]","clang/test/Sema/enum.c:66:8: warning: ISO C forbids forward references to \'enum\' types [-Wpedantic]","clang/test/Sema/enum.c:67:8: warning: ISO C forbids forward references to \'enum\' types [-Wpedantic]","clang/test/Sema/enum.c:80:8: warning: ISO C forbids forward references to \'enum\' types [-Wpedantic]","clang/test/Sema/enum.c:101:13: warning: ISO C forbids forward references to \'enum\' types [-Wpedantic]","clang/test/Sema/enum.c:115:17: warning: ISO C forbids forward references to \'enum\' types [-Wpedantic]","clang/test/Sema/enum.c:172:6: warning: ISO C forbids forward references to \'enum\' types [-Wpedantic]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_forward_ref_enum_def"]={ | ["ext_forward_ref_enum_def"]={ | ||
[ | [c]="redeclaration of already-defined enum A is a GNU extension [-Wgnu-redeclared-enum]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-redeclared-enum",v}, | |||
[m]="gnu-redeclared-enum", | |||
[h]="redeclaration of already-defined enum %0 is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="redeclaration of already\\-defined enum (.*?) is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-redeclared\\-enum[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"c9ea2d5a672b",1277216795,"In C++, allow a declaration of an enum to follow a definition of that"}, | [i]={"c9ea2d5a672b",1277216795,"In C++, allow a declaration of an enum to follow a definition of that"}, | ||
[j]={{ | [j]={{x,17506,"CreateNewDecl:\n if (Kind == TTK_Enum) {\n // If this is an undefined enum, warn.\n if (TUK != TUK_Definition && !Invalid) {\n if (IsFixed && cast<EnumDecl>(New)->isFixed()) {\n } else if (PrevDecl && (Def = cast<EnumDecl>(PrevDecl)->getDefinition())) {\n Diag(Loc, diag::ext_forward_ref_enum_def) << New;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/enum.cpp"]={"clang/test/SemaCXX/enum.cpp:8:6: warning: redeclaration of already-defined enum \'E\' is a GNU extension [-Wgnu-redeclared-enum]"} | |||
} | |||
}, | }, | ||
["ext_found_in_dependent_base"]={ | ["ext_found_in_dependent_base"]={ | ||
[ | [c]="use of member A found via unqualified lookup into dependent bases of class templates is a Microsoft extension [-Wmicrosoft-template]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,eb}, | |||
[m]=eb, | |||
[h]="use of member %0 found via unqualified lookup into dependent bases of class templates is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of member (.*?) found via unqualified lookup into dependent bases of class templates is a Microsoft extension", | ||
[a]=Db, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"}, | [i]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"}, | ||
[j]={{ | [j]={{x,265,"static ParsedType recoverFromTypeInKnownDependentBase(Sema &S, const IdentifierInfo &II, SourceLocation NameLoc) {\n S.Diag(NameLoc, diag::ext_found_in_dependent_base) << &II;"},{z,2332,"/// Diagnose a lookup that found results in an enclosing class during error\n/// recovery. This usually indicates that the results were found in a dependent\n/// base class that could not be searched as part of a template definition.\n/// Always issues a diagnostic (though this may be only a warning in MS\n/// compatibility mode).\n///\n/// Return \\c true if the error is unrecoverable, or \\c false if the caller\n/// should attempt to recover using these lookup results.\nbool Sema::DiagnoseDependentMemberLookup(const LookupResult &R) {\n if (R.getRepresentativeDecl()->getDeclContext()->Equals(R.getNamingClass())) {\n } else if (getLangOpts().MSVCCompat) {\n DiagID = diag::ext_found_in_dependent_base;"}}, | ||
[k]={ | |||
["clang/test/CodeGenCXX/ms-lookup-template-base-classes.cpp"]={"clang/test/CodeGenCXX/ms-lookup-template-base-classes.cpp:9:14: warning: use of member \'b\' found via unqualified lookup into dependent bases of class templates is a Microsoft extension [-Wmicrosoft-template]"} | |||
} | |||
}, | }, | ||
["ext_found_later_in_class"]={ | ["ext_found_later_in_class"]={ | ||
[ | [c]="use of member A before its declaration is a Microsoft extension [-Wmicrosoft-template]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,eb}, | |||
[m]=eb, | |||
[h]="use of member %0 before its declaration is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of member (.*?) before its declaration is a Microsoft extension", | ||
[a]=Db, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"}, | [i]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types"}, | ||
[j]={{ | [j]={{z,2329,"/// Diagnose a lookup that found results in an enclosing class during error\n/// recovery. This usually indicates that the results were found in a dependent\n/// base class that could not be searched as part of a template definition.\n/// Always issues a diagnostic (though this may be only a warning in MS\n/// compatibility mode).\n///\n/// Return \\c true if the error is unrecoverable, or \\c false if the caller\n/// should attempt to recover using these lookup results.\nbool Sema::DiagnoseDependentMemberLookup(const LookupResult &R) {\n if (R.getRepresentativeDecl()->getDeclContext()->Equals(R.getNamingClass())) {\n DiagID = getLangOpts().MSVCCompat ? diag::ext_found_later_in_class : diag::err_found_later_in_class;"}} | ||
}, | }, | ||
["ext_freestanding_complex"]={ | ["ext_freestanding_complex"]={ | ||
[ | [c]="complex numbers are an extension in a freestanding C99 implementation [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="complex numbers are an extension in a freestanding C99 implementation", | |||
[b]=o, | [b]=o, | ||
[ | [g]="complex numbers are an extension in a freestanding C99 implementation", | ||
[a]=X, | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[ | [j]={{S,1790,"#include \"clang/Basic/OpenCLImageTypes.def\"\n // Handle complex types.\n if (DS.getTypeSpecComplex() == DeclSpec::TSC_complex) {\n if (S.getLangOpts().Freestanding)\n S.Diag(DS.getTypeSpecComplexLoc(), diag::ext_freestanding_complex);"}}, | ||
[k]={ | |||
["clang/test/Sema/warn-freestanding-complex.c"]={"clang/test/Sema/warn-freestanding-complex.c:3:16: warning: complex numbers are an extension in a freestanding C99 implementation [-Wpedantic]"} | |||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_friend_tag_redecl_outside_namespace"]={ | ["ext_friend_tag_redecl_outside_namespace"]={ | ||
[ | [c]="unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier [-Wmicrosoft-unqualified-friend]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-unqualified-friend"}, | |||
[m]="microsoft-unqualified-friend", | |||
[h]="unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier", | |||
[b]=o, | [b]=o, | ||
[ | [g]="unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-unqualified\\-friend[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"0902a51bafc7",1405035892,"MSVC compat: Allow lookup of friend types in enclosing namespaces"}, | [i]={"0902a51bafc7",1405035892,"MSVC compat: Allow lookup of friend types in enclosing namespaces"}, | ||
[j]={{ | [j]={{x,17046,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n if (Name && SS.isNotEmpty()) {\n } else if (Name) {\n // C++11 [namespace.memdef]p3:\n // If the name in a friend declaration is neither qualified nor\n // a template-id and the declaration is a function or an\n // elaborated-type-specifier, the lookup to determine whether\n // the entity has been previously declared shall not consider\n // any scopes outside the innermost enclosing namespace.\n //\n // MSVC doesn\'t implement the above rule for types, so a friend tag\n // declaration may be a redeclaration of a type declared in an enclosing\n // scope. They do implement this rule for friend functions.\n //\n // Does it matter that this should be by scope instead of by\n // semantic context?\n if (!Previous.empty() && TUK == TUK_Friend) {\n // Diagnose this MSVC extension in the easy case where lookup would have\n // unambiguously found something outside the enclosing namespace.\n if (Previous.isSingleResult() && FriendSawTagOutsideEnclosingNamespace) {\n Diag(NameLoc, diag::ext_friend_tag_redecl_outside_namespace) << createFriendTagNNSFixIt(*this, ND, S, NameLoc);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/ms-friend-lookup.cpp"]={"clang/test/SemaCXX/ms-friend-lookup.cpp:7:17: warning: unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier [-Wmicrosoft-unqualified-friend]","clang/test/SemaCXX/ms-friend-lookup.cpp:16:17: warning: unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier [-Wmicrosoft-unqualified-friend]","clang/test/SemaCXX/ms-friend-lookup.cpp:75:17: warning: unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier [-Wmicrosoft-unqualified-friend]"} | |||
} | |||
}, | }, | ||
["ext_generalized_initializer_lists"]={ | ["ext_generalized_initializer_lists"]={ | ||
[ | [c]="generalized initializer lists are a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="generalized initializer lists are a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="generalized initializer lists are a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"e9e27d95db1d",1299885044,"Implement a hack intended to allow Clang to parse libstdc++ 4.5\'s"}, | [i]={"e9e27d95db1d",1299885044,"Implement a hack intended to allow Clang to parse libstdc++ 4.5\'s"}, | ||
[j]={{xb,2399,"/// 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 if (Tok.isNot(tok::semi)) {\n if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus) {\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();"}} | [j]={{xb,2399,"/// 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 if (Tok.isNot(tok::semi)) {\n if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus) {\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();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/cxx0x-return-init-list.cpp"]={"clang/test/SemaCXX/cxx0x-return-init-list.cpp:7:10: warning: generalized initializer lists are a C++11 extension [-Wc++11-extensions]","clang/test/SemaCXX/cxx0x-return-init-list.cpp:12:10: warning: generalized initializer lists are a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_generic_with_type_arg"]={ | ["ext_generic_with_type_arg"]={ | ||
[ | [c]="passing a type argument as the first operand to \'_Generic\' is a Clang extension [-Wgeneric-type-extension]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"generic-type-extension",v}, | |||
[m]="generic-type-extension", | |||
[h]="passing a type argument as the first operand to \'_Generic\' is a Clang extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="passing a type argument as the first operand to \'_Generic\' is a Clang extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgeneric\\-type\\-extension[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives"}, | [i]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives"}, | ||
[j]={{ub,3334,"/// ParseGenericSelectionExpression - Parse a C11 generic-selection\n/// [C11 6.5.1.1].\n///\n/// \\verbatim\n/// generic-selection:\n/// _Generic ( assignment-expression , generic-assoc-list )\n/// generic-assoc-list:\n/// generic-association\n/// generic-assoc-list , generic-association\n/// generic-association:\n/// type-name : assignment-expression\n/// default : assignment-expression\n/// \\endverbatim\n///\n/// As an extension, Clang also accepts:\n/// \\verbatim\n/// generic-selection:\n/// _Generic ( type-name, generic-assoc-list )\n/// \\endverbatim\nExprResult Parser::ParseGenericSelectionExpression() {\n if (isTypeIdForGenericSelection()) {\n Diag(Loc, diag::ext_generic_with_type_arg);"}} | [j]={{ub,3334,"/// ParseGenericSelectionExpression - Parse a C11 generic-selection\n/// [C11 6.5.1.1].\n///\n/// \\verbatim\n/// generic-selection:\n/// _Generic ( assignment-expression , generic-assoc-list )\n/// generic-assoc-list:\n/// generic-association\n/// generic-assoc-list , generic-association\n/// generic-association:\n/// type-name : assignment-expression\n/// default : assignment-expression\n/// \\endverbatim\n///\n/// As an extension, Clang also accepts:\n/// \\verbatim\n/// generic-selection:\n/// _Generic ( type-name, generic-assoc-list )\n/// \\endverbatim\nExprResult Parser::ParseGenericSelectionExpression() {\n if (isTypeIdForGenericSelection()) {\n Diag(Loc, diag::ext_generic_with_type_arg);"}}, | ||
[k]={ | |||
["clang/test/Parser/generic-selection-type-extension-pedantic.c"]={"clang/test/Parser/generic-selection-type-extension-pedantic.c:7:4: warning: passing a type argument as the first operand to \'_Generic\' is a Clang extension [-Wgeneric-type-extension]"} | |||
} | |||
}, | }, | ||
["ext_gnu_address_of_label"]={ | ["ext_gnu_address_of_label"]={ | ||
[ | [c]="use of GNU address-of-label extension [-Wgnu-label-as-value]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-label-as-value",v}, | |||
[m]="gnu-label-as-value", | |||
[h]="use of GNU address-of-label extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of GNU address\\-of\\-label extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-label\\-as\\-value[^\\]]*\\]", | |||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[j]={{ub,1462,"#include \"clang/Basic/TransformTypeTraits.def\"\n case tok::ampamp: { // unary-expression: \'&&\' identifier\n Diag(AmpAmpLoc, diag::ext_gnu_address_of_label);"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/gnu-flags.c"]={"clang/test/Sema/gnu-flags.c:76:8: warning: use of GNU address-of-label extension [-Wgnu-label-as-value]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ub,1462,"#include \"clang/Basic/TransformTypeTraits.def\"\n case tok::ampamp: { // unary-expression: \'&&\' identifier\n Diag(AmpAmpLoc, diag::ext_gnu_address_of_label);"}} | |||
}, | }, | ||
["ext_gnu_anonymous_struct"]={ | ["ext_gnu_anonymous_struct"]={ | ||
[ | [c]="anonymous structs are a GNU extension [-Wgnu-anonymous-struct]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-anonymous-struct",v}, | |||
[m]="gnu-anonymous-struct", | |||
[h]="anonymous structs are a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="anonymous structs are a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-anonymous\\-struct[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"b64a1fa65ca1",1328284024,"Don\'t warn about anonymous struct/union in C11."}, | [i]={"b64a1fa65ca1",1328284024,"Don\'t warn about anonymous struct/union in C11."}, | ||
[j]={{ | [j]={{x,5510,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n // Diagnose whether this anonymous struct/union is an extension.\n if (Record->isUnion() && !getLangOpts().CPlusPlus && !getLangOpts().C11)\n else if (!Record->isUnion() && getLangOpts().CPlusPlus)\n Diag(Record->getLocation(), diag::ext_gnu_anonymous_struct);"}}, | ||
[k]={ | |||
["clang/test/CXX/module/module.interface/p3.cpp"]={"clang/test/CXX/module/module.interface/p3.cpp:19:8: error: anonymous structs are a GNU extension [-Werror,-Wgnu-anonymous-struct]"} | |||
} | |||
}, | }, | ||
["ext_gnu_array_range"]={ | ["ext_gnu_array_range"]={ | ||
[ | [c]="use of GNU array range extension [-Wgnu-designator]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,ic,v}, | |||
[m]=ic, | |||
[h]="use of GNU array range extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of GNU array range extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-designator[^\\]]*\\]", | |||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[ | [j]={{Cc,370,"/// ParseInitializerWithPotentialDesignator - Parse the \'initializer\' production\n/// checking to see if the token stream starts with a designator.\n///\n/// C99:\n///\n/// designation:\n/// designator-list \'=\'\n/// [GNU] array-designator\n/// [GNU] identifier \':\'\n///\n/// designator-list:\n/// designator\n/// designator-list designator\n///\n/// designator:\n/// array-designator\n/// \'.\' identifier\n///\n/// array-designator:\n/// \'[\' constant-expression \']\'\n/// [GNU] \'[\' constant-expression \'...\' constant-expression \']\'\n///\n/// C++20:\n///\n/// designated-initializer-list:\n/// designated-initializer-clause\n/// designated-initializer-list \',\' designated-initializer-clause\n///\n/// designated-initializer-clause:\n/// designator brace-or-equal-initializer\n///\n/// designator:\n/// \'.\' identifier\n///\n/// We allow the C99 syntax extensions in C++20, but do not allow the C++20\n/// extension (a braced-init-list after the designator with no \'=\') in C99.\n///\n/// NOTE: [OBC] allows \'[ objc-receiver objc-message-args ]\' as an\n/// initializer (because it is an expression). We need to consider this case\n/// when parsing array designators.\n///\n/// \\p CodeCompleteCB is called with Designation parsed so far.\nExprResult Parser::ParseInitializerWithPotentialDesignator(DesignatorCompletionInfo DesignatorCompletion) {\n // Parse each designator in the designator list until we find an initializer.\n while (Tok.is(tok::period) || Tok.is(tok::l_square)) {\n // If this is a normal array designator, remember it.\n if (Tok.isNot(tok::ellipsis)) {\n } else {\n Diag(Tok, diag::ext_gnu_array_range);"}} | ||
[ | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_gnu_case_range"]={ | ["ext_gnu_case_range"]={ | ||
[ | [c]="use of GNU case range extension [-Wgnu-case-range]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-case-range",v}, | |||
[m]="gnu-case-range", | |||
[h]="use of GNU case range extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of GNU case range extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-case\\-range[^\\]]*\\]", | |||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[ | [j]={{xb,847,"/// ParseCaseStatement\n/// labeled-statement:\n/// \'case\' constant-expression \':\' statement\n/// [GNU] \'case\' constant-expression \'...\' constant-expression \':\' statement\n///\nStmtResult Parser::ParseCaseStatement(ParsedStmtContext StmtCtx, bool MissingCase, ExprResult Expr) {\n do {\n if (TryConsumeToken(tok::ellipsis, DotDotDotLoc)) {\n Diag(DotDotDotLoc, diag::ext_gnu_case_range);"}}, | ||
[k]={ | |||
["clang/test/Sema/gnu-flags.c"]={"clang/test/Sema/gnu-flags.c:50:11: warning: use of GNU case range extension [-Wgnu-case-range]"} | |||
[ | } | ||
[i]={ | |||
[j]={{xb,847,"/// ParseCaseStatement\n/// labeled-statement:\n/// \'case\' constant-expression \':\' statement\n/// [GNU] \'case\' constant-expression \'...\' constant-expression \':\' statement\n///\nStmtResult Parser::ParseCaseStatement(ParsedStmtContext StmtCtx, bool MissingCase, ExprResult Expr) {\n do {\n if (TryConsumeToken(tok::ellipsis, DotDotDotLoc)) {\n Diag(DotDotDotLoc, diag::ext_gnu_case_range);"}} | |||
}, | }, | ||
["ext_gnu_conditional_expr"]={ | ["ext_gnu_conditional_expr"]={ | ||
[ | [c]="use of GNU ?: conditional expression extension, omitting middle operand [-Wgnu-conditional-omitted-operand]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-conditional-omitted-operand",v}, | |||
[m]="gnu-conditional-omitted-operand", | |||
[h]="use of GNU ?: conditional expression extension, omitting middle operand", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of GNU \\?\\: conditional expression extension, omitting middle operand", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-conditional\\-omitted\\-operand[^\\]]*\\]", | |||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[j]={{ub,490,"/// 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 while (true) {\n if (NextTokPrec == prec::Conditional) {\n if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n } else if (Tok.isNot(tok::colon)) {\n } else {\n Diag(Tok, diag::ext_gnu_conditional_expr);"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/i-c-e.c"]={"clang/test/Sema/i-c-e.c:96:19: warning: use of GNU ?: conditional expression extension, omitting middle operand [-Wgnu-conditional-omitted-operand]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ub,490,"/// 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 while (true) {\n if (NextTokPrec == prec::Conditional) {\n if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n } else if (Tok.isNot(tok::colon)) {\n } else {\n Diag(Tok, diag::ext_gnu_conditional_expr);"}} | |||
}, | }, | ||
["ext_gnu_indirect_goto"]={ | ["ext_gnu_indirect_goto"]={ | ||
[ | [c]="use of GNU indirect-goto extension [-Wgnu-label-as-value]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-label-as-value",v}, | |||
[m]="gnu-label-as-value", | |||
[h]="use of GNU indirect-goto extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of GNU indirect\\-goto extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-label\\-as\\-value[^\\]]*\\]", | |||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[j]={{xb,2331,"/// ParseGotoStatement\n/// jump-statement:\n/// \'goto\' identifier \';\'\n/// [GNU] \'goto\' \'*\' expression \';\'\n///\n/// Note: this lets the caller parse the end \';\'.\n///\nStmtResult Parser::ParseGotoStatement() {\n if (Tok.is(tok::identifier)) {\n } else if (Tok.is(tok::star)) {\n Diag(Tok, diag::ext_gnu_indirect_goto);"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/gnu-flags.c"]={"clang/test/Sema/gnu-flags.c:78:7: warning: use of GNU indirect-goto extension [-Wgnu-label-as-value]"} | ||
[ | } | ||
[i]={ | |||
[j]={{xb,2331,"/// ParseGotoStatement\n/// jump-statement:\n/// \'goto\' identifier \';\'\n/// [GNU] \'goto\' \'*\' expression \';\'\n///\n/// Note: this lets the caller parse the end \';\'.\n///\nStmtResult Parser::ParseGotoStatement() {\n if (Tok.is(tok::identifier)) {\n } else if (Tok.is(tok::star)) {\n Diag(Tok, diag::ext_gnu_indirect_goto);"}} | |||
}, | }, | ||
["ext_gnu_missing_equal_designator"]={ | ["ext_gnu_missing_equal_designator"]={ | ||
[ | [c]="use of GNU \'missing =\' extension in designator [-Wgnu-designator]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={L,ic}, | |||
[m]=ic, | |||
[h]="use of GNU \'missing =\' extension in designator", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of GNU \'missing \\=\' extension in designator", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-designator[^\\]]*\\]", | |||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[j]={{Cc,116,"static void CheckArrayDesignatorSyntax(Parser &P, SourceLocation Loc, Designation &Desig) {\n // If we have exactly one array designator, this used the GNU\n // \'designation: array-designator\' extension, otherwise there should be no\n // designators at all!\n if (Desig.getNumDesignators() == 1 && (Desig.getDesignator(0).isArrayDesignator() || Desig.getDesignator(0).isArrayRangeDesignator()))\n P.Diag(Loc, diag::ext_gnu_missing_equal_designator);"},{Cc,419,"/// ParseInitializerWithPotentialDesignator - Parse the \'initializer\' production\n/// checking to see if the token stream starts with a designator.\n///\n/// C99:\n///\n/// designation:\n/// designator-list \'=\'\n/// [GNU] array-designator\n/// [GNU] identifier \':\'\n///\n/// designator-list:\n/// designator\n/// designator-list designator\n///\n/// designator:\n/// array-designator\n/// \'.\' identifier\n///\n/// array-designator:\n/// \'[\' constant-expression \']\'\n/// [GNU] \'[\' constant-expression \'...\' constant-expression \']\'\n///\n/// C++20:\n///\n/// designated-initializer-list:\n/// designated-initializer-clause\n/// designated-initializer-list \',\' designated-initializer-clause\n///\n/// designated-initializer-clause:\n/// designator brace-or-equal-initializer\n///\n/// designator:\n/// \'.\' identifier\n///\n/// We allow the C99 syntax extensions in C++20, but do not allow the C++20\n/// extension (a braced-init-list after the designator with no \'=\') in C99.\n///\n/// NOTE: [OBC] allows \'[ objc-receiver objc-message-args ]\' as an\n/// initializer (because it is an expression). We need to consider this case\n/// when parsing array designators.\n///\n/// \\p CodeCompleteCB is called with Designation parsed so far.\nExprResult Parser::ParseInitializerWithPotentialDesignator(DesignatorCompletionInfo DesignatorCompletion) {\n // We read some number of designators and found something that isn\'t an = or\n // an initializer. If we have exactly one array designator, this\n // is the GNU \'designation: array-designator\' extension. Otherwise, it is a\n // parse error.\n if (Desig.getNumDesignators() == 1 && (Desig.getDesignator(0).isArrayDesignator() || Desig.getDesignator(0).isArrayRangeDesignator())) {\n Diag(Tok, diag::ext_gnu_missing_equal_designator) << FixItHint::CreateInsertion(Tok.getLocation(), \"= \");"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Parser/designator.c"]={"clang/test/Parser/designator.c:4:6: warning: use of GNU \'missing =\' extension in designator [-Wgnu-designator]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_gnu_old_style_field_designator"]={ | ["ext_gnu_old_style_field_designator"]={ | ||
[ | [c]="use of GNU old-style field designator extension [-Wgnu-designator]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={L,ic}, | |||
[m]=ic, | |||
[h]="use of GNU old-style field designator extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of GNU old\\-style field designator extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-designator[^\\]]*\\]", | |||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[j]={{Cc,181,"/// ParseInitializerWithPotentialDesignator - Parse the \'initializer\' production\n/// checking to see if the token stream starts with a designator.\n///\n/// C99:\n///\n/// designation:\n/// designator-list \'=\'\n/// [GNU] array-designator\n/// [GNU] identifier \':\'\n///\n/// designator-list:\n/// designator\n/// designator-list designator\n///\n/// designator:\n/// array-designator\n/// \'.\' identifier\n///\n/// array-designator:\n/// \'[\' constant-expression \']\'\n/// [GNU] \'[\' constant-expression \'...\' constant-expression \']\'\n///\n/// C++20:\n///\n/// designated-initializer-list:\n/// designated-initializer-clause\n/// designated-initializer-list \',\' designated-initializer-clause\n///\n/// designated-initializer-clause:\n/// designator brace-or-equal-initializer\n///\n/// designator:\n/// \'.\' identifier\n///\n/// We allow the C99 syntax extensions in C++20, but do not allow the C++20\n/// extension (a braced-init-list after the designator with no \'=\') in C99.\n///\n/// NOTE: [OBC] allows \'[ objc-receiver objc-message-args ]\' as an\n/// initializer (because it is an expression). We need to consider this case\n/// when parsing array designators.\n///\n/// \\p CodeCompleteCB is called with Designation parsed so far.\nExprResult Parser::ParseInitializerWithPotentialDesignator(DesignatorCompletionInfo DesignatorCompletion) {\n // If this is the old-style GNU extension:\n // designation ::= identifier \':\'\n // Handle it as a field designator. Otherwise, this must be the start of a\n // normal expression.\n if (Tok.is(tok::identifier)) {\n Diag(NameLoc, diag::ext_gnu_old_style_field_designator) << FixItHint::CreateReplacement(SourceRange(NameLoc, ColonLoc), NewSyntax);"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/CodeGen/2003-11-01-C99-CompoundLiteral.c"]={"clang/test/CodeGen/2003-11-01-C99-CompoundLiteral.c:6:37: warning: use of GNU old-style field designator extension [-Wgnu-designator]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_gnu_ptr_func_arith"]={ | ["ext_gnu_ptr_func_arith"]={ | ||
[ | [c]="arithmetic on... pointer... to... function type... A... is a GNU extension [-Wgnu-pointer-arith]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,lc,v,ac}, | |||
[m]=lc, | |||
[h]="arithmetic on%select{ a|}0 pointer%select{|s}0 to%select{ the|}2 function type%select{|s}2 %1%select{| and %3}2 is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="arithmetic on(?: a|) pointer(?:|s) to(?: the|) function type(?:|s) (.*?)(?:| and (.*?)) is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-pointer\\-arith[^\\]]*\\]", | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{z,11499,"/// Diagnose invalid arithmetic on two function pointers.\nstatic void diagnoseArithmeticOnTwoFunctionPointers(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS) {\n S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 1 /* two pointers */"},{z,11519,"/// Diagnose invalid arithmetic on a function pointer.\nstatic void diagnoseArithmeticOnFunctionPointer(Sema &S, SourceLocation Loc, Expr *Pointer) {\n S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 0 /* one pointer */ << Pointer->getType()->getPointeeType() << 0 /* one pointer, so only one type */"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/pointer-subtract-compat.c"]={"clang/test/Sema/pointer-subtract-compat.c:10:14: warning: arithmetic on pointers to the function type \'void (void)\' is a GNU extension [-Wgnu-pointer-arith]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_gnu_statement_expr"]={ | ["ext_gnu_statement_expr"]={ | ||
[ | [c]="use of GNU statement expression extension [-Wgnu-statement-expression]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-statement-expression",v}, | |||
[m]="gnu-statement-expression", | |||
[h]="use of GNU statement expression extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of GNU statement expression extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-statement\\-expression[^\\]]*\\]", | |||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[ | [j]={{ub,2933,"/// ParseParenExpression - This parses the unit that starts with a \'(\' token,\n/// based on what is allowed by ExprType. The actual thing parsed is returned\n/// in ExprType. If stopIfCastExpr is true, it will only return the parsed type,\n/// not the parsed cast-expression.\n///\n/// \\verbatim\n/// primary-expression: [C99 6.5.1]\n/// \'(\' expression \')\'\n/// [GNU] \'(\' compound-statement \')\' (if !ParenExprOnly)\n/// postfix-expression: [C99 6.5.2]\n/// \'(\' type-name \')\' \'{\' initializer-list \'}\'\n/// \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n/// cast-expression: [C99 6.5.4]\n/// \'(\' type-name \')\' cast-expression\n/// [ARC] bridged-cast-expression\n/// [ARC] bridged-cast-expression:\n/// (__bridge type-name) cast-expression\n/// (__bridge_transfer type-name) cast-expression\n/// (__bridge_retained type-name) cast-expression\n/// fold-expression: [C++1z]\n/// \'(\' cast-expression fold-operator \'...\' \')\'\n/// \'(\' \'...\' fold-operator cast-expression \')\'\n/// \'(\' cast-expression fold-operator \'...\'\n/// fold-operator cast-expression \')\'\n/// [OPENMP] Array shaping operation\n/// \'(\' \'[\' expression \']\' { \'[\' expression \']\' } cast-expression\n/// \\endverbatim\nExprResult Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, bool isTypeCast, ParsedType &CastTy, SourceLocation &RParenLoc) {\n // None of these cases should fall through with an invalid Result\n // unless they\'ve already reported an error.\n if (ExprType >= CompoundStmt && Tok.is(tok::l_brace)) {\n Diag(Tok, OpenLoc.isMacroID() ? diag::ext_gnu_statement_expr_macro : diag::ext_gnu_statement_expr);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/statements.cpp"]={"clang/test/SemaCXX/statements.cpp:43:11: warning: use of GNU statement expression extension [-Wgnu-statement-expression]","clang/test/SemaCXX/statements.cpp:60:14: warning: use of GNU statement expression extension [-Wgnu-statement-expression]"} | |||
[ | } | ||
[i]={ | |||
[j]={{ub,2933,"/// ParseParenExpression - This parses the unit that starts with a \'(\' token,\n/// based on what is allowed by ExprType. The actual thing parsed is returned\n/// in ExprType. If stopIfCastExpr is true, it will only return the parsed type,\n/// not the parsed cast-expression.\n///\n/// \\verbatim\n/// primary-expression: [C99 6.5.1]\n/// \'(\' expression \')\'\n/// [GNU] \'(\' compound-statement \')\' (if !ParenExprOnly)\n/// postfix-expression: [C99 6.5.2]\n/// \'(\' type-name \')\' \'{\' initializer-list \'}\'\n/// \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n/// cast-expression: [C99 6.5.4]\n/// \'(\' type-name \')\' cast-expression\n/// [ARC] bridged-cast-expression\n/// [ARC] bridged-cast-expression:\n/// (__bridge type-name) cast-expression\n/// (__bridge_transfer type-name) cast-expression\n/// (__bridge_retained type-name) cast-expression\n/// fold-expression: [C++1z]\n/// \'(\' cast-expression fold-operator \'...\' \')\'\n/// \'(\' \'...\' fold-operator cast-expression \')\'\n/// \'(\' cast-expression fold-operator \'...\'\n/// fold-operator cast-expression \')\'\n/// [OPENMP] Array shaping operation\n/// \'(\' \'[\' expression \']\' { \'[\' expression \']\' } cast-expression\n/// \\endverbatim\nExprResult Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, bool isTypeCast, ParsedType &CastTy, SourceLocation &RParenLoc) {\n // None of these cases should fall through with an invalid Result\n // unless they\'ve already reported an error.\n if (ExprType >= CompoundStmt && Tok.is(tok::l_brace)) {\n Diag(Tok, OpenLoc.isMacroID() ? diag::ext_gnu_statement_expr_macro : diag::ext_gnu_statement_expr);"}} | |||
}, | }, | ||
["ext_gnu_statement_expr_macro"]={ | ["ext_gnu_statement_expr_macro"]={ | ||
[ | [c]="use of GNU statement expression extension from macro expansion [-Wgnu-statement-expression-from-macro-expansion]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-statement-expression","gnu-statement-expression-from-macro-expansion",v}, | |||
[m]="gnu-statement-expression-from-macro-expansion", | |||
[h]="use of GNU statement expression extension from macro expansion", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of GNU statement expression extension from macro expansion", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-statement\\-expression\\-from\\-macro\\-expansion[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"7689c7fc9e08",1653629944,"Create specialization of -Wgnu-statement-expression for expressions found in macros."}, | [i]={"7689c7fc9e08",1653629944,"Create specialization of -Wgnu-statement-expression for expressions found in macros."}, | ||
[j]={{ub,2932,"/// ParseParenExpression - This parses the unit that starts with a \'(\' token,\n/// based on what is allowed by ExprType. The actual thing parsed is returned\n/// in ExprType. If stopIfCastExpr is true, it will only return the parsed type,\n/// not the parsed cast-expression.\n///\n/// \\verbatim\n/// primary-expression: [C99 6.5.1]\n/// \'(\' expression \')\'\n/// [GNU] \'(\' compound-statement \')\' (if !ParenExprOnly)\n/// postfix-expression: [C99 6.5.2]\n/// \'(\' type-name \')\' \'{\' initializer-list \'}\'\n/// \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n/// cast-expression: [C99 6.5.4]\n/// \'(\' type-name \')\' cast-expression\n/// [ARC] bridged-cast-expression\n/// [ARC] bridged-cast-expression:\n/// (__bridge type-name) cast-expression\n/// (__bridge_transfer type-name) cast-expression\n/// (__bridge_retained type-name) cast-expression\n/// fold-expression: [C++1z]\n/// \'(\' cast-expression fold-operator \'...\' \')\'\n/// \'(\' \'...\' fold-operator cast-expression \')\'\n/// \'(\' cast-expression fold-operator \'...\'\n/// fold-operator cast-expression \')\'\n/// [OPENMP] Array shaping operation\n/// \'(\' \'[\' expression \']\' { \'[\' expression \']\' } cast-expression\n/// \\endverbatim\nExprResult Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, bool isTypeCast, ParsedType &CastTy, SourceLocation &RParenLoc) {\n // None of these cases should fall through with an invalid Result\n // unless they\'ve already reported an error.\n if (ExprType >= CompoundStmt && Tok.is(tok::l_brace)) {\n Diag(Tok, OpenLoc.isMacroID() ? diag::ext_gnu_statement_expr_macro : diag::ext_gnu_statement_expr);"}} | [j]={{ub,2932,"/// ParseParenExpression - This parses the unit that starts with a \'(\' token,\n/// based on what is allowed by ExprType. The actual thing parsed is returned\n/// in ExprType. If stopIfCastExpr is true, it will only return the parsed type,\n/// not the parsed cast-expression.\n///\n/// \\verbatim\n/// primary-expression: [C99 6.5.1]\n/// \'(\' expression \')\'\n/// [GNU] \'(\' compound-statement \')\' (if !ParenExprOnly)\n/// postfix-expression: [C99 6.5.2]\n/// \'(\' type-name \')\' \'{\' initializer-list \'}\'\n/// \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n/// cast-expression: [C99 6.5.4]\n/// \'(\' type-name \')\' cast-expression\n/// [ARC] bridged-cast-expression\n/// [ARC] bridged-cast-expression:\n/// (__bridge type-name) cast-expression\n/// (__bridge_transfer type-name) cast-expression\n/// (__bridge_retained type-name) cast-expression\n/// fold-expression: [C++1z]\n/// \'(\' cast-expression fold-operator \'...\' \')\'\n/// \'(\' \'...\' fold-operator cast-expression \')\'\n/// \'(\' cast-expression fold-operator \'...\'\n/// fold-operator cast-expression \')\'\n/// [OPENMP] Array shaping operation\n/// \'(\' \'[\' expression \']\' { \'[\' expression \']\' } cast-expression\n/// \\endverbatim\nExprResult Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, bool isTypeCast, ParsedType &CastTy, SourceLocation &RParenLoc) {\n // None of these cases should fall through with an invalid Result\n // unless they\'ve already reported an error.\n if (ExprType >= CompoundStmt && Tok.is(tok::l_brace)) {\n Diag(Tok, OpenLoc.isMacroID() ? diag::ext_gnu_statement_expr_macro : diag::ext_gnu_statement_expr);"}}, | ||
[k]={ | |||
["clang/test/Sema/gnu-flags.c"]={"clang/test/Sema/gnu-flags.c:97:11: warning: use of GNU statement expression extension from macro expansion [-Wgnu-statement-expression-from-macro-expansion]"} | |||
} | |||
}, | }, | ||
["ext_gnu_subscript_void_type"]={ | ["ext_gnu_subscript_void_type"]={ | ||
[ | [c]="subscript of a pointer to void is a GNU extension [-Wgnu-pointer-arith]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,lc,v,ac}, | |||
[m]=lc, | |||
[h]="subscript of a pointer to void is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="subscript of a pointer to void is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-pointer\\-arith[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"4cc3f296a907",1309192347,"Cleanup a fixme by using a specific diagnostic for subscripting"}, | [i]={"4cc3f296a907",1309192347,"Cleanup a fixme by using a specific diagnostic for subscripting"}, | ||
[j]={{ | [j]={{z,5981,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n if (ResultType->isVoidType() && !getLangOpts().CPlusPlus) {\n Diag(LLoc, diag::ext_gnu_subscript_void_type) << BaseExpr->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/Sema/pointer-addition.c"]={"clang/test/Sema/pointer-addition.c:18:11: warning: subscript of a pointer to void is a GNU extension [-Wgnu-pointer-arith]"} | |||
} | |||
}, | }, | ||
["ext_gnu_void_ptr"]={ | ["ext_gnu_void_ptr"]={ | ||
[ | [c]="arithmetic on... pointer... to void is a GNU extension [-Wgnu-pointer-arith]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,lc,v,ac}, | |||
[m]=lc, | |||
[h]="arithmetic on%select{ a|}0 pointer%select{|s}0 to void is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="arithmetic on(?: a|) pointer(?:|s) to void is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-pointer\\-arith[^\\]]*\\]", | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{z,11440,"static void diagnoseArithmeticOnTwoVoidPointers(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) { S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_void_type : diag::ext_gnu_void_ptr) << 1 /* two pointers */ << LHSExpr->getSourceRange() << RHSExpr->getSourceRange(); }"},{z,11453,"static void diagnoseArithmeticOnVoidPointer(Sema &S, SourceLocation Loc, Expr *Pointer) { S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_void_type : diag::ext_gnu_void_ptr) << 0 /* one pointer */ << Pointer->getSourceRange(); }"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/typecheck-binop.c"]={"clang/test/Sema/typecheck-binop.c:14:11: warning: arithmetic on a pointer to void is a GNU extension [-Wgnu-pointer-arith]","clang/test/Sema/typecheck-binop.c:18:11: warning: arithmetic on pointers to void is a GNU extension [-Wgnu-pointer-arith]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_goto_into_protected_scope"]={ | ["ext_goto_into_protected_scope"]={ | ||
[ | [c]="jump from this goto statement to its label is a Microsoft extension [-Wmicrosoft-goto]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-goto"}, | |||
[m]="microsoft-goto", | |||
[h]="jump from this goto statement to its label is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="jump from this goto statement to its label is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-goto[^\\]]*\\]", | |||
[e]=n, | |||
[ | [i]={nb,1405733957,lb}, | ||
[j]={{"clang/lib/Sema/JumpDiagnostics.cpp",667,"/// 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 // 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",695,"/// 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 // We only get indirect gotos here when they have a constant target.\n if (IndirectGotoStmt *IGS = dyn_cast<IndirectGotoStmt>(Jump)) {\n CheckJump(IGS, Target->getStmt(), IGS->getGotoLoc(), diag::err_goto_into_protected_scope, diag::ext_goto_into_protected_scope, diag::warn_cxx98_compat_goto_into_protected_scope);"}}, | |||
[k]={ | |||
[ | ["clang/test/SemaCXX/MicrosoftCompatibility.cpp"]={"clang/test/SemaCXX/MicrosoftCompatibility.cpp:66:7: warning: jump from this goto statement to its label is a Microsoft extension [-Wmicrosoft-goto]","clang/test/SemaCXX/MicrosoftCompatibility.cpp:77:3: warning: jump from this goto statement to its label is a Microsoft extension [-Wmicrosoft-goto]","clang/test/SemaCXX/MicrosoftCompatibility.cpp:103:3: warning: jump from this goto statement to its label is a Microsoft extension [-Wmicrosoft-goto]"} | ||
[i]={ | } | ||
[j]={{"clang/lib/Sema/JumpDiagnostics.cpp",667,"/// 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 // 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",695,"/// 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 // We only get indirect gotos here when they have a constant target.\n if (IndirectGotoStmt *IGS = dyn_cast<IndirectGotoStmt>(Jump)) {\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);"}} | |||
}, | }, | ||
["ext_hex_constant_invalid"]={ | ["ext_hex_constant_invalid"]={ | ||
[ | [c]="hexadecimal floating constants are a C99 feature [-Wc99-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={V,v}, | |||
[m]=V, | |||
[h]="hexadecimal floating constants are a C99 feature", | |||
[b]=o, | [b]=o, | ||
[ | [g]="hexadecimal floating constants are a C99 feature", | ||
[a]=Gb, | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"560a3579b29a",1457130726,"Update diagnostics now that hexadecimal literals look likely to be part of C++17."}, | [i]={"560a3579b29a",1457130726,"Update diagnostics now that hexadecimal literals look likely to be part of C++17."}, | ||
[j]={{ | [j]={{db,1330,"/// 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 // Handle a hex number like 0x1234.\n if ((c1 == \'x\' || c1 == \'X\') && (isHexDigit(s[1]) || s[1] == \'.\')) {\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 if (!LangOpts.HexFloats)\n Diags.Report(TokLoc, LangOpts.CPlusPlus ? diag::ext_hex_literal_invalid : diag::ext_hex_constant_invalid);"}}, | ||
[k]={ | |||
["clang/test/Lexer/rdr-6096838-2.c"]={"clang/test/Lexer/rdr-6096838-2.c:5:17: warning: hexadecimal floating constants are a C99 feature [-Wc99-extensions]"} | |||
} | |||
}, | }, | ||
["ext_hex_literal_invalid"]={ | ["ext_hex_literal_invalid"]={ | ||
[ | [c]="hexadecimal floating literals are a C++17 feature [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={P,hb,v}, | |||
[m]=P, | |||
[h]="hexadecimal floating literals are a C++17 feature", | |||
[b]=o, | [b]=o, | ||
[ | [g]="hexadecimal floating literals are a C\\+\\+17 feature", | ||
[a]=ib, | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"560a3579b29a",1457130726,"Update diagnostics now that hexadecimal literals look likely to be part of C++17."}, | [i]={"560a3579b29a",1457130726,"Update diagnostics now that hexadecimal literals look likely to be part of C++17."}, | ||
[j]={{ | [j]={{db,1329,"/// 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 // Handle a hex number like 0x1234.\n if ((c1 == \'x\' || c1 == \'X\') && (isHexDigit(s[1]) || s[1] == \'.\')) {\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 if (!LangOpts.HexFloats)\n Diags.Report(TokLoc, LangOpts.CPlusPlus ? diag::ext_hex_literal_invalid : diag::ext_hex_constant_invalid);"}}, | ||
[k]={ | |||
["clang/test/Lexer/hexfloat.cpp"]={"clang/test/Lexer/hexfloat.cpp:7:11: warning: hexadecimal floating literals are a C++17 feature [-Wc++17-extensions]","clang/test/Lexer/hexfloat.cpp:8:12: warning: hexadecimal floating literals are a C++17 feature [-Wc++17-extensions]","clang/test/Lexer/hexfloat.cpp:9:11: warning: hexadecimal floating literals are a C++17 feature [-Wc++17-extensions]","clang/test/Lexer/hexfloat.cpp:10:12: warning: hexadecimal floating literals are a C++17 feature [-Wc++17-extensions]"} | |||
} | |||
}, | }, | ||
["ext_hlsl_access_specifiers"]={ | ["ext_hlsl_access_specifiers"]={ | ||
[ | [c]="access specifiers are a clang HLSL extension [-Whlsl-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"hlsl-extensions"}, | |||
[m]="hlsl-extensions", | |||
[h]="access specifiers are a clang HLSL extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="access specifiers are a clang HLSL extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Whlsl\\-extensions[^\\]]*\\]", | |||
[e]=r, | |||
[ | |||
[ | |||
[i]={"0d6b574b8717",1651158800,"[HLSL] Adjust access specifier behavior"}, | [i]={"0d6b574b8717",1651158800,"[HLSL] Adjust access specifier behavior"}, | ||
[j]={{ | [j]={{M,2271,"/// ParseBaseSpecifier - Parse a C++ base-specifier. A base-specifier is\n/// one entry in the base class list of a class specifier, for example:\n/// class foo : public bar, virtual private baz {\n/// \'public bar\' and \'virtual private baz\' are each base-specifiers.\n///\n/// base-specifier: [C++ class.derived]\n/// attribute-specifier-seq[opt] base-type-specifier\n/// attribute-specifier-seq[opt] \'virtual\' access-specifier[opt]\n/// base-type-specifier\n/// attribute-specifier-seq[opt] access-specifier \'virtual\'[opt]\n/// base-type-specifier\nBaseResult Parser::ParseBaseSpecifier(Decl *ClassDecl) {\n if (Access != AS_none) {\n if (getLangOpts().HLSL)\n Diag(Tok.getLocation(), diag::ext_hlsl_access_specifiers);"},{M,3378,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n case tok::kw_protected: {\n if (getLangOpts().HLSL)\n Diag(Tok.getLocation(), diag::ext_hlsl_access_specifiers);"}}, | ||
[k]={ | |||
["clang/test/ParserHLSL/access_specifiers.hlsl"]={"clang/test/ParserHLSL/access_specifiers.hlsl:12:1: warning: access specifiers are a clang HLSL extension [-Whlsl-extensions]","clang/test/ParserHLSL/access_specifiers.hlsl:14:1: warning: access specifiers are a clang HLSL extension [-Whlsl-extensions]","clang/test/ParserHLSL/access_specifiers.hlsl:18:24: warning: access specifiers are a clang HLSL extension [-Whlsl-extensions]","clang/test/ParserHLSL/access_specifiers.hlsl:26:24: warning: access specifiers are a clang HLSL extension [-Whlsl-extensions]","clang/test/ParserHLSL/access_specifiers.hlsl:30:31: warning: access specifiers are a clang HLSL extension [-Whlsl-extensions]"} | |||
} | |||
}, | }, | ||
["ext_ident_list_in_param"]={ | ["ext_ident_list_in_param"]={ | ||
[ | [c]="type-less parameter names in function declaration [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="type-less parameter names in function declaration", | |||
[b]=o, | [b]=o, | ||
[ | [g]="type\\-less parameter names in function declaration", | ||
[a]=X, | |||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[j]={{H,7218,"/// ParseFunctionDeclaratorIdentifierList - While parsing a function declarator\n/// we found a K&R-style identifier list instead of a typed parameter list.\n///\n/// After returning, ParamInfo will hold the parsed parameters.\n///\n/// identifier-list: [C99 6.7.5]\n/// identifier\n/// identifier-list \',\' identifier\n///\nvoid Parser::ParseFunctionDeclaratorIdentifierList(Declarator &D, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo) {\n // If there was no identifier specified for the declarator, either we are in\n // an abstract-declarator, or we are in a parameter declarator which was found\n // to be abstract. In abstract-declarators, identifier lists are not valid:\n // diagnose this.\n if (!D.getIdentifier())\n Diag(Tok, diag::ext_ident_list_in_param);"}} | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_imaginary_constant"]={ | ["ext_imaginary_constant"]={ | ||
[ | [c]="imaginary constants are a GNU extension [-Wgnu-imaginary-constant]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-imaginary-constant",v}, | |||
[m]="gnu-imaginary-constant", | |||
[h]="imaginary constants are a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="imaginary constants are a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-imaginary\\-constant[^\\]]*\\]", | |||
[e]=n, | |||
[i]={C,1236199783,D}, | |||
[ | [j]={{z,4279,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n // If this is an imaginary literal, create the ImaginaryLiteral wrapper.\n if (Literal.isImaginary) {\n Diag(Tok.getLocation(), diag::ext_imaginary_constant);"}}, | ||
[k]={ | |||
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:43:10: warning: imaginary constants are a GNU extension [-Wgnu-imaginary-constant]"} | |||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_implicit_exception_spec_mismatch"]={ | ["ext_implicit_exception_spec_mismatch"]={ | ||
[ | [c]="function previously declared with an ... exception specification redeclared with an ... exception specification [-Wimplicit-exception-spec-mismatch]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"implicit-exception-spec-mismatch"}, | |||
[m]="implicit-exception-spec-mismatch", | |||
[h]="function previously declared with an %select{explicit|implicit}0 exception specification redeclared with an %select{implicit|explicit}0 exception specification", | |||
[b]=o, | [b]=o, | ||
[ | [g]="function previously declared with an (?:explicit|implicit) exception specification redeclared with an (?:implicit|explicit) exception specification", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-exception\\-spec\\-mismatch[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"66f3ac9d2197",1350721611,"Rework implementation of DR1492: Apply the resolution to operator delete too,"}, | [i]={"66f3ac9d2197",1350721611,"Rework implementation of DR1492: Apply the resolution to operator delete too,"}, | ||
[j]={{ | [j]={{Ab,340,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n // Check the types as written: they must match before any exception\n // specification adjustment is applied.\n if (!CheckEquivalentExceptionSpecImpl(*this, PDiag(DiagID), PDiag(diag::note_previous_declaration), Old->getType()->getAs<FunctionProtoType>(), Old->getLocation(), New->getType()->getAs<FunctionProtoType>(), New->getLocation(), &MissingExceptionSpecification, &MissingEmptyExceptionSpecification,\n // C++11 [except.spec]p4 [DR1492]:\n // If a declaration of a function has an implicit\n // exception-specification, other declarations of the function shall\n // not specify an exception-specification.\n if (getLangOpts().CPlusPlus11 && getLangOpts().CXXExceptions && hasImplicitExceptionSpec(Old) != hasImplicitExceptionSpec(New)) {\n Diag(New->getLocation(), diag::ext_implicit_exception_spec_mismatch) << hasImplicitExceptionSpec(Old);"}}, | ||
[k]={ | |||
["clang/test/CXX/special/class.dtor/p3.cpp"]={"clang/test/CXX/special/class.dtor/p3.cpp:7:6: warning: function previously declared with an implicit exception specification redeclared with an explicit exception specification [-Wimplicit-exception-spec-mismatch]","clang/test/CXX/special/class.dtor/p3.cpp:10:6: warning: function previously declared with an explicit exception specification redeclared with an implicit exception specification [-Wimplicit-exception-spec-mismatch]"} | |||
} | |||
}, | }, | ||
["ext_implicit_function_decl_c99"]={ | ["ext_implicit_function_decl_c99"]={ | ||
[ | [c]="call to undeclared function A; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={jb,qb,Ec,pc,sb}, | ||
[ | [m]=pc, | ||
[ | [h]="call to undeclared function %0; ISO C99 and later do not support implicit function declarations", | ||
[ | [b]=R, | ||
[ | [g]="call to undeclared function (.*?); ISO C99 and later do not support implicit function declarations", | ||
[ | [a]=" \\[[^\\]]*\\-Wimplicit\\-function\\-declaration[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | [i]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | ||
[j]={{ | [j]={{x,16053,"/// 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 if (II.getName().startswith(\"__builtin_\"))\n // OpenCL v2.0 s6.9.u - Implicit function declaration is not supported.\n else if (getLangOpts().C99)\n diag_id = diag::ext_implicit_function_decl_c99;"}}, | ||
[k]={ | |||
["clang/test/Sema/cxx-as-c.c"]={"clang/test/Sema/cxx-as-c.c:5:16: error: call to undeclared function \'n_\'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]"} | |||
} | |||
}, | }, | ||
["ext_implicit_lib_function_decl"]={ | ["ext_implicit_lib_function_decl"]={ | ||
[ | [c]="implicitly declaring library function \'A\' with type B [-Wimplicit-function-declaration]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={jb,qb,Ec,pc,sb}, | |||
[m]=pc, | |||
[h]="implicitly declaring library function \'%0\' with type %1", | |||
[b]=o, | [b]=o, | ||
[ | [g]="implicitly declaring library function \'(.*?)\' with type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-function\\-declaration[^\\]]*\\]", | |||
[e]=n, | |||
[i]={C,1236199783,D}, | |||
[j]={{x,2468,"/// 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 if (!ForRedeclaration && (Context.BuiltinInfo.isPredefinedLibFunction(ID) || Context.BuiltinInfo.isHeaderDependentFunction(ID))) {\n Diag(Loc, LangOpts.C99 ? diag::ext_implicit_lib_function_decl_c99 : diag::ext_implicit_lib_function_decl) << Context.BuiltinInfo.getName(ID) << R;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Sema/implicit-intel-builtin-decl.c"]={"clang/test/Sema/implicit-intel-builtin-decl.c:5:9: warning: implicitly declaring library function \'_mm_getcsr\' with type \'unsigned int () noexcept\' [-Wimplicit-function-declaration]","clang/test/Sema/implicit-intel-builtin-decl.c:8:3: warning: implicitly declaring library function \'_mm_setcsr\' with type \'void (unsigned int) noexcept\' [-Wimplicit-function-declaration]","clang/test/Sema/implicit-intel-builtin-decl.c:11:3: warning: implicitly declaring library function \'_mm_sfence\' with type \'void () noexcept\' [-Wimplicit-function-declaration]","clang/test/Sema/implicit-intel-builtin-decl.c:15:3: warning: implicitly declaring library function \'_mm_clflush\' with type \'void (const void *) noexcept\' [-Wimplicit-function-declaration]","clang/test/Sema/implicit-intel-builtin-decl.c:18:3: warning: implicitly declaring library function \'_mm_lfence\' with type \'void () noexcept\' [-Wimplicit-function-declaration]","clang/test/Sema/implicit-intel-builtin-decl.c:21:3: warning: implicitly declaring library function \'_mm_mfence\' with type \'void () noexcept\' [-Wimplicit-function-declaration]","clang/test/Sema/implicit-intel-builtin-decl.c:24:3: warning: implicitly declaring library function \'_mm_pause\' with type \'void () noexcept\' [-Wimplicit-function-declaration]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_implicit_lib_function_decl_c99"]={ | ["ext_implicit_lib_function_decl_c99"]={ | ||
[ | [c]="call to undeclared library function \'A\' with type B; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={jb,qb,Ec,pc,sb}, | ||
[ | [m]=pc, | ||
[ | [h]="call to undeclared library function \'%0\' with type %1; ISO C99 and later do not support implicit function declarations", | ||
[ | [b]=R, | ||
[ | [g]="call to undeclared library function \'(.*?)\' with type (.*?); ISO C99 and later do not support implicit function declarations", | ||
[ | [a]=" \\[[^\\]]*\\-Wimplicit\\-function\\-declaration[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | [i]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | ||
[j]={{ | [j]={{x,2467,"/// 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 if (!ForRedeclaration && (Context.BuiltinInfo.isPredefinedLibFunction(ID) || Context.BuiltinInfo.isHeaderDependentFunction(ID))) {\n Diag(Loc, LangOpts.C99 ? diag::ext_implicit_lib_function_decl_c99 : diag::ext_implicit_lib_function_decl) << Context.BuiltinInfo.getName(ID) << R;"}}, | ||
[k]={ | |||
["clang/test/SemaObjC/ivar-lookup-resolution-builtin.m"]={"clang/test/SemaObjC/ivar-lookup-resolution-builtin.m:31:10: error: call to undeclared library function \'index\' with type \'char *(const char *, int)\'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]"} | |||
} | |||
}, | }, | ||
["ext_implicit_typename"]={ | ["ext_implicit_typename"]={ | ||
[ | [c]="missing \'typename\' prior to dependent type name AB; implicit \'typename\' is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="missing \'typename\' prior to dependent type name %0%1; implicit \'typename\' is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="missing \'typename\' prior to dependent type name (.*?)(.*?); implicit \'typename\' is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=n, | |||
[i]={O,1625925174,N}, | |||
[j]={{x,374,"/// 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 if (ObjectTypePtr) {\n } else if (SS && SS->isNotEmpty()) {\n if (!LookupCtx) {\n if (isDependentScopeSpecifier(*SS)) {\n if (IsImplicitTypename) {\n if (getLangOpts().CPlusPlus20)\n else\n Diag(QualifiedLoc, diag::ext_implicit_typename) << SS->getScopeRep() << II.getName() << FixItHint::CreateInsertion(QualifiedLoc, \"typename \");"},{F,4149,"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 if (!IsCtorOrDtorName && !IsClassName && SS.isSet()) {\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 else\n Diag(SS.getBeginLoc(), diag::ext_implicit_typename) << SS.getScopeRep() << TemplateII->getName() << FixItHint::CreateInsertion(SS.getBeginLoc(), \"typename \");"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaCXX/rounding-math-crash.cpp"]={"clang/test/SemaCXX/rounding-math-crash.cpp:3:20: warning: missing \'typename\' prior to dependent type name b::a; implicit \'typename\' is a C++20 extension [-Wc++20-extensions]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_in_class_initializer_float_type"]={ | ["ext_in_class_initializer_float_type"]={ | ||
[ | [c]="in-class initializer for static data member of type A is a GNU extension [-Wgnu-static-float-init]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={L,"gnu-static-float-init","static-float-init"}, | |||
[m]="gnu-static-float-init", | |||
[h]="in-class initializer for static data member of type %0 is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="in\\-class initializer for static data member of type (.*?) is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-static\\-float\\-init[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"db76892e72e4",1284160882,"Support in-class initialization of static const floating-point data members."}, | [i]={"db76892e72e4",1284160882,"Support in-class initialization of static const floating-point data members."}, | ||
[j]={{ | [j]={{x,13521,"/// 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 if (VDecl->isLocalVarDecl()) {\n } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n // Do nothing on dependent types.\n if (DclT->isDependentType()) {\n } else if (VDecl->isConstexpr()) {\n } else if (!DclT.isConstQualified()) {\n } else if (DclT->isIntegralOrEnumerationType()) {\n } else if (DclT->isFloatingType()) { // also permits complex, which is ok\n // In C++98, this is a GNU extension. In C++11, it is not, but we support\n // it anyway and provide a fixit to add the \'constexpr\'.\n if (getLangOpts().CPlusPlus11) {\n } else {\n Diag(VDecl->getLocation(), diag::ext_in_class_initializer_float_type) << DclT << Init->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:190:24: warning: in-class initializer for static data member of type \'const float\' is a GNU extension [-Wgnu-static-float-init]","clang/test/SemaCXX/class.cpp:191:24: warning: in-class initializer for static data member of type \'const float\' is a GNU extension [-Wgnu-static-float-init]"} | |||
} | |||
}, | }, | ||
["ext_in_class_initializer_float_type_cxx11"]={ | ["ext_in_class_initializer_float_type_cxx11"]={ | ||
[ | [c]="in-class initializer for static data member of type A requires \'constexpr\' specifier [-Wstatic-float-init]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"static-float-init"}, | ||
[ | [m]="static-float-init", | ||
[ | [h]="in-class initializer for static data member of type %0 requires \'constexpr\' specifier", | ||
[ | [b]=R, | ||
[ | [g]="in\\-class initializer for static data member of type (.*?) requires \'constexpr\' specifier", | ||
[ | [a]=" \\[[^\\]]*\\-Wstatic\\-float\\-init[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"cf656385ea2d",1359087736,"Sync \'in class initialization of static const double\' extension up with GCC,"}, | [i]={"cf656385ea2d",1359087736,"Sync \'in class initialization of static const double\' extension up with GCC,"}, | ||
[j]={{ | [j]={{x,13515,"/// 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 if (VDecl->isLocalVarDecl()) {\n } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n // Do nothing on dependent types.\n if (DclT->isDependentType()) {\n } else if (VDecl->isConstexpr()) {\n } else if (!DclT.isConstQualified()) {\n } else if (DclT->isIntegralOrEnumerationType()) {\n } else if (DclT->isFloatingType()) { // also permits complex, which is ok\n // In C++98, this is a GNU extension. In C++11, it is not, but we support\n // it anyway and provide a fixit to add the \'constexpr\'.\n if (getLangOpts().CPlusPlus11) {\n Diag(VDecl->getLocation(), diag::ext_in_class_initializer_float_type_cxx11) << DclT << Init->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/cxx0x-class.cpp"]={"clang/test/SemaCXX/cxx0x-class.cpp:23:24: warning: in-class initializer for static data member of type \'const float\' requires \'constexpr\' specifier [-Wstatic-float-init]","clang/test/SemaCXX/cxx0x-class.cpp:24:24: warning: in-class initializer for static data member of type \'const float\' requires \'constexpr\' specifier [-Wstatic-float-init]"} | |||
} | |||
}, | }, | ||
["ext_in_class_initializer_non_constant"]={ | ["ext_in_class_initializer_non_constant"]={ | ||
[ | [c]="in-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension [-Wgnu-folding-constant]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,oc,v}, | |||
[m]=oc, | |||
[h]="in-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="in\\-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-folding\\-constant[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"9925ec8bf446",1308030389,"fix rdar://9204520 - Accept int(0.85 * 10) as an initializer in a class member"}, | [i]={"9925ec8bf446",1308030389,"fix rdar://9204520 - Accept int(0.85 * 10) as an initializer in a class member"}, | ||
[j]={{ | [j]={{x,13499,"/// 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 if (VDecl->isLocalVarDecl()) {\n } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n // Do nothing on dependent types.\n if (DclT->isDependentType()) {\n } else if (VDecl->isConstexpr()) {\n } else if (!DclT.isConstQualified()) {\n } else if (DclT->isIntegralOrEnumerationType()) {\n if (getLangOpts().CPlusPlus11 && DclT.isVolatileQualified())\n else if (Init->isValueDependent())\n else if (Init->isIntegerConstantExpr(Context, &Loc))\n else if (Init->getType()->isScopedEnumeralType() && Init->isCXX11ConstantExpr(Context))\n else if (Init->isEvaluatable(Context)) {\n Diag(Loc, diag::ext_in_class_initializer_non_constant) << Init->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/i-c-e-cxx.cpp"]={"clang/test/SemaCXX/i-c-e-cxx.cpp:60:28: warning: in-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension [-Wgnu-folding-constant]"} | |||
} | |||
}, | }, | ||
["ext_incomplete_in_exception_spec"]={ | ["ext_incomplete_in_exception_spec"]={ | ||
[ | [c]="...incomplete type A is not allowed in exception specification [-Wmicrosoft-exception-spec]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,Hb}, | |||
[m]=Hb, | |||
[h]="%select{|pointer to |reference to }0incomplete type %1 is not allowed in exception specification", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(?:|pointer to |reference to )incomplete type (.*?) is not allowed in exception specification", | ||
[a]=Pc, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"b2b0da4ad08d",1465583081,"[-fms-extensions] Permit incomplete types in dynamic exception specifications"}, | [i]={"b2b0da4ad08d",1465583081,"[-fms-extensions] Permit incomplete types in dynamic exception specifications"}, | ||
[j]={{ | [j]={{Ab,168,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T The exception type. This will be decayed to a pointer type\n/// when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n if (getLangOpts().MSVCCompat) {\n DiagID = diag::ext_incomplete_in_exception_spec;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/ms-exception-spec.cpp"]={"clang/test/SemaCXX/ms-exception-spec.cpp:19:17: warning: incomplete type \'S\' is not allowed in exception specification [-Wmicrosoft-exception-spec]"} | |||
} | |||
}, | }, | ||
["ext_increment_bool"]={ | ["ext_increment_bool"]={ | ||
[ | [c]="ISO C++17 does not allow incrementing expression of type bool [-Wincrement-bool]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"increment-bool"}, | ||
[ | [m]="increment-bool", | ||
[ | [h]="ISO C++17 does not allow incrementing expression of type bool", | ||
[ | [b]=R, | ||
[ | [g]="ISO C\\+\\+17 does not allow incrementing expression of type bool", | ||
[ | [a]=" \\[[^\\]]*\\-Wincrement\\-bool[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"4a0cd893257d",1448504197,"P0002R1: increment on expressions of type bool is no longer allowed in C++1z."}, | [i]={"4a0cd893257d",1448504197,"P0002R1: increment on expressions of type bool is no longer allowed in C++1z."}, | ||
[j]={{ | [j]={{z,14703,"/// 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 if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n S.Diag(OpLoc, S.getLangOpts().CPlusPlus17 ? diag::ext_increment_bool : diag::warn_increment_bool) << Op->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/CXX/over/over.built/p4.cpp"]={"clang/test/CXX/over/over.built/p4.cpp:7:9: error: ISO C++17 does not allow incrementing expression of type bool [-Wincrement-bool]","clang/test/CXX/over/over.built/p4.cpp:8:10: error: ISO C++17 does not allow incrementing expression of type bool [-Wincrement-bool]"} | |||
} | |||
}, | }, | ||
["ext_init_capture"]={ | ["ext_init_capture"]={ | ||
[ | [c]="initialized lambda captures are a C++14 extension [-Wc++14-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={kb,Kb}, | |||
[m]=kb, | |||
[h]="initialized lambda captures are a C++14 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="initialized lambda captures are a C\\+\\+14 extension", | ||
[a]=Wb, | |||
[e]="Lambda Issue", | |||
[ | |||
[ | |||
[i]={"5b013f505068",1380346707,"Add compat/extension warnings for init captures."}, | [i]={"5b013f505068",1380346707,"Add compat/extension warnings for init captures."}, | ||
[j]={{"clang/lib/Sema/SemaLambda.cpp",1072,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n if (C->Init.isUsable()) {\n Diag(C->Loc, getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_init_capture : diag::ext_init_capture);"}} | [j]={{"clang/lib/Sema/SemaLambda.cpp",1072,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n if (C->Init.isUsable()) {\n Diag(C->Loc, getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_init_capture : diag::ext_init_capture);"}}, | ||
[k]={ | |||
["clang/test/Parser/objcxx11-invalid-lambda.cpp"]={"clang/test/Parser/objcxx11-invalid-lambda.cpp:6:7: warning: initialized lambda captures are a C++14 extension [-Wc++14-extensions]"} | |||
} | |||
}, | }, | ||
["ext_init_capture_pack"]={ | ["ext_init_capture_pack"]={ | ||
[ | [c]="initialized lambda pack captures are a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="initialized lambda pack captures are a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="initialized lambda pack captures are a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]="Lambda Issue", | |||
[ | |||
[ | |||
[i]={"b2997f579a8b",1558469450,"[c++20] P0780R2: Support pack-expansion of init-captures."}, | [i]={"b2997f579a8b",1558469450,"[c++20] P0780R2: Support pack-expansion of init-captures."}, | ||
[j]={{"clang/lib/Sema/SemaLambda.cpp",729,"QualType Sema::buildLambdaInitCaptureInitialization(SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc, std::optional<unsigned> NumExpansions, IdentifierInfo *Id, bool IsDirectInit, Expr *&Init) {\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);"}} | [j]={{"clang/lib/Sema/SemaLambda.cpp",729,"QualType Sema::buildLambdaInitCaptureInitialization(SourceLocation Loc, bool ByRef, SourceLocation EllipsisLoc, std::optional<unsigned> NumExpansions, IdentifierInfo *Id, bool IsDirectInit, Expr *&Init) {\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);"}}, | ||
[k]={ | |||
["clang/test/SemaTemplate/sizeof-pack.cpp"]={"clang/test/SemaTemplate/sizeof-pack.cpp:9:11: warning: initialized lambda pack captures are a C++20 extension [-Wc++20-extensions]"} | |||
} | |||
}, | }, | ||
["ext_init_from_predefined"]={ | ["ext_init_from_predefined"]={ | ||
[ | [c]="initializing an array from a \'A\' predefined identifier is a Microsoft extension [-Wmicrosoft-init-from-predefined]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-init-from-predefined"}, | |||
[m]="microsoft-init-from-predefined", | |||
[h]="initializing an array from a \'%0\' predefined identifier is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="initializing an array from a \'(.*?)\' predefined identifier is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-init\\-from\\-predefined[^\\]]*\\]", | |||
[e]=n, | |||
[i]={O,1625925174,N}, | |||
[j]={{U,8619,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n if (S.getLangOpts().MicrosoftExt && Args.size() == 1 && isa<PredefinedExpr>(Args[0]) && Entity.getType()->isArrayType()) {\n S.Diag(Init->getBeginLoc(), diag::ext_init_from_predefined) << Init;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Sema/ms_predefined_expr.cpp"]={"clang/test/Sema/ms_predefined_expr.cpp:4:19: warning: initializing an array from a \'__FUNCTION__\' predefined identifier is a Microsoft extension [-Wmicrosoft-init-from-predefined]","clang/test/Sema/ms_predefined_expr.cpp:5:19: warning: initializing an array from a \'__FUNCDNAME__\' predefined identifier is a Microsoft extension [-Wmicrosoft-init-from-predefined]","clang/test/Sema/ms_predefined_expr.cpp:6:19: warning: initializing an array from a \'__FUNCSIG__\' predefined identifier is a Microsoft extension [-Wmicrosoft-init-from-predefined]","clang/test/Sema/ms_predefined_expr.cpp:7:19: warning: initializing an array from a \'__func__\' predefined identifier is a Microsoft extension [-Wmicrosoft-init-from-predefined]","clang/test/Sema/ms_predefined_expr.cpp:8:19: warning: initializing an array from a \'__PRETTY_FUNCTION__\' predefined identifier is a Microsoft extension [-Wmicrosoft-init-from-predefined]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_init_list_constant_narrowing"]={ | ["ext_init_list_constant_narrowing"]={ | ||
[ | [c]="constant expression evaluates to A which cannot be narrowed to type B [-Wc++11-narrowing]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={qc,"c++0x-narrowing",Yb,Zb,Qb,"narrowing"}, | ||
[ | [m]=Qb, | ||
[ | [h]="constant expression evaluates to %0 which cannot be narrowed to type %1", | ||
[ | [b]=R, | ||
[ | [g]="constant expression evaluates to (.*?) which cannot be narrowed to type (.*?)", | ||
[ | [a]=" \\[[^\\]]*\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"16e1b07597f3",1384224105,"Rather than duplicating extension diagnostics to allow them to cause a"}, | [i]={"16e1b07597f3",1384224105,"Rather than duplicating extension diagnostics to allow them to cause a"}, | ||
[j]={{ | [j]={{U,10426,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n case NK_Constant_Narrowing:\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();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/cxx0x-initializer-scalars.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:48:21: error: constant expression evaluates to 100000 which cannot be narrowed to type \'short\' [-Wc++11-narrowing]","clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:49:24: error: constant expression evaluates to 100000 which cannot be narrowed to type \'short\' [-Wc++11-narrowing]"} | |||
} | |||
}, | }, | ||
["ext_init_list_type_narrowing"]={ | ["ext_init_list_type_narrowing"]={ | ||
[ | [c]="type A cannot be narrowed to B in initializer list [-Wc++11-narrowing]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={qc,"c++0x-narrowing",Yb,Zb,Qb,"narrowing"}, | ||
[ | [m]=Qb, | ||
[ | [h]="type %0 cannot be narrowed to %1 in initializer list", | ||
[ | [b]=R, | ||
[ | [g]="type (.*?) cannot be narrowed to (.*?) in initializer list", | ||
[ | [a]=" \\[[^\\]]*\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"16e1b07597f3",1384224105,"Rather than duplicating extension diagnostics to allow them to cause a"}, | [i]={"16e1b07597f3",1384224105,"Rather than duplicating extension diagnostics to allow them to cause a"}, | ||
[j]={{ | [j]={{U,10415,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n case NK_Type_Narrowing:\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();"}}, | ||
[k]={ | |||
["clang/test/CXX/expr/expr.const/p6.cpp"]={"clang/test/CXX/expr/expr.const/p6.cpp:38:20: error: type \'float\' cannot be narrowed to \'int\' in initializer list [-Wc++11-narrowing]"} | |||
} | |||
}, | }, | ||
["ext_init_list_variable_narrowing"]={ | ["ext_init_list_variable_narrowing"]={ | ||
[ | [c]="non-constant-expression cannot be narrowed from type A to B in initializer list [-Wc++11-narrowing]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={qc,"c++0x-narrowing",Yb,Zb,Qb,"narrowing"}, | ||
[ | [m]=Qb, | ||
[ | [h]="non-constant-expression cannot be narrowed from type %0 to %1 in initializer list", | ||
[ | [b]=R, | ||
[ | [g]="non\\-constant\\-expression cannot be narrowed from type (.*?) to (.*?) in initializer list", | ||
[ | [a]=" \\[[^\\]]*\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"16e1b07597f3",1384224105,"Rather than duplicating extension diagnostics to allow them to cause a"}, | [i]={"16e1b07597f3",1384224105,"Rather than duplicating extension diagnostics to allow them to cause a"}, | ||
[j]={{ | [j]={{U,10437,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n case NK_Variable_Narrowing:\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();"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/basic.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/basic.cpp:10:9: error: non-constant-expression cannot be narrowed from type \'int\' to \'float\' in initializer list [-Wc++11-narrowing]","clang/test/CXX/dcl.decl/dcl.init/dcl.init.list/basic.cpp:12:9: error: non-constant-expression cannot be narrowed from type \'int\' to \'float\' in initializer list [-Wc++11-narrowing]"} | |||
} | |||
}, | }, | ||
["ext_init_statement"]={ | ["ext_init_statement"]={ | ||
[ | [c]="\'...\' initialization statements are a C++17 extension [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={P,hb}, | |||
[m]=P, | |||
[h]="\'%select{if|switch}0\' initialization statements are a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'(?:if|switch)\' initialization statements are a C\\+\\+17 extension", | ||
[a]=ib, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"fccb5128b201",1476822436,"Add missing warning for use of C++1z init-statements in C++14 and before."}, | [i]={"fccb5128b201",1476822436,"Add missing warning for use of C++1z init-statements in C++14 and before."}, | ||
[j]={{ | [j]={{wb,2075,"/// 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 const auto WarnOnInit = [this, &CK] { Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_init_statement : diag::ext_init_statement) << (CK == Sema::ConditionKind::Switch); };"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/warn-c++1z-extensions.cpp"]={"clang/test/SemaCXX/warn-c++1z-extensions.cpp:4:7: warning: \'if\' initialization statements are a C++17 extension [-Wc++17-extensions]","clang/test/SemaCXX/warn-c++1z-extensions.cpp:5:11: warning: \'switch\' initialization statements are a C++17 extension [-Wc++17-extensions]"} | |||
} | |||
}, | }, | ||
["ext_initializer_overrides"]={ | ["ext_initializer_overrides"]={ | ||
[ | [c]="initializer ...overrides prior initialization of this subobject [-Winitializer-overrides]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={r,jb,"extra","initializer-overrides","override-init"}, | |||
[m]="initializer-overrides", | |||
[h]="initializer %select{partially |}0overrides prior initialization of this subobject", | |||
[b]=o, | [b]=o, | ||
[ | [g]="initializer (?:partially |)overrides prior initialization of this subobject", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winitializer\\-overrides[^\\]]*\\]", | |||
[e]=n, | |||
[i]={kc,1567205575,nc}, | |||
[j]={{U,415,"/// 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 /// 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 unsigned DiagID = SemaRef.getLangOpts().CPlusPlus ? (UnionOverride ? diag::ext_initializer_union_overrides : diag::ext_initializer_overrides) : diag::warn_initializer_overrides;"}} | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_initializer_string_for_char_array_too_long"]={ | ["ext_initializer_string_for_char_array_too_long"]={ | ||
[ | [c]="initializer-string for char array is too long [-Wexcess-initializers]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={Nb}, | |||
[m]=Nb, | |||
[h]="initializer-string for char array is too long", | |||
[b]=o, | [b]=o, | ||
[ | [g]="initializer\\-string for char array is too long", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wexcess\\-initializers[^\\]]*\\]", | |||
[e]=n, | |||
[i]={nb,1405733957,lb}, | |||
[j]={{U,258,"static void CheckStringInit(Expr *Str, QualType &DeclT, const ArrayType *AT, Sema &S) {\n // We have an array of character type with known size. However,\n // the size may be smaller or larger than the string we are initializing.\n // FIXME: Avoid truncation for 64-bit length strings.\n if (S.getLangOpts().CPlusPlus) {\n } else {\n // C99 6.7.8p14.\n if (StrLength - 1 > CAT->getSize().getZExtValue())\n S.Diag(Str->getBeginLoc(), diag::ext_initializer_string_for_char_array_too_long) << Str->getSourceRange();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/CodeGen/globalinit.c"]={"clang/test/CodeGen/globalinit.c:20:19: warning: initializer-string for char array is too long [-Wexcess-initializers]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_initializer_union_overrides"]={ | ["ext_initializer_union_overrides"]={ | ||
[ | [c]="initializer ...overrides prior initialization of this subobject [-Winitializer-overrides]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={r,jb,"extra","initializer-overrides","override-init"}, | ||
[ | [m]="initializer-overrides", | ||
[ | [h]="initializer %select{partially |}0overrides prior initialization of this subobject", | ||
[ | [b]=R, | ||
[ | [g]="initializer (?:partially |)overrides prior initialization of this subobject", | ||
[ | [a]=" \\[[^\\]]*\\-Winitializer\\-overrides[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={ | [i]={O,1625925174,N}, | ||
[j]={{ | [j]={{U,414,"/// 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 /// 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 unsigned DiagID = SemaRef.getLangOpts().CPlusPlus ? (UnionOverride ? diag::ext_initializer_union_overrides : diag::ext_initializer_overrides) : diag::warn_initializer_overrides;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/cxx2b-designated-initializers.cpp"]={"clang/test/SemaCXX/cxx2b-designated-initializers.cpp:41:9: error: initializer partially overrides prior initialization of this subobject [-Winitializer-overrides]"} | |||
} | |||
}, | }, | ||
["ext_inline_namespace"]={ | ["ext_inline_namespace"]={ | ||
[ | [c]="inline namespaces are a C++11 feature [-Wc++11-inline-namespace]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E,"c++11-inline-namespace"}, | |||
[m]="c++11-inline-namespace", | |||
[h]="inline namespaces are a C++11 feature", | |||
[b]=o, | [b]=o, | ||
[ | [g]="inline namespaces are a C\\+\\+11 feature", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-inline\\-namespace[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"5a5f2c76b6f7",1283215005,"Enable inline namespaces in C++03 as an extension."}, | [i]={"5a5f2c76b6f7",1283215005,"Enable inline namespaces in C++03 as an extension."}, | ||
[j]={{ | [j]={{M,225,"/// 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 // 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);"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p1.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p1.cpp:7:1: warning: inline namespaces are a C++11 feature [-Wc++11-inline-namespace]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p1.cpp:8:1: warning: inline namespaces are a C++11 feature [-Wc++11-inline-namespace]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p1.cpp:9:1: warning: inline namespaces are a C++11 feature [-Wc++11-inline-namespace]"} | |||
} | |||
}, | }, | ||
["ext_inline_nested_namespace_definition"]={ | ["ext_inline_nested_namespace_definition"]={ | ||
[ | [c]="inline nested namespace definition is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="inline nested namespace definition is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="inline nested namespace definition is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"53f391dcb323",1542043188,"Implement P1094R2 (nested inline namespaces)"}, | [i]={"53f391dcb323",1542043188,"Implement P1094R2 (nested inline namespaces)"}, | ||
[j]={{ | [j]={{M,183,"/// 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 if (ExtraNSs.empty()) {\n } else if (InlineLoc.isValid()) {\n } else if (getLangOpts().CPlusPlus20) {\n } else if (getLangOpts().CPlusPlus17) {\n if (FirstNestedInlineLoc.isValid())\n Diag(FirstNestedInlineLoc, diag::ext_inline_nested_namespace_definition);"},{M,218,"/// 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 if (ExtraNSs.empty()) {\n } else if (InlineLoc.isValid()) {\n } else if (getLangOpts().CPlusPlus20) {\n } else if (getLangOpts().CPlusPlus17) {\n } else {\n // Warn about nested inline namespaces.\n if (FirstNestedInlineLoc.isValid())\n Diag(FirstNestedInlineLoc, diag::ext_inline_nested_namespace_definition);"}}, | ||
[k]={ | |||
["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 a C++20 extension [-Wc++20-extensions]","clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp:36:27: warning: inline nested namespace definition is a C++20 extension [-Wc++20-extensions]"} | |||
} | |||
}, | }, | ||
["ext_inline_variable"]={ | ["ext_inline_variable"]={ | ||
[ | [c]="inline variables are a C++17 extension [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={P,hb}, | |||
[m]=P, | |||
[h]="inline variables are a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="inline variables are a C\\+\\+17 extension", | ||
[a]=ib, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a"}, | [i]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a"}, | ||
[j]={{ | [j]={{x,7732,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n if (D.getDeclSpec().isInlineSpecified()) {\n if (!getLangOpts().CPlusPlus) {\n } else if (CurContext->isFunctionOrMethod()) {\n } else {\n Diag(D.getDeclSpec().getInlineSpecLoc(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_inline_variable : diag::ext_inline_variable);"}}, | ||
[k]={ | |||
["clang/test/CXX/temp/temp.spec/temp.inst/p1.cpp"]={"clang/test/CXX/temp/temp.spec/temp.inst/p1.cpp:62:12: warning: inline variables are a C++17 extension [-Wc++17-extensions]"} | |||
} | |||
}, | }, | ||
["ext_integer_complement_complex"]={ | ["ext_integer_complement_complex"]={ | ||
[ | [c]="ISO C does not support \'~\' for complex conjugation of A [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="ISO C does not support \'~\' for complex conjugation of %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C does not support \'~\' for complex conjugation of (.*?)", | ||
[a]=X, | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{z,16246,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n case UO_Not: // bitwise complement\n // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n if (resultType->isComplexType() || resultType->isComplexIntegerType())\n Diag(OpLoc, diag::ext_integer_complement_complex) << resultType << Input.get()->getSourceRange();"}} | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_integer_complex"]={ | ["ext_integer_complex"]={ | ||
[ | [c]="complex integer types are a GNU extension [-Wgnu-complex-integer]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-complex-integer",v}, | |||
[m]="gnu-complex-integer", | |||
[h]="complex integer types are a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="complex integer types are a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-complex\\-integer[^\\]]*\\]", | |||
[e]=n, | |||
[i]={C,1236199783,D}, | |||
[ | [j]={{wc,1316,"/// 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 // TODO: if the implementation does not implement _Complex or _Imaginary,\n // disallow their use. Need information about the backend.\n if (TypeSpecComplex != TSC_unspecified) {\n if (TypeSpecType == TST_unspecified) {\n } else if (TypeSpecType == TST_int || TypeSpecType == TST_char || TypeSpecType == TST_bitint) {\n // Note that this intentionally doesn\'t include _Complex _Bool.\n if (!S.getLangOpts().CPlusPlus)\n S.Diag(TSTLoc, diag::ext_integer_complex);"}}, | ||
[k]={ | |||
["clang/test/Sema/complex-init-list.c"]={"clang/test/Sema/complex-init-list.c:28:10: warning: complex integer types are a GNU extension [-Wgnu-complex-integer]"} | |||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_integer_increment_complex"]={ | ["ext_integer_increment_complex"]={ | ||
[ | [c]="ISO C does not support \'++\'/\'--\' on complex integer type A [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="ISO C does not support \'++\'/\'--\' on complex integer type %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C does not support \'\\+\\+\'\\/\'\\-\\-\' on complex integer type (.*?)", | ||
[a]=X, | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{z,14740,"/// 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 if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n } else if (S.getLangOpts().CPlusPlus && ResType->isEnumeralType()) {\n } else if (ResType->isRealType()) {\n } else if (ResType->isPointerType()) {\n } else if (ResType->isObjCObjectPointerType()) {\n } else if (ResType->isAnyComplexType()) {\n S.Diag(OpLoc, diag::ext_integer_increment_complex) << ResType << Op->getSourceRange();"}} | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_integer_literal_too_large_for_signed"]={ | ["ext_integer_literal_too_large_for_signed"]={ | ||
[ | [c]="integer literal is too large to be represented in a signed integer type, interpreting as unsigned [-Wimplicitly-unsigned-literal]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"implicitly-unsigned-literal"}, | |||
[m]="implicitly-unsigned-literal", | |||
[h]="integer literal is too large to be represented in a signed integer type, interpreting as unsigned", | |||
[b]=o, | [b]=o, | ||
[ | [g]="integer literal is too large to be represented in a signed integer type, interpreting as unsigned", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimplicitly\\-unsigned\\-literal[^\\]]*\\]", | |||
[e]=r, | |||
[ | |||
[ | |||
[i]={"31f42318d833",1406213483,"Improving the \"integer constant too large\" diagnostics based on post-commit feedback from Richard Sm..."}, | [i]={"31f42318d833",1406213483,"Improving the \"integer constant too large\" diagnostics based on post-commit feedback from Richard Sm..."}, | ||
[j]={{ | [j]={{zc,363,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result. Return true if there was an error\n/// parsing. This function also returns information about the form of the\n/// expression in DT. See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n case tok::numeric_constant: {\n // Parse the integer literal into Result.\n if (Literal.GetIntegerValue(Result.Val)) {\n } else {\n // Detect overflow based on whether the value is signed. If signed\n // and if the value is too large, emit a warning \"integer constant is so\n // large that it is unsigned\" e.g. on 12345678901234567890 where intmax_t\n // is 64-bits.\n if (!Literal.isUnsigned && Result.Val.isNegative()) {\n // Octal, hexadecimal, and binary literals are implicitly unsigned if\n // the value does not fit into a signed integer type.\n if (ValueLive && Literal.getRadix() == 10)\n PP.Diag(PeekTok, diag::ext_integer_literal_too_large_for_signed);"},{z,4257,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n if (Literal.isFixedPointLiteral()) {\n } else if (Literal.isFloatingLiteral()) {\n } else if (!Literal.isIntegerLiteral()) {\n } else {\n if (Literal.GetIntegerValue(ResultVal)) {\n } else {\n // If we still couldn\'t decide a type, we either have \'size_t\' literal\n // that is out of range, or a decimal literal that does not fit in a\n // signed long long and has no U suffix.\n if (Ty.isNull()) {\n if (Literal.isSizeT)\n else\n Diag(Tok.getLocation(), diag::ext_integer_literal_too_large_for_signed);"}}, | ||
[k]={ | |||
["clang/test/Lexer/bitint-constants.c"]={"clang/test/Lexer/bitint-constants.c:40:5: warning: integer literal is too large to be represented in a signed integer type, interpreting as unsigned [-Wimplicitly-unsigned-literal]"} | |||
} | |||
}, | }, | ||
["ext_internal_in_extern_inline"]={ | ["ext_internal_in_extern_inline"]={ | ||
[ | [c]="static ... A is used in an inline function with external linkage [-Wstatic-in-inline]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"static-in-inline"}, | |||
[m]="static-in-inline", | |||
[h]="static %select{function|variable}0 %1 is used in an inline function with external linkage", | |||
[b]=o, | [b]=o, | ||
[ | [g]="static (?:function|variable) (.*?) is used in an inline function with external linkage", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wstatic\\-in\\-inline[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"edff0200115c",1340041798,"Allow internal decls in inline functions if the function is in the main file."}, | [i]={"edff0200115c",1340041798,"Allow internal decls in inline functions if the function is in the main file."}, | ||
[j]={{ | [j]={{z,192,"/// Check whether we\'re in an extern inline function and referring to a\n/// variable or function with internal linkage (C11 6.7.4p3).\n///\n/// This is only a warning because we used to silently accept this code, but\n/// in many cases it will not behave correctly. This is not enabled in C++ mode\n/// because the restriction language is a bit weaker (C++11 [basic.def.odr]p6)\n/// and so while there may still be user mistakes, most of the time we can\'t\n/// prove that there are errors.\nstatic void diagnoseUseOfInternalDeclInInlineFunction(Sema &S, const NamedDecl *D, SourceLocation Loc) {\n S.Diag(Loc, DowngradeWarning ? diag::ext_internal_in_extern_inline_quiet : diag::ext_internal_in_extern_inline) << /*IsVar=*/!UsedFn << D;"}}, | ||
[k]={ | |||
["clang/test/Sema/inline.c"]={"clang/test/Sema/inline.c:14:3: warning: static function \'staticFunction\' is used in an inline function with external linkage [-Wstatic-in-inline]","clang/test/Sema/inline.c:15:9: warning: static variable \'staticStruct\' is used in an inline function with external linkage [-Wstatic-in-inline]","clang/test/Sema/inline.c:16:10: warning: static variable \'staticVar\' is used in an inline function with external linkage [-Wstatic-in-inline]","clang/test/Sema/inline.c:20:3: warning: static function \'staticFunction\' is used in an inline function with external linkage [-Wstatic-in-inline]","clang/test/Sema/inline.c:21:10: warning: static variable \'staticVar\' is used in an inline function with external linkage [-Wstatic-in-inline]","clang/test/Sema/inline.c:70:3: warning: static function \'staticFunction\' is used in an inline function with external linkage [-Wstatic-in-inline]","clang/test/Sema/inline.c:71:10: warning: static variable \'staticVar\' is used in an inline function with external linkage [-Wstatic-in-inline]","XXX.h:2:3: warning: static function \'staticFunction\' is used in an inline function with external linkage [-Wstatic-in-inline]","XXX.h:3:10: warning: static variable \'staticVar\' is used in an inline function with external linkage [-Wstatic-in-inline]"} | |||
} | |||
}, | }, | ||
["ext_internal_in_extern_inline_quiet"]={ | ["ext_internal_in_extern_inline_quiet"]={ | ||
[ | [c]="static ... A is used in an inline function with external linkage [-Wstatic-in-inline]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v,"static-in-inline"}, | |||
[m]="static-in-inline", | |||
[h]="static %select{function|variable}0 %1 is used in an inline function with external linkage", | |||
[b]=o, | [b]=o, | ||
[ | [g]="static (?:function|variable) (.*?) is used in an inline function with external linkage", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wstatic\\-in\\-inline[^\\]]*\\]", | |||
[e]=n, | |||
[i]={nb,1405733957,lb}, | |||
[j]={{z,191,"/// Check whether we\'re in an extern inline function and referring to a\n/// variable or function with internal linkage (C11 6.7.4p3).\n///\n/// This is only a warning because we used to silently accept this code, but\n/// in many cases it will not behave correctly. This is not enabled in C++ mode\n/// because the restriction language is a bit weaker (C++11 [basic.def.odr]p6)\n/// and so while there may still be user mistakes, most of the time we can\'t\n/// prove that there are errors.\nstatic void diagnoseUseOfInternalDeclInInlineFunction(Sema &S, const NamedDecl *D, SourceLocation Loc) {\n S.Diag(Loc, DowngradeWarning ? diag::ext_internal_in_extern_inline_quiet : diag::ext_internal_in_extern_inline) << /*IsVar=*/!UsedFn << D;"}} | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_keyword_as_ident"]={ | ["ext_keyword_as_ident"]={ | ||
[ | [c]="keyword \'A\' will be made available as an identifier ... [-Wkeyword-compat]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"keyword-compat"}, | |||
[m]="keyword-compat", | |||
[h]="keyword \'%0\' will be made available as an identifier %select{here|for the remainder of the translation unit}1", | |||
[b]=o, | [b]=o, | ||
[ | [g]="keyword \'(.*?)\' will be made available as an identifier (?:here|for the remainder of the translation unit)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wkeyword\\-compat[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"47642d2b7ea1",1386051181,"Emit an extension warning when changing system header tokens"}, | [i]={"47642d2b7ea1",1386051181,"Emit an extension warning when changing system header tokens"}, | ||
[j]={{ub,1770,"#include \"clang/Basic/TransformTypeTraits.def\"\n // HACK: libstdc++ uses some of the transform-type-traits as alias\n // templates, so we need to work around this.\n if (!NextToken().is(tok::l_paren)) {\n Diag(Tok, diag::ext_keyword_as_ident) << Tok.getIdentifierInfo()->getName() << 0;"},{ | [j]={{ub,1770,"#include \"clang/Basic/TransformTypeTraits.def\"\n // HACK: libstdc++ uses some of the transform-type-traits as alias\n // templates, so we need to work around this.\n if (!NextToken().is(tok::l_paren)) {\n Diag(Tok, diag::ext_keyword_as_ident) << Tok.getIdentifierInfo()->getName() << 0;"},{wb,3134,"#include \"clang/Basic/TransformTypeTraits.def\"\n if (!NextToken().is(tok::l_paren)) {\n Diag(Tok, diag::ext_keyword_as_ident) << Tok.getIdentifierInfo()->getName() << 0;"},{yb,1915,"bool Parser::TryKeywordIdentFallback(bool DisableKeyword) {\n Diag(Tok, diag::ext_keyword_as_ident) << PP.getSpelling(Tok) << DisableKeyword;"},{xb,274,"#include \"clang/Basic/TransformTypeTraits.def\"\n if (NextToken().is(tok::less)) {\n Diag(Tok, diag::ext_keyword_as_ident) << Tok.getIdentifierInfo()->getName() << 0;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/libstdcxx_is_pod_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_is_pod_hack.cpp:10:8: warning: keyword \'__is_pod\' will be made available as an identifier for the remainder of the translation unit [-Wkeyword-compat]","clang/test/SemaCXX/libstdcxx_is_pod_hack.cpp:18:8: warning: keyword \'__is_same\' will be made available as an identifier for the remainder of the translation unit [-Wkeyword-compat]","clang/test/SemaCXX/libstdcxx_is_pod_hack.cpp:27:21: warning: keyword \'__is_signed\' will be made available as an identifier for the remainder of the translation unit [-Wkeyword-compat]"} | |||
} | |||
}, | }, | ||
["ext_lambda_missing_parens"]={ | ["ext_lambda_missing_parens"]={ | ||
[ | [c]="lambda without a parameter clause is a C++23 extension [-Wc++23-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={fb,Eb}, | |||
[m]=fb, | |||
[h]="lambda without a parameter clause is a C++23 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="lambda without a parameter clause is a C\\+\\+23 extension", | ||
[a]=Fb, | |||
[e]=y, | |||
[i]={tb,1612659633,vb}, | |||
[j]={{wb,1511,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n if (HasSpecifiers && !HasParentheses && !getLangOpts().CPlusPlus23) {\n Diag(Tok, diag::ext_lambda_missing_parens) << FixItHint::CreateInsertion(Tok.getLocation(), \"() \");"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Parser/cxx-concepts-requires-clause.cpp"]={"clang/test/Parser/cxx-concepts-requires-clause.cpp:167:19: warning: lambda without a parameter clause is a C++23 extension [-Wc++23-extensions]"} | ||
[i]={tb,1612659633, | } | ||
[j]={{ | |||
}, | }, | ||
["ext_lambda_template_parameter_list"]={ | ["ext_lambda_template_parameter_list"]={ | ||
[ | [c]="explicit template parameter list for lambdas is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="explicit template parameter list for lambdas is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="explicit template parameter list for lambdas is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"8205a814a691",1556966986,"[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas"}, | [i]={"8205a814a691",1556966986,"[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas"}, | ||
[j]={{ | [j]={{wb,1331,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\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);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/cxx1y-generic-lambdas-variadics.cpp"]={"clang/test/SemaCXX/cxx1y-generic-lambdas-variadics.cpp:138:12: warning: explicit template parameter list for lambdas is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/cxx1y-generic-lambdas-variadics.cpp:139:12: warning: explicit template parameter list for lambdas is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/cxx1y-generic-lambdas-variadics.cpp:140:12: warning: explicit template parameter list for lambdas is a C++20 extension [-Wc++20-extensions]"} | |||
} | |||
}, | }, | ||
["ext_line_comment"]={ | ["ext_line_comment"]={ | ||
[ | [c]="// comments are not allowed in this language [-Wcomment]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={jb,qb,rc,"comments",sb,v}, | |||
[m]=rc, | |||
[h]="// comments are not allowed in this language", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\\/\\/ comments are not allowed in this language", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wcomment[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"158a31abe2c2",1352617334,"s/BCPLComment/LineComment/"}, | [i]={"158a31abe2c2",1352617334,"s/BCPLComment/LineComment/"}, | ||
[j]={{ | [j]={{ab,2444,"/// 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 // If Line comments aren\'t explicitly enabled for this language, emit an\n // extension warning.\n if (!LineComment) {\n if (!isLexingRawMode()) // There\'s no PP in raw mode, so can\'t emit diags.\n Diag(BufferPtr, diag::ext_line_comment);"}}, | ||
[k]={ | |||
["clang/test/Lexer/c90.c"]={"clang/test/Lexer/c90.c:12:1: error: // comments are not allowed in this language [-Werror,-Wcomment]"} | |||
} | |||
}, | }, | ||
["ext_main_returns_nonint"]={ | ["ext_main_returns_nonint"]={ | ||
[ | [c]="return type of \'main\' is not \'int\' [-Wmain-return-type]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"main-return-type"}, | |||
[m]="main-return-type", | |||
[h]="return type of \'main\' is not \'int\'", | |||
[b]=o, | [b]=o, | ||
[ | [g]="return type of \'main\' is not \'int\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmain\\-return\\-type[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"5ed3caf2e364",1329249052,"Warn about non-int main() results in GNU C mode instead of erroring."}, | [i]={"5ed3caf2e364",1329249052,"Warn about non-int main() results in GNU C mode instead of erroring."}, | ||
[j]={{ | [j]={{x,12128,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n if (getLangOpts().GNUMode && !getLangOpts().CPlusPlus) {\n // GCC in C mode accepts qualified \'int\'.\n if (Context.hasSameUnqualifiedType(FT->getReturnType(), Context.IntTy))\n else {\n Diag(FD->getTypeSpecStartLoc(), diag::ext_main_returns_nonint);"}}, | ||
[k]={ | |||
["clang/test/Sema/gnu89.c"]={"clang/test/Sema/gnu89.c:5:1: warning: return type of \'main\' is not \'int\' [-Wmain-return-type]"} | |||
} | |||
}, | }, | ||
["ext_main_used"]={ | ["ext_main_used"]={ | ||
[ | [c]="ISO C++ does not allow \'main\' to be used by a program [-Wmain]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={gc,v}, | |||
[m]=gc, | |||
[h]="ISO C++ does not allow \'main\' to be used by a program", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+ does not allow \'main\' to be used by a program", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"b63b6ee9a00e",1390354999,"Enforce restrictions that \'main\' is not allowed to be deleted, or to be used by"}, | [i]={"b63b6ee9a00e",1390354999,"Enforce restrictions that \'main\' is not allowed to be deleted, or to be used by"}, | ||
[j]={{ | [j]={{z,249,"/// 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 if (getLangOpts().CPlusPlus && isa<FunctionDecl>(D)) {\n // C++ [basic.start.main]p3:\n // The function \'main\' shall not be used within a program.\n if (cast<FunctionDecl>(D)->isMain())\n Diag(Loc, diag::ext_main_used);"}}, | ||
[k]={ | |||
["clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp"]={"clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp:19:32: error: ISO C++ does not allow \'main\' to be used by a program [-Werror,-Wmain]","clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp:22:5: error: ISO C++ does not allow \'main\' to be used by a program [-Werror,-Wmain]"} | |||
} | |||
}, | }, | ||
["ext_many_braces_around_init"]={ | ["ext_many_braces_around_init"]={ | ||
[ | [c]="too many braces around ...initializer [-Wmany-braces-around-scalar-init]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"many-braces-around-scalar-init"}, | |||
[m]="many-braces-around-scalar-init", | |||
[h]="too many braces around %select{scalar |}0initializer", | |||
[b]=o, | [b]=o, | ||
[ | [g]="too many braces around (?:scalar |)initializer", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmany\\-braces\\-around\\-scalar\\-init[^\\]]*\\]", | |||
[e]=n, | |||
[i]={Jb,1576908663,Ib}, | |||
[j]={{U,1655,"void InitListChecker::CheckScalarType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n if (InitListExpr *SubIList = dyn_cast<InitListExpr>(expr)) {\n // FIXME: This is invalid, and accepting it causes overload resolution\n // to pick the wrong overload in some corner cases.\n if (!VerifyOnly)\n SemaRef.Diag(SubIList->getBeginLoc(), diag::ext_many_braces_around_init) << DeclType->isSizelessBuiltinType() << SubIList->getSourceRange();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Sema/array-init.c"]={"clang/test/Sema/array-init.c:225:11: warning: too many braces around scalar initializer [-Wmany-braces-around-scalar-init]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_mathematical_notation"]={ | ["ext_mathematical_notation"]={ | ||
[ | [c]="mathematical notation character <U+A> in an identifier is a Clang extension [-Wmathematical-notation-identifier-extension]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"mathematical-notation-identifier-extension"}, | |||
[m]="mathematical-notation-identifier-extension", | |||
[h]="mathematical notation character <U+%0> in an identifier is a Clang extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="mathematical notation character \\<U\\+(.*?)\\> in an identifier is a Clang extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmathematical\\-notation\\-identifier\\-extension[^\\]]*\\]", | |||
[e]=B, | |||
[i]={O,1625925174,N}, | |||
[j]={{ab,1556,"static void diagnoseExtensionInIdentifier(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range) {\n Diags.Report(Range.getBegin(), diag::ext_mathematical_notation) << codepointAsHexString(C) << Range;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Lexer/unicode.c"]={"clang/test/Lexer/unicode.c:49:12: warning: mathematical notation character <U+1D6DB> in an identifier is a Clang extension [-Wmathematical-notation-identifier-extension]","clang/test/Lexer/unicode.c:53:6: warning: mathematical notation character <U+00B9> in an identifier is a Clang extension [-Wmathematical-notation-identifier-extension]","clang/test/Lexer/unicode.c:53:9: warning: mathematical notation character <U+208D> in an identifier is a Clang extension [-Wmathematical-notation-identifier-extension]","clang/test/Lexer/unicode.c:53:12: warning: mathematical notation character <U+2084> in an identifier is a Clang extension [-Wmathematical-notation-identifier-extension]","clang/test/Lexer/unicode.c:53:15: warning: mathematical notation character <U+2082> in an identifier is a Clang extension [-Wmathematical-notation-identifier-extension]","clang/test/Lexer/unicode.c:53:18: warning: mathematical notation character <U+208E> in an identifier is a Clang extension [-Wmathematical-notation-identifier-extension]","clang/test/Lexer/unicode.c:53:21: warning: mathematical notation character <U+2207> in an identifier is a Clang extension [-Wmathematical-notation-identifier-extension]","clang/test/Lexer/unicode.c:55:5: warning: mathematical notation character <U+221E> in an identifier is a Clang extension [-Wmathematical-notation-identifier-extension]","clang/test/Lexer/unicode.c:56:5: warning: mathematical notation character <U+1D7C3> in an identifier is a Clang extension [-Wmathematical-notation-identifier-extension]","clang/test/Lexer/unicode.c:59:6: warning: mathematical notation character <U+208C> in an identifier is a Clang extension [-Wmathematical-notation-identifier-extension]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_member_redeclared"]={ | ["ext_member_redeclared"]={ | ||
[ | [c]="class member cannot be redeclared [-Wredeclared-class-member]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={L,"redeclared-class-member"}, | |||
[m]="redeclared-class-member", | |||
[h]="class member cannot be redeclared", | |||
[b]=o, | [b]=o, | ||
[ | [g]="class member cannot be redeclared", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wredeclared\\-class\\-member[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"55890bfaa6c2",1370922683,"Implement DR85: Redeclaration of member is forbidden"}, | [i]={"55890bfaa6c2",1370922683,"Implement DR85: Redeclaration of member is forbidden"}, | ||
[j]={{ | [j]={{x,17285,"/// This is invoked when we see \'struct foo\' or \'struct {\'. In the\n/// former case, Name will be non-null. In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n if (!Previous.empty()) {\n if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n // If this is a use of a previous tag, or if the tag is already declared\n // in the same scope (so that the definition/declaration completes or\n // rementions the tag), reuse the decl.\n if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n // C++11 [class.mem]p1:\n // A member shall not be declared twice in the member-specification,\n // except that a nested class or member class template can be declared\n // and then later defined.\n if (TUK == TUK_Declaration && PrevDecl->isCXXClassMember() && S->isDeclScope(PrevDecl)) {\n Diag(NameLoc, diag::ext_member_redeclared);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/access.cpp"]={"clang/test/SemaCXX/access.cpp:32:11: warning: class member cannot be redeclared [-Wredeclared-class-member]"} | |||
} | |||
}, | }, | ||
["ext_mismatched_exception_spec"]={ | ["ext_mismatched_exception_spec"]={ | ||
[ | [c]="exception specification in declaration does not match previous declaration [-Wmicrosoft-exception-spec]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,Hb}, | |||
[m]=Hb, | |||
[h]="exception specification in declaration does not match previous declaration", | |||
[b]=o, | [b]=o, | ||
[ | [g]="exception specification in declaration does not match previous declaration", | ||
[a]=Pc, | |||
[e]=n, | |||
[ | [i]={nb,1405733957,lb}, | ||
[ | [j]={{Ab,314,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n if (getLangOpts().MSVCCompat) {\n DiagID = diag::ext_mismatched_exception_spec;"},{Ab,506,"/// CheckEquivalentExceptionSpec - Check if the two types have equivalent\n/// exception specifications. Exception specifications are equivalent if\n/// they allow exactly the same set of exception types. It does not matter how\n/// that is achieved. See C++ [except.spec]p2.\nbool Sema::CheckEquivalentExceptionSpec(const FunctionProtoType *Old, SourceLocation OldLoc, const FunctionProtoType *New, SourceLocation NewLoc) {\n if (getLangOpts().MSVCCompat)\n DiagID = diag::ext_mismatched_exception_spec;"}}, | ||
[k]={ | |||
["clang/test/CodeGenCXX/pr18661.cpp"]={"clang/test/CodeGenCXX/pr18661.cpp:7:8: warning: exception specification in declaration does not match previous declaration [-Wmicrosoft-exception-spec]"} | |||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_mismatched_exception_spec_explicit_instantiation"]={ | ["ext_mismatched_exception_spec_explicit_instantiation"]={ | ||
[ | [c]="exception specification in explicit instantiation does not match instantiated one [-Wmicrosoft-exception-spec]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,Hb}, | |||
[m]=Hb, | |||
[h]="exception specification in explicit instantiation does not match instantiated one", | |||
[b]=o, | [b]=o, | ||
[ | [g]="exception specification in explicit instantiation does not match instantiated one", | ||
[a]=Pc, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"73983918c45b",1415268650,"Fix for exception specification mismatch in explicit instantiation."}, | [i]={"73983918c45b",1415268650,"Fix for exception specification mismatch in explicit instantiation."}, | ||
[j]={{ | [j]={{F,10669,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n // C++11 [except.spec]p4\n // In an explicit instantiation an exception-specification may be specified,\n // but is not required.\n // If an exception-specification is specified in an explicit instantiation\n // directive, it shall be compatible with the exception-specifications of\n // other declarations of that function.\n if (auto *FPT = R->getAs<FunctionProtoType>())\n if (FPT->hasExceptionSpec()) {\n if (getLangOpts().MicrosoftExt)\n DiagID = diag::ext_mismatched_exception_spec_explicit_instantiation;"}} | ||
}, | }, | ||
["ext_missing_exception_specification"]={ | ["ext_missing_exception_specification"]={ | ||
[ | [c]="A is missing exception specification \'B\' [-Wmissing-exception-spec]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"missing-exception-spec"}, | |||
[m]="missing-exception-spec", | |||
[h]="%0 is missing exception specification \'%1\'", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(.*?) is missing exception specification \'(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-exception\\-spec[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"a91de375f278",1443574130,"Promote a warning on ill-formed code (redeclaration missing an exception"}, | [i]={"a91de375f278",1443574130,"Promote a warning on ill-formed code (redeclaration missing an exception"}, | ||
[j]={{ | [j]={{Ab,401,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n if (getLangOpts().MSVCCompat && isDynamicExceptionSpec(ESI.Type)) {\n DiagID = diag::ext_missing_exception_specification;"},{Ab,407,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n if (getLangOpts().MSVCCompat && isDynamicExceptionSpec(ESI.Type)) {\n } else if (New->isReplaceableGlobalAllocationFunction() && ESI.Type != EST_DependentNoexcept) {\n DiagID = diag::ext_missing_exception_specification;"},{Ab,416,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n if (getLangOpts().MSVCCompat && isDynamicExceptionSpec(ESI.Type)) {\n } else if (New->isReplaceableGlobalAllocationFunction() && ESI.Type != EST_DependentNoexcept) {\n } else if (ESI.Type == EST_NoThrow) {\n DiagID = diag::ext_missing_exception_specification;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/nothrow-vs-exception-specs.cpp"]={"clang/test/SemaCXX/nothrow-vs-exception-specs.cpp:83:12: warning: \'bar\' is missing exception specification \'__attribute__((nothrow))\' [-Wmissing-exception-spec]"} | |||
} | |||
}, | }, | ||
["ext_missing_type_specifier"]={ | ["ext_missing_type_specifier"]={ | ||
[ | [c]="type specifier missing, defaults to \'int\'; ISO C99 and later do not support implicit int [-Wimplicit-int]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={jb,qb,Ec,"implicit-int",sb}, | ||
[ | [m]="implicit-int", | ||
[ | [h]="type specifier missing, defaults to \'int\'; ISO C99 and later do not support implicit int", | ||
[ | [b]=R, | ||
[ | [g]="type specifier missing, defaults to \'int\'; ISO C99 and later do not support implicit int", | ||
[ | [a]=" \\[[^\\]]*\\-Wimplicit\\-int[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"aef810900a7a",1244031721,"Minor cleanup for implicit int warnings."}, | [i]={"aef810900a7a",1244031721,"Minor cleanup for implicit int warnings."}, | ||
[j]={{ | [j]={{S,1384,"/// 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 case DeclSpec::TST_unspecified:\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 } else if (!DS.hasTypeSpecifier()) {\n // C99 and C++ require a type specifier. For example, C99 6.7.2p2 says:\n // \"At least one type specifier shall be given in the declaration\n // specifiers in each declaration, and in the specifier-qualifier list in\n // each struct declaration and type name.\"\n if (!S.getLangOpts().isImplicitIntAllowed() && !DS.isTypeSpecPipe()) {\n } else if (S.getLangOpts().getOpenCLCompatibleVersion() >= 200 && DS.isTypeSpecPipe()) {\n } else {\n S.Diag(DeclLoc, diag::ext_missing_type_specifier) << DS.getSourceRange() << FixItHint::CreateInsertion(DS.getBeginLoc(), \"int\");"}}, | ||
[k]={ | |||
["clang/test/Sema/crash-invalid-builtin.c"]={"clang/test/Sema/crash-invalid-builtin.c:4:1: error: type specifier missing, defaults to \'int\'; ISO C99 and later do not support implicit int [-Wimplicit-int]"} | |||
} | |||
}, | }, | ||
["ext_missing_varargs_arg"]={ | ["ext_missing_varargs_arg"]={ | ||
[ | [c]="must specify at least one argument for \'...\' parameter of variadic macro [-Wgnu-zero-variadic-macro-arguments]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-zero-variadic-macro-arguments",v}, | |||
[m]="gnu-zero-variadic-macro-arguments", | |||
[h]="must specify at least one argument for \'...\' parameter of variadic macro", | |||
[b]=o, | [b]=o, | ||
[ | [g]="must specify at least one argument for \'\\.\\.\\.\' parameter of variadic macro", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-zero\\-variadic\\-macro\\-arguments[^\\]]*\\]", | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[j]={{"clang/lib/Lex/PPMacroExpansion.cpp",1001,"/// 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 if (NumActuals < MinArgsExpected) {\n // There are several cases where too few arguments is ok, handle them now.\n if (NumActuals == 0 && MinArgsExpected == 1) {\n } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected || // A(x, ...) -> A(X)\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 Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_missing_varargs_arg : diag::ext_missing_varargs_arg);"}}, | |||
[k]={ | |||
[ | ["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:40:10: warning: must specify at least one argument for \'...\' parameter of variadic macro [-Wgnu-zero-variadic-macro-arguments]","clang/test/Preprocessor/macro_fn.c:41:9: warning: must specify at least one argument for \'...\' parameter of variadic macro [-Wgnu-zero-variadic-macro-arguments]"} | ||
[ | } | ||
[i]={ | |||
[j]={{"clang/lib/Lex/PPMacroExpansion.cpp",1001,"/// 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 if (NumActuals < MinArgsExpected) {\n // There are several cases where too few arguments is ok, handle them now.\n if (NumActuals == 0 && MinArgsExpected == 1) {\n } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected || // A(x, ...) -> A(X)\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 Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_missing_varargs_arg : diag::ext_missing_varargs_arg);"}} | |||
}, | }, | ||
["ext_missing_whitespace_after_macro_name"]={ | ["ext_missing_whitespace_after_macro_name"]={ | ||
[ | [c]="whitespace required after macro name", | ||
[ | [d]=q, | ||
[f]=p, | |||
[h]="whitespace required after macro name", | |||
[b]=o, | [b]=o, | ||
[ | [g]="whitespace required after macro name", | ||
[ | [a]=Mb, | ||
[e]=B, | |||
[ | |||
[i]={"2425bcb49ae4",1240021405,"enforce requirements imposed by C90 6.8 TC1, fixing PR3919."}, | [i]={"2425bcb49ae4",1240021405,"enforce requirements imposed by C90 6.8 TC1, fixing PR3919."}, | ||
[j]={{W,2875,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\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 } else if (Tok.hasLeadingSpace()) {\n } else if (Tok.is(tok::l_paren)) {\n } else if (LangOpts.C99 || LangOpts.CPlusPlus11) {\n } else {\n if (isInvalid)\n Diag(Tok, diag::ext_missing_whitespace_after_macro_name);"}} | [j]={{W,2875,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\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 } else if (Tok.hasLeadingSpace()) {\n } else if (Tok.is(tok::l_paren)) {\n } else if (LangOpts.C99 || LangOpts.CPlusPlus11) {\n } else {\n if (isInvalid)\n Diag(Tok, diag::ext_missing_whitespace_after_macro_name);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/c90.c"]={"clang/test/Preprocessor/c90.c:7:12: warning: whitespace required after macro name"} | |||
} | |||
}, | }, | ||
["ext_mixed_decls_code"]={ | ["ext_mixed_decls_code"]={ | ||
[ | [c]="mixing declarations and code is a C99 extension [-Wdeclaration-after-statement]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"declaration-after-statement",v}, | |||
[m]="declaration-after-statement", | |||
[h]="mixing declarations and code is a C99 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="mixing declarations and code is a C99 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdeclaration\\-after\\-statement[^\\]]*\\]", | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[ | [j]={{Ob,420,"StmtResult Sema::ActOnCompoundStmt(SourceLocation L, SourceLocation R, ArrayRef<Stmt *> Elts, bool isStmtExpr) {\n const unsigned MixedDeclsCodeID = getLangOpts().C99 ? diag::warn_mixed_decls_code : diag::ext_mixed_decls_code;"}}, | ||
[k]={ | |||
[mc]={"clang/test/Sema/c89.c:7:9: warning: mixing declarations and code is a C99 extension [-Wdeclaration-after-statement]","clang/test/Sema/c89.c:12:9: warning: mixing declarations and code is a C99 extension [-Wdeclaration-after-statement]","clang/test/Sema/c89.c:17:23: warning: mixing declarations and code is a C99 extension [-Wdeclaration-after-statement]"} | |||
[ | } | ||
[i]={ | |||
[j]={{Ob,420,"StmtResult Sema::ActOnCompoundStmt(SourceLocation L, SourceLocation R, ArrayRef<Stmt *> Elts, bool isStmtExpr) {\n const unsigned MixedDeclsCodeID = getLangOpts().C99 ? diag::warn_mixed_decls_code : diag::ext_mixed_decls_code;"}} | |||
}, | }, | ||
["ext_module_import_in_extern_c"]={ | ["ext_module_import_in_extern_c"]={ | ||
[ | [c]="import of C++ module \'A\' appears within extern \"C\" language linkage specification [-Wmodule-import-in-extern-c]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"module-import-in-extern-c"}, | ||
[ | [m]="module-import-in-extern-c", | ||
[ | [h]="import of C++ module \'%0\' appears within extern \"C\" language linkage specification", | ||
[ | [b]=R, | ||
[ | [g]="import of C\\+\\+ module \'(.*?)\' appears within extern \"C\" language linkage specification", | ||
[ | [a]=" \\[[^\\]]*\\-Wmodule\\-import\\-in\\-extern\\-c[^\\]]*\\]", | ||
[ | [e]=Gc, | ||
[i]={"e69bdd10ead6",1444696780,"[modules] Allow the error on importing a C++ module within an extern \"C\""}, | [i]={"e69bdd10ead6",1444696780,"[modules] Allow the error on importing a C++ module within an extern \"C\""}, | ||
[j]={{"clang/lib/Sema/SemaModule.cpp",54,"static void checkModuleImportContext(Sema &S, Module *M, SourceLocation ImportLoc, DeclContext *DC, bool FromInclude = false) {\n if (!isa<TranslationUnitDecl>(DC)) {\n } else if (!M->IsExternC && ExternCLoc.isValid()) {\n S.Diag(ImportLoc, diag::ext_module_import_in_extern_c) << M->getFullModuleName();"}} | [j]={{"clang/lib/Sema/SemaModule.cpp",54,"static void checkModuleImportContext(Sema &S, Module *M, SourceLocation ImportLoc, DeclContext *DC, bool FromInclude = false) {\n if (!isa<TranslationUnitDecl>(DC)) {\n } else if (!M->IsExternC && ExternCLoc.isValid()) {\n S.Diag(ImportLoc, diag::ext_module_import_in_extern_c) << M->getFullModuleName();"}}, | ||
[k]={ | |||
["clang/test/Modules/auto-module-import.m"]={"clang/test/Modules/auto-module-import.m:98:1: error: import of C++ module \'NoUmbrella.A\' appears within extern \"C\" language linkage specification [-Wmodule-import-in-extern-c]"} | |||
} | |||
}, | }, | ||
["ext_module_import_not_at_top_level_noop"]={ | ["ext_module_import_not_at_top_level_noop"]={ | ||
[ | [c]="redundant #include of module \'A\' appears within B [-Wmodules-import-nested-redundant]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"modules-import-nested-redundant"}, | ||
[ | [m]="modules-import-nested-redundant", | ||
[ | [h]="redundant #include of module \'%0\' appears within %1", | ||
[ | [b]=R, | ||
[ | [g]="redundant \\#include of module \'(.*?)\' appears within (.*?)", | ||
[ | [a]=" \\[[^\\]]*\\-Wmodules\\-import\\-nested\\-redundant[^\\]]*\\]", | ||
[ | [e]=Gc, | ||
[i]={"752ada870d7b",1447803121,"[modules] When a #include is mapped to a module import and appears somewhere"}, | [i]={"752ada870d7b",1447803121,"[modules] When a #include is mapped to a module import and appears somewhere"}, | ||
[j]={{"clang/lib/Sema/SemaModule.cpp",47,"static void checkModuleImportContext(Sema &S, Module *M, SourceLocation ImportLoc, DeclContext *DC, bool FromInclude = false) {\n if (!isa<TranslationUnitDecl>(DC)) {\n S.Diag(ImportLoc, (FromInclude && S.isModuleVisible(M)) ? diag::ext_module_import_not_at_top_level_noop : diag::err_module_import_not_at_top_level_fatal) << M->getFullModuleName() << DC;"}} | [j]={{"clang/lib/Sema/SemaModule.cpp",47,"static void checkModuleImportContext(Sema &S, Module *M, SourceLocation ImportLoc, DeclContext *DC, bool FromInclude = false) {\n if (!isa<TranslationUnitDecl>(DC)) {\n S.Diag(ImportLoc, (FromInclude && S.isModuleVisible(M)) ? diag::ext_module_import_not_at_top_level_noop : diag::err_module_import_not_at_top_level_fatal) << M->getFullModuleName() << DC;"}}, | ||
[k]={ | |||
["clang/test/Modules/redundant-include.mm"]={"clang/test/Modules/redundant-include.mm:7:3: error: redundant #include of module \'cxx_library\' appears within function \'includeNotAtTopLevel\' [-Wmodules-import-nested-redundant]","clang/test/Modules/redundant-include.mm:11:3: error: redundant #include of module \'cxx_library\' appears within namespace \'NS\' [-Wmodules-import-nested-redundant]"} | |||
} | |||
}, | }, | ||
["ext_ms_abstract_keyword"]={ | ["ext_ms_abstract_keyword"]={ | ||
[ | [c]="\'abstract\' keyword is a Microsoft extension [-Wmicrosoft-abstract]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-abstract"}, | |||
[m]="microsoft-abstract", | |||
[h]="\'abstract\' keyword is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'abstract\' keyword is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-abstract[^\\]]*\\]", | |||
[e]=y, | |||
[ | [i]={tb,1612659633,vb}, | ||
[j]={{M,2467,"/// 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 if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n } else if (Specifier == VirtSpecifiers::VS_Sealed) {\n } else if (Specifier == VirtSpecifiers::VS_Abstract) {\n Diag(Tok.getLocation(), diag::ext_ms_abstract_keyword);"},{M,3534,"/// 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 // Parse the optional \'final\' keyword.\n if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n while (true) {\n if (TagType == DeclSpec::TST_interface)\n else if (Specifier == VirtSpecifiers::VS_Final)\n else if (Specifier == VirtSpecifiers::VS_Sealed)\n else if (Specifier == VirtSpecifiers::VS_Abstract)\n Diag(AbstractLoc, diag::ext_ms_abstract_keyword);"}}, | |||
[k]={ | |||
[ | [Kc]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:479:21: warning: \'abstract\' keyword is a Microsoft extension [-Wmicrosoft-abstract]","clang/test/SemaCXX/MicrosoftExtensions.cpp:490:30: warning: \'abstract\' keyword is a Microsoft extension [-Wmicrosoft-abstract]","clang/test/SemaCXX/MicrosoftExtensions.cpp:516:36: warning: \'abstract\' keyword is a Microsoft extension [-Wmicrosoft-abstract]","clang/test/SemaCXX/MicrosoftExtensions.cpp:524:30: warning: \'abstract\' keyword is a Microsoft extension [-Wmicrosoft-abstract]","clang/test/SemaCXX/MicrosoftExtensions.cpp:524:30: warning: \'abstract\' keyword is a Microsoft extension [-Wmicrosoft-abstract]","clang/test/SemaCXX/MicrosoftExtensions.cpp:532:20: warning: \'abstract\' keyword is a Microsoft extension [-Wmicrosoft-abstract]","clang/test/SemaCXX/MicrosoftExtensions.cpp:534:12: warning: \'abstract\' keyword is a Microsoft extension [-Wmicrosoft-abstract]","clang/test/SemaCXX/MicrosoftExtensions.cpp:537:20: warning: \'abstract\' keyword is a Microsoft extension [-Wmicrosoft-abstract]","clang/test/SemaCXX/MicrosoftExtensions.cpp:543:20: warning: \'abstract\' keyword is a Microsoft extension [-Wmicrosoft-abstract]"} | ||
[i]={tb,1612659633, | } | ||
[j]={{ | |||
}, | }, | ||
["ext_ms_ambiguous_direct_base"]={ | ["ext_ms_ambiguous_direct_base"]={ | ||
[ | [c]="accessing inaccessible direct base A of B is a Microsoft extension [-Wmicrosoft-inaccessible-base]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"microsoft-inaccessible-base"}, | |||
[m]="microsoft-inaccessible-base", | |||
[h]="accessing inaccessible direct base %0 of %1 is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="accessing inaccessible direct base (.*?) of (.*?) is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-inaccessible\\-base[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"2e87a21c7cac",1509144521,"[MS] Allow access to ambiguous, inaccessible direct bases"}, | [i]={"2e87a21c7cac",1509144521,"[MS] Allow access to ambiguous, inaccessible direct bases"}, | ||
[j]={{ | [j]={{A,3108,"/// CheckDerivedToBaseConversion - Check whether the Derived-to-Base\n/// conversion (where Derived and Base are class types) is\n/// well-formed, meaning that the conversion is unambiguous (and\n/// that all of the base classes are accessible). Returns true\n/// and emits a diagnostic if the code is ill-formed, returns false\n/// otherwise. Loc is the location where this routine should point to\n/// if there is an error, and Range is the source range to highlight\n/// if there is an error.\n///\n/// If either InaccessibleBaseID or AmbiguousBaseConvID are 0, then the\n/// diagnostic for the respective type of error will be suppressed, but the\n/// check for ill-formed code will still be performed.\nbool Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base, unsigned InaccessibleBaseID, unsigned AmbiguousBaseConvID, SourceLocation Loc, SourceRange Range, DeclarationName Name, CXXCastPath *BasePath, bool IgnoreAccess) {\n // For MSVC compatibility, check if Derived directly inherits from Base. Clang\n // warns about this hierarchy under -Winaccessible-base, but MSVC allows the\n // user to access such bases.\n if (!Path && getLangOpts().MSVCCompat) {\n for (const CXXBasePath &PossiblePath : Paths) {\n if (PossiblePath.size() == 1) {\n if (AmbiguousBaseConvID)\n Diag(Loc, diag::ext_ms_ambiguous_direct_base) << Base << Derived << Range;"}}, | ||
[k]={ | |||
["clang/test/CodeGenCXX/microsoft-inaccessible-base.cpp"]={"clang/test/CodeGenCXX/microsoft-inaccessible-base.cpp:9:39: warning: accessing inaccessible direct base \'A\' of \'C\' is a Microsoft extension [-Wmicrosoft-inaccessible-base]","clang/test/CodeGenCXX/microsoft-inaccessible-base.cpp:17:39: warning: accessing inaccessible direct base \'A\' of \'D\' is a Microsoft extension [-Wmicrosoft-inaccessible-base]"} | |||
} | |||
}, | }, | ||
["ext_ms_anonymous_record"]={ | ["ext_ms_anonymous_record"]={ | ||
[ | [c]="anonymous ... are a Microsoft extension [-Wmicrosoft-anon-tag]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-anon-tag"}, | |||
[m]="microsoft-anon-tag", | |||
[h]="anonymous %select{structs|unions}0 are a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="anonymous (?:structs|unions) are a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-anon\\-tag[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"8f0ed914902f",1407742194,"Sema: Handle declspecs without declarators in records properly in C mode"}, | [i]={"8f0ed914902f",1407742194,"Sema: Handle declspecs without declarators in records properly in C mode"}, | ||
[j]={{ | [j]={{x,5215,"/// 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 // C11 6.7.2.1p2:\n // A struct-declaration that does not declare an anonymous structure or\n // anonymous union shall contain a struct-declarator-list.\n //\n // This rule also existed in C89 and C99; the grammar for struct-declaration\n // did not permit a struct-declaration without a struct-declarator-list.\n if (!getLangOpts().CPlusPlus && CurContext->isRecord() && DS.getStorageClassSpec() == DeclSpec::SCS_unspecified) {\n // Check for Microsoft C extension: anonymous struct/union member.\n // Handle 2 kinds of anonymous struct/union:\n // struct STRUCT;\n // union UNION;\n // and\n // STRUCT_TYPE; <- where STRUCT_TYPE is a typedef struct.\n // UNION_TYPE; <- where UNION_TYPE is a typedef union.\n if ((Tag && Tag->getDeclName()) || DS.getTypeSpecType() == DeclSpec::TST_typename) {\n if (Record && getLangOpts().MicrosoftExt) {\n Diag(DS.getBeginLoc(), diag::ext_ms_anonymous_record) << Record->isUnion() << DS.getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/Sema/MicrosoftExtensions.c"]={"clang/test/Sema/MicrosoftExtensions.c:46:3: warning: anonymous structs are a Microsoft extension [-Wmicrosoft-anon-tag]","clang/test/Sema/MicrosoftExtensions.c:53:3: warning: anonymous structs are a Microsoft extension [-Wmicrosoft-anon-tag]","clang/test/Sema/MicrosoftExtensions.c:56:3: warning: anonymous unions are a Microsoft extension [-Wmicrosoft-anon-tag]","clang/test/Sema/MicrosoftExtensions.c:67:3: warning: anonymous structs are a Microsoft extension [-Wmicrosoft-anon-tag]","clang/test/Sema/MicrosoftExtensions.c:68:3: warning: anonymous unions are a Microsoft extension [-Wmicrosoft-anon-tag]","clang/test/Sema/MicrosoftExtensions.c:109:3: warning: anonymous structs are a Microsoft extension [-Wmicrosoft-anon-tag]","clang/test/Sema/MicrosoftExtensions.c:113:3: warning: anonymous structs are a Microsoft extension [-Wmicrosoft-anon-tag]"} | |||
} | |||
}, | }, | ||
["ext_ms_c_enum_fixed_underlying_type"]={ | ["ext_ms_c_enum_fixed_underlying_type"]={ | ||
[ | [c]="enumeration types with a fixed underlying type are a Microsoft extension [-Wmicrosoft-fixed-enum]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={G,"microsoft-fixed-enum",v}, | |||
[m]="microsoft-fixed-enum", | |||
[h]="enumeration types with a fixed underlying type are a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="enumeration types with a fixed underlying type are a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-fixed\\-enum[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"6f11db137034",1538166298,"Support enums with a fixed underlying type in all language modes."}, | [i]={"6f11db137034",1538166298,"Support enums with a fixed underlying type in all language modes."}, | ||
[j]={{ | [j]={{H,4946,"/// 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 // Parse the fixed underlying type.\n if (Tok.is(tok::colon)) {\n if (CanBeBitfield && !isEnumBase(CanBeOpaqueEnumDeclaration)) {\n } else if (CanHaveEnumBase || !ColonIsSacred) {\n if (!getLangOpts().ObjC) {\n if (getLangOpts().CPlusPlus11)\n else if (getLangOpts().CPlusPlus)\n else if (getLangOpts().MicrosoftExt)\n Diag(ColonLoc, diag::ext_ms_c_enum_fixed_underlying_type) << BaseRange;"}}, | ||
[k]={ | |||
["clang/test/Sema/MicrosoftExtensions.c"]={"clang/test/Sema/MicrosoftExtensions.c:86:11: warning: enumeration types with a fixed underlying type are a Microsoft extension [-Wmicrosoft-fixed-enum]","clang/test/Sema/MicrosoftExtensions.c:90:6: warning: enumeration types with a fixed underlying type are a Microsoft extension [-Wmicrosoft-fixed-enum]"} | |||
} | |||
}, | }, | ||
["ext_ms_cast_fn_obj"]={ | ["ext_ms_cast_fn_obj"]={ | ||
[ | [c]="static_cast between pointer-to-function and pointer-to-object is a Microsoft extension [-Wmicrosoft-cast]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-cast"}, | |||
[m]="microsoft-cast", | |||
[h]="static_cast between pointer-to-function and pointer-to-object is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="static_cast between pointer\\-to\\-function and pointer\\-to\\-object is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-cast[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"85bd1206796d",1433283312,"[MSVC Compatibility] Permit static_cast from void-ptr to function-ptr"}, | [i]={"85bd1206796d",1433283312,"[MSVC Compatibility] Permit static_cast from void-ptr to function-ptr"}, | ||
[j]={{ | [j]={{Bb,1469,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n // Reverse pointer conversion to void*. C++ 4.10.p2 specifies conversion to\n // void*. C++ 5.2.9p10 specifies additional restrictions, which really is\n // just the usual constness stuff.\n if (const PointerType *SrcPointer = SrcType->getAs<PointerType>()) {\n if (SrcPointee->isVoidType()) {\n if (const PointerType *DestPointer = DestType->getAs<PointerType>()) {\n // Microsoft permits static_cast from \'pointer-to-void\' to\n // \'pointer-to-function\'.\n if (!CStyle && Self.getLangOpts().MSVCCompat && DestPointee->isFunctionType()) {\n Self.Diag(OpRange.getBegin(), diag::ext_ms_cast_fn_obj) << OpRange;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/MicrosoftCompatibility.cpp"]={"clang/test/SemaCXX/MicrosoftCompatibility.cpp:315:23: warning: static_cast between pointer-to-function and pointer-to-object is a Microsoft extension [-Wmicrosoft-cast]"} | |||
} | |||
}, | }, | ||
["ext_ms_delayed_template_argument"]={ | ["ext_ms_delayed_template_argument"]={ | ||
[ | [c]="using the undeclared type A as a default template argument is a Microsoft extension [-Wmicrosoft-template]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,eb}, | |||
[m]=eb, | |||
[h]="using the undeclared type %0 as a default template argument is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="using the undeclared type (.*?) as a default template argument is a Microsoft extension", | ||
[a]=Db, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"df6e4a06e42b",1402094196,"Delay lookup of simple default template arguments under -fms-compatibility"}, | [i]={"df6e4a06e42b",1402094196,"Delay lookup of simple default template arguments under -fms-compatibility"}, | ||
[j]={{ | [j]={{x,635,"ParsedType Sema::ActOnMSVCUnknownTypeName(const IdentifierInfo &II, SourceLocation NameLoc, bool IsTemplateTypeArg) {\n if (IsTemplateTypeArg && getCurScope()->isTemplateParamScope()) {\n Diag(NameLoc, diag::ext_ms_delayed_template_argument) << &II;"}}, | ||
[k]={ | |||
["clang/test/SemaTemplate/ms-delayed-default-template-args.cpp"]={"clang/test/SemaTemplate/ms-delayed-default-template-args.cpp:6:24: warning: using the undeclared type \'Baz\' as a default template argument is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/ms-delayed-default-template-args.cpp:14:24: warning: using the undeclared type \'Baz\' as a default template argument is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/ms-delayed-default-template-args.cpp:26:26: warning: using the undeclared type \'Baz\' as a default template argument is a Microsoft extension [-Wmicrosoft-template]"} | |||
} | |||
}, | }, | ||
["ext_ms_deref_template_argument"]={ | ["ext_ms_deref_template_argument"]={ | ||
[ | [c]="non-type template argument containing a dereference operation is a Microsoft extension [-Wmicrosoft-template]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,eb}, | |||
[m]=eb, | |||
[h]="non-type template argument containing a dereference operation is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="non\\-type template argument containing a dereference operation is a Microsoft extension", | ||
[a]=Db, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"da45a0fa6f72",1377236539,"arc commit didn\'t add this because it wasn\'t in the patch..."}, | [i]={"da45a0fa6f72",1377236539,"arc commit didn\'t add this because it wasn\'t in the patch..."}, | ||
[j]={{ | [j]={{F,6732,"/// 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 if (S.getLangOpts().MicrosoftExt) {\n if (FirstOpLoc.isValid()) {\n if (ExtWarnMSTemplateArg)\n S.Diag(ArgIn->getBeginLoc(), diag::ext_ms_deref_template_argument) << ArgIn->getSourceRange();"}}, | ||
[k]={ | |||
[sc]={"clang/test/Parser/MicrosoftExtensions.cpp:132:46: warning: non-type template argument containing a dereference operation is a Microsoft extension [-Wmicrosoft-template]"} | |||
} | |||
}, | }, | ||
["ext_ms_explicit_constructor_call"]={ | ["ext_ms_explicit_constructor_call"]={ | ||
[ | [c]="explicit constructor calls are a Microsoft extension [-Wmicrosoft-explicit-constructor-call]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-explicit-constructor-call"}, | |||
[m]="microsoft-explicit-constructor-call", | |||
[h]="explicit constructor calls are a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="explicit constructor calls are a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-explicit\\-constructor\\-call[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"64225794119e",1295327079,"Add support for explicit constructor calls in Microsoft mode."}, | [i]={"64225794119e",1295327079,"Add support for explicit constructor calls in Microsoft mode."}, | ||
[j]={{"clang/lib/Sema/SemaExprMember.cpp",1721,"/// The main callback when the parser finds something like\n/// expression . [nested-name-specifier] identifier\n/// expression -> [nested-name-specifier] identifier\n/// where \'identifier\' encompasses a fairly broad spectrum of\n/// possibilities, including destructor and operator references.\n///\n/// \\param OpKind either tok::arrow or tok::period\n/// \\param ObjCImpDecl the current Objective-C \\@implementation\n/// decl; this is an ugly hack around the fact that Objective-C\n/// \\@implementations aren\'t properly put in the context chain\nExprResult Sema::ActOnMemberAccessExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, UnqualifiedId &Id, Decl *ObjCImpDecl) {\n // Warn about the explicit constructor calls Microsoft extension.\n if (getLangOpts().MicrosoftExt && Id.getKind() == UnqualifiedIdKind::IK_ConstructorName)\n Diag(Id.getSourceRange().getBegin(), diag::ext_ms_explicit_constructor_call);"}} | [j]={{"clang/lib/Sema/SemaExprMember.cpp",1721,"/// The main callback when the parser finds something like\n/// expression . [nested-name-specifier] identifier\n/// expression -> [nested-name-specifier] identifier\n/// where \'identifier\' encompasses a fairly broad spectrum of\n/// possibilities, including destructor and operator references.\n///\n/// \\param OpKind either tok::arrow or tok::period\n/// \\param ObjCImpDecl the current Objective-C \\@implementation\n/// decl; this is an ugly hack around the fact that Objective-C\n/// \\@implementations aren\'t properly put in the context chain\nExprResult Sema::ActOnMemberAccessExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, UnqualifiedId &Id, Decl *ObjCImpDecl) {\n // Warn about the explicit constructor calls Microsoft extension.\n if (getLangOpts().MicrosoftExt && Id.getKind() == UnqualifiedIdKind::IK_ConstructorName)\n Diag(Id.getSourceRange().getBegin(), diag::ext_ms_explicit_constructor_call);"}}, | ||
[k]={ | |||
[sc]={"clang/test/Parser/MicrosoftExtensions.cpp:180:25: warning: explicit constructor calls are a Microsoft extension [-Wmicrosoft-explicit-constructor-call]"} | |||
} | |||
}, | }, | ||
["ext_ms_forward_ref_enum"]={ | ["ext_ms_forward_ref_enum"]={ | ||
[ | [c]="forward references to \'enum\' types are a Microsoft extension [-Wmicrosoft-enum-forward-reference]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-enum-forward-reference"}, | |||
[m]="microsoft-enum-forward-reference", | |||
[h]="forward references to \'enum\' types are a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="forward references to \'enum\' types are a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-enum\\-forward\\-reference[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"488b4a7d943b",1284268015,"Add basic support for Microsoft enum forward declaration. "}, | [i]={"488b4a7d943b",1284268015,"Add basic support for Microsoft enum forward declaration. "}, | ||
[j]={{ | [j]={{x,17512,"CreateNewDecl:\n if (Kind == TTK_Enum) {\n // If this is an undefined enum, warn.\n if (TUK != TUK_Definition && !Invalid) {\n if (IsFixed && cast<EnumDecl>(New)->isFixed()) {\n } else if (PrevDecl && (Def = cast<EnumDecl>(PrevDecl)->getDefinition())) {\n } else {\n if (getLangOpts().MSVCCompat)\n DiagID = diag::ext_ms_forward_ref_enum;"}}, | ||
[k]={ | |||
["clang/test/SemaTemplate/enum-forward.cpp"]={"clang/test/SemaTemplate/enum-forward.cpp:5:8: warning: forward references to \'enum\' types are a Microsoft extension [-Wmicrosoft-enum-forward-reference]"} | |||
} | |||
}, | }, | ||
["ext_ms_impcast_fn_obj"]={ | ["ext_ms_impcast_fn_obj"]={ | ||
[ | [c]="implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension [-Wmicrosoft-cast]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-cast"}, | |||
[m]="microsoft-cast", | |||
[h]="implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="implicit conversion between pointer\\-to\\-function and pointer\\-to\\-object is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-cast[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"6bf02820bced",1446280934,"[MSVC Compat] Permit conversions from pointer-to-function to pointer-to-object iff -fms-compatibilit..."}, | [i]={"6bf02820bced",1446280934,"[MSVC Compat] Permit conversions from pointer-to-function to pointer-to-object iff -fms-compatibilit..."}, | ||
[j]={{ | [j]={{Lb,3163,"/// CheckPointerConversion - Check the pointer conversion from the\n/// expression From to the type ToType. This routine checks for\n/// ambiguous or inaccessible derived-to-base pointer\n/// conversions for which IsPointerConversion has already returned\n/// true. It returns true and produces a diagnostic if there was an\n/// error, or returns false otherwise.\nbool Sema::CheckPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess, bool Diagnose) {\n if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {\n if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {\n if (Diagnose && !IsCStyleOrFunctionalCast && FromPointeeType->isFunctionType() && ToPointeeType->isVoidType()) {\n Diag(From->getExprLoc(), diag::ext_ms_impcast_fn_obj) << From->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/MicrosoftCompatibility.cpp"]={"clang/test/SemaCXX/MicrosoftCompatibility.cpp:324:14: warning: implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension [-Wmicrosoft-cast]","clang/test/SemaCXX/MicrosoftCompatibility.cpp:325:14: warning: implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension [-Wmicrosoft-cast]","clang/test/SemaCXX/MicrosoftCompatibility.cpp:326:14: warning: implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension [-Wmicrosoft-cast]"} | |||
} | |||
}, | }, | ||
["ext_ms_reserved_user_defined_literal"]={ | ["ext_ms_reserved_user_defined_literal"]={ | ||
[ | [c]="invalid suffix on literal; C++11 requires a space between literal and identifier [-Wreserved-user-defined-literal]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"reserved-user-defined-literal"}, | |||
[m]="reserved-user-defined-literal", | |||
[h]="invalid suffix on literal; C++11 requires a space between literal and identifier", | |||
[b]=o, | [b]=o, | ||
[ | [g]="invalid suffix on literal; C\\+\\+11 requires a space between literal and identifier", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wreserved\\-user\\-defined\\-literal[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"7ebc4c191058",1333840163,"ext_reserved_user_defined_literal must not default to Error in MicrosoftMode. Hence create ext_ms_re..."}, | [i]={"7ebc4c191058",1333840163,"ext_reserved_user_defined_literal must not default to Error in MicrosoftMode. Hence create ext_ms_re..."}, | ||
[j]={{ | [j]={{ab,2052,"/// 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 // C++11 [lex.ext]p10, [usrlit.suffix]p1: A program containing a ud-suffix\n // that does not start with an underscore is ill-formed. As a conforming\n // extension, we treat all such suffixes as if they had whitespace before\n // them. We assume a suffix beginning with a UCN or UTF-8 character is more\n // likely to be a ud-suffix than a macro, however, and accept that.\n if (!Consumed) {\n if (!IsUDSuffix) {\n if (!isLexingRawMode())\n Diag(CurPtr, LangOpts.MSVCCompat ? diag::ext_ms_reserved_user_defined_literal : diag::ext_reserved_user_defined_literal) << FixItHint::CreateInsertion(getSourceLocation(CurPtr), \" \");"}} | ||
}, | }, | ||
["ext_ms_sealed_keyword"]={ | ["ext_ms_sealed_keyword"]={ | ||
[ | [c]="\'sealed\' keyword is a Microsoft extension [-Wmicrosoft-sealed]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-sealed"}, | |||
[m]="microsoft-sealed", | |||
[h]="\'sealed\' keyword is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'sealed\' keyword is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-sealed[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"a543308ce556",1382056411,"[-fms-extensions] Permit \'override\' in C++98 and \'sealed\' as a synonym for \'final\'"}, | [i]={"a543308ce556",1382056411,"[-fms-extensions] Permit \'override\' in C++98 and \'sealed\' as a synonym for \'final\'"}, | ||
[j]={{ | [j]={{M,2465,"/// 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 if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n } else if (Specifier == VirtSpecifiers::VS_Sealed) {\n Diag(Tok.getLocation(), diag::ext_ms_sealed_keyword);"},{M,3532,"/// 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 // Parse the optional \'final\' keyword.\n if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n while (true) {\n if (TagType == DeclSpec::TST_interface)\n else if (Specifier == VirtSpecifiers::VS_Final)\n else if (Specifier == VirtSpecifiers::VS_Sealed)\n Diag(FinalLoc, diag::ext_ms_sealed_keyword);"}}, | ||
[k]={ | |||
[Kc]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:454:33: warning: \'sealed\' keyword is a Microsoft extension [-Wmicrosoft-sealed]","clang/test/SemaCXX/MicrosoftExtensions.cpp:459:19: warning: \'sealed\' keyword is a Microsoft extension [-Wmicrosoft-sealed]","clang/test/SemaCXX/MicrosoftExtensions.cpp:475:33: warning: \'sealed\' keyword is a Microsoft extension [-Wmicrosoft-sealed]","clang/test/SemaCXX/MicrosoftExtensions.cpp:490:39: warning: \'sealed\' keyword is a Microsoft extension [-Wmicrosoft-sealed]","clang/test/SemaCXX/MicrosoftExtensions.cpp:508:30: warning: \'sealed\' keyword is a Microsoft extension [-Wmicrosoft-sealed]"} | |||
} | |||
}, | }, | ||
["ext_ms_static_assert"]={ | ["ext_ms_static_assert"]={ | ||
[ | [c]="use of \'static_assert\' without inclusion of <assert.h> is a Microsoft extension [-Wmicrosoft-static-assert]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-static-assert"}, | |||
[m]="microsoft-static-assert", | |||
[h]="use of \'static_assert\' without inclusion of <assert.h> is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of \'static_assert\' without inclusion of \\<assert\\.h\\> is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-static\\-assert[^\\]]*\\]", | |||
[e]=y, | |||
[i]={tb,1612659633,vb}, | |||
[j]={{M,978,"/// 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 if (Tok.is(tok::kw_static_assert)) {\n if (!getLangOpts().CPlusPlus) {\n if (getLangOpts().C2x)\n else\n Diag(Tok, diag::ext_ms_static_assert) << FixItHint::CreateReplacement(Tok.getLocation(), \"_Static_assert\");"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Sema/static-assert.c"]={"clang/test/Sema/static-assert.c:16:1: warning: use of \'static_assert\' without inclusion of <assert.h> is a Microsoft extension [-Wmicrosoft-static-assert]","clang/test/Sema/static-assert.c:24:3: warning: use of \'static_assert\' without inclusion of <assert.h> is a Microsoft extension [-Wmicrosoft-static-assert]","clang/test/Sema/static-assert.c:37:3: warning: use of \'static_assert\' without inclusion of <assert.h> is a Microsoft extension [-Wmicrosoft-static-assert]","clang/test/Sema/static-assert.c:72:1: warning: use of \'static_assert\' without inclusion of <assert.h> is a Microsoft extension [-Wmicrosoft-static-assert]"} | ||
[i]={tb,1612659633, | } | ||
[j]={{ | |||
}, | }, | ||
["ext_ms_template_spec_redecl_out_of_scope"]={ | ["ext_ms_template_spec_redecl_out_of_scope"]={ | ||
[ | [c]="... specialization of A not in ... is a Microsoft extension [-Wmicrosoft-template]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,eb}, | |||
[m]=eb, | |||
[h]="%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 not in %select{a namespace enclosing %2|class %2 or an enclosing namespace}3 is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(?:class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration) specialization of (.*?) not in (?:a namespace enclosing (.*?)|class (.*?) or an enclosing namespace) is a Microsoft extension", | ||
[a]=Db, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"0068cb249965",1426836106,"[MSVC] Explicit specializations can be declared in any namespace (fix for http://llvm.org/PR13738)"}, | [i]={"0068cb249965",1426836106,"[MSVC] Explicit specializations can be declared in any namespace (fix for http://llvm.org/PR13738)"}, | ||
[j]={{ | [j]={{F,8451,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n // Make sure that this redeclaration (or definition) occurs in the same\n // scope or an enclosing namespace.\n if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n if (isa<TranslationUnitDecl>(SpecializedContext))\n else {\n if (S.getLangOpts().MicrosoftExt && !DC->isRecord())\n Diag = diag::ext_ms_template_spec_redecl_out_of_scope;"}}, | ||
[k]={ | |||
["clang/test/SemaTemplate/ext_ms_template_spec.cpp"]={"clang/test/SemaTemplate/ext_ms_template_spec.cpp:21:10: warning: class template specialization of \'ClassTemplate\' not in a namespace enclosing \'A\' is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/ext_ms_template_spec.cpp:24:10: warning: class template partial specialization of \'ClassTemplatePartial\' not in a namespace enclosing \'A\' is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/ext_ms_template_spec.cpp:27:19: warning: member class specialization of \'MemberClass\' not in class \'X\' or an enclosing namespace is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/ext_ms_template_spec.cpp:30:17: warning: member enumeration specialization of \'MemberEnumeration\' not in class \'X\' or an enclosing namespace is a Microsoft extension [-Wmicrosoft-template]"} | |||
} | |||
}, | }, | ||
["ext_ms_template_type_arg_missing_typename"]={ | ["ext_ms_template_type_arg_missing_typename"]={ | ||
[ | [c]="template argument for template type parameter must be a type; omitted \'typename\' is a Microsoft extension [-Wmicrosoft-template]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,eb}, | |||
[m]=eb, | |||
[h]="template argument for template type parameter must be a type; omitted \'typename\' is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="template argument for template type parameter must be a type; omitted \'typename\' is a Microsoft extension", | ||
[a]=Db, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"377c1592f8d3",1402442988,"Recover from missing typenames on template args for MSVC compatibility"}, | [i]={"377c1592f8d3",1402442988,"Recover from missing typenames on template args for MSVC compatibility"}, | ||
[j]={{ | [j]={{F,5254,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n case TemplateArgument::Expression: {\n if (auto *II = NameInfo.getName().getAsIdentifierInfo()) {\n if (Result.getAsSingle<TypeDecl>() || Result.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) {\n Diag(Loc, getLangOpts().MSVCCompat ? diag::ext_ms_template_type_arg_missing_typename : diag::err_template_arg_must_be_type_suggest) << FixItHint::CreateInsertion(Loc, \"typename \");"}}, | ||
[k]={ | |||
["clang/test/SemaTemplate/typename-specifier.cpp"]={"clang/test/SemaTemplate/typename-specifier.cpp:174:8: warning: template argument for template type parameter must be a type; omitted \'typename\' is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/typename-specifier.cpp:192:8: warning: template argument for template type parameter must be a type; omitted \'typename\' is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/typename-specifier.cpp:165:10: warning: template argument for template type parameter must be a type; omitted \'typename\' is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/typename-specifier.cpp:185:10: warning: template argument for template type parameter must be a type; omitted \'typename\' is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/typename-specifier.cpp:210:7: warning: template argument for template type parameter must be a type; omitted \'typename\' is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/typename-specifier.cpp:217:7: warning: template argument for template type parameter must be a type; omitted \'typename\' is a Microsoft extension [-Wmicrosoft-template]"} | |||
} | |||
}, | }, | ||
["ext_ms_using_declaration_inaccessible"]={ | ["ext_ms_using_declaration_inaccessible"]={ | ||
[ | [c]="using declaration referring to inaccessible member \'A\' (which refers to accessible member \'B\') is a Microsoft compatibility extension [-Wmicrosoft-using-decl]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-using-decl"}, | |||
[m]="microsoft-using-decl", | |||
[h]="using declaration referring to inaccessible member \'%0\' (which refers to accessible member \'%1\') is a Microsoft compatibility extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="using declaration referring to inaccessible member \'(.*?)\' \\(which refers to accessible member \'(.*?)\'\\) is a Microsoft compatibility extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-using\\-decl[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"e434590bd90d",1325195853,"Change the diagnostics which said \'accepted as an extension\' to instead say"}, | [i]={"e434590bd90d",1325195853,"Change the diagnostics which said \'accepted as an extension\' to instead say"}, | ||
[j]={{ | [j]={{Bc,1328,"/// MSVC has a bug where if during an using declaration name lookup,\n/// the declaration found is unaccessible (private) and that declaration\n/// was bring into scope via another using declaration whose target\n/// declaration is accessible (public) then no error is generated.\n/// Example:\n/// class A {\n/// public:\n/// int f();\n/// };\n/// class B : public A {\n/// private:\n/// using A::f;\n/// };\n/// class C : public B {\n/// private:\n/// using B::f;\n/// };\n///\n/// Here, B::f is private so this should fail in Standard C++, but\n/// because B::f refers to A::f which is public MSVC accepts it.\nstatic bool IsMicrosoftUsingDeclarationAccessBug(Sema &S, SourceLocation AccessLoc, AccessTarget &Entity) {\n if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(Entity.getTargetDecl()))\n if (UsingDecl *UD = dyn_cast<UsingDecl>(Shadow->getIntroducer())) {\n if (Entity.getTargetDecl()->getAccess() == AS_private && (OrigDecl->getAccess() == AS_public || OrigDecl->getAccess() == AS_protected)) {\n S.Diag(AccessLoc, diag::ext_ms_using_declaration_inaccessible) << UD->getQualifiedNameAsString() << OrigDecl->getQualifiedNameAsString();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/MicrosoftCompatibility.cpp"]={"clang/test/SemaCXX/MicrosoftCompatibility.cpp:167:12: warning: using declaration referring to inaccessible member \'ms_using_declaration_bug::B::f\' (which refers to accessible member \'ms_using_declaration_bug::A::f\') is a Microsoft compatibility extension [-Wmicrosoft-using-decl]"} | |||
} | |||
}, | }, | ||
["ext_multi_line_line_comment"]={ | ["ext_multi_line_line_comment"]={ | ||
[ | [c]="multi-line // comment [-Wcomment]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={jb,qb,rc,"comments",sb,v}, | |||
[m]=rc, | |||
[h]="multi-line // comment", | |||
[b]=o, | [b]=o, | ||
[ | [g]="multi\\-line \\/\\/ comment", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wcomment[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"158a31abe2c2",1352617334,"s/BCPLComment/LineComment/"}, | [i]={"158a31abe2c2",1352617334,"s/BCPLComment/LineComment/"}, | ||
[j]={{ | [j]={{ab,2549,"/// 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 while (true) {\n // If we read multiple characters, and one of those characters was a \\r or\n // \\n, then we had an escaped newline within the comment. Emit diagnostic\n // unless the next line is also a // comment.\n if (CurPtr != OldPtr + 1 && C != \'/\' && (CurPtr == BufferEnd + 1 || CurPtr[0] != \'/\')) {\n for (; OldPtr != CurPtr; ++OldPtr)\n if (OldPtr[0] == \'\\n\' || OldPtr[0] == \'\\r\') {\n if (!isLexingRawMode())\n Diag(OldPtr - 1, diag::ext_multi_line_line_comment);"}} | ||
}, | }, | ||
["ext_multi_using_declaration"]={ | ["ext_multi_using_declaration"]={ | ||
[ | [c]="use of multiple declarators in a single using declaration is a C++17 extension [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={P,hb}, | |||
[m]=P, | |||
[h]="use of multiple declarators in a single using declaration is a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of multiple declarators in a single using declaration is a C\\+\\+17 extension", | ||
[a]=ib, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"6f1daa4660ed",1481849928,"[c++1z] P0195R2: Allow multiple using-declarators in a single using-declaration."}, | [i]={"6f1daa4660ed",1481849928,"[c++1z] P0195R2: Allow multiple using-declarators in a single using-declaration."}, | ||
[j]={{ | [j]={{M,855,"/// 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 if (DeclsInGroup.size() > 1)\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx17_compat_multi_using_declaration : diag::ext_multi_using_declaration);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx0x-keyword-attributes.cpp"]={"clang/test/Parser/cxx0x-keyword-attributes.cpp:144:51: warning: use of multiple declarators in a single using declaration is a C++17 extension [-Wc++17-extensions]","clang/test/Parser/cxx0x-keyword-attributes.cpp:155:105: warning: use of multiple declarators in a single using declaration is a C++17 extension [-Wc++17-extensions]"} | |||
} | |||
}, | }, | ||
["ext_mutable_reference"]={ | ["ext_mutable_reference"]={ | ||
[ | [c]="\'mutable\' on a reference type is a Microsoft extension [-Wmicrosoft-mutable-reference]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-mutable-reference"}, | |||
[m]="microsoft-mutable-reference", | |||
[h]="\'mutable\' on a reference type is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'mutable\' on a reference type is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-mutable\\-reference[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"8f01bb983c2a",1423025132,"[MSVC2012] Allow \'mutable\' references"}, | [i]={"8f01bb983c2a",1423025132,"[MSVC2012] Allow \'mutable\' references"}, | ||
[j]={{ | [j]={{x,18186,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n // Check that \'mutable\' is consistent with the type of the declaration.\n if (!InvalidDecl && Mutable) {\n if (T->isReferenceType())\n DiagID = getLangOpts().MSVCCompat ? diag::ext_mutable_reference : diag::err_mutable_reference;"},{x,18196,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n // Check that \'mutable\' is consistent with the type of the declaration.\n if (!InvalidDecl && Mutable) {\n if (DiagID) {\n if (DiagID != diag::ext_mutable_reference) {"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/ms_mutable_reference_member.cpp"]={"clang/test/SemaCXX/ms_mutable_reference_member.cpp:4:3: warning: \'mutable\' on a reference type is a Microsoft extension [-Wmicrosoft-mutable-reference]"} | |||
} | |||
}, | }, | ||
["ext_named_variadic_macro"]={ | ["ext_named_variadic_macro"]={ | ||
[ | [c]="named variadic macros are a GNU extension [-Wvariadic-macros]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v,xc}, | |||
[m]=xc, | |||
[h]="named variadic macros are a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="named variadic macros are a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wvariadic\\-macros[^\\]]*\\]", | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{W,2735,"/// 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 while (true) {\n default:\n case tok::ellipsis: // #define X(A... -> GCC extension\n Diag(Tok, diag::ext_named_variadic_macro);"}} | [j]={{W,2735,"/// 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 while (true) {\n default:\n case tok::ellipsis: // #define X(A... -> GCC extension\n Diag(Tok, diag::ext_named_variadic_macro);"}} | ||
}, | }, | ||
["ext_nested_name_member_ref_lookup_ambiguous"]={ | ["ext_nested_name_member_ref_lookup_ambiguous"]={ | ||
[ | [c]="lookup of A in member access expression is ambiguous; using member of B [-Wambiguous-member-template]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"ambiguous-member-template"}, | |||
[m]="ambiguous-member-template", | |||
[h]="lookup of %0 in member access expression is ambiguous; using member of %1", | |||
[b]=o, | [b]=o, | ||
[ | [g]="lookup of (.*?) in member access expression is ambiguous; using member of (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wambiguous\\-member\\-template[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"2f96e9f5c90d",1275701997,"Add an extension to avoid an error when a global template has the same name as"}, | [i]={"2f96e9f5c90d",1275701997,"Add an extension to avoid an error when a global template has the same name as"}, | ||
[j]={{ | [j]={{F,605,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n if (S && !ObjectType.isNull() && !ObjectTypeSearchedInScope && !getLangOpts().CPlusPlus11) {\n if (FoundOuter.empty()) {\n } else if (FoundOuter.isAmbiguous() || !FoundOuter.isSingleResult() || !(OuterTemplate = getAsTemplateNameDecl(FoundOuter.getFoundDecl()))) {\n } else if (!Found.isSuppressingDiagnostics()) {\n // - if the name found is a class template, it must refer to the same\n // entity as the one found in the class of the object expression,\n // otherwise the program is ill-formed.\n if (!Found.isSingleResult() || getAsTemplateNameDecl(Found.getFoundDecl())->getCanonicalDecl() != OuterTemplate->getCanonicalDecl()) {\n Diag(Found.getNameLoc(), diag::ext_nested_name_member_ref_lookup_ambiguous) << Found.getLookupName() << ObjectType;"}}, | ||
[k]={ | |||
["clang/test/CXX/basic/basic.lookup/basic.lookup.classref/p1.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.classref/p1.cpp:47:7: warning: lookup of \'set\' in member access expression is ambiguous; using member of \'Value\' [-Wambiguous-member-template]"} | |||
} | |||
}, | }, | ||
["ext_nested_name_spec_is_enum"]={ | ["ext_nested_name_spec_is_enum"]={ | ||
[ | [c]="use of enumeration in a nested name specifier is a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="use of enumeration in a nested name specifier is a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of enumeration in a nested name specifier is a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"25a8afa9579e",1421611475,"Handle unscoped enumeration in nested name specifier."}, | [i]={"25a8afa9579e",1421611475,"Handle unscoped enumeration in nested name specifier."}, | ||
[j]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",648,"/// 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 if (!AcceptSpec && IsExtension) {\n Diag(IdInfo.IdentifierLoc, diag::ext_nested_name_spec_is_enum);"}} | [j]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",648,"/// 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 if (!AcceptSpec && IsExtension) {\n Diag(IdInfo.IdentifierLoc, diag::ext_nested_name_spec_is_enum);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:119:14: warning: use of enumeration in a nested name specifier is a C++11 extension [-Wc++11-extensions]","clang/test/SemaCXX/nested-name-spec.cpp:428:16: warning: use of enumeration in a nested name specifier is a C++11 extension [-Wc++11-extensions]","clang/test/SemaCXX/nested-name-spec.cpp:430:16: warning: use of enumeration in a nested name specifier is a C++11 extension [-Wc++11-extensions]","clang/test/SemaCXX/nested-name-spec.cpp:433:16: warning: use of enumeration in a nested name specifier is a C++11 extension [-Wc++11-extensions]","clang/test/SemaCXX/nested-name-spec.cpp:440:12: warning: use of enumeration in a nested name specifier is a C++11 extension [-Wc++11-extensions]","clang/test/SemaCXX/nested-name-spec.cpp:441:12: warning: use of enumeration in a nested name specifier is a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_nested_namespace_definition"]={ | ["ext_nested_namespace_definition"]={ | ||
[ | [c]="nested namespace definition is a C++17 extension; define each namespace separately [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={P,hb}, | |||
[m]=P, | |||
[h]="nested namespace definition is a C++17 extension; define each namespace separately", | |||
[b]=o, | [b]=o, | ||
[ | [g]="nested namespace definition is a C\\+\\+17 extension; define each namespace separately", | ||
[a]=ib, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"13307f5f2429",1415425054,"[c++1z] Implement nested-namespace-definitions."}, | [i]={"13307f5f2429",1415425054,"[c++1z] Implement nested-namespace-definitions."}, | ||
[j]={{ | [j]={{M,191,"/// 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 if (ExtraNSs.empty()) {\n } else if (InlineLoc.isValid()) {\n } else if (getLangOpts().CPlusPlus20) {\n } else if (getLangOpts().CPlusPlus17) {\n } else {\n if (!rBraceToken.is(tok::r_brace)) {\n Diag(ExtraNSs[0].NamespaceLoc, diag::ext_nested_namespace_definition) << SourceRange(ExtraNSs.front().NamespaceLoc, ExtraNSs.back().IdentLoc);"},{M,208,"/// 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 if (ExtraNSs.empty()) {\n } else if (InlineLoc.isValid()) {\n } else if (getLangOpts().CPlusPlus20) {\n } else if (getLangOpts().CPlusPlus17) {\n } else {\n if (!rBraceToken.is(tok::r_brace)) {\n } else {\n Diag(ExtraNSs[0].NamespaceLoc, diag::ext_nested_namespace_definition) << FixItHint::CreateReplacement(SourceRange(ExtraNSs.front().NamespaceLoc, ExtraNSs.back().IdentLoc), NamespaceFix) << FixItHint::CreateInsertion(rBraceToken.getLocation(), RBraces);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp"]={"clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp:19:17: warning: nested namespace definition is a C++17 extension; define each namespace separately [-Wc++17-extensions]","clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp:26:17: warning: nested namespace definition is a C++17 extension; define each namespace separately [-Wc++17-extensions]","clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp:36:17: warning: nested namespace definition is a C++17 extension; define each namespace separately [-Wc++17-extensions]"} | |||
} | |||
}, | }, | ||
["ext_nested_pointer_qualifier_mismatch"]={ | ["ext_nested_pointer_qualifier_mismatch"]={ | ||
[ | [c]="... discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={Lc,"incompatible-pointer-types-discards-qualifiers"}, | |||
[m]="incompatible-pointer-types-discards-qualifiers", | |||
[h]="%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 discards qualifiers in nested pointer types", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(?:(?: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)) discards qualifiers in nested pointer types", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-pointer\\-types\\-discards\\-qualifiers[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"b98dade25bc9",1257804997,"Changed error for nested type qualifier mismatch to"}, | [i]={"b98dade25bc9",1257804997,"Changed error for nested type qualifier mismatch to"}, | ||
[j]={{ | [j]={{Bb,2678,"void CastOperation::checkAddressSpaceCast(QualType SrcType, QualType DestType) {\n // Converting the top level pointee addrspace is permitted for compatible\n // addrspaces (such as \'generic int *\' to \'local int *\' or vice versa), but\n // if any of the nested pointee addrspaces differ, we emit a warning\n // regardless of addrspace compatibility. This makes\n // local int ** p;\n // return (generic int **) p;\n // warn even though local -> generic is permitted.\n if (Self.getLangOpts().OpenCL) {\n while (isa<PointerType>(DestPtr) && isa<PointerType>(SrcPtr)) {\n DiagID = diag::ext_nested_pointer_qualifier_mismatch;"},{z,17644,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case IncompatibleNestedPointerQualifiers:\n if (getLangOpts().CPlusPlus) {\n } else {\n DiagKind = diag::ext_nested_pointer_qualifier_mismatch;"}}, | ||
[k]={ | |||
["clang/test/Sema/pointer-conversion.c"]={"clang/test/Sema/pointer-conversion.c:4:15: warning: initializing \'const char **\' with an expression of type \'char **\' discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]","clang/test/Sema/pointer-conversion.c:7:11: warning: initializing \'dchar ***\' (aka \'char ***\') with an expression of type \'const char ***\' discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]","clang/test/Sema/pointer-conversion.c:10:9: warning: initializing \'char **\' with an expression of type \'volatile char **\' discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]"} | |||
} | |||
}, | }, | ||
["ext_new_paren_array_nonconst"]={ | ["ext_new_paren_array_nonconst"]={ | ||
[ | [c]="when type is in parentheses, array cannot have dynamic size", | ||
[ | [d]=q, | ||
[f]=p, | |||
[h]="when type is in parentheses, array cannot have dynamic size", | |||
[b]=o, | [b]=o, | ||
[ | [g]="when type is in parentheses, array cannot have dynamic size", | ||
[ | [a]=Mb, | ||
[e]=n, | |||
[ | |||
[i]={"f2753b3b4efb",1279036472,"Downgrade the \"when type is in parentheses, array cannot have dynamic"}, | [i]={"f2753b3b4efb",1279036472,"Downgrade the \"when type is in parentheses, array cannot have dynamic"}, | ||
[j]={{ | [j]={{Y,2237,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n // We\'ve already performed any required implicit conversion to integer or\n // unscoped enumeration type.\n // FIXME: Per CWG1464, we are required to check the value prior to\n // converting to size_t. This will never find a negative array size in\n // C++14 onwards, because Value is always unsigned here!\n if (std::optional<llvm::APSInt> Value = (*ArraySize)->getIntegerConstantExpr(Context)) {\n } else if (TypeIdParens.isValid()) {\n Diag((*ArraySize)->getBeginLoc(), diag::ext_new_paren_array_nonconst) << (*ArraySize)->getSourceRange() << FixItHint::CreateRemoval(TypeIdParens.getBegin()) << FixItHint::CreateRemoval(TypeIdParens.getEnd());"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:108:18: warning: when type is in parentheses, array cannot have dynamic size","clang/test/SemaCXX/new-delete.cpp:402:21: warning: when type is in parentheses, array cannot have dynamic size"} | |||
} | |||
}, | }, | ||
["ext_no_declarators"]={ | ["ext_no_declarators"]={ | ||
[ | [c]="declaration does not declare anything [-Wmissing-declarations]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={jc}, | |||
[m]=jc, | |||
[h]="declaration does not declare anything", | |||
[b]=o, | [b]=o, | ||
[ | [g]="declaration does not declare anything", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-declarations[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"f19ac0ede900",1270762403,"Downgrade the \"declaration does not declare anything\" error to a"}, | [i]={"f19ac0ede900",1270762403,"Downgrade the \"declaration does not declare anything\" error to a"}, | ||
[j]={{ | [j]={{x,5266,"/// 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 // C 6.7/2:\n // A declaration [...] shall declare at least a declarator [...], a tag,\n // or the members of an enumeration.\n // C++ [dcl.dcl]p3:\n // [If there are no declarators], and except for the declaration of an\n // unnamed bit-field, the decl-specifier-seq shall introduce one or more\n // names into the program, or shall redeclare a name introduced by a\n // previous declaration.\n if (!DeclaresAnything) {\n Diag(DS.getBeginLoc(), (IsExplicitInstantiation || !TemplateParams.empty()) ? diag::err_no_declarators : diag::ext_no_declarators) << DS.getSourceRange();"},{x,5690,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n // C++ [dcl.dcl]p3:\n // [If there are no declarators], and except for the declaration of an\n // unnamed bit-field, the decl-specifier-seq shall introduce one or more\n // names into the program\n // C++ [class.mem]p2:\n // each such member-declaration shall either declare at least one member\n // name of the class or declare at least one unnamed bit-field\n //\n // For C this is an error even for a named struct, and is diagnosed elsewhere.\n if (getLangOpts().CPlusPlus && Record->field_empty())\n Diag(DS.getBeginLoc(), diag::ext_no_declarators) << DS.getSourceRange();"}}, | ||
[k]={ | |||
[Tb]={"clang/test/Parser/declarators.c:116:3: warning: declaration does not declare anything [-Wmissing-declarations]"} | |||
} | |||
}, | }, | ||
["ext_no_named_members_in_struct_union"]={ | ["ext_no_named_members_in_struct_union"]={ | ||
[ | [c]="... without named members is a GNU extension [-Wgnu-empty-struct]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,yc,v}, | |||
[m]=yc, | |||
[h]="%select{struct|union}0 without named members is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(?:struct|union) without named members is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-empty\\-struct[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"89578fd43981",1370698198,"Recognition of empty structures and unions is moved to semantic stage"}, | [i]={"89578fd43981",1370698198,"Recognition of empty structures and unions is moved to semantic stage"}, | ||
[j]={{ | [j]={{x,19136,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // Okay, we successfully defined \'Record\'.\n if (Record) {\n if (CheckForZeroSize) {\n // Structs without named members are extension in C (C99 6.7.2.1p7),\n // but are accepted by GCC.\n if (NonBitFields == 0 && !getLangOpts().CPlusPlus) {\n Diag(RecLoc, IsEmpty ? diag::ext_empty_struct_union : diag::ext_no_named_members_in_struct_union) << Record->isUnion();"}}, | ||
[k]={ | |||
[Tb]={"clang/test/Parser/declarators.c:114:1: warning: struct without named members is a GNU extension [-Wgnu-empty-struct]"} | |||
} | |||
}, | }, | ||
["ext_no_newline_eof"]={ | ["ext_no_newline_eof"]={ | ||
[ | [c]="no newline at end of file [-Wnewline-eof]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"newline-eof",v}, | |||
[m]="newline-eof", | |||
[h]="no newline at end of file", | |||
[b]=o, | [b]=o, | ||
[ | [g]="no newline at end of file", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wnewline\\-eof[^\\]]*\\]", | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[j]={{ab,3058,"/// LexEndOfFile - CurPtr points to the end of this file. Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n // C99 5.1.1.2p2: If the file is non-empty and didn\'t end in a newline, issue\n // a pedwarn.\n if (CurPtr != BufferStart && (CurPtr[-1] != \'\\n\' && CurPtr[-1] != \'\\r\')) {\n if (LangOpts.CPlusPlus11) {\n } else {\n DiagID = diag::ext_no_newline_eof;"}} | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_non_c_like_anon_struct_in_typedef"]={ | ["ext_non_c_like_anon_struct_in_typedef"]={ | ||
[ | [c]="anonymous non-C-compatible type given name for linkage purposes by ... declaration; add a tag name here [-Wnon-c-typedef-for-linkage]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"non-c-typedef-for-linkage"}, | |||
[m]="non-c-typedef-for-linkage", | |||
[h]="anonymous non-C-compatible type given name for linkage purposes by %select{typedef|alias}0 declaration; add a tag name here", | |||
[b]=o, | [b]=o, | ||
[ | [g]="anonymous non\\-C\\-compatible type given name for linkage purposes by (?:typedef|alias) declaration; add a tag name here", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wnon\\-c\\-typedef\\-for\\-linkage[^\\]]*\\]", | |||
[e]=n, | |||
[i]={Nc,1576809732,Oc}, | |||
[j]={{x,5011,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n if (NonCLike || ChangesLinkage) {\n unsigned DiagID = diag::ext_non_c_like_anon_struct_in_typedef;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaCXX/warn-unused-local-typedef.cpp"]={"clang/test/SemaCXX/warn-unused-local-typedef.cpp:111:17: warning: anonymous non-C-compatible type given name for linkage purposes by typedef declaration; add a tag name here [-Wnon-c-typedef-for-linkage]","clang/test/SemaCXX/warn-unused-local-typedef.cpp:116:20: warning: anonymous non-C-compatible type given name for linkage purposes by alias declaration; add a tag name here [-Wnon-c-typedef-for-linkage]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_nonclass_type_friend"]={ | ["ext_nonclass_type_friend"]={ | ||
[ | [c]="non-class friend type A is a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="non-class friend type %0 is a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="non\\-class friend type (.*?) is a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"3b4abb679211",1270663032,"Improve handling of friend types in several ways:"}, | [i]={"3b4abb679211",1270663032,"Improve handling of friend types in several ways:"}, | ||
[j]={{ | [j]={{A,17221,"/// 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 // 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 } 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 } else {\n Diag(FriendLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nonclass_type_friend : diag::ext_nonclass_type_friend) << T << TypeRange;"}}, | ||
[k]={ | |||
["clang/test/CXX/class.access/class.friend/p2-cxx03.cpp"]={"clang/test/CXX/class.access/class.friend/p2-cxx03.cpp:6:3: warning: non-class friend type \'T\' is a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_nonstandard_escape"]={ | ["ext_nonstandard_escape"]={ | ||
[ | [c]="use of non-standard escape character \'\\A\' [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="use of non-standard escape character \'\\%0\'", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of non\\-standard escape character \'\\\\(.*?)\'", | ||
[a]=X, | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[j]={{db,164,"/// 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 case \'e\':\n if (Diags)\n Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::ext_nonstandard_escape) << \"e\";"},{db,170,"/// 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 case \'E\':\n if (Diags)\n Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::ext_nonstandard_escape) << \"E\";"},{db,331,"/// 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 case \'%\':\n // GCC accepts these as extensions. We warn about them as such though.\n if (Diags)\n Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::ext_nonstandard_escape) << std::string(1, ResultChar);"}}, | |||
[k]={ | |||
[ | ["clang/test/Lexer/char-escapes.c"]={"clang/test/Lexer/char-escapes.c:10:11: warning: use of non-standard escape character \'\\e\' [-Wpedantic]","clang/test/Lexer/char-escapes.c:11:11: warning: use of non-standard escape character \'\\E\' [-Wpedantic]","clang/test/Lexer/char-escapes.c:19:11: warning: use of non-standard escape character \'\\(\' [-Wpedantic]","clang/test/Lexer/char-escapes.c:20:11: warning: use of non-standard escape character \'\\{\' [-Wpedantic]","clang/test/Lexer/char-escapes.c:21:11: warning: use of non-standard escape character \'\\[\' [-Wpedantic]","clang/test/Lexer/char-escapes.c:22:11: warning: use of non-standard escape character \'\\%\' [-Wpedantic]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_nonstatic_member_init"]={ | ["ext_nonstatic_member_init"]={ | ||
[ | [c]="default member initializer for non-static data member is a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="default member initializer for non-static data member is a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="default member initializer for non\\-static data member is a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"bffe88027cc2",1318650917,"Rename an ExtWarn to ext_ for consistency."}, | [i]={"bffe88027cc2",1318650917,"Rename an ExtWarn to ext_ for consistency."}, | ||
[j]={{ | [j]={{M,3103,"/// 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 while (true) {\n // Handle the initializer.\n if (HasInClassInit != ICIS_NoInit) {\n Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nonstatic_member_init : diag::ext_nonstatic_member_init);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:45:9: warning: default member initializer for non-static data member is a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_noreturn_main"]={ | ["ext_noreturn_main"]={ | ||
[ | [c]="\'main\' is not allowed to be declared _Noreturn [-Wmain]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={gc}, | |||
[m]=gc, | |||
[h]="\'main\' is not allowed to be declared _Noreturn", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'main\' is not allowed to be declared _Noreturn", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"0015f0987792",1358460971,"Parsing support for C11\'s _Noreturn keyword. No semantics yet."}, | [i]={"0015f0987792",1358460971,"Parsing support for C11\'s _Noreturn keyword. No semantics yet."}, | ||
[j]={{ | [j]={{x,12085,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n if (DS.isNoreturnSpecified()) {\n Diag(NoreturnLoc, diag::ext_noreturn_main);"}}, | ||
[k]={ | |||
["clang/test/Sema/warn-main.c"]={"clang/test/Sema/warn-main.c:27:1: warning: \'main\' is not allowed to be declared _Noreturn [-Wmain]"} | |||
} | |||
}, | }, | ||
["ext_ns_enum_attribute"]={ | ["ext_ns_enum_attribute"]={ | ||
[ | [c]="attributes on ... declaration are a C++17 extension [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={P,hb,v}, | |||
[m]=P, | |||
[h]="attributes on %select{a namespace|an enumerator}0 declaration are a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="attributes on (?:a namespace|an enumerator) declaration are a C\\+\\+17 extension", | ||
[a]=ib, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"40e202f7d996",1507942584,"Fix backwards warning for use of C++17 attributes-on-namespaces-and-enumerators feature."}, | [i]={"40e202f7d996",1507942584,"Fix backwards warning for use of C++17 attributes-on-namespaces-and-enumerators feature."}, | ||
[j]={{ | [j]={{H,5203,"/// 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 // Parse the enumerator-list.\n while (Tok.isNot(tok::r_brace)) {\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*/;"},{M,94,"/// 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 auto ReadAttributes = [&] {\n do {\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*/;"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx0x-keyword-attributes.cpp"]={"clang/test/Parser/cxx0x-keyword-attributes.cpp:127:11: warning: attributes on a namespace declaration are a C++17 extension [-Wc++17-extensions]","clang/test/Parser/cxx0x-keyword-attributes.cpp:188:9: warning: attributes on an enumerator declaration are a C++17 extension [-Wc++17-extensions]","clang/test/Parser/cxx0x-keyword-attributes.cpp:344:11: warning: attributes on a namespace declaration are a C++17 extension [-Wc++17-extensions]"} | |||
} | |||
}, | }, | ||
["ext_nullability"]={ | ["ext_nullability"]={ | ||
[ | [c]="type nullability specifier A is a Clang extension [-Wnullability-extension]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"nullability-extension",v}, | |||
[m]="nullability-extension", | |||
[h]="type nullability specifier %0 is a Clang extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="type nullability specifier (.*?) is a Clang extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wnullability\\-extension[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++."}, | [i]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++."}, | ||
[j]={{ | [j]={{H,969,"void Parser::ParseNullabilityTypeSpecifiers(ParsedAttributes &attrs) {\n // Treat these like attributes, even though they\'re type specifiers.\n while (true) {\n case tok::kw__Null_unspecified: {\n if (!getLangOpts().ObjC)\n Diag(AttrNameLoc, diag::ext_nullability) << AttrName;"}}, | ||
[k]={ | |||
["clang/test/Parser/nullability.c"]={"clang/test/Parser/nullability.c:3:1: warning: type nullability specifier \'_Nonnull\' is a Clang extension [-Wnullability-extension]"} | |||
} | |||
}, | }, | ||
["ext_offsetof_non_pod_type"]={ | ["ext_offsetof_non_pod_type"]={ | ||
[ | [c]="offset of on non-POD type A [-Winvalid-offsetof]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"invalid-offsetof"}, | |||
[m]="invalid-offsetof", | |||
[h]="offset of on non-POD type %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="offset of on non\\-POD type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-offsetof[^\\]]*\\]", | |||
[e]=n, | |||
[i]={nb,1405733957,lb}, | |||
[j]={{z,16678,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n for (const OffsetOfComponent &OC : Components) {\n // C++ [lib.support.types]p5:\n // The macro offsetof accepts a restricted set of type arguments in this\n // International Standard. type shall be a POD structure or a POD union\n // (clause 9).\n // C++11 [support.types]p4:\n // If type is not a standard-layout class (Clause 9), the results are\n // undefined.\n if (CXXRecordDecl *CRD = dyn_cast<CXXRecordDecl>(RD)) {\n unsigned DiagID = LangOpts.CPlusPlus11 ? diag::ext_offsetof_non_standardlayout_type : diag::ext_offsetof_non_pod_type;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaCXX/offsetof.cpp"]={"clang/test/SemaCXX/offsetof.cpp:13:11: warning: offset of on non-POD type \'P\' [-Winvalid-offsetof]","clang/test/SemaCXX/offsetof.cpp:18:9: warning: offset of on non-POD type \'Derived\' [-Winvalid-offsetof]","clang/test/SemaCXX/offsetof.cpp:82:22: warning: offset of on non-POD type \'Derived\' [-Winvalid-offsetof]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_offsetof_non_standardlayout_type"]={ | ["ext_offsetof_non_standardlayout_type"]={ | ||
[ | [c]="offset of on non-standard-layout type A [-Winvalid-offsetof]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"invalid-offsetof"}, | |||
[m]="invalid-offsetof", | |||
[h]="offset of on non-standard-layout type %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="offset of on non\\-standard\\-layout type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-offsetof[^\\]]*\\]", | |||
[e]=n, | |||
[i]={nb,1405733957,lb}, | |||
[j]={{z,16657,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n for (const OffsetOfComponent &OC : Components) {\n // C++ [lib.support.types]p5:\n // The macro offsetof accepts a restricted set of type arguments in this\n // International Standard. type shall be a POD structure or a POD union\n // (clause 9).\n // C++11 [support.types]p4:\n // If type is not a standard-layout class (Clause 9), the results are\n // undefined.\n if (CXXRecordDecl *CRD = dyn_cast<CXXRecordDecl>(RD)) {\n unsigned DiagID = LangOpts.CPlusPlus11 ? diag::ext_offsetof_non_standardlayout_type : diag::ext_offsetof_non_pod_type;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaCXX/offsetof-0x.cpp"]={"clang/test/SemaCXX/offsetof-0x.cpp:13:11: warning: offset of on non-standard-layout type \'P\' [-Winvalid-offsetof]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_old_implicitly_unsigned_long_cxx"]={ | ["ext_old_implicitly_unsigned_long_cxx"]={ | ||
[ | [c]="integer literal is too large to be represented in type \'long\' and is subject to undefined behavior under C++98, interpreting as \'unsigned long\'; this literal will ... in C++11 onwards [-Wc++11-compat]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={qc,Yb,Zb}, | |||
[m]=Yb, | |||
[h]="integer literal is too large to be represented in type \'long\' and is subject to undefined behavior under C++98, interpreting as \'unsigned long\'; this literal will %select{have type \'long long\'|be ill-formed}0 in C++11 onwards", | |||
[b]=o, | [b]=o, | ||
[ | [g]="integer literal is too large to be represented in type \'long\' and is subject to undefined behavior under C\\+\\+98, interpreting as \'unsigned long\'; this literal will (?:have type \'long long\'|be ill\\-formed) in C\\+\\+11 onwards", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat[^\\]]*\\]", | |||
[e]=r, | |||
[ | |||
[ | |||
[i]={"13234ae40db3",1433800799,"Consider unsigned long for non-u/U decimal literals (C90/C++03)"}, | [i]={"13234ae40db3",1433800799,"Consider unsigned long for non-u/U decimal literals (C90/C++03)"}, | ||
[j]={{ | [j]={{z,4196,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n if (Literal.isFixedPointLiteral()) {\n } else if (Literal.isFloatingLiteral()) {\n } else if (!Literal.isIntegerLiteral()) {\n } else {\n if (Literal.GetIntegerValue(ResultVal)) {\n } else {\n // Are long/unsigned long possibilities?\n if (Ty.isNull() && !Literal.isLongLong && !Literal.isSizeT) {\n // Does it fit in a unsigned long?\n if (ResultVal.isIntN(LongSize)) {\n // Does it fit in a signed long?\n if (!Literal.isUnsigned && ResultVal[LongSize - 1] == 0)\n else if (AllowUnsigned)\n // Check according to the rules of C90 6.1.3.2p5. C++03 [lex.icon]p2\n // is compatible.\n else if (!getLangOpts().C99 && !getLangOpts().CPlusPlus11) {\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus ? Literal.isLong ? diag::warn_old_implicitly_unsigned_long_cxx : /*C++98 UB*/ diag::ext_old_implicitly_unsigned_long_cxx : diag::warn_old_implicitly_unsigned_long) << (LongLongSize > LongSize ? /*will have type \'long long\'*/ 0 : /*will be ill-formed*/ 1);"}}, | ||
[k]={ | |||
["clang/test/Sema/PR16678.c"]={"clang/test/Sema/PR16678.c:74:19: warning: integer literal is too large to be represented in type \'long\' and is subject to undefined behavior under C++98, interpreting as \'unsigned long\'; this literal will be ill-formed in C++11 onwards [-Wc++11-compat]"} | |||
} | |||
}, | }, | ||
["ext_omp_attributes"]={ | ["ext_omp_attributes"]={ | ||
[ | [c]="specifying OpenMP directives with [[]] is an OpenMP 5.1 extension [-Wopenmp-51-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"openmp","openmp-51-extensions"}, | |||
[m]="openmp-51-extensions", | |||
[h]="specifying OpenMP directives with [[]] is an OpenMP 5.1 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="specifying OpenMP directives with \\[\\[\\]\\] is an OpenMP 5\\.1 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wopenmp\\-51\\-extensions[^\\]]*\\]", | |||
[e]=y, | |||
[i]={tb,1612659633,vb}, | |||
[j]={{M,4432,"/// ParseCXX11AttributeArgs -- Parse a C++11 attribute-argument-clause.\n///\n/// [C++11] attribute-argument-clause:\n/// \'(\' balanced-token-seq \')\'\n///\n/// [C++11] balanced-token-seq:\n/// balanced-token\n/// balanced-token-seq balanced-token\n///\n/// [C++11] balanced-token:\n/// \'(\' balanced-token-seq \')\'\n/// \'[\' balanced-token-seq \']\'\n/// \'{\' balanced-token-seq \'}\'\n/// any token but \'(\', \')\', \'[\', \']\', \'{\', or \'}\'\nbool Parser::ParseCXX11AttributeArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, CachedTokens &OpenMPTokens) {\n if (ScopeName && ScopeName->isStr(\"omp\")) {\n Diag(AttrNameLoc, getLangOpts().OpenMP >= 51 ? diag::warn_omp51_compat_attributes : diag::ext_omp_attributes);"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/OpenMP/openmp_attribute_compat.cpp"]={"clang/test/OpenMP/openmp_attribute_compat.cpp:17:8: warning: specifying OpenMP directives with [[]] is an OpenMP 5.1 extension [-Wopenmp-51-extensions]"} | ||
[i]={tb,1612659633, | } | ||
[j]={{ | |||
}, | }, | ||
["ext_omp_loop_not_canonical_init"]={ | ["ext_omp_loop_not_canonical_init"]={ | ||
[ | [c]="initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\') [-Wopenmp-loop-form]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"openmp","openmp-loop-form"}, | |||
[m]="openmp-loop-form", | |||
[h]="initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\')", | |||
[b]=o, | [b]=o, | ||
[ | [g]="initialization clause of OpenMP for loop is not in canonical form \\(\'var \\= init\' or \'T var \\= init\'\\)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wopenmp\\-loop\\-form[^\\]]*\\]", | |||
[e]="OpenMP Issue", | |||
[ | |||
[ | |||
[i]={"a8e9d2eccc6e",1401790607,"[OPENMP] Loop canonical form analysis (Sema)"}, | [i]={"a8e9d2eccc6e",1401790607,"[OPENMP] Loop canonical form analysis (Sema)"}, | ||
[j]={{ | [j]={{Fc,8200,"bool OpenMPIterationSpaceChecker::checkAndSetInit(Stmt *S, bool EmitDiags) {\n if (auto *BO = dyn_cast<BinaryOperator>(S)) {\n } else if (auto *DS = dyn_cast<DeclStmt>(S)) {\n if (DS->isSingleDecl()) {\n if (auto *Var = dyn_cast_or_null<VarDecl>(DS->getSingleDecl())) {\n if (Var->hasInit() && !Var->getType()->isReferenceType()) {\n // Accept non-canonical init form here but emit ext. warning.\n if (Var->getInitStyle() != VarDecl::CInit && EmitDiags)\n SemaRef.Diag(S->getBeginLoc(), diag::ext_omp_loop_not_canonical_init) << S->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/OpenMP/parallel_for_simd_loop_messages.cpp"]={"clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:306:8: warning: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\') [-Wopenmp-loop-form]","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:393:8: warning: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\') [-Wopenmp-loop-form]","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:397:8: warning: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\') [-Wopenmp-loop-form]","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:401:8: warning: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\') [-Wopenmp-loop-form]","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:405:8: warning: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\') [-Wopenmp-loop-form]","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:463:8: warning: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\') [-Wopenmp-loop-form]","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:481:8: warning: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\') [-Wopenmp-loop-form]"} | |||
} | |||
}, | }, | ||
["ext_on_off_switch_syntax"]={ | ["ext_on_off_switch_syntax"]={ | ||
[ | [c]="expected \'ON\' or \'OFF\' or \'DEFAULT\' in pragma [-Wunknown-pragmas]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={jb,qb,sb,"pragmas",fc}, | |||
[m]=fc, | |||
[h]="expected \'ON\' or \'OFF\' or \'DEFAULT\' in pragma", | |||
[b]=o, | [b]=o, | ||
[ | [g]="expected \'ON\' or \'OFF\' or \'DEFAULT\' in pragma", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-pragmas[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"3bffa5293303",1297647744,"Make LexOnOffSwitch a Preprocessor member function"}, | [i]={"3bffa5293303",1297647744,"Make LexOnOffSwitch a Preprocessor member function"}, | ||
[j]={{ | [j]={{mb,974,"bool Preprocessor::LexOnOffSwitch(tok::OnOffSwitch &Result) {\n if (Tok.isNot(tok::identifier)) {\n Diag(Tok, diag::ext_on_off_switch_syntax);"},{mb,985,"bool Preprocessor::LexOnOffSwitch(tok::OnOffSwitch &Result) {\n if (II->isStr(\"ON\"))\n else if (II->isStr(\"OFF\"))\n else if (II->isStr(\"DEFAULT\"))\n else {\n Diag(Tok, diag::ext_on_off_switch_syntax);"}}, | ||
[k]={ | |||
["clang/test/Parser/opencl-pragma.cl"]={"clang/test/Parser/opencl-pragma.cl:15:28: warning: expected \'ON\' or \'OFF\' or \'DEFAULT\' in pragma [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["ext_opencl_double_without_pragma"]={ | ["ext_opencl_double_without_pragma"]={ | ||
[ | [c]="Clang permits use of type \'double\' regardless pragma if \'cl_khr_fp64\' is supported [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="Clang permits use of type \'double\' regardless pragma if \'cl_khr_fp64\' is supported", | |||
[b]=o, | [b]=o, | ||
[ | [g]="Clang permits use of type \'double\' regardless pragma if \'cl_khr_fp64\' is supported", | ||
[a]=X, | |||
[e]=n, | |||
[i]={uc,1615397021,vc}, | |||
[j]={{S,1546,"/// 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 case DeclSpec::TST_double:\n if (S.getLangOpts().OpenCL) {\n if (!S.getOpenCLOptions().isSupported(\"cl_khr_fp64\", S.getLangOpts()))\n else if (!S.getOpenCLOptions().isAvailableOption(\"cl_khr_fp64\", S.getLangOpts()))\n S.Diag(DS.getTypeSpecTypeLoc(), diag::ext_opencl_double_without_pragma);"}}, | |||
[k]={ | |||
[ | ["clang/test/SemaOpenCL/fp64-fp16-options.cl"]={"clang/test/SemaOpenCL/fp64-fp16-options.cl:61:9: warning: Clang permits use of type \'double\' regardless pragma if \'cl_khr_fp64\' is supported [-Wpedantic]","clang/test/SemaOpenCL/fp64-fp16-options.cl:67:3: warning: Clang permits use of type \'double\' regardless pragma if \'cl_khr_fp64\' is supported [-Wpedantic]","clang/test/SemaOpenCL/fp64-fp16-options.cl:136:3: warning: Clang permits use of type \'double\' regardless pragma if \'cl_khr_fp64\' is supported [-Wpedantic]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_opencl_ext_vector_type_rgba_selector"]={ | ["ext_opencl_ext_vector_type_rgba_selector"]={ | ||
[ | [c]="vector component name \'A\' is a feature from OpenCL version 3.0 onwards [-Wopencl-unsupported-rgba]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"opencl-unsupported-rgba"}, | |||
[m]="opencl-unsupported-rgba", | |||
[h]="vector component name \'%0\' is a feature from OpenCL version 3.0 onwards", | |||
[b]=o, | [b]=o, | ||
[ | [g]="vector component name \'(.*?)\' is a feature from OpenCL version 3\\.0 onwards", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wopencl\\-unsupported\\-rgba[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"98eaa62e369d",1469213383,"Add .rgba syntax extension to ext_vector_type types"}, | [i]={"98eaa62e369d",1469213383,"Add .rgba syntax extension to ext_vector_type types"}, | ||
[j]={{"clang/lib/Sema/SemaExprMember.cpp",351,"/// Check an ext-vector component access expression.\n///\n/// VK should be set in advance to the value kind of the base\n/// expression.\nstatic QualType CheckExtVectorComponent(Sema &S, QualType baseType, ExprValueKind &VK, SourceLocation OpLoc, const IdentifierInfo *CompName, SourceLocation CompLoc) {\n // Check that we\'ve found one of the special components, or that the component\n // names must come from the same set.\n if (!strcmp(compStr, \"hi\") || !strcmp(compStr, \"lo\") || !strcmp(compStr, \"even\") || !strcmp(compStr, \"odd\")) {\n } else if (!HexSwizzle && (Idx = vecType->getPointAccessorIdx(*compStr)) != -1) {\n // Emit a warning if an rgba selector is used earlier than OpenCL C 3.0.\n if (HasRGBA || (*compStr && IsRGBA(*compStr))) {\n if (S.getLangOpts().OpenCL && S.getLangOpts().getOpenCLCompatibleVersion() < 300) {\n S.Diag(OpLoc, diag::ext_opencl_ext_vector_type_rgba_selector) << StringRef(DiagBegin, 1) << SourceRange(CompLoc);"}} | [j]={{"clang/lib/Sema/SemaExprMember.cpp",351,"/// Check an ext-vector component access expression.\n///\n/// VK should be set in advance to the value kind of the base\n/// expression.\nstatic QualType CheckExtVectorComponent(Sema &S, QualType baseType, ExprValueKind &VK, SourceLocation OpLoc, const IdentifierInfo *CompName, SourceLocation CompLoc) {\n // Check that we\'ve found one of the special components, or that the component\n // names must come from the same set.\n if (!strcmp(compStr, \"hi\") || !strcmp(compStr, \"lo\") || !strcmp(compStr, \"even\") || !strcmp(compStr, \"odd\")) {\n } else if (!HexSwizzle && (Idx = vecType->getPointAccessorIdx(*compStr)) != -1) {\n // Emit a warning if an rgba selector is used earlier than OpenCL C 3.0.\n if (HasRGBA || (*compStr && IsRGBA(*compStr))) {\n if (S.getLangOpts().OpenCL && S.getLangOpts().getOpenCLCompatibleVersion() < 300) {\n S.Diag(OpLoc, diag::ext_opencl_ext_vector_type_rgba_selector) << StringRef(DiagBegin, 1) << SourceRange(CompLoc);"}}, | ||
[k]={ | |||
["clang/test/SemaOpenCL/ext_vectors.cl"]={"clang/test/SemaOpenCL/ext_vectors.cl:13:8: warning: vector component name \'a\' is a feature from OpenCL version 3.0 onwards [-Wopencl-unsupported-rgba]","clang/test/SemaOpenCL/ext_vectors.cl:18:8: warning: vector component name \'r\' is a feature from OpenCL version 3.0 onwards [-Wopencl-unsupported-rgba]"} | |||
} | |||
}, | }, | ||
["ext_operator_new_delete_declared_inline"]={ | ["ext_operator_new_delete_declared_inline"]={ | ||
[ | [c]="replacement function A cannot be declared \'inline\' [-Winline-new-delete]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"inline-new-delete"}, | |||
[m]="inline-new-delete", | |||
[h]="replacement function %0 cannot be declared \'inline\'", | |||
[b]=o, | [b]=o, | ||
[ | [g]="replacement function (.*?) cannot be declared \'inline\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winline\\-new\\-delete[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"13dfdc88a9a2",1384562858,"Downgrade the Error on an \'inline\' operator new or delete to an ExtWarn. Some"}, | [i]={"13dfdc88a9a2",1384562858,"Downgrade the Error on an \'inline\' operator new or delete to an ExtWarn. Some"}, | ||
[j]={{ | [j]={{x,10344,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (!getLangOpts().CPlusPlus) {\n } else {\n // C++11 [replacement.functions]p3:\n // The program\'s definitions shall not be specified as inline.\n //\n // N.B. We diagnose declarations instead of definitions per LWG issue 2340.\n //\n // Suppress the diagnostic if the function is __attribute__((used)), since\n // that forces an external definition to be emitted.\n if (D.getDeclSpec().isInlineSpecified() && NewFD->isReplaceableGlobalAllocationFunction() && !NewFD->hasAttr<UsedAttr>())\n Diag(D.getDeclSpec().getInlineSpecLoc(), diag::ext_operator_new_delete_declared_inline) << NewFD->getDeclName();"}}, | ||
[k]={ | |||
["clang/test/CXX/drs/dr412.cpp"]={"clang/test/CXX/drs/dr412.cpp:14:1: error: replacement function \'operator new\' cannot be declared \'inline\' [-Werror,-Winline-new-delete]","clang/test/CXX/drs/dr412.cpp:15:1: error: replacement function \'operator new[]\' cannot be declared \'inline\' [-Werror,-Winline-new-delete]","clang/test/CXX/drs/dr412.cpp:16:1: error: replacement function \'operator delete\' cannot be declared \'inline\' [-Werror,-Winline-new-delete]","clang/test/CXX/drs/dr412.cpp:17:1: error: replacement function \'operator delete[]\' cannot be declared \'inline\' [-Werror,-Winline-new-delete]"} | |||
} | |||
}, | }, | ||
["ext_operator_overload_static"]={ | ["ext_operator_overload_static"]={ | ||
[ | [c]="declaring overloaded A as \'static\' is a C++23 extension [-Wc++23-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={fb,Eb}, | |||
[m]=fb, | |||
[h]="declaring overloaded %0 as \'static\' is a C++23 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="declaring overloaded (.*?) as \'static\' is a C\\+\\+23 extension", | ||
[a]=Fb, | |||
[e]=n, | |||
[i]={O,1625925174,N}, | |||
[j]={{A,16152,"/// 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 // 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;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaCXX/overloaded-operator-decl.cpp"]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:54:17: warning: declaring overloaded \'operator()\' as \'static\' is a C++23 extension [-Wc++23-extensions]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_out_of_line_declaration"]={ | ["ext_out_of_line_declaration"]={ | ||
[ | [c]="out-of-line declaration of a member must be a definition [-Wout-of-line-declaration]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"out-of-line-declaration"}, | ||
[ | [m]="out-of-line-declaration", | ||
[ | [h]="out-of-line declaration of a member must be a definition", | ||
[ | [b]=R, | ||
[ | [g]="out\\-of\\-line declaration of a member must be a definition", | ||
[ | [a]=" \\[[^\\]]*\\-Wout\\-of\\-line\\-declaration[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"9339605c3545",1279254748,"Butcher a perfectly reasonable diagnostic to pacify old versions of SWIG."}, | [i]={"9339605c3545",1279254748,"Butcher a perfectly reasonable diagnostic to pacify old versions of SWIG."}, | ||
[j]={{ | [j]={{x,10576,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (!getLangOpts().CPlusPlus) {\n } else {\n if (NewFD->isInvalidDecl()) {\n } else if (!D.isRedeclaration()) {\n } else if (!D.isFunctionDefinition() && isa<CXXMethodDecl>(NewFD) && NewFD->isOutOfLine() && !isFriend && !isFunctionTemplateSpecialization && !isMemberSpecialization) {\n Diag(NewFD->getLocation(), diag::ext_out_of_line_declaration) << D.getCXXScopeSpec().getRange();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:107:18: error: out-of-line declaration of a member must be a definition [-Wout-of-line-declaration]"} | |||
} | |||
}, | }, | ||
["ext_out_of_line_qualified_id_type_names_constructor"]={ | ["ext_out_of_line_qualified_id_type_names_constructor"]={ | ||
[ | [c]="ISO C++ specifies that qualified reference to A is a constructor name rather than a ... in this context, despite preceding ... keyword [-Winjected-class-name]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"injected-class-name"}, | |||
[m]="injected-class-name", | |||
[h]="ISO C++ specifies that qualified reference to %0 is a constructor name rather than a %select{template name|type}1 in this context, despite preceding %select{\'typename\'|\'template\'}2 keyword", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+ specifies that qualified reference to (.*?) is a constructor name rather than a (?:template name|type) in this context, despite preceding (?:\'typename\'|\'template\') keyword", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winjected\\-class\\-name[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"74f02347ca16",1484859613,"PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310)."}, | [i]={"74f02347ca16",1484859613,"PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310)."}, | ||
[j]={{ | [j]={{F,4173,"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 if (!IsCtorOrDtorName && !IsClassName && SS.isSet()) {\n if (LookupRD && LookupRD->getIdentifier() == TemplateII) {\n Diag(TemplateIILoc, TemplateKWLoc.isInvalid() ? diag::err_out_of_line_qualified_id_type_names_constructor : diag::ext_out_of_line_qualified_id_type_names_constructor) << TemplateII << 0 /*injected-class-name used as template name*/"},{F,5133,"/// 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 (TNK != TNK_Non_template) {\n if (!AllowInjectedClassName && SS.isNotEmpty() && LookupRD && Name.getKind() == UnqualifiedIdKind::IK_Identifier && Name.Identifier && LookupRD->getIdentifier() == Name.Identifier) {\n Diag(Name.getBeginLoc(), diag::ext_out_of_line_qualified_id_type_names_constructor) << Name.Identifier << 0 /*injected-class-name used as template name*/"},{F,10853,"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 // Strangely, non-type results are not ignored by this lookup, so the\n // program is ill-formed if it finds an injected-class-name.\n if (TypenameLoc.isValid()) {\n if (LookupRD && LookupRD->getIdentifier() == TemplateII) {\n Diag(TemplateIILoc, diag::ext_out_of_line_qualified_id_type_names_constructor) << TemplateII << 0 /*injected-class-name used as template name*/"},{F,11108,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n case LookupResult::Found:\n if (TypeDecl *Type = dyn_cast<TypeDecl>(Result.getFoundDecl())) {\n if (Keyword == ETK_Typename && LookupRD && FoundRD && FoundRD->isInjectedClassName() && declaresSameEntity(LookupRD, cast<Decl>(FoundRD->getParent())))\n Diag(IILoc, diag::ext_out_of_line_qualified_id_type_names_constructor) << &II << 1 << 0 /*\'typename\' keyword used*/;"}}, | ||
[k]={ | |||
["clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:38:47: warning: ISO C++ specifies that qualified reference to \'X1\' is a constructor name rather than a template name in this context, despite preceding \'template\' keyword [-Winjected-class-name]","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:39:47: warning: ISO C++ specifies that qualified reference to \'X1\' is a constructor name rather than a template name in this context, despite preceding \'template\' keyword [-Winjected-class-name]","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:61:18: warning: ISO C++ specifies that qualified reference to \'X0\' is a constructor name rather than a type in this context, despite preceding \'typename\' keyword [-Winjected-class-name]","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:62:23: warning: ISO C++ specifies that qualified reference to \'X1\' is a constructor name rather than a template name in this context, despite preceding \'typename\' keyword [-Winjected-class-name]","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:81:15: warning: ISO C++ specifies that qualified reference to \'X0\' is a constructor name rather than a type in this context, despite preceding \'typename\' keyword [-Winjected-class-name]","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:88:15: warning: ISO C++ specifies that qualified reference to \'X1\' is a constructor name rather than a type in this context, despite preceding \'typename\' keyword [-Winjected-class-name]","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:89:24: warning: ISO C++ specifies that qualified reference to \'X1\' is a constructor name rather than a template name in this context, despite preceding \'template\' keyword [-Winjected-class-name]","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:106:17: warning: ISO C++ specifies that qualified reference to \'B\' is a constructor name rather than a type in this context, despite preceding \'typename\' keyword [-Winjected-class-name]"} | |||
} | |||
}, | }, | ||
["ext_override_control_keyword"]={ | ["ext_override_control_keyword"]={ | ||
[ | [c]="\'A\' keyword is a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="\'%0\' keyword is a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'(.*?)\' keyword is a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"5a72fdb05b64",1295737309,"Accept the C++0x override control keywords as an extension in C++98. This is OK since the new syntax..."}, | [i]={"5a72fdb05b64",1295737309,"Accept the C++0x override control keywords as an extension in C++98. This is OK since the new syntax..."}, | ||
[j]={{ | [j]={{M,2474,"/// 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 if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n } else if (Specifier == VirtSpecifiers::VS_Sealed) {\n } else if (Specifier == VirtSpecifiers::VS_Abstract) {\n } else if (Specifier == VirtSpecifiers::VS_GNU_Final) {\n } else {\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_override_control_keyword : diag::ext_override_control_keyword) << VirtSpecifiers::getSpecifierName(Specifier);"},{M,3529,"/// 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 // Parse the optional \'final\' keyword.\n if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n while (true) {\n if (TagType == DeclSpec::TST_interface)\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);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx0x-in-cxx98.cpp"]={"clang/test/Parser/cxx0x-in-cxx98.cpp:15:10: warning: \'final\' keyword is a C++11 extension [-Wc++11-extensions]","clang/test/Parser/cxx0x-in-cxx98.cpp:16:20: warning: \'override\' keyword is a C++11 extension [-Wc++11-extensions]","clang/test/Parser/cxx0x-in-cxx98.cpp:17:20: warning: \'final\' keyword is a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_override_exception_spec"]={ | ["ext_override_exception_spec"]={ | ||
[ | [c]="exception specification of overriding function is more lax than base version [-Wmicrosoft-exception-spec]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,Hb}, | |||
[m]=Hb, | |||
[h]="exception specification of overriding function is more lax than base version", | |||
[b]=o, | [b]=o, | ||
[ | [g]="exception specification of overriding function is more lax than base version", | ||
[a]=Pc, | |||
[e]=n, | |||
[ | [i]={nb,1405733957,lb}, | ||
[ | [j]={{Ab,992,"bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n if (getLangOpts().MSVCCompat)\n DiagID = diag::ext_override_exception_spec;"},{Ab,996,"bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n return CheckExceptionSpecSubset(PDiag(DiagID), PDiag(diag::err_deep_exception_specs_differ), PDiag(diag::note_overridden_virtual_function), PDiag(diag::ext_override_exception_spec), Old->getType()->castAs<FunctionProtoType>(), Old->getLocation(), New->getType()->castAs<FunctionProtoType>(), New->getLocation());"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/nothrow-vs-exception-specs.cpp"]={"clang/test/SemaCXX/nothrow-vs-exception-specs.cpp:88:8: warning: exception specification of overriding function is more lax than base version [-Wmicrosoft-exception-spec]"} | |||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_ovl_ambiguous_oper_binary_reversed"]={ | ["ext_ovl_ambiguous_oper_binary_reversed"]={ | ||
[ | [c]="ISO C++20 considers use of overloaded operator \'A\' (with operand types B and C) to be ambiguous despite there being a unique best viable function... [-Wambiguous-reversed-operator]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"ambiguous-reversed-operator"}, | |||
[m]="ambiguous-reversed-operator", | |||
[h]="ISO C++20 considers use of overloaded operator \'%0\' (with operand types %1 and %2) to be ambiguous despite there being a unique best viable function%select{ with non-reversed arguments|}3", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+20 considers use of overloaded operator \'(.*?)\' \\(with operand types (.*?) and (.*?)\\) to be ambiguous despite there being a unique best viable function(?: with non\\-reversed arguments|)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wambiguous\\-reversed\\-operator[^\\]]*\\]", | |||
[e]=n, | |||
[i]={Vb,1567434909,cc}, | |||
[j]={{Lb,14045,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n/// C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n/// the function in question. Such a function is never a candidate in\n/// our overload resolution. This also enables synthesizing a three-way\n/// comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n case OR_Success: {\n if (FnDecl) {\n if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n if (!AmbiguousWith.empty()) {\n Diag(OpLoc, diag::ext_ovl_ambiguous_oper_binary_reversed) << BinaryOperator::getOpcodeStr(Opc) << Args[0]->getType() << Args[1]->getType() << AmbiguousWithSelf << Args[0]->getSourceRange() << Args[1]->getSourceRange();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/CXX/class/class.compare/class.eq/p2.cpp"]={"clang/test/CXX/class/class.compare/class.eq/p2.cpp:130:45: warning: ISO C++20 considers use of overloaded operator \'==\' (with operand types \'Y\' and \'Y\') to be ambiguous despite there being a unique best viable function [-Wambiguous-reversed-operator]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_ovl_rewrite_equalequal_not_bool"]={ | ["ext_ovl_rewrite_equalequal_not_bool"]={ | ||
[ | [c]="ISO C++20 requires return type of selected \'operator==\' function for rewritten \'A\' comparison to be \'bool\', not B [-Wrewrite-not-bool]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"rewrite-not-bool"}, | |||
[m]="rewrite-not-bool", | |||
[h]="ISO C++20 requires return type of selected \'operator==\' function for rewritten \'%1\' comparison to be \'bool\', not %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+20 requires return type of selected \'operator\\=\\=\' function for rewritten \'(.*?)\' comparison to be \'bool\', not (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wrewrite\\-not\\-bool[^\\]]*\\]", | |||
[e]=n, | |||
[i]={Jb,1576908663,Ib}, | |||
[j]={{Lb,14010,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n/// C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n/// the function in question. Such a function is never a candidate in\n/// our overload resolution. This also enables synthesizing a three-way\n/// comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n case OR_Success: {\n if (FnDecl) {\n // C++2a [over.match.oper]p9:\n // If a rewritten operator== candidate is selected by overload\n // resolution for an operator@, its return type shall be cv bool\n if (Best->RewriteKind && ChosenOp == OO_EqualEqual && !FnDecl->getReturnType()->isBooleanType()) {\n Diag(OpLoc, IsExtension ? diag::ext_ovl_rewrite_equalequal_not_bool : diag::err_ovl_rewrite_equalequal_not_bool) << FnDecl->getReturnType() << BinaryOperator::getOpcodeStr(Opc) << Args[0]->getSourceRange() << Args[1]->getSourceRange();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp"]={"clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp:24:14: warning: ISO C++20 requires return type of selected \'operator==\' function for rewritten \'==\' comparison to be \'bool\', not \'int\' [-Wrewrite-not-bool]","clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp:28:14: warning: ISO C++20 requires return type of selected \'operator==\' function for rewritten \'==\' comparison to be \'bool\', not \'E\' [-Wrewrite-not-bool]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_param_default_argument_redefinition"]={ | ["ext_param_default_argument_redefinition"]={ | ||
[ | [c]="redefinition of default argument [-Wmicrosoft-default-arg-redefinition]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-default-arg-redefinition"}, | |||
[m]="microsoft-default-arg-redefinition", | |||
[h]="redefinition of default argument", | |||
[b]=o, | [b]=o, | ||
[ | [g]="redefinition of default argument", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-default\\-arg\\-redefinition[^\\]]*\\]", | |||
[e]=n, | |||
[ | [i]={nb,1405733957,lb}, | ||
[j]={{A,553,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n // C++ [dcl.fct.default]p4:\n // For non-template functions, default arguments can be added in\n // later declarations of a function in the same\n // scope. Declarations in different scopes have completely\n // distinct sets of default arguments. That is, declarations in\n // inner scopes do not acquire default arguments from\n // declarations in outer scopes, and vice versa. In a given\n // function declaration, all parameters subsequent to a\n // parameter with a default argument shall have default\n // arguments supplied in this or previous declarations. A\n // default argument shall not be redefined by a later\n // declaration (not even to the same value).\n //\n // C++ [dcl.fct.default]p6:\n // Except for member functions of class templates, the default arguments\n // in a member function definition that appears outside of the class\n // definition are added to the set of default arguments provided by the\n // member function declaration in the class definition.\n for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n if (OldParamHasDfl && NewParamHasDfl) {\n if (getLangOpts().MicrosoftExt) {\n if (MD && MD->getParent()->getDescribedClassTemplate()) {\n DiagDefaultParamID = diag::ext_param_default_argument_redefinition;"}}, | |||
[k]={ | |||
[ | [Kc]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:202:19: warning: redefinition of default argument [-Wmicrosoft-default-arg-redefinition]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_param_not_declared"]={ | ["ext_param_not_declared"]={ | ||
[ | [c]="parameter A was not declared, defaults to \'int\'; ISO C99 and later do not support implicit int [-Wimplicit-int]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={jb,qb,Ec,"implicit-int",sb}, | ||
[ | [m]="implicit-int", | ||
[ | [h]="parameter %0 was not declared, defaults to \'int\'; ISO C99 and later do not support implicit int", | ||
[ | [b]=R, | ||
[ | [g]="parameter (.*?) was not declared, defaults to \'int\'; ISO C99 and later do not support implicit int", | ||
[ | [a]=" \\[[^\\]]*\\-Wimplicit\\-int[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={ | [i]={C,1236199783,D}, | ||
[j]={{ | [j]={{x,14993,"void Sema::ActOnFinishKNRParamDeclarations(Scope *S, Declarator &D, SourceLocation LocAfterDecls) {\n // C99 6.9.1p6 \"If a declarator includes an identifier list, each declaration\n // in the declaration list shall have at least one declarator, those\n // declarators shall only declare identifiers from the identifier list, and\n // every identifier in the identifier list shall be declared.\n //\n // C89 3.7.1p5 \"If a declarator includes an identifier list, only the\n // identifiers it names shall be declared in the declaration list.\"\n //\n // This is why we only diagnose in C99 and later. Note, the other conditions\n // listed are checked elsewhere.\n if (!FTI.hasPrototype) {\n for (int i = FTI.NumParams; i != 0; /* decrement in loop */) {\n if (FTI.Params[i].Param == nullptr) {\n if (getLangOpts().C99) {\n Diag(FTI.Params[i].IdentLoc, diag::ext_param_not_declared) << FTI.Params[i].Ident << FixItHint::CreateInsertion(LocAfterDecls, Code);"}}, | ||
[k]={ | |||
["clang/test/Sema/redefinition.c"]={"clang/test/Sema/redefinition.c:7:9: error: parameter \'x\' was not declared, defaults to \'int\'; ISO C99 and later do not support implicit int [-Wimplicit-int]"} | |||
} | |||
}, | }, | ||
["ext_param_promoted_not_compatible_with_prototype"]={ | ["ext_param_promoted_not_compatible_with_prototype"]={ | ||
[ | [c]="promoted type A of K&R function parameter is not compatible with the parameter type B declared in a previous prototype [-Wknr-promoted-parameter]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"knr-promoted-parameter"}, | |||
[m]="knr-promoted-parameter", | |||
[h]="%diff{promoted type $ of K&R function parameter is not compatible with the parameter type $|promoted type of K&R function parameter is not compatible with parameter type}0,1 declared in a previous prototype", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(?:promoted type (.*?) of K&R function parameter is not compatible with the parameter type (.*?)|promoted type of K&R function parameter is not compatible with parameter type) declared in a previous prototype", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wknr\\-promoted\\-parameter[^\\]]*\\]", | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{x,4269,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n // GNU C permits a K&R definition to follow a prototype declaration\n // if the declared types of the parameters in the K&R definition\n // match the types in the prototype declaration, even when the\n // promoted types of the parameters from the K&R definition differ\n // from the types in the prototype. GCC then keeps the types from\n // the prototype.\n //\n // If a variadic prototype is followed by a non-variadic K&R definition,\n // the K&R definition becomes variadic. This is sort of an edge case, but\n // it\'s legal per the standard depending on how you read C99 6.7.5.3p15 and\n // C99 6.9.1p8.\n if (!getLangOpts().CPlusPlus && Old->hasPrototype() && !New->hasPrototype() && New->getType()->getAs<FunctionProtoType>() && Old->getNumParams() == New->getNumParams()) {\n if (LooseCompatible) {\n for (unsigned Warn = 0; Warn < Warnings.size(); ++Warn) {\n Diag(Warnings[Warn].NewParm->getLocation(), diag::ext_param_promoted_not_compatible_with_prototype) << Warnings[Warn].PromotedType << Warnings[Warn].OldParm->getType();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Sema/knr-def-call.c"]={"clang/test/Sema/knr-def-call.c:15:18: warning: promoted type \'double\' of K&R function parameter is not compatible with the parameter type \'float\' declared in a previous prototype [-Wknr-promoted-parameter]","clang/test/Sema/knr-def-call.c:29:21: warning: promoted type \'char *\' of K&R function parameter is not compatible with the parameter type \'const char *\' declared in a previous prototype [-Wknr-promoted-parameter]","clang/test/Sema/knr-def-call.c:49:9: warning: promoted type \'int\' of K&R function parameter is not compatible with the parameter type \'short\' declared in a previous prototype [-Wknr-promoted-parameter]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_parameter_name_omitted_c2x"]={ | ["ext_parameter_name_omitted_c2x"]={ | ||
[ | [c]="omitting the parameter name in a function definition is a C2x extension [-Wc2x-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={rb}, | |||
[m]=rb, | |||
[h]="omitting the parameter name in a function definition is a C2x extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="omitting the parameter name in a function definition is a C2x extension", | ||
[a]=Xb, | |||
[e]=n, | |||
[ | [i]={Jb,1576908663,Ib}, | ||
[j]={{bb,16654,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n for (ParmVarDecl *Param : Parameters) {\n // C99 6.9.1p5: If the declarator includes a parameter type list, the\n // declaration of each parameter shall include an identifier.\n if (CheckParameterNames && Param->getIdentifier() == nullptr && !Param->isImplicit() && !getLangOpts().CPlusPlus) {\n // Diagnose this as an extension in C17 and earlier.\n if (!getLangOpts().C2x)\n Diag(Param->getLocation(), diag::ext_parameter_name_omitted_c2x);"},{z,16955,"void Sema::ActOnBlockArguments(SourceLocation CaretLoc, Declarator &ParamInfo, Scope *CurScope) {\n if (ExplicitSignature) {\n for (unsigned I = 0, E = ExplicitSignature.getNumParams(); I != E; ++I) {\n if (Param->getIdentifier() == nullptr && !Param->isImplicit() && !Param->isInvalidDecl() && !getLangOpts().CPlusPlus) {\n // Diagnose this as an extension in C17 and earlier.\n if (!getLangOpts().C2x)\n Diag(Param->getLocation(), diag::ext_parameter_name_omitted_c2x);"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:33:13: warning: omitting the parameter name in a function definition is a C2x extension [-Wc2x-extensions]","clang/test/Sema/function.c:83:23: warning: omitting the parameter name in a function definition is a C2x extension [-Wc2x-extensions]"} | ||
[i]={ | } | ||
[j]={{bb,16654,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n for (ParmVarDecl *Param : Parameters) {\n // C99 6.9.1p5: If the declarator includes a parameter type list, the\n // declaration of each parameter shall include an identifier.\n if (CheckParameterNames && Param->getIdentifier() == nullptr && !Param->isImplicit() && !getLangOpts().CPlusPlus) {\n // Diagnose this as an extension in C17 and earlier.\n if (!getLangOpts().C2x)\n Diag(Param->getLocation(), diag::ext_parameter_name_omitted_c2x);"},{ | |||
}, | }, | ||
["ext_partial_spec_not_more_specialized_than_primary"]={ | ["ext_partial_spec_not_more_specialized_than_primary"]={ | ||
[ | [c]="... template partial specialization is not more specialized than the primary template [-Winvalid-partial-specialization]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"invalid-partial-specialization"}, | ||
[ | [m]="invalid-partial-specialization", | ||
[ | [h]="%select{class|variable}0 template partial specialization is not more specialized than the primary template", | ||
[ | [b]=R, | ||
[ | [g]="(?:class|variable) template partial specialization is not more specialized than the primary template", | ||
[ | [a]=" \\[[^\\]]*\\-Winvalid\\-partial\\-specialization[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"fa4a09d8afbf",1482868989,"Add warning flag for \"partial specialization is not more specialized than primary template\" error (s..."}, | [i]={"fa4a09d8afbf",1482868989,"Add warning flag for \"partial specialization is not more specialized than primary template\" error (s..."}, | ||
[j]={{ | [j]={{F,4412,"template <typename PartialSpecDecl> static void checkMoreSpecializedThanPrimary(Sema &S, PartialSpecDecl *Partial) {\n S.Diag(Partial->getLocation(), diag::ext_partial_spec_not_more_specialized_than_primary) << isa<VarTemplateDecl>(Template);"}}, | ||
[k]={ | |||
["clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp:9:6: error: variable template partial specialization is not more specialized than the primary template [-Winvalid-partial-specialization]"} | |||
} | |||
}, | }, | ||
["ext_partial_specs_not_deducible"]={ | ["ext_partial_specs_not_deducible"]={ | ||
[ | [c]="... template partial specialization contains ... that cannot be deduced; this partial specialization will never be used [-Wunusable-partial-specialization]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"unusable-partial-specialization"}, | ||
[ | [m]="unusable-partial-specialization", | ||
[ | [h]="%select{class|variable}0 template partial specialization contains %select{a template parameter|template parameters}1 that cannot be deduced; this partial specialization will never be used", | ||
[ | [b]=R, | ||
[ | [g]="(?:class|variable) template partial specialization contains (?:a template parameter|template parameters) that cannot be deduced; this partial specialization will never be used", | ||
[ | [a]=" \\[[^\\]]*\\-Wunusable\\-partial\\-specialization[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"57aae07b4a31",1482892645,"DR1315: a non-type template argument in a partial specialization is permitted"}, | [i]={"57aae07b4a31",1482892645,"DR1315: a non-type template argument in a partial specialization is permitted"}, | ||
[j]={{ | [j]={{F,4473,"template <typename PartialSpecDecl> static void checkTemplatePartialSpecialization(Sema &S, PartialSpecDecl *Partial) {\n if (!DeducibleParams.all()) {\n S.Diag(Partial->getLocation(), diag::ext_partial_specs_not_deducible) << isa<VarTemplatePartialSpecializationDecl>(Partial) << (NumNonDeducible > 1) << SourceRange(Partial->getLocation(), Partial->getTemplateArgsAsWritten()->RAngleLoc);"}}, | ||
[k]={ | |||
["clang/test/CXX/temp/temp.decls/temp.class.spec/p8-1y.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class.spec/p8-1y.cpp:25:39: error: variable template partial specialization contains a template parameter that cannot be deduced; this partial specialization will never be used [-Wunusable-partial-specialization]","clang/test/CXX/temp/temp.decls/temp.class.spec/p8-1y.cpp:31:65: error: variable template partial specialization contains a template parameter that cannot be deduced; this partial specialization will never be used [-Wunusable-partial-specialization]","clang/test/CXX/temp/temp.decls/temp.class.spec/p8-1y.cpp:25:39: error: variable template partial specialization contains a template parameter that cannot be deduced; this partial specialization will never be used [-Wunusable-partial-specialization]","clang/test/CXX/temp/temp.decls/temp.class.spec/p8-1y.cpp:25:39: error: variable template partial specialization contains a template parameter that cannot be deduced; this partial specialization will never be used [-Wunusable-partial-specialization]"} | |||
} | |||
}, | }, | ||
["ext_paste_comma"]={ | ["ext_paste_comma"]={ | ||
[ | [c]="token pasting of \',\' and __VA_ARGS__ is a GNU extension [-Wgnu-zero-variadic-macro-arguments]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-zero-variadic-macro-arguments",v}, | |||
[m]="gnu-zero-variadic-macro-arguments", | |||
[h]="token pasting of \',\' and __VA_ARGS__ is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="token pasting of \',\' and __VA_ARGS__ is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-zero\\-variadic\\-macro\\-arguments[^\\]]*\\]", | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[ | [j]={{"clang/lib/Lex/TokenLexer.cpp",168,"bool TokenLexer::MaybeRemoveCommaBeforeVaArgs(SmallVectorImpl<Token> &ResultToks, bool HasPasteOperator, MacroInfo *Macro, unsigned MacroArgNo, Preprocessor &PP) {\n // Issue an extension diagnostic for the paste operator.\n if (HasPasteOperator)\n PP.Diag(ResultToks.back().getLocation(), diag::ext_paste_comma);"},{"clang/lib/Lex/TokenLexer.cpp",526,"/// Expand the arguments of a function-like macro so that we can quickly\n/// return preexpanded tokens from Tokens.\nvoid TokenLexer::ExpandFunctionArguments() {\n for (unsigned I = 0, E = NumTokens; I != E; ++I) {\n if (NumToks) { // Not an empty argument?\n // If this is the GNU \", ## __VA_ARGS__\" extension, and we just learned\n // that __VA_ARGS__ expands to multiple tokens, avoid a pasting error when\n // the expander tries to paste \',\' with the first token of the __VA_ARGS__\n // expansion.\n if (NonEmptyPasteBefore && ResultToks.size() >= 2 && ResultToks[ResultToks.size() - 2].is(tok::comma) && (unsigned)ArgNo == Macro->getNumParams() - 1 && Macro->isVariadic()) {\n PP.Diag(ResultToks.pop_back_val().getLocation(), diag::ext_paste_comma);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:52:32: warning: token pasting of \',\' and __VA_ARGS__ is a GNU extension [-Wgnu-zero-variadic-macro-arguments]"} | |||
[ | } | ||
[i]={ | |||
[j]={{"clang/lib/Lex/TokenLexer.cpp",168,"bool TokenLexer::MaybeRemoveCommaBeforeVaArgs(SmallVectorImpl<Token> &ResultToks, bool HasPasteOperator, MacroInfo *Macro, unsigned MacroArgNo, Preprocessor &PP) {\n // Issue an extension diagnostic for the paste operator.\n if (HasPasteOperator)\n PP.Diag(ResultToks.back().getLocation(), diag::ext_paste_comma);"},{"clang/lib/Lex/TokenLexer.cpp",526,"/// Expand the arguments of a function-like macro so that we can quickly\n/// return preexpanded tokens from Tokens.\nvoid TokenLexer::ExpandFunctionArguments() {\n for (unsigned I = 0, E = NumTokens; I != E; ++I) {\n if (NumToks) { // Not an empty argument?\n // If this is the GNU \", ## __VA_ARGS__\" extension, and we just learned\n // that __VA_ARGS__ expands to multiple tokens, avoid a pasting error when\n // the expander tries to paste \',\' with the first token of the __VA_ARGS__\n // expansion.\n if (NonEmptyPasteBefore && ResultToks.size() >= 2 && ResultToks[ResultToks.size() - 2].is(tok::comma) && (unsigned)ArgNo == Macro->getNumParams() - 1 && Macro->isVariadic()) {\n PP.Diag(ResultToks.pop_back_val().getLocation(), diag::ext_paste_comma);"}} | |||
}, | }, | ||
["ext_plain_complex"]={ | ["ext_plain_complex"]={ | ||
[ | [c]="plain \'_Complex\' requires a type specifier; assuming \'_Complex double\'", | ||
[ | [d]=q, | ||
[f]=p, | |||
[h]="plain \'_Complex\' requires a type specifier; assuming \'_Complex double\'", | |||
[b]=o, | [b]=o, | ||
[ | [g]="plain \'_Complex\' requires a type specifier; assuming \'_Complex double\'", | ||
[ | [a]=Mb, | ||
[e]=n, | |||
[i]={C,1236199783,D}, | |||
[ | [j]={{wc,1307,"/// 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 // TODO: if the implementation does not implement _Complex or _Imaginary,\n // disallow their use. Need information about the backend.\n if (TypeSpecComplex != TSC_unspecified) {\n if (TypeSpecType == TST_unspecified) {\n S.Diag(TSCLoc, diag::ext_plain_complex) << FixItHint::CreateInsertion(S.getLocForEndOfToken(getTypeSpecComplexLoc()), \" double\");"}}, | ||
[i]={ | [k]={ | ||
[j]={{ | ["clang/test/FixIt/fixit-recompile.c"]={"clang/test/FixIt/fixit-recompile.c:4:1: error: plain \'_Complex\' requires a type specifier; assuming \'_Complex double\' [-Werror]"} | ||
} | |||
}, | }, | ||
["ext_pointer_to_const_ref_member_on_rvalue"]={ | ["ext_pointer_to_const_ref_member_on_rvalue"]={ | ||
[ | [c]="invoking a pointer to a \'const &\' member function on an rvalue is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={K,cb,v}, | |||
[m]=K, | |||
[h]="invoking a pointer to a \'const &\' member function on an rvalue is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="invoking a pointer to a \'const &\' member function on an rvalue is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"2592327dae05",1503625675,"[c++2a] P0704R1: Allow pointers to const& member functions to be called on rvalues."}, | [i]={"2592327dae05",1503625675,"[c++2a] P0704R1: Allow pointers to const& member functions to be called on rvalues."}, | ||
[j]={{ | [j]={{Y,6092,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\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 case RQ_LValue:\n if (!isIndirect && !LHS.get()->Classify(Context).isLValue()) {\n // C++2a allows functions with ref-qualifier & if their cv-qualifier-seq\n // is (exactly) \'const\'.\n if (Proto->isConst() && !Proto->isVolatile())\n Diag(Loc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue : diag::ext_pointer_to_const_ref_member_on_rvalue);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/cxx17-compat.cpp"]={"clang/test/SemaCXX/cxx17-compat.cpp:6:18: warning: invoking a pointer to a \'const &\' member function on an rvalue is a C++20 extension [-Wc++20-extensions]"} | |||
} | |||
}, | }, | ||
["ext_pp_bad_paste_ms"]={ | ["ext_pp_bad_paste_ms"]={ | ||
[ | [c]="pasting formed \'A\', an invalid preprocessing token [-Winvalid-token-paste]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"invalid-token-paste"}, | ||
[ | [m]="invalid-token-paste", | ||
[ | [h]="pasting formed \'%0\', an invalid preprocessing token", | ||
[ | [b]=R, | ||
[ | [g]="pasting formed \'(.*?)\', an invalid preprocessing token", | ||
[ | [a]=" \\[[^\\]]*\\-Winvalid\\-token\\-paste[^\\]]*\\]", | ||
[ | [e]=B, | ||
[i]={"7b1573451eac",1392684350,"Fix a non-error diagnostic that had an err_ name. Also move it from Warning to"}, | [i]={"7b1573451eac",1392684350,"Fix a non-error diagnostic that had an err_ name. Also move it from Warning to"}, | ||
[j]={{"clang/lib/Lex/TokenLexer.cpp",869,"/// LHSTok is the LHS of a ## operator, and CurTokenIdx is the ##\n/// operator. Read the ## and RHS, and paste the LHS/RHS together. If there\n/// are more ## after it, chomp them iteratively. Return the result as LHSTok.\n/// If this returns true, the caller should immediately return the token.\nbool TokenLexer::pasteTokens(Token &LHSTok, ArrayRef<Token> TokenStream, unsigned int &CurIdx) {\n do {\n if (LHSTok.isAnyIdentifier() && RHS.isAnyIdentifier()) {\n } else {\n // If pasting the two tokens didn\'t form a full new token, this is an\n // error. This occurs with \"x ## +\" and other stuff. Return with LHSTok\n // unmodified and with RHS as the next token to lex.\n if (isInvalid) {\n // Do not emit the error when preprocessing assembler code.\n if (!PP.getLangOpts().AsmPreprocessor) {\n PP.Diag(Loc, PP.getLangOpts().MicrosoftExt ? diag::ext_pp_bad_paste_ms : diag::err_pp_bad_paste) << Buffer;"}} | [j]={{"clang/lib/Lex/TokenLexer.cpp",869,"/// LHSTok is the LHS of a ## operator, and CurTokenIdx is the ##\n/// operator. Read the ## and RHS, and paste the LHS/RHS together. If there\n/// are more ## after it, chomp them iteratively. Return the result as LHSTok.\n/// If this returns true, the caller should immediately return the token.\nbool TokenLexer::pasteTokens(Token &LHSTok, ArrayRef<Token> TokenStream, unsigned int &CurIdx) {\n do {\n if (LHSTok.isAnyIdentifier() && RHS.isAnyIdentifier()) {\n } else {\n // If pasting the two tokens didn\'t form a full new token, this is an\n // error. This occurs with \"x ## +\" and other stuff. Return with LHSTok\n // unmodified and with RHS as the next token to lex.\n if (isInvalid) {\n // Do not emit the error when preprocessing assembler code.\n if (!PP.getLangOpts().AsmPreprocessor) {\n PP.Diag(Loc, PP.getLangOpts().MicrosoftExt ? diag::ext_pp_bad_paste_ms : diag::err_pp_bad_paste) << Buffer;"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/macro_paste_msextensions.c"]={"clang/test/Preprocessor/macro_paste_msextensions.c:35:1: error: pasting formed \'(baz\', an invalid preprocessing token [-Winvalid-token-paste]","clang/test/Preprocessor/macro_paste_msextensions.c:42:1: error: pasting formed \'1a-\', an invalid preprocessing token [-Winvalid-token-paste]","clang/test/Preprocessor/macro_paste_msextensions.c:42:1: error: pasting formed \'-b2\', an invalid preprocessing token [-Winvalid-token-paste]","clang/test/Preprocessor/macro_paste_msextensions.c:42:1: error: pasting formed \'b2-\', an invalid preprocessing token [-Winvalid-token-paste]","clang/test/Preprocessor/macro_paste_msextensions.c:42:1: error: pasting formed \'-3c\', an invalid preprocessing token [-Winvalid-token-paste]"} | |||
} | |||
}, | }, | ||
["ext_pp_bad_vaargs_use"]={ | ["ext_pp_bad_vaargs_use"]={ | ||
[ | [c]="__VA_ARGS__ can only appear in the expansion of a C99 variadic macro [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="__VA_ARGS__ can only appear in the expansion of a C99 variadic macro", | |||
[b]=o, | [b]=o, | ||
[ | [g]="__VA_ARGS__ can only appear in the expansion of a C99 variadic macro", | ||
[a]=X, | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[ | [j]={{"clang/lib/Lex/Preprocessor.cpp",122,"Preprocessor::Preprocessor(std::shared_ptr<PreprocessorOptions> PPOpts, DiagnosticsEngine &diags, LangOptions &opts, SourceManager &SM, HeaderSearch &Headers, ModuleLoader &TheModuleLoader, IdentifierInfoLookup *IILookup, bool OwnsHeaders, TranslationUnitKind TUKind)\n SetPoisonReason(Ident__VA_ARGS__, diag::ext_pp_bad_vaargs_use);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/macro_paste_bad.c"]={"clang/test/Preprocessor/macro_paste_bad.c:33:5: warning: __VA_ARGS__ can only appear in the expansion of a C99 variadic macro [-Wpedantic]"} | |||
[ | } | ||
[i]={ | |||
[j]={{"clang/lib/Lex/Preprocessor.cpp",122,"Preprocessor::Preprocessor(std::shared_ptr<PreprocessorOptions> PPOpts, DiagnosticsEngine &diags, LangOptions &opts, SourceManager &SM, HeaderSearch &Headers, ModuleLoader &TheModuleLoader, IdentifierInfoLookup *IILookup, bool OwnsHeaders, TranslationUnitKind TUKind)\n SetPoisonReason(Ident__VA_ARGS__, diag::ext_pp_bad_vaargs_use);"}} | |||
}, | }, | ||
["ext_pp_bad_vaopt_use"]={ | ["ext_pp_bad_vaopt_use"]={ | ||
[ | [c]="__VA_OPT__ can only appear in the expansion of a variadic macro [-Wvariadic-macros]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={xc}, | |||
[m]=xc, | |||
[h]="__VA_OPT__ can only appear in the expansion of a variadic macro", | |||
[b]=o, | [b]=o, | ||
[ | [g]="__VA_OPT__ can only appear in the expansion of a variadic macro", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wvariadic\\-macros[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"}, | [i]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"}, | ||
[j]={{"clang/lib/Lex/Preprocessor.cpp",124,"Preprocessor::Preprocessor(std::shared_ptr<PreprocessorOptions> PPOpts, DiagnosticsEngine &diags, LangOptions &opts, SourceManager &SM, HeaderSearch &Headers, ModuleLoader &TheModuleLoader, IdentifierInfoLookup *IILookup, bool OwnsHeaders, TranslationUnitKind TUKind)\n SetPoisonReason(Ident__VA_OPT__, diag::ext_pp_bad_vaopt_use);"}} | [j]={{"clang/lib/Lex/Preprocessor.cpp",124,"Preprocessor::Preprocessor(std::shared_ptr<PreprocessorOptions> PPOpts, DiagnosticsEngine &diags, LangOptions &opts, SourceManager &SM, HeaderSearch &Headers, ModuleLoader &TheModuleLoader, IdentifierInfoLookup *IILookup, bool OwnsHeaders, TranslationUnitKind TUKind)\n SetPoisonReason(Ident__VA_OPT__, diag::ext_pp_bad_vaopt_use);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:13:14: warning: __VA_OPT__ can only appear in the expansion of a variadic macro [-Wvariadic-macros]","clang/test/Preprocessor/macro_vaopt_check.cpp:68:5: warning: __VA_OPT__ can only appear in the expansion of a variadic macro [-Wvariadic-macros]","clang/test/Preprocessor/macro_vaopt_check.cpp:72:8: warning: __VA_OPT__ can only appear in the expansion of a variadic macro [-Wvariadic-macros]","clang/test/Preprocessor/macro_vaopt_check.cpp:73:10: warning: __VA_OPT__ can only appear in the expansion of a variadic macro [-Wvariadic-macros]","clang/test/Preprocessor/macro_vaopt_check.cpp:76:13: warning: __VA_OPT__ can only appear in the expansion of a variadic macro [-Wvariadic-macros]"} | |||
} | |||
}, | }, | ||
["ext_pp_comma_expr"]={ | ["ext_pp_comma_expr"]={ | ||
[ | [c]="comma operator in operand of #if [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="comma operator in operand of #if", | |||
[b]=o, | [b]=o, | ||
[ | [g]="comma operator in operand of \\#if", | ||
[a]=X, | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[j]={{zc,808,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec. This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n while (true) {\n case tok::comma:\n // Comma is invalid in pp expressions in c89/c++ mode, but is valid in C99\n // if not being evaluated.\n if (!PP.getLangOpts().C99 || ValueLive)\n PP.Diag(OpLoc, diag::ext_pp_comma_expr) << LHS.getRange() << RHS.getRange();"}} | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_pp_extra_tokens_at_eol"]={ | ["ext_pp_extra_tokens_at_eol"]={ | ||
[ | [c]="extra tokens at end of #A directive [-Wextra-tokens]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"endif-labels","extra-tokens"}, | |||
[m]="extra-tokens", | |||
[h]="extra tokens at end of #%0 directive", | |||
[b]=o, | [b]=o, | ||
[ | [g]="extra tokens at end of \\#(.*?) directive", | ||
[ | [a]=" \\[(?:\\-Werror,)?\\-Wextra\\-tokens[^\\]]*\\]", | ||
[e]=B, | |||
[ | [i]={C,1236199783,D}, | ||
[ | [j]={{"clang/examples/AnnotateFunctions/AnnotateFunctions.cpp",69,"class PragmaAnnotateHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &PragmaTok) override {\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"},{W,440,"/// Ensure that the next token is a tok::eod token.\n///\n/// If not, emit a diagnostic and consume up until the eod. If EnableMacros is\n/// true, then we consider macros that expand to zero tokens as being ok.\n///\n/// Returns the location of the end of the directive.\nSourceLocation Preprocessor::CheckEndOfDirective(const char *DirType, bool EnableMacros) {\n Diag(Tmp, diag::ext_pp_extra_tokens_at_eol) << DirType << Hint;"},{mb,818,"void Preprocessor::HandlePragmaModuleBuild(Token &Tok) {\n if (Tok.isNot(tok::eod)) {\n Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"},{mb,898,"void Preprocessor::HandlePragmaHdrstop(Token &Tok) {\n if (Tok.isNot(tok::eod))\n Diag(Tok.getLocation(), diag::ext_pp_extra_tokens_at_eol) << \"pragma hdrstop\";"},{mb,1220,"struct PragmaDebugHandler : public PragmaHandler {\n void HandleCaptured(Preprocessor &PP) {\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma clang __debug captured\";"},{mb,1522,"/// \"\\#pragma warning(...)\". MSVC\'s diagnostics do not map cleanly to clang\'s\n/// diagnostics, so we don\'t really implement this pragma. We parse it and\n/// ignore it to avoid -Wunknown-pragma warnings.\nstruct PragmaWarningHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma warning\";"},{mb,1586,"/// \"\\#pragma execution_character_set(...)\". MSVC supports this pragma only\n/// for \"UTF-8\". We parse it and ignore it if UTF-8 is provided and warn\n/// otherwise to avoid -Wunknown-pragma warnings.\nstruct PragmaExecCharsetHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma execution_character_set\";"},{mb,1704,"/// Handle the clang \\#pragma module import extension. The syntax is:\n/// \\code\n/// #pragma clang module import some.module.name\n/// \\endcode\nstruct PragmaModuleImportHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"},{mb,1741,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n/// #pragma clang module begin some.module.name\n/// ...\n/// #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"},{mb,1796,"/// Handle the clang \\#pragma module end extension.\nstruct PragmaModuleEndHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"},{mb,1831,"/// Handle the clang \\#pragma module load extension.\nstruct PragmaModuleLoadHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"},{mb,1888,"/// PragmaARCCFCodeAuditedHandler -\n/// \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"},{mb,1943,"/// PragmaAssumeNonNullHandler -\n/// \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"}}, | ||
[ | [k]={ | ||
["clang/test/Preprocessor/if_warning.c"]={"clang/test/Preprocessor/if_warning.c:28:7: warning: extra tokens at end of #else directive [-Wextra-tokens]"} | |||
} | |||
}, | }, | ||
["ext_pp_gnu_line_directive"]={ | ["ext_pp_gnu_line_directive"]={ | ||
[ | [c]="this style of line directive is a GNU extension [-Wgnu-line-marker]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-line-marker",v}, | |||
[m]="gnu-line-marker", | |||
[h]="this style of line directive is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="this style of line directive is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-line\\-marker[^\\]]*\\]", | |||
[e]=B, | |||
[i]={O,1625925174,N}, | |||
[ | [j]={{W,1583,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n/// # 42\n/// # 42 \"file\" (\'1\' | \'2\')?\n/// # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod)) {\n Diag(StrTok, diag::ext_pp_gnu_line_directive);"},{W,1613,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n/// # 42\n/// # 42 \"file\" (\'1\' | \'2\')?\n/// # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod)) {\n } else if (StrTok.isNot(tok::string_literal)) {\n } else if (StrTok.hasUDSuffix()) {\n } else {\n if (!SourceMgr.isWrittenInBuiltinFile(DigitTok.getLocation()) && !SourceMgr.isWrittenInCommandLineFile(DigitTok.getLocation()))\n Diag(StrTok, diag::ext_pp_gnu_line_directive);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/line-directive-system-headers.c"]={"clang/test/Preprocessor/line-directive-system-headers.c:6:11: warning: this style of line directive is a GNU extension [-Wgnu-line-marker]","clang/test/Preprocessor/line-directive-system-headers.c:44:6: warning: this style of line directive is a GNU extension [-Wgnu-line-marker]","foo:47:6: warning: this style of line directive is a GNU extension [-Wgnu-line-marker]","foo:44:6: warning: this style of line directive is a GNU extension [-Wgnu-line-marker]","foo:47:6: warning: this style of line directive is a GNU extension [-Wgnu-line-marker]","foo:48:7: warning: this style of line directive is a GNU extension [-Wgnu-line-marker]","glomp.h:195:7: warning: this style of line directive is a GNU extension [-Wgnu-line-marker]","blonk.h:43:51: warning: this style of line directive is a GNU extension [-Wgnu-line-marker]","blonk.h:100:6: warning: this style of line directive is a GNU extension [-Wgnu-line-marker]"} | |||
[ | } | ||
[i]={ | |||
[j]={{W,1583,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n/// # 42\n/// # 42 \"file\" (\'1\' | \'2\')?\n/// # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod)) {\n Diag(StrTok, diag::ext_pp_gnu_line_directive);"},{W,1613,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n/// # 42\n/// # 42 \"file\" (\'1\' | \'2\')?\n/// # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod)) {\n } else if (StrTok.isNot(tok::string_literal)) {\n } else if (StrTok.hasUDSuffix()) {\n } else {\n if (!SourceMgr.isWrittenInBuiltinFile(DigitTok.getLocation()) && !SourceMgr.isWrittenInCommandLineFile(DigitTok.getLocation()))\n Diag(StrTok, diag::ext_pp_gnu_line_directive);"}} | |||
}, | }, | ||
["ext_pp_ident_directive"]={ | ["ext_pp_ident_directive"]={ | ||
[ | [c]="#ident is a language extension [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="#ident is a language extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\\#ident is a language extension", | ||
[a]=X, | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{W,1665,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\n Diag(Tok, diag::ext_pp_ident_directive);"}} | [j]={{W,1665,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\n Diag(Tok, diag::ext_pp_ident_directive);"}} | ||
}, | }, | ||
["ext_pp_import_directive"]={ | ["ext_pp_import_directive"]={ | ||
[ | [c]="#import is a language extension [-Wimport-preprocessor-directive-pedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"import-preprocessor-directive-pedantic",v}, | |||
[m]="import-preprocessor-directive-pedantic", | |||
[h]="#import is a language extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\\#import is a language extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wimport\\-preprocessor\\-directive\\-pedantic[^\\]]*\\]", | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{W,2623,"/// HandleImportDirective - Implements \\#import.\n///\nvoid Preprocessor::HandleImportDirective(SourceLocation HashLoc, Token &ImportTok) {\n if (!LangOpts.ObjC) { // #import is standard for ObjC.\n Diag(ImportTok, diag::ext_pp_import_directive);"}} | [j]={{W,2623,"/// HandleImportDirective - Implements \\#import.\n///\nvoid Preprocessor::HandleImportDirective(SourceLocation HashLoc, Token &ImportTok) {\n if (!LangOpts.ObjC) { // #import is standard for ObjC.\n Diag(ImportTok, diag::ext_pp_import_directive);"}} | ||
}, | }, | ||
["ext_pp_include_next_directive"]={ | ["ext_pp_include_next_directive"]={ | ||
[ | [c]="#include_next is a language extension [-Wgnu-include-next]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-include-next",v}, | |||
[m]="gnu-include-next", | |||
[h]="#include_next is a language extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\\#include_next is a language extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-include\\-next[^\\]]*\\]", | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{W,2592,"/// HandleIncludeNextDirective - Implements \\#include_next.\n///\nvoid Preprocessor::HandleIncludeNextDirective(SourceLocation HashLoc, Token &IncludeNextTok) {\n Diag(IncludeNextTok, diag::ext_pp_include_next_directive);"}} | [j]={{W,2592,"/// HandleIncludeNextDirective - Implements \\#include_next.\n///\nvoid Preprocessor::HandleIncludeNextDirective(SourceLocation HashLoc, Token &IncludeNextTok) {\n Diag(IncludeNextTok, diag::ext_pp_include_next_directive);"}} | ||
}, | }, | ||
["ext_pp_include_search_ms"]={ | ["ext_pp_include_search_ms"]={ | ||
[ | [c]="#include resolved using non-portable Microsoft search rules as: A [-Wmicrosoft-include]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-include","msvc-include"}, | |||
[m]="microsoft-include", | |||
[h]="#include resolved using non-portable Microsoft search rules as: %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\\#include resolved using non\\-portable Microsoft search rules as\\: (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-include[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"0fafd34a6e7a",1388173576,"Implement MSVC header search algorithm in MicrosoftMode."}, | [i]={"0fafd34a6e7a",1388173576,"Implement MSVC header search algorithm in MicrosoftMode."}, | ||
[j]={{"clang/lib/Lex/HeaderSearch.cpp",763,"/// Return true with a diagnostic if the file that MSVC would have found\n/// fails to match the one that Clang would have found with MSVC header search\n/// disabled.\nstatic bool checkMSVCHeaderSearch(DiagnosticsEngine &Diags, const FileEntry *MSFE, const FileEntry *FE, SourceLocation IncludeLoc) {\n if (MSFE && FE != MSFE) {\n Diags.Report(IncludeLoc, diag::ext_pp_include_search_ms) << MSFE->getName();"},{"clang/lib/Lex/HeaderSearch.cpp",977,"/// LookupFile - Given a \"foo\" or \\<foo> reference, look up the indicated file,\n/// return null on failure. isAngled indicates whether the file reference is\n/// for system \\#include\'s or not (i.e. using <> instead of \"\"). Includers, if\n/// non-empty, indicates where the \\#including file(s) are, in case a relative\n/// search is needed. Microsoft mode will pass all \\#including files.\nOptionalFileEntryRef HeaderSearch::LookupFile(StringRef Filename, SourceLocation IncludeLoc, bool isAngled, ConstSearchDirIterator FromDir, ConstSearchDirIterator *CurDirArg, ArrayRef<std::pair<const FileEntry *, DirectoryEntryRef>> Includers, SmallVectorImpl<char> *SearchPath, SmallVectorImpl<char> *RelativePath, Module *RequestingModule, ModuleMap::KnownHeader *SuggestedModule, bool *IsMapped, bool *IsFrameworkFound, bool SkipCache, bool BuildSystemModule, bool OpenFile, bool CacheFailures) {\n // Unless disabled, check to see if the file is in the #includer\'s\n // directory. This cannot be based on CurDir, because each includer could be\n // a #include of a subdirectory (#include \"foo/bar.h\") and a subsequent\n // include of \"baz.h\" should resolve to \"whatever/foo/baz.h\".\n // This search is not done for <> headers.\n if (!Includers.empty() && !isAngled && !NoCurDirSearch) {\n for (const auto &IncluderAndDir : Includers) {\n if (OptionalFileEntryRef FE = getFileAndSuggestModule(TmpDir, IncludeLoc, IncluderAndDir.second, IncluderIsSystemHeader, RequestingModule, SuggestedModule)) {\n if (Diags.isIgnored(diag::ext_pp_include_search_ms, IncludeLoc)) {"}} | [j]={{"clang/lib/Lex/HeaderSearch.cpp",763,"/// Return true with a diagnostic if the file that MSVC would have found\n/// fails to match the one that Clang would have found with MSVC header search\n/// disabled.\nstatic bool checkMSVCHeaderSearch(DiagnosticsEngine &Diags, const FileEntry *MSFE, const FileEntry *FE, SourceLocation IncludeLoc) {\n if (MSFE && FE != MSFE) {\n Diags.Report(IncludeLoc, diag::ext_pp_include_search_ms) << MSFE->getName();"},{"clang/lib/Lex/HeaderSearch.cpp",977,"/// LookupFile - Given a \"foo\" or \\<foo> reference, look up the indicated file,\n/// return null on failure. isAngled indicates whether the file reference is\n/// for system \\#include\'s or not (i.e. using <> instead of \"\"). Includers, if\n/// non-empty, indicates where the \\#including file(s) are, in case a relative\n/// search is needed. Microsoft mode will pass all \\#including files.\nOptionalFileEntryRef HeaderSearch::LookupFile(StringRef Filename, SourceLocation IncludeLoc, bool isAngled, ConstSearchDirIterator FromDir, ConstSearchDirIterator *CurDirArg, ArrayRef<std::pair<const FileEntry *, DirectoryEntryRef>> Includers, SmallVectorImpl<char> *SearchPath, SmallVectorImpl<char> *RelativePath, Module *RequestingModule, ModuleMap::KnownHeader *SuggestedModule, bool *IsMapped, bool *IsFrameworkFound, bool SkipCache, bool BuildSystemModule, bool OpenFile, bool CacheFailures) {\n // Unless disabled, check to see if the file is in the #includer\'s\n // directory. This cannot be based on CurDir, because each includer could be\n // a #include of a subdirectory (#include \"foo/bar.h\") and a subsequent\n // include of \"baz.h\" should resolve to \"whatever/foo/baz.h\".\n // This search is not done for <> headers.\n if (!Includers.empty() && !isAngled && !NoCurDirSearch) {\n for (const auto &IncluderAndDir : Includers) {\n if (OptionalFileEntryRef FE = getFileAndSuggestModule(TmpDir, IncludeLoc, IncluderAndDir.second, IncluderIsSystemHeader, RequestingModule, SuggestedModule)) {\n if (Diags.isIgnored(diag::ext_pp_include_search_ms, IncludeLoc)) {"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/microsoft-header-search.c"]={"clang/test/Preprocessor/Inputs/microsoft-header-search/a/b/include3.h:3:10: warning: #include resolved using non-portable Microsoft search rules as: clang/test/Preprocessor/Inputs/microsoft-header-search/a/findme.h [-Wmicrosoft-include]"} | |||
} | |||
}, | }, | ||
["ext_pp_line_too_big"]={ | ["ext_pp_line_too_big"]={ | ||
[ | [c]="C requires #line number to be less than A, allowed as extension [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="C requires #line number to be less than %0, allowed as extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="C requires \\#line number to be less than (.*?), allowed as extension", | ||
[a]=X, | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[j]={{W,1423,"/// 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 if (LineNo >= LineLimit)\n Diag(DigitTok, diag::ext_pp_line_too_big) << LineLimit;"}}, | |||
[k]={ | |||
[ | ["clang/test/Preprocessor/line-directive.c"]={"clang/test/Preprocessor/line-directive.c:0:7: warning: C requires #line number to be less than 2147483648, allowed as extension [-Wpedantic]"} | ||
[ | } | ||
[i]={ | |||
[j]={{W,1423,"/// 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 if (LineNo >= LineLimit)\n Diag(DigitTok, diag::ext_pp_line_too_big) << LineLimit;"}} | |||
}, | }, | ||
["ext_pp_line_zero"]={ | ["ext_pp_line_zero"]={ | ||
[ | [c]="#line directive with zero argument is a GNU extension [-Wgnu-zero-line-directive]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-zero-line-directive",v}, | |||
[m]="gnu-zero-line-directive", | |||
[h]="#line directive with zero argument is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\\#line directive with zero argument is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-zero\\-line\\-directive[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"0638c15a52d3",1340745560,"preprocessing: gcc supports #line 0. So, treat this"}, | [i]={"0638c15a52d3",1340745560,"preprocessing: gcc supports #line 0. So, treat this"}, | ||
[j]={{W,1415,"/// 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 if (LineNo == 0)\n Diag(DigitTok, diag::ext_pp_line_zero);"}} | [j]={{W,1415,"/// 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 if (LineNo == 0)\n Diag(DigitTok, diag::ext_pp_line_zero);"}}, | ||
[k]={ | |||
["clang/test/Lexer/gnu-flags.c"]={"clang/test/Lexer/gnu-flags.c:51:7: warning: #line directive with zero argument is a GNU extension [-Wgnu-zero-line-directive]"} | |||
} | |||
}, | }, | ||
["ext_pp_macro_redef"]={ | ["ext_pp_macro_redef"]={ | ||
[ | [c]="A macro redefined [-Wmacro-redefined]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"macro-redefined","pedantic-macros"}, | |||
[m]="macro-redefined", | |||
[h]="%0 macro redefined", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(.*?) macro redefined", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmacro\\-redefined[^\\]]*\\]", | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[j]={{W,3141,"/// HandleDefineDirective - Implements \\#define. This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n // Finally, if this identifier already had a macro defined for it, verify that\n // the macro bodies are identical, and issue diagnostics if they are not.\n if (const MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {\n // It is very common for system headers to have tons of macro redefinitions\n // and for warnings to be disabled in system headers. If this is the case,\n // then don\'t bother calling MacroInfo::isIdenticalTo.\n if (!getDiagnostics().getSuppressSystemWarnings() || !SourceMgr.isInSystemHeader(DefineTok.getLocation())) {\n // Warn if defining \"__LINE__\" and other builtins, per C99 6.10.8/4 and\n // C++ [cpp.predefined]p4, but allow it as an extension.\n if (isLanguageDefinedBuiltin(SourceMgr, OtherMI, II->getName()))\n // Macros must be identical. This means all tokens and whitespace\n // separation must be the same. C99 6.10.3p2.\n else if (!OtherMI->isAllowRedefinitionsWithoutWarning() && !MI->isIdenticalTo(*OtherMI, *this, /*Syntactic=*/LangOpts.MicrosoftExt)) {\n Diag(MI->getDefinitionLoc(), diag::ext_pp_macro_redef) << MacroNameTok.getIdentifierInfo();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Preprocessor/pragma-pushpop-macro.c"]={"clang/test/Preprocessor/pragma-pushpop-macro.c:17:9: warning: \'Y\' macro redefined [-Wmacro-redefined]"} | ||
[i]={ | } | ||
[j]={{W,3141,"/// HandleDefineDirective - Implements \\#define. This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n // Finally, if this identifier already had a macro defined for it, verify that\n // the macro bodies are identical, and issue diagnostics if they are not.\n if (const MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {\n // It is very common for system headers to have tons of macro redefinitions\n // and for warnings to be disabled in system headers. If this is the case,\n // then don\'t bother calling MacroInfo::isIdenticalTo.\n if (!getDiagnostics().getSuppressSystemWarnings() || !SourceMgr.isInSystemHeader(DefineTok.getLocation())) {\n // Warn if defining \"__LINE__\" and other builtins, per C99 6.10.8/4 and\n // C++ [cpp.predefined]p4, but allow it as an extension.\n if (isLanguageDefinedBuiltin(SourceMgr, OtherMI, II->getName()))\n // Macros must be identical. This means all tokens and whitespace\n // separation must be the same. C99 6.10.3p2.\n else if (!OtherMI->isAllowRedefinitionsWithoutWarning() && !MI->isIdenticalTo(*OtherMI, *this, /*Syntactic=*/LangOpts.MicrosoftExt)) {\n Diag(MI->getDefinitionLoc(), diag::ext_pp_macro_redef) << MacroNameTok.getIdentifierInfo();"}} | |||
}, | }, | ||
["ext_pp_opencl_variadic_macros"]={ | ["ext_pp_opencl_variadic_macros"]={ | ||
[ | [c]="variadic macros are a Clang extension in OpenCL [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="variadic macros are a Clang extension in OpenCL", | |||
[b]=o, | [b]=o, | ||
[ | [g]="variadic macros are a Clang extension in OpenCL", | ||
[a]=X, | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"545652b96485",1553599357,"[OpenCL] Allow variadic macros as Clang feature."}, | [i]={"545652b96485",1553599357,"[OpenCL] Allow variadic macros as Clang feature."}, | ||
[j]={{W,2684,"/// 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 while (true) {\n case tok::ellipsis: // #define X(... -> C99 varargs\n // OpenCL v1.2 s6.9.e: variadic macros are not supported.\n if (LangOpts.OpenCL && !LangOpts.OpenCLCPlusPlus) {\n Diag(Tok, diag::ext_pp_opencl_variadic_macros);"}} | [j]={{W,2684,"/// 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 while (true) {\n case tok::ellipsis: // #define X(... -> C99 varargs\n // OpenCL v1.2 s6.9.e: variadic macros are not supported.\n if (LangOpts.OpenCL && !LangOpts.OpenCLCPlusPlus) {\n Diag(Tok, diag::ext_pp_opencl_variadic_macros);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/macro_variadic.cl"]={"clang/test/Preprocessor/macro_variadic.cl:7:21: warning: variadic macros are a Clang extension in OpenCL [-Wpedantic]","clang/test/Preprocessor/macro_variadic.cl:8:18: warning: variadic macros are a Clang extension in OpenCL [-Wpedantic]","clang/test/Preprocessor/macro_variadic.cl:9:25: warning: variadic macros are a Clang extension in OpenCL [-Wpedantic]"} | |||
} | |||
}, | }, | ||
["ext_pp_operator_used_as_macro_name"]={ | ["ext_pp_operator_used_as_macro_name"]={ | ||
[ | [c]="C++ operator A (aka B) used as a macro name [-Wmicrosoft-cpp-macro]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={G,"microsoft-cpp-macro",v}, | |||
[m]="microsoft-cpp-macro", | |||
[h]="C++ operator %0 (aka %1) used as a macro name", | |||
[b]=o, | [b]=o, | ||
[ | [g]="C\\+\\+ operator (.*?) \\(aka (.*?)\\) used as a macro name", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-cpp\\-macro[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"e03e9e15f2a6",1401553942,"Preprocessor: make C++ operator names as macro identifiers a compatible extension"}, | [i]={"e03e9e15f2a6",1401553942,"Preprocessor: make C++ operator names as macro identifiers a compatible extension"}, | ||
[j]={{W,335,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n if (II->isCPlusPlusOperatorKeyword()) {\n Diag(MacroNameTok, getLangOpts().MicrosoftExt ? diag::ext_pp_operator_used_as_macro_name : diag::err_pp_operator_used_as_macro_name) << II << MacroNameTok.getKind();"}} | [j]={{W,335,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n if (II->isCPlusPlusOperatorKeyword()) {\n Diag(MacroNameTok, getLangOpts().MicrosoftExt ? diag::ext_pp_operator_used_as_macro_name : diag::err_pp_operator_used_as_macro_name) << II << MacroNameTok.getKind();"}}, | ||
[k]={ | |||
[sc]={"clang/test/Parser/MicrosoftExtensions.cpp:385:9: warning: C++ operator \'and\' (aka \'&&\') used as a macro name [-Wmicrosoft-cpp-macro]"} | |||
} | |||
}, | }, | ||
["ext_pp_redef_builtin_macro"]={ | ["ext_pp_redef_builtin_macro"]={ | ||
[ | [c]="redefining builtin macro [-Wbuiltin-macro-redefined]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"builtin-macro-redefined","pedantic-macros"}, | |||
[m]="builtin-macro-redefined", | |||
[h]="redefining builtin macro", | |||
[b]=o, | [b]=o, | ||
[ | [g]="redefining builtin macro", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-macro\\-redefined[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"7b24254e91a0",1362530760,"After issuing a diagnostic for undefining or redefining a builtin macro,"}, | [i]={"7b24254e91a0",1362530760,"After issuing a diagnostic for undefining or redefining a builtin macro,"}, | ||
[j]={{W,3136,"/// HandleDefineDirective - Implements \\#define. This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n // Finally, if this identifier already had a macro defined for it, verify that\n // the macro bodies are identical, and issue diagnostics if they are not.\n if (const MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {\n // It is very common for system headers to have tons of macro redefinitions\n // and for warnings to be disabled in system headers. If this is the case,\n // then don\'t bother calling MacroInfo::isIdenticalTo.\n if (!getDiagnostics().getSuppressSystemWarnings() || !SourceMgr.isInSystemHeader(DefineTok.getLocation())) {\n // Warn if defining \"__LINE__\" and other builtins, per C99 6.10.8/4 and\n // C++ [cpp.predefined]p4, but allow it as an extension.\n if (isLanguageDefinedBuiltin(SourceMgr, OtherMI, II->getName()))\n Diag(MacroNameTok, diag::ext_pp_redef_builtin_macro);"}} | [j]={{W,3136,"/// HandleDefineDirective - Implements \\#define. This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n // Finally, if this identifier already had a macro defined for it, verify that\n // the macro bodies are identical, and issue diagnostics if they are not.\n if (const MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {\n // It is very common for system headers to have tons of macro redefinitions\n // and for warnings to be disabled in system headers. If this is the case,\n // then don\'t bother calling MacroInfo::isIdenticalTo.\n if (!getDiagnostics().getSuppressSystemWarnings() || !SourceMgr.isInSystemHeader(DefineTok.getLocation())) {\n // Warn if defining \"__LINE__\" and other builtins, per C99 6.10.8/4 and\n // C++ [cpp.predefined]p4, but allow it as an extension.\n if (isLanguageDefinedBuiltin(SourceMgr, OtherMI, II->getName()))\n Diag(MacroNameTok, diag::ext_pp_redef_builtin_macro);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/macro-reserved.c"]={"clang/test/Preprocessor/macro-reserved.c:9:9: warning: redefining builtin macro [-Wbuiltin-macro-redefined]"} | |||
} | |||
}, | }, | ||
["ext_pp_undef_builtin_macro"]={ | ["ext_pp_undef_builtin_macro"]={ | ||
[ | [c]="undefining builtin macro [-Wbuiltin-macro-redefined]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"builtin-macro-redefined","pedantic-macros"}, | |||
[m]="builtin-macro-redefined", | |||
[h]="undefining builtin macro", | |||
[b]=o, | [b]=o, | ||
[ | [g]="undefining builtin macro", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-macro\\-redefined[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"7b24254e91a0",1362530760,"After issuing a diagnostic for undefining or redefining a builtin macro,"}, | [i]={"7b24254e91a0",1362530760,"After issuing a diagnostic for undefining or redefining a builtin macro,"}, | ||
[j]={{W,3218,"/// HandleUndefDirective - Implements \\#undef.\n///\nvoid Preprocessor::HandleUndefDirective() {\n // If the macro is not defined, this is a noop undef.\n if (const MacroInfo *MI = MD.getMacroInfo()) {\n // Warn if undefining \"__LINE__\" and other builtins, per C99 6.10.8/4 and\n // C++ [cpp.predefined]p4, but allow it as an extension.\n if (isLanguageDefinedBuiltin(SourceMgr, MI, II->getName()))\n Diag(MacroNameTok, diag::ext_pp_undef_builtin_macro);"}} | [j]={{W,3218,"/// HandleUndefDirective - Implements \\#undef.\n///\nvoid Preprocessor::HandleUndefDirective() {\n // If the macro is not defined, this is a noop undef.\n if (const MacroInfo *MI = MD.getMacroInfo()) {\n // Warn if undefining \"__LINE__\" and other builtins, per C99 6.10.8/4 and\n // C++ [cpp.predefined]p4, but allow it as an extension.\n if (isLanguageDefinedBuiltin(SourceMgr, MI, II->getName()))\n Diag(MacroNameTok, diag::ext_pp_undef_builtin_macro);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/macro-reserved.c"]={"clang/test/Preprocessor/macro-reserved.c:18:8: warning: undefining builtin macro [-Wbuiltin-macro-redefined]"} | |||
} | |||
}, | }, | ||
["ext_pp_warning_directive"]={ | ["ext_pp_warning_directive"]={ | ||
[ | [c]="#warning is a ... extension [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="#warning is a %select{C2x|C++23}0 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\\#warning is a (?:C2x|C\\+\\+23) extension", | ||
[a]=X, | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[j]={{W,1278,"/// 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 default:\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;"},{W,1282,"/// 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 default:\n case tok::pp_warning:\n if (LangOpts.CPlusPlus)\n else\n Diag(Result, LangOpts.C2x ? diag::warn_c2x_compat_warning_directive : diag::ext_pp_warning_directive) << /*C2x*/ 0;"}}, | |||
[k]={ | |||
[ | ["clang/test/Preprocessor/ext-pp-directive.c"]={"clang/test/Preprocessor/ext-pp-directive.c:61:2: warning: #warning is a C++23 extension [-Wpedantic]"} | ||
[ | } | ||
[i]={ | |||
[j]={{W,1278,"/// 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 default:\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;"},{W,1282,"/// 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 default:\n case tok::pp_warning:\n if (LangOpts.CPlusPlus)\n else\n Diag(Result, LangOpts.C2x ? diag::warn_c2x_compat_warning_directive : diag::ext_pp_warning_directive) << /*C2x*/ 0;"}} | |||
}, | }, | ||
["ext_pragma_syntax_eod"]={ | ["ext_pragma_syntax_eod"]={ | ||
[ | [c]="expected end of directive in pragma [-Wunknown-pragmas]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={jb,qb,sb,"pragmas",fc}, | |||
[m]=fc, | |||
[h]="expected end of directive in pragma", | |||
[b]=o, | [b]=o, | ||
[ | [g]="expected end of directive in pragma", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-pragmas[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"2f1e36bfd0c1",1298860671,"Rename tok::eom to tok::eod."}, | [i]={"2f1e36bfd0c1",1298860671,"Rename tok::eom to tok::eod."}, | ||
[j]={{ | [j]={{mb,992,"bool Preprocessor::LexOnOffSwitch(tok::OnOffSwitch &Result) {\n if (Tok.isNot(tok::eod))\n Diag(Tok, diag::ext_pragma_syntax_eod);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/pragma_unknown.c"]={"clang/test/Preprocessor/pragma_unknown.c:29:34: warning: expected end of directive in pragma [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["ext_predef_outside_function"]={ | ["ext_predef_outside_function"]={ | ||
[ | [c]="predefined identifier is only valid inside function [-Wpredefined-identifier-outside-function]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"predefined-identifier-outside-function"}, | |||
[m]="predefined-identifier-outside-function", | |||
[h]="predefined identifier is only valid inside function", | |||
[b]=o, | [b]=o, | ||
[ | [g]="predefined identifier is only valid inside function", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wpredefined\\-identifier\\-outside\\-function[^\\]]*\\]", | |||
[e]=n, | |||
[i]={C,1236199783,D}, | |||
[j]={{z,3641,"ExprResult Sema::BuildPredefinedExpr(SourceLocation Loc, PredefinedExpr::IdentKind IK) {\n if (!currentDecl) {\n Diag(Loc, diag::ext_predef_outside_function);"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Sema/predef.c"]={"clang/test/Sema/predef.c:8:11: warning: predefined identifier is only valid inside function [-Wpredefined-identifier-outside-function]","clang/test/Sema/predef.c:16:17: warning: predefined identifier is only valid inside function [-Wpredefined-identifier-outside-function]","clang/test/Sema/predef.c:17:17: warning: predefined identifier is only valid inside function [-Wpredefined-identifier-outside-function]","clang/test/Sema/predef.c:18:17: warning: predefined identifier is only valid inside function [-Wpredefined-identifier-outside-function]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_pseudo_dtor_on_void"]={ | ["ext_pseudo_dtor_on_void"]={ | ||
[ | [c]="pseudo-destructors on type void are a Microsoft extension [-Wmicrosoft-void-pseudo-dtor]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-void-pseudo-dtor"}, | |||
[m]="microsoft-void-pseudo-dtor", | |||
[h]="pseudo-destructors on type void are a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="pseudo\\-destructors on type void are a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-void\\-pseudo\\-dtor[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"5882927d7a1f",1327297857,"In microsoft mode, downgrade pseudo-destructors on void from error to warning."}, | [i]={"5882927d7a1f",1327297857,"In microsoft mode, downgrade pseudo-destructors on void from error to warning."}, | ||
[j]={{ | [j]={{Y,7768,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n if (!ObjectType->isDependentType() && !ObjectType->isScalarType() && !ObjectType->isVectorType()) {\n if (getLangOpts().MSVCCompat && ObjectType->isVoidType())\n Diag(OpLoc, diag::ext_pseudo_dtor_on_void) << Base->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/CodeGenCXX/microsoft-compatibility.cpp"]={"clang/test/CodeGenCXX/microsoft-compatibility.cpp:15:4: warning: pseudo-destructors on type void are a Microsoft extension [-Wmicrosoft-void-pseudo-dtor]"} | |||
} | |||
}, | }, | ||
["ext_pure_function_definition"]={ | ["ext_pure_function_definition"]={ | ||
[ | [c]="function definition with pure-specifier is a Microsoft extension [-Wmicrosoft-pure-definition]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-pure-definition"}, | |||
[m]="microsoft-pure-definition", | |||
[h]="function definition with pure-specifier is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="function definition with pure\\-specifier is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-pure\\-definition[^\\]]*\\]", | |||
[e]=n, | |||
[i]={nb,1405733957,lb}, | |||
[j]={{x,15629,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n {\n if (FD) {\n // MSVC permits the use of pure specifier (=0) on function definition,\n // defined at class scope, warn about this non-standard construct.\n if (getLangOpts().MicrosoftExt && FD->isPure() && !FD->isOutOfLine())\n Diag(FD->getLocation(), diag::ext_pure_function_definition);"}}, | |||
[ | [k]={ | ||
[ | [sc]={"clang/test/Parser/MicrosoftExtensions.cpp:294:16: warning: function definition with pure-specifier is a Microsoft extension [-Wmicrosoft-pure-definition]","clang/test/Parser/MicrosoftExtensions.cpp:304:11: warning: function definition with pure-specifier is a Microsoft extension [-Wmicrosoft-pure-definition]","clang/test/Parser/MicrosoftExtensions.cpp:314:13: warning: function definition with pure-specifier is a Microsoft extension [-Wmicrosoft-pure-definition]","clang/test/Parser/MicrosoftExtensions.cpp:314:13: warning: function definition with pure-specifier is a Microsoft extension [-Wmicrosoft-pure-definition]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_qualified_dtor_named_in_lexical_scope"]={ | ["ext_qualified_dtor_named_in_lexical_scope"]={ | ||
[ | [c]="qualified destructor name only found in lexical scope; omit the qualifier to find this type name by unqualified lookup [-Wdtor-name]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={hc}, | |||
[m]=hc, | |||
[h]="qualified destructor name only found in lexical scope; omit the qualifier to find this type name by unqualified lookup", | |||
[b]=o, | [b]=o, | ||
[ | [g]="qualified destructor name only found in lexical scope; omit the qualifier to find this type name by unqualified lookup", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wdtor\\-name[^\\]]*\\]", | |||
[e]=n, | |||
[i]={Nc,1576809732,Oc}, | |||
[j]={{Y,400,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n if (SS.isSet()) {\n // For compatibility with other compilers and older versions of Clang,\n //\n // nested-name-specifier type-name :: ~ type-name\n //\n // also looks for type-name in the scope. Unfortunately, we can\'t\n // reasonably apply this fallback for dependent nested-name-specifiers.\n if (SS.isValid() && SS.getScopeRep()->getPrefix()) {\n if (ParsedType T = LookupInScope()) {\n Diag(SS.getEndLoc(), diag::ext_qualified_dtor_named_in_lexical_scope) << FixItHint::CreateRemoval(SS.getRange());"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/CXX/drs/dr2xx.cpp"]={"clang/test/CXX/drs/dr2xx.cpp:556:11: error: qualified destructor name only found in lexical scope; omit the qualifier to find this type name by unqualified lookup [-Werror,-Wdtor-name]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_redefinition_of_typedef"]={ | ["ext_redefinition_of_typedef"]={ | ||
[ | [c]="redefinition of typedef A is a C11 feature [-Wtypedef-redefinition]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"typedef-redefinition"}, | |||
[m]="typedef-redefinition", | |||
[h]="redefinition of typedef %0 is a C11 feature", | |||
[b]=o, | [b]=o, | ||
[ | [g]="redefinition of typedef (.*?) is a C11 feature", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wtypedef\\-redefinition[^\\]]*\\]", | |||
[e]=n, | |||
[i]={nb,1405733957,lb}, | |||
[j]={{x,2740,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'. Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n Diag(New->getLocation(), diag::ext_redefinition_of_typedef) << New->getDeclName();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Preprocessor/pragma_sysheader.c"]={"clang/test/Preprocessor/Inputs/pragma_sysheader.h:19:13: warning: redefinition of typedef \'x\' is a C11 feature [-Wtypedef-redefinition]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_ref_qualifier"]={ | ["ext_ref_qualifier"]={ | ||
[ | [c]="reference qualifiers on functions are a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="reference qualifiers on functions are a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="reference qualifiers on functions are a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"a52713096d31",1296074132,"Improve the extension warning for the use of ref-qualifiers, to"}, | [i]={"a52713096d31",1296074132,"Improve the extension warning for the use of ref-qualifiers, to"}, | ||
[j]={{ | [j]={{H,7160,"/// 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);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx0x-in-cxx98.cpp"]={"clang/test/Parser/cxx0x-in-cxx98.cpp:6:22: warning: reference qualifiers on functions are a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_register_storage_class"]={ | ["ext_register_storage_class"]={ | ||
[ | [c]="ISO C++17 does not allow \'register\' storage class specifier [-Wregister]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"register"}, | ||
[ | [m]="register", | ||
[ | [h]="ISO C++17 does not allow \'register\' storage class specifier", | ||
[ | [b]=R, | ||
[ | [g]="ISO C\\+\\+17 does not allow \'register\' storage class specifier", | ||
[ | [a]=" \\[[^\\]]*\\-Wregister[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"291027692fe7",1448487261,"P0001R1: \'register\' storage class specifier is no longer permitted in C++1z."}, | [i]={"291027692fe7",1448487261,"P0001R1: \'register\' storage class specifier is no longer permitted in C++1z."}, | ||
[j]={{ | [j]={{x,7496,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n if (getLangOpts().CPlusPlus11 && SCSpec == DeclSpec::SCS_register && !D.getAsmLabel() && !getSourceManager().isInSystemMacro(D.getDeclSpec().getStorageClassSpecLoc())) {\n Diag(D.getDeclSpec().getStorageClassSpecLoc(), getLangOpts().CPlusPlus17 ? diag::ext_register_storage_class : diag::warn_deprecated_register) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{x,14738,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\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());"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p2.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p2.cpp:18:1: error: ISO C++17 does not allow \'register\' storage class specifier [-Wregister]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p2.cpp:41:23: error: ISO C++17 does not allow \'register\' storage class specifier [-Wregister]","clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p2.cpp:58:3: error: ISO C++17 does not allow \'register\' storage class specifier [-Wregister]"} | |||
} | |||
}, | }, | ||
["ext_reserved_user_defined_literal"]={ | ["ext_reserved_user_defined_literal"]={ | ||
[ | [c]="invalid suffix on literal; C++11 requires a space between literal and identifier [-Wreserved-user-defined-literal]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"reserved-user-defined-literal"}, | ||
[ | [m]="reserved-user-defined-literal", | ||
[ | [h]="invalid suffix on literal; C++11 requires a space between literal and identifier", | ||
[ | [b]=R, | ||
[ | [g]="invalid suffix on literal; C\\+\\+11 requires a space between literal and identifier", | ||
[ | [a]=" \\[[^\\]]*\\-Wreserved\\-user\\-defined\\-literal[^\\]]*\\]", | ||
[ | [e]=B, | ||
[i]={"0df56f4a9000",1331174361,"Implement C++11 [lex.ext]p10 for string and character literals: a ud-suffix not"}, | [i]={"0df56f4a9000",1331174361,"Implement C++11 [lex.ext]p10 for string and character literals: a ud-suffix not"}, | ||
[j]={{ | [j]={{ab,2053,"/// 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 // C++11 [lex.ext]p10, [usrlit.suffix]p1: A program containing a ud-suffix\n // that does not start with an underscore is ill-formed. As a conforming\n // extension, we treat all such suffixes as if they had whitespace before\n // them. We assume a suffix beginning with a UCN or UTF-8 character is more\n // likely to be a ud-suffix than a macro, however, and accept that.\n if (!Consumed) {\n if (!IsUDSuffix) {\n if (!isLexingRawMode())\n Diag(CurPtr, LangOpts.MSVCCompat ? diag::ext_ms_reserved_user_defined_literal : diag::ext_reserved_user_defined_literal) << FixItHint::CreateInsertion(getSourceLocation(CurPtr), \" \");"}}, | ||
[k]={ | |||
["clang/test/CXX/lex/lex.literal/lex.ext/p10.cpp"]={"clang/test/CXX/lex/lex.literal/lex.ext/p10.cpp:12:21: error: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wreserved-user-defined-literal]","clang/test/CXX/lex/lex.literal/lex.ext/p10.cpp:13:33: error: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wreserved-user-defined-literal]"} | |||
} | |||
}, | }, | ||
["ext_retained_language_linkage"]={ | ["ext_retained_language_linkage"]={ | ||
[ | [c]="friend function A retaining previous language linkage is an extension [-Wretained-language-linkage]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v,"retained-language-linkage"}, | |||
[m]="retained-language-linkage", | |||
[h]="friend function %0 retaining previous language linkage is an extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="friend function (.*?) retaining previous language linkage is an extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wretained\\-language\\-linkage[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"dd551fc3ae9d",1382482381,"Retain previous language linkage of friend function declarations"}, | [i]={"dd551fc3ae9d",1382482381,"Retain previous language linkage of friend function declarations"}, | ||
[j]={{ | [j]={{x,4085,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n if (getLangOpts().CPlusPlus) {\n if (haveIncompatibleLanguageLinkages(Old, New)) {\n // As a special case, retain the language linkage from previous\n // declarations of a friend function as an extension.\n //\n // This liberal interpretation of C++ [class.friend]p3 matches GCC/MSVC\n // and is useful because there\'s otherwise no way to specify language\n // linkage within class scope.\n //\n // Check cautiously as the friend object kind isn\'t yet complete.\n if (New->getFriendObjectKind() != Decl::FOK_None) {\n Diag(New->getLocation(), diag::ext_retained_language_linkage) << New;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/linkage-spec.cpp"]={"clang/test/SemaCXX/linkage-spec.cpp:165:18: warning: friend function \'bar3\' retaining previous language linkage is an extension [-Wretained-language-linkage]"} | |||
} | |||
}, | }, | ||
["ext_return_has_expr"]={ | ["ext_return_has_expr"]={ | ||
[ | [c]="... A should not return a value [-Wreturn-type]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={jb,qb,sb,"return-type"}, | ||
[ | [m]="return-type", | ||
[ | [h]="%select{void function|void method|constructor|destructor}1 %0 should not return a value", | ||
[ | [b]=R, | ||
[ | [g]="(?:void function|void method|constructor|destructor) (.*?) should not return a value", | ||
[ | [a]=" \\[[^\\]]*\\-Wreturn\\-type[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={ | [i]={I,1237025389,J}, | ||
[j]={{Ob,4074,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n if (FnRetType->isVoidType()) {\n if (RetValExp) {\n if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n } else if (!RetValExp->isTypeDependent()) {\n unsigned D = diag::ext_return_has_expr;"}} | [j]={{Ob,4074,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n if (FnRetType->isVoidType()) {\n if (RetValExp) {\n if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n } else if (!RetValExp->isTypeDependent()) {\n unsigned D = diag::ext_return_has_expr;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:94:3: error: void function \'f\' should not return a value [-Wreturn-type]"} | |||
} | |||
}, | }, | ||
["ext_return_has_void_expr"]={ | ["ext_return_has_void_expr"]={ | ||
[ | [c]="void ... A should not return void expression [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="void %select{function|method|block}1 %0 should not return void expression", | |||
[b]=o, | [b]=o, | ||
[ | [g]="void (?:function|method|block) (.*?) should not return void expression", | ||
[a]=X, | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{Ob,3686,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n // Otherwise, verify that this result type matches the previous one. We are\n // pickier with blocks than for normal functions because we don\'t have GCC\n // compatibility to worry about here.\n if (FnRetType->isDependentType()) {\n } else if (FnRetType->isVoidType()) {\n if (RetValExp && !isa<InitListExpr>(RetValExp) && !(getLangOpts().CPlusPlus && (RetValExp->isTypeDependent() || RetValExp->getType()->isVoidType()))) {\n if (!getLangOpts().CPlusPlus && RetValExp->getType()->isVoidType())\n Diag(ReturnLoc, diag::ext_return_has_void_expr) << \"literal\" << 2;"},{Ob,4081,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n if (FnRetType->isVoidType()) {\n if (RetValExp) {\n if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n } else if (!RetValExp->isTypeDependent()) {\n if (RetValExp->getType()->isVoidType()) {\n if (isa<CXXConstructorDecl>(CurDecl) || isa<CXXDestructorDecl>(CurDecl))\n else\n D = diag::ext_return_has_void_expr;"},{Ob,4099,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n if (FnRetType->isVoidType()) {\n if (RetValExp) {\n if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n } else if (!RetValExp->isTypeDependent()) {\n else if (D != diag::ext_return_has_void_expr || !getLangOpts().CPlusPlus) {"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/block-return.c"]={"clang/test/Sema/block-return.c:137:5: warning: void block literal should not return void expression [-Wpedantic]"} | ||
[ | } | ||
[i]={ | |||
[j]={{Ob,3686,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n // Otherwise, verify that this result type matches the previous one. We are\n // pickier with blocks than for normal functions because we don\'t have GCC\n // compatibility to worry about here.\n if (FnRetType->isDependentType()) {\n } else if (FnRetType->isVoidType()) {\n if (RetValExp && !isa<InitListExpr>(RetValExp) && !(getLangOpts().CPlusPlus && (RetValExp->isTypeDependent() || RetValExp->getType()->isVoidType()))) {\n if (!getLangOpts().CPlusPlus && RetValExp->getType()->isVoidType())\n Diag(ReturnLoc, diag::ext_return_has_void_expr) << \"literal\" << 2;"},{Ob,4081,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n if (FnRetType->isVoidType()) {\n if (RetValExp) {\n if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n } else if (!RetValExp->isTypeDependent()) {\n if (RetValExp->getType()->isVoidType()) {\n if (isa<CXXConstructorDecl>(CurDecl) || isa<CXXDestructorDecl>(CurDecl))\n else\n D = diag::ext_return_has_void_expr;"},{Ob,4099,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n if (FnRetType->isVoidType()) {\n if (RetValExp) {\n if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n } else if (!RetValExp->isTypeDependent()) {\n else if (D != diag::ext_return_has_void_expr || !getLangOpts().CPlusPlus) {"}} | |||
}, | }, | ||
["ext_return_missing_expr"]={ | ["ext_return_missing_expr"]={ | ||
[ | [c]="non-void ... A should return a value [-Wreturn-type]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={jb,qb,sb,"return-type"}, | ||
[ | [m]="return-type", | ||
[ | [h]="non-void %select{function|method}1 %0 should return a value", | ||
[ | [b]=R, | ||
[ | [g]="non\\-void (?:function|method) (.*?) should return a value", | ||
[ | [a]=" \\[[^\\]]*\\-Wreturn\\-type[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={ | [i]={I,1237025389,J}, | ||
[j]={{Ob,4140,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n if (FnRetType->isVoidType()) {\n } else if (!RetValExp && !HasDependentReturnType) {\n if ((FD && FD->isInvalidDecl()) || FnRetType->containsErrors()) {\n } else if (getLangOpts().CPlusPlus11 && FD && FD->isConstexpr()) {\n } else {\n unsigned DiagID = getLangOpts().C99 ? diag::ext_return_missing_expr : diag::warn_return_missing_expr;"}} | [j]={{Ob,4140,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n if (FnRetType->isVoidType()) {\n } else if (!RetValExp && !HasDependentReturnType) {\n if ((FD && FD->isInvalidDecl()) || FnRetType->containsErrors()) {\n } else if (getLangOpts().CPlusPlus11 && FD && FD->isConstexpr()) {\n } else {\n unsigned DiagID = getLangOpts().C99 ? diag::ext_return_missing_expr : diag::warn_return_missing_expr;"}} | ||
}, | }, | ||
["ext_rvalue_reference"]={ | ["ext_rvalue_reference"]={ | ||
[ | [c]="rvalue references are a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="rvalue references are a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="rvalue references are a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"0098499f7d8d",1295921852,"Downgrade the error about rvalue references to an extension warning"}, | [i]={"0098499f7d8d",1295921852,"Downgrade the error about rvalue references to an extension warning"}, | ||
[j]={{ | [j]={{H,6274,"/// 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 if (Kind == tok::star || Kind == tok::caret) {\n } else {\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);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx0x-in-cxx98.cpp"]={"clang/test/Parser/cxx0x-in-cxx98.cpp:6:15: warning: rvalue references are a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_rvalue_to_reference_access_ctor"]={ | ["ext_rvalue_to_reference_access_ctor"]={ | ||
[ | [c]="C++98 requires an accessible copy constructor for class A when binding a reference to a temporary; was ... [-Wbind-to-temporary-copy]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"bind-to-temporary-copy",v}, | |||
[m]="bind-to-temporary-copy", | |||
[h]="C++98 requires an accessible copy constructor for class %2 when binding a reference to a temporary; was %select{private|protected}0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="C\\+\\+98 requires an accessible copy constructor for class (.*?) when binding a reference to a temporary; was (?:private|protected)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wbind\\-to\\-temporary\\-copy[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"caa710dfd236",1275926285,"PR7245: Make binding a reference to a temporary without a usable copy"}, | [i]={"caa710dfd236",1275926285,"PR7245: Make binding a reference to a temporary without a usable copy"}, | ||
[j]={{ | [j]={{Bc,1654,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n default:\n PD = PDiag(IsCopyBindingRefToTemp ? diag::ext_rvalue_to_reference_access_ctor : diag::err_access_ctor);"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp:57:6: warning: C++98 requires an accessible copy constructor for class \'X2\' when binding a reference to a temporary; was private [-Wbind-to-temporary-copy]"} | |||
} | |||
}, | }, | ||
["ext_rvalue_to_reference_temp_copy_no_viable"]={ | ["ext_rvalue_to_reference_temp_copy_no_viable"]={ | ||
[ | [c]="no viable constructor ... of type A; C++98 requires a copy constructor when binding a reference to a temporary [-Wbind-to-temporary-copy]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"bind-to-temporary-copy",v}, | |||
[m]="bind-to-temporary-copy", | |||
[h]="no viable constructor %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}0 of type %1; C++98 requires a copy constructor when binding a reference to a temporary", | |||
[b]=o, | [b]=o, | ||
[ | [g]="no viable constructor (?: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 (.*?); C\\+\\+98 requires a copy constructor when binding a reference to a temporary", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wbind\\-to\\-temporary\\-copy[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"caa710dfd236",1275926285,"PR7245: Make binding a reference to a temporary without a usable copy"}, | [i]={"caa710dfd236",1275926285,"PR7245: Make binding a reference to a temporary without a usable copy"}, | ||
[j]={{ | [j]={{U,6788,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n case OR_No_Viable_Function:\n CandidateSet.NoteCandidates(PartialDiagnosticAt(Loc, S.PDiag(IsExtraneousCopy && !S.isSFINAEContext() ? diag::ext_rvalue_to_reference_temp_copy_no_viable : diag::err_temp_copy_no_viable) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange()), S, OCD_AllCandidates, CurInitExpr);"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp:58:6: warning: no viable constructor copying parameter of type \'X3\'; C++98 requires a copy constructor when binding a reference to a temporary [-Wbind-to-temporary-copy]"} | |||
} | |||
}, | }, | ||
["ext_scoped_enum"]={ | ["ext_scoped_enum"]={ | ||
[ | [c]="scoped enumerations are a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="scoped enumerations are a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="scoped enumerations are a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"d0d87b597259",1366685256,"Warn that scoped enumerations are a C++11 extenstion when compiling in"}, | [i]={"d0d87b597259",1366685256,"Warn that scoped enumerations are a C++11 extenstion when compiling in"}, | ||
[j]={{ | [j]={{H,4793,"/// 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 // 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);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/warn-c++11-extensions.cpp"]={"clang/test/SemaCXX/warn-c++11-extensions.cpp:8:6: warning: scoped enumerations are a C++11 extension [-Wc++11-extensions]","clang/test/SemaCXX/warn-c++11-extensions.cpp:9:6: warning: scoped enumerations are a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_sizeof_alignof_function_type"]={ | ["ext_sizeof_alignof_function_type"]={ | ||
[ | [c]="invalid application of \'A\' to a function type [-Wpointer-arith]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v,ac}, | |||
[m]=ac, | |||
[h]="invalid application of \'%0\' to a function type", | |||
[b]=o, | [b]=o, | ||
[ | [g]="invalid application of \'(.*?)\' to a function type", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wpointer\\-arith[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"9cf21ae068bd",1363649845,"Diagnose uses of \'alignof\' on functions in -pedantic mode."}, | [i]={"9cf21ae068bd",1363649845,"Diagnose uses of \'alignof\' on functions in -pedantic mode."}, | ||
[j]={{ | [j]={{z,4310,"static bool CheckExtensionTraitOperandType(Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange, UnaryExprOrTypeTrait TraitKind) {\n // C99 6.5.3.4p1:\n if (T->isFunctionType() && (TraitKind == UETT_SizeOf || TraitKind == UETT_AlignOf || TraitKind == UETT_PreferredAlignOf)) {\n S.Diag(Loc, diag::ext_sizeof_alignof_function_type) << getTraitSpelling(TraitKind) << ArgRange;"}} | ||
}, | }, | ||
["ext_sizeof_alignof_void_type"]={ | ["ext_sizeof_alignof_void_type"]={ | ||
[ | [c]="invalid application of \'A\' to a void type [-Wpointer-arith]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v,ac}, | |||
[m]=ac, | |||
[h]="invalid application of \'%0\' to a void type", | |||
[b]=o, | [b]=o, | ||
[ | [g]="invalid application of \'(.*?)\' to a void type", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wpointer\\-arith[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"9cf21ae068bd",1363649845,"Diagnose uses of \'alignof\' on functions in -pedantic mode."}, | [i]={"9cf21ae068bd",1363649845,"Diagnose uses of \'alignof\' on functions in -pedantic mode."}, | ||
[j]={{ | [j]={{z,4326,"static bool CheckExtensionTraitOperandType(Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange, UnaryExprOrTypeTrait TraitKind) {\n // Allow sizeof(void)/alignof(void) as an extension, unless in OpenCL where\n // this is an error (OpenCL v1.1 s6.3.k)\n if (T->isVoidType()) {\n unsigned DiagID = S.LangOpts.OpenCL ? diag::err_opencl_sizeof_alignof_type : diag::ext_sizeof_alignof_void_type;"}} | ||
}, | }, | ||
["ext_standalone_specifier"]={ | ["ext_standalone_specifier"]={ | ||
[ | [c]="\'A\' is not permitted on a declaration of a type [-Wmissing-declarations]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={jc}, | |||
[m]=jc, | |||
[h]="\'%0\' is not permitted on a declaration of a type", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'(.*?)\' is not permitted on a declaration of a type", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-declarations[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel..."}, | [i]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel..."}, | ||
[j]={{ | [j]={{x,5281,"/// 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 if (getLangOpts().CPlusPlus)\n DiagID = diag::ext_standalone_specifier;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/storage-class.cpp"]={"clang/test/SemaCXX/storage-class.cpp:6:1: warning: \'extern\' is not permitted on a declaration of a type [-Wmissing-declarations]"} | |||
} | |||
}, | }, | ||
["ext_star_this_lambda_capture_cxx17"]={ | ["ext_star_this_lambda_capture_cxx17"]={ | ||
[ | [c]="capture of \'*this\' by copy is a C++17 extension [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={P,hb}, | |||
[m]=P, | |||
[h]="capture of \'*this\' by copy is a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="capture of \'\\*this\' by copy is a C\\+\\+17 extension", | ||
[a]=ib, | |||
[e]="Lambda Issue", | |||
[ | |||
[ | |||
[i]={"b115e5dda202",1502667449,"Rename cxx1z -> cxx17 across all diagnostic IDs."}, | [i]={"b115e5dda202",1502667449,"Rename cxx1z -> cxx17 across all diagnostic IDs."}, | ||
[j]={{"clang/lib/Sema/SemaLambda.cpp",1022,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\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);"}} | [j]={{"clang/lib/Sema/SemaLambda.cpp",1022,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\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);"}}, | ||
[k]={ | |||
["clang/test/CodeGenCXX/cxx1z-lambda-star-this.cpp"]={"clang/test/CodeGenCXX/cxx1z-lambda-star-this.cpp:6:24: warning: capture of \'*this\' by copy is a C++17 extension [-Wc++17-extensions]"} | |||
} | |||
}, | }, | ||
["ext_static_data_member_in_union"]={ | ["ext_static_data_member_in_union"]={ | ||
[ | [c]="static data member A in union is a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="static data member %0 in union is a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="static data member (.*?) in union is a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding"}, | [i]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding"}, | ||
[j]={{ | [j]={{x,7607,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n if (!getLangOpts().CPlusPlus) {\n } else {\n if (SC == SC_Static && CurContext->isRecord()) {\n if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n if (FunctionOrMethod) {\n } else if (AnonStruct) {\n } else if (RD->isUnion()) {\n Diag(D.getIdentifierLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_static_data_member_in_union : diag::ext_static_data_member_in_union) << Name;"}}, | ||
[k]={ | |||
["clang/test/CXX/class/class.union/p1.cpp"]={"clang/test/CXX/class/class.union/p1.cpp:100:14: warning: static data member \'i1\' in union is a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_static_non_static"]={ | ["ext_static_non_static"]={ | ||
[ | [c]="redeclaring non-static A as static is a Microsoft extension [-Wmicrosoft-redeclare-static]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={G,"microsoft-redeclare-static",v}, | |||
[m]="microsoft-redeclare-static", | |||
[h]="redeclaring non-static %0 as static is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="redeclaring non\\-static (.*?) as static is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-redeclare\\-static[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"5b63fa02b2fa",1403133985,"Sema: Static redeclaration after extern declarations is a Microsoft Extension"}, | [i]={"5b63fa02b2fa",1403133985,"Sema: Static redeclaration after extern declarations is a Microsoft Extension"}, | ||
[j]={{ | [j]={{x,3699,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n // Don\'t complain about this if we\'re in GNU89 mode and the old function\n // is an extern inline function.\n // Don\'t complain about specializations. They are not supposed to have\n // storage classes.\n if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) && New->getStorageClass() == SC_Static && Old->hasExternalFormalLinkage() && !New->getTemplateSpecializationInfo() && !canRedefineFunction(Old, getLangOpts())) {\n if (getLangOpts().MicrosoftExt) {\n Diag(New->getLocation(), diag::ext_static_non_static) << New;"},{x,4629,"/// 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 // [dcl.stc]p8: Check if we have a non-static decl followed by a static.\n if (New->getStorageClass() == SC_Static && !New->isStaticDataMember() && Old->hasExternalFormalLinkage()) {\n if (getLangOpts().MicrosoftExt) {\n Diag(New->getLocation(), diag::ext_static_non_static) << New->getDeclName();"}}, | ||
[k]={ | |||
[Kc]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:210:13: warning: redeclaring non-static \'static_func\' as static is a Microsoft extension [-Wmicrosoft-redeclare-static]","clang/test/SemaCXX/MicrosoftExtensions.cpp:216:18: warning: redeclaring non-static \'static_var\' as static is a Microsoft extension [-Wmicrosoft-redeclare-static]"} | |||
} | |||
}, | }, | ||
["ext_static_out_of_line"]={ | ["ext_static_out_of_line"]={ | ||
[ | [c]="\'static\' can only be specified inside the class definition [-Wmicrosoft-template]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,eb}, | |||
[m]=eb, | |||
[h]="\'static\' can only be specified inside the class definition", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'static\' can only be specified inside the class definition", | ||
[a]=Db, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"3e7fda229d3f",1548435702,"Allow \'static\' storage specifier on an out-of-line member function template"}, | [i]={"3e7fda229d3f",1548435702,"Allow \'static\' storage specifier on an out-of-line member function template"}, | ||
[j]={{ | [j]={{x,10052,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n if (getLangOpts().CPlusPlus) {\n if (SC == SC_Static && isa<CXXMethodDecl>(NewFD) && !CurContext->isRecord()) {\n Diag(D.getDeclSpec().getStorageClassSpecLoc(), ((!getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015) && cast<CXXRecordDecl>(DC)->getDescribedClassTemplate()) || (getLangOpts().MSVCCompat && NewFD->getDescribedFunctionTemplate())) ? diag::ext_static_out_of_line : diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/warn-static-outside-class-definition.cpp"]={"clang/test/SemaCXX/warn-static-outside-class-definition.cpp:8:23: warning: \'static\' can only be specified inside the class definition [-Wmicrosoft-template]","clang/test/SemaCXX/warn-static-outside-class-definition.cpp:17:20: warning: \'static\' can only be specified inside the class definition [-Wmicrosoft-template]"} | |||
} | |||
}, | }, | ||
["ext_stdc_pragma_ignored"]={ | ["ext_stdc_pragma_ignored"]={ | ||
[ | [c]="unknown pragma in STDC namespace [-Wunknown-pragmas]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={jb,qb,sb,"pragmas",fc}, | |||
[m]=fc, | |||
[h]="unknown pragma in STDC namespace", | |||
[b]=o, | [b]=o, | ||
[ | [g]="unknown pragma in STDC namespace", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-pragmas[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"a0b1f76d1022",1240176337,"reject invalid stuff in the STDC namespace."}, | [i]={"a0b1f76d1022",1240176337,"reject invalid stuff in the STDC namespace."}, | ||
[j]={{"clang/lib/Parse/ParsePragma.cpp",160,"/// PragmaSTDC_UnknownHandler - \"\\#pragma STDC ...\".\nstruct PragmaSTDC_UnknownHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &UnknownTok) override {\n PP.Diag(UnknownTok, diag::ext_stdc_pragma_ignored);"}} | [j]={{"clang/lib/Parse/ParsePragma.cpp",160,"/// PragmaSTDC_UnknownHandler - \"\\#pragma STDC ...\".\nstruct PragmaSTDC_UnknownHandler : public PragmaHandler {\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &UnknownTok) override {\n PP.Diag(UnknownTok, diag::ext_stdc_pragma_ignored);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/pragma_unknown.c"]={"clang/test/Preprocessor/pragma_unknown.c:33:14: warning: unknown pragma in STDC namespace [-Wunknown-pragmas]","clang/test/Preprocessor/pragma_unknown.c:34:72: warning: unknown pragma in STDC namespace [-Wunknown-pragmas]"} | |||
} | |||
}, | }, | ||
["ext_string_literal_operator_template"]={ | ["ext_string_literal_operator_template"]={ | ||
[ | [c]="string literal operator templates are a GNU extension [-Wgnu-string-literal-operator-template]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={L,"gnu-string-literal-operator-template"}, | |||
[m]="gnu-string-literal-operator-template", | |||
[h]="string literal operator templates are a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="string literal operator templates are a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-string\\-literal\\-operator\\-template[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"b8b41d3ea444",1381175878,"Add support for WG21 N3599 (literal operator template for strings) as a GNU"}, | [i]={"b8b41d3ea444",1381175878,"Add support for WG21 N3599 (literal operator template for strings) as a GNU"}, | ||
[j]={{ | [j]={{A,16330,"static bool checkLiteralOperatorTemplateParameterList(Sema &SemaRef, FunctionTemplateDecl *TpDecl) {\n // Must have one or two template parameters.\n if (TemplateParams->size() == 1) {\n } else if (TemplateParams->size() == 2) {\n // The second template parameter must be a parameter pack with the\n // first template parameter as its type.\n if (PmType && PmArgs && !PmType->isTemplateParameterPack() && PmArgs->isTemplateParameterPack()) {\n if (TArgs && TArgs->getDepth() == PmType->getDepth() && TArgs->getIndex() == PmType->getIndex()) {\n if (!SemaRef.inTemplateInstantiation())\n SemaRef.Diag(TpDecl->getLocation(), diag::ext_string_literal_operator_template);"}}, | ||
[k]={ | |||
["clang/test/CXX/lex/lex.literal/lex.ext/p11.cpp"]={"clang/test/CXX/lex/lex.literal/lex.ext/p11.cpp:9:5: warning: string literal operator templates are a GNU extension [-Wgnu-string-literal-operator-template]"} | |||
} | |||
}, | }, | ||
["ext_string_too_long"]={ | ["ext_string_too_long"]={ | ||
[ | [c]="string literal of length A exceeds maximum length B that ... compilers are required to support [-Woverlength-strings]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"overlength-strings",v}, | |||
[m]="overlength-strings", | |||
[h]="string literal of length %0 exceeds maximum length %1 that %select{C90|ISO C99|C++}2 compilers are required to support", | |||
[b]=o, | [b]=o, | ||
[ | [g]="string literal of length (.*?) exceeds maximum length (.*?) that (?:C90|ISO C99|C\\+\\+) compilers are required to support", | ||
[a]=" \\[(?:\\-Werror,)?\\-Woverlength\\-strings[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"b37b46e488a3",1279636400,"Complain when string literals are too long for the active language"}, | [i]={"b37b46e488a3",1279636400,"Complain when string literals are too long for the active language"}, | ||
[j]={{ | [j]={{db,2221,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n if (Pascal) {\n } else if (Diags) {\n if (GetNumStringChars() > MaxChars)\n Diags->Report(StringToks.front().getLocation(), diag::ext_string_too_long) << GetNumStringChars() << MaxChars << (Features.CPlusPlus ? 2 : Features.C99 ? 1 : 0) << SourceRange(StringToks.front().getLocation(), StringToks.back().getLocation());"}}, | ||
[k]={ | |||
["clang/test/Lexer/c90.c"]={"clang/test/Lexer/c90.c:16:5: error: string literal of length 845 exceeds maximum length 509 that C90 compilers are required to support [-Werror,-Woverlength-strings]"} | |||
} | |||
}, | }, | ||
["ext_subscript_non_lvalue"]={ | ["ext_subscript_non_lvalue"]={ | ||
[ | [c]="ISO C90 does not allow subscripting non-lvalue array [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="ISO C90 does not allow subscripting non-lvalue array", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C90 does not allow subscripting non\\-lvalue array", | ||
[a]=X, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"ab2784f2c16e",1240703214,"Fix for PR4074: allow subscripting non-lvalue arrays in C90 mode."}, | [i]={"ab2784f2c16e",1240703214,"Fix for PR4074: allow subscripting non-lvalue arrays in C90 mode."}, | ||
[j]={{ | [j]={{z,5935,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n } else if (LHSTy->isArrayType()) {\n Diag(LHSExp->getBeginLoc(), diag::ext_subscript_non_lvalue) << LHSExp->getSourceRange();"},{z,5945,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n } else if (LHSTy->isArrayType()) {\n } else if (RHSTy->isArrayType()) {\n Diag(RHSExp->getBeginLoc(), diag::ext_subscript_non_lvalue) << RHSExp->getSourceRange();"}}, | ||
[k]={ | |||
[mc]={"clang/test/Sema/c89.c:73:11: warning: ISO C90 does not allow subscripting non-lvalue array [-Wpedantic]","clang/test/Sema/c89.c:74:13: warning: ISO C90 does not allow subscripting non-lvalue array [-Wpedantic]"} | |||
} | |||
}, | }, | ||
["ext_subscript_overload"]={ | ["ext_subscript_overload"]={ | ||
[ | [c]="overloaded A with ... parameter is a C++23 extension [-Wpre-c++23-compat]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={qc,Yb,Zb,Zb,"c++14-compat","c++14-compat-pedantic","c++14-compat-pedantic","c++17-compat","c++17-compat-pedantic","c++17-compat-pedantic","c++1z-compat","c++20-compat","c++20-compat-pedantic","c++20-compat-pedantic","c++2a-compat","c++2a-compat-pedantic","c++2a-compat-pedantic","c++98-compat","c++98-compat-pedantic","c++98-compat-pedantic","pre-c++23-compat","pre-c++23-compat-pedantic"}, | |||
[m]="pre-c++23-compat", | |||
[h]="overloaded %0 with %select{no|a defaulted|more than one}1 parameter is a C++23 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="overloaded (.*?) with (?:no|a defaulted|more than one) parameter is a C\\+\\+23 extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+23\\-compat[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | [i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | ||
[j]={{ | [j]={{A,16192,"/// 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 // C++ [over.oper]p8:\n // An operator function cannot have default arguments (8.3.6),\n // except where explicitly stated below.\n //\n // Only the function-call operator (C++ [over.call]p1) and the subscript\n // operator (CWG2507) allow default arguments.\n if (Op != OO_Call) {\n if (FirstDefaultedParam) {\n if (Op == OO_Subscript) {\n Diag(FnDecl->getLocation(), LangOpts.CPlusPlus23 ? diag::ext_subscript_overload : diag::error_subscript_overload) << FnDecl->getDeclName() << 1 << FirstDefaultedParam->getDefaultArgRange();"},{A,16243,"#include \"clang/Basic/OperatorKinds.def\"\n if (Op == OO_Subscript && NumParams != 2) {\n Diag(FnDecl->getLocation(), LangOpts.CPlusPlus23 ? diag::ext_subscript_overload : diag::error_subscript_overload) << FnDecl->getDeclName() << (NumParams == 1 ? 0 : 2);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/cxx2b-overloaded-operator-pedantic.cpp"]={"clang/test/SemaCXX/cxx2b-overloaded-operator-pedantic.cpp:9:8: warning: overloaded \'operator[]\' with more than one parameter is a C++23 extension [-Wpre-c++23-compat]"} | |||
} | |||
}, | }, | ||
["ext_template_arg_extra_parens"]={ | ["ext_template_arg_extra_parens"]={ | ||
[ | [c]="address non-type template argument cannot be surrounded by parentheses", | ||
[ | [d]=q, | ||
[f]=p, | |||
[h]="address non-type template argument cannot be surrounded by parentheses", | |||
[b]=o, | [b]=o, | ||
[ | [g]="address non\\-type template argument cannot be surrounded by parentheses", | ||
[a]=Mb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"6a0c4097f142",1284358018,"Parentheses around address non-type template argument is demoted to an extension warning."}, | [i]={"6a0c4097f142",1284358018,"Parentheses around address non-type template argument is demoted to an extension warning."}, | ||
[j]={{ | [j]={{F,6769,"/// 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 if (S.getLangOpts().MicrosoftExt) {\n } else {\n while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {\n if (!Invalid && !ExtraParens) {\n S.Diag(Arg->getBeginLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_extra_parens : diag::ext_template_arg_extra_parens) << Arg->getSourceRange();"},{F,6992,"/// 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 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();"}}, | ||
[k]={ | |||
["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:93:5: warning: address non-type template argument cannot be surrounded by parentheses"} | |||
} | |||
}, | }, | ||
["ext_template_arg_local_type"]={ | ["ext_template_arg_local_type"]={ | ||
[ | [c]="template argument uses local type A [-Wlocal-type-template-args]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"local-type-template-args"}, | |||
[m]="local-type-template-args", | |||
[h]="template argument uses local type %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="template argument uses local type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wlocal\\-type\\-template\\-args[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"9bb67f4d1ab7",1283548354,"Allow anonymous and local types. The support was already in place for these,"}, | [i]={"9bb67f4d1ab7",1283548354,"Allow anonymous and local types. The support was already in place for these,"}, | ||
[j]={{ | [j]={{F,6459,"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;"}}, | ||
[k]={ | |||
["clang/test/SemaTemplate/recovery-crash.cpp"]={"clang/test/SemaTemplate/recovery-crash.cpp:32:7: warning: template argument uses local type \'LocalStruct\' [-Wlocal-type-template-args]"} | |||
} | |||
}, | }, | ||
["ext_template_arg_object_internal"]={ | ["ext_template_arg_object_internal"]={ | ||
[ | [c]="non-type template argument referring to ... A with internal linkage is a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="non-type template argument referring to %select{function|object}0 %1 with internal linkage is a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="non\\-type template argument referring to (?:function|object) (.*?) with internal linkage is a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"}, | [i]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"}, | ||
[j]={{ | [j]={{F,6873,"/// 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 // 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();"}}, | ||
[k]={ | |||
["clang/test/CXX/drs/dr1xx.cpp"]={"clang/test/CXX/drs/dr1xx.cpp:114:5: error: non-type template argument referring to object \'a1\' with internal linkage is a C++11 extension [-Werror,-Wc++11-extensions]","clang/test/CXX/drs/dr1xx.cpp:116:5: error: non-type template argument referring to object \'a3\' with internal linkage is a C++11 extension [-Werror,-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_template_arg_unnamed_type"]={ | ["ext_template_arg_unnamed_type"]={ | ||
[ | [c]="template argument uses unnamed type [-Wunnamed-type-template-args]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"unnamed-type-template-args"}, | |||
[m]="unnamed-type-template-args", | |||
[h]="template argument uses unnamed type", | |||
[b]=o, | [b]=o, | ||
[ | [g]="template argument uses unnamed type", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunnamed\\-type\\-template\\-args[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"9bb67f4d1ab7",1283548354,"Allow anonymous and local types. The support was already in place for these,"}, | [i]={"9bb67f4d1ab7",1283548354,"Allow anonymous and local types. The support was already in place for these,"}, | ||
[j]={{ | [j]={{F,6468,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\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;"}}, | ||
[k]={ | |||
["clang/test/CodeGenCXX/mangle-unnamed.cpp"]={"clang/test/CodeGenCXX/mangle-unnamed.cpp:84:16: warning: template argument uses unnamed type [-Wunnamed-type-template-args]","clang/test/CodeGenCXX/mangle-unnamed.cpp:83:53: warning: template argument uses unnamed type [-Wunnamed-type-template-args]"} | |||
} | |||
}, | }, | ||
["ext_template_outside_of_template"]={ | ["ext_template_outside_of_template"]={ | ||
[ | [c]="\'template\' keyword outside of a template [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="\'template\' keyword outside of a template", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'template\' keyword outside of a template", | ||
[a]=Z, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"f7d77718123f",1276727468,"Fix the recently-added warning about \'typename\' and \'template\'"}, | [i]={"f7d77718123f",1276727468,"Fix the recently-added warning about \'typename\' and \'template\'"}, | ||
[j]={{ | [j]={{F,5084,"/// 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);"}}, | ||
[k]={ | |||
["clang/test/SemaTemplate/nested-name-spec-template.cpp"]={"clang/test/SemaTemplate/nested-name-spec-template.cpp:26:6: warning: \'template\' keyword outside of a template [-Wc++11-extensions]","clang/test/SemaTemplate/nested-name-spec-template.cpp:31:6: warning: \'template\' keyword outside of a template [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_template_param_shadow"]={ | ["ext_template_param_shadow"]={ | ||
[ | [c]="declaration of A shadows template parameter [-Wmicrosoft-template-shadow]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,eb,"microsoft-template-shadow"}, | |||
[m]="microsoft-template-shadow", | |||
[h]="declaration of %0 shadows template parameter", | |||
[b]=o, | [b]=o, | ||
[ | [g]="declaration of (.*?) shadows template parameter", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-template\\-shadow[^\\]]*\\]", | |||
[e]=n, | |||
[i]={Vb,1567434909,cc}, | |||
[j]={{F,897,"/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining\n/// that the template parameter \'PrevDecl\' is being shadowed by a new\n/// declaration at location Loc. Returns true to indicate that this is\n/// an error, and false otherwise.\nvoid Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {\n unsigned DiagId = getLangOpts().MSVCCompat ? diag::ext_template_param_shadow : diag::err_template_param_shadow;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaCXX/microsoft-template-shadow.cpp"]={"clang/test/SemaCXX/microsoft-template-shadow.cpp:5:22: warning: declaration of \'T\' shadows template parameter [-Wmicrosoft-template-shadow]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_template_parameter_default_in_function_template"]={ | ["ext_template_parameter_default_in_function_template"]={ | ||
[ | [c]="default template arguments for a function template are a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="default template arguments for a function template are a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="default template arguments for a function template are a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"8b481d8ac2af",1296791842,"When a function template\'s template parameter has a default argument,"}, | [i]={"8b481d8ac2af",1296791842,"When a function template\'s template parameter has a default argument,"}, | ||
[j]={{ | [j]={{F,2724,"/// 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 case Sema::TPC_FriendFunctionTemplateDefinition:\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;"}}, | ||
[k]={ | |||
["clang/test/CXX/temp/temp.param/p9.cpp"]={"clang/test/CXX/temp/temp.param/p9.cpp:5:19: warning: default template arguments for a function template are a C++11 extension [-Wc++11-extensions]","clang/test/CXX/temp/temp.param/p9.cpp:7:19: warning: default template arguments for a function template are a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_template_template_param_typename"]={ | ["ext_template_template_param_typename"]={ | ||
[ | [c]="template template parameter using \'typename\' is a C++17 extension [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={P,hb}, | |||
[m]=P, | |||
[h]="template template parameter using \'typename\' is a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="template template parameter using \'typename\' is a C\\+\\+17 extension", | ||
[a]=ib, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"78e1ca692bf0",1402933882,"[C++1z] Implement N4051: \'typename\' is permitted instead of \'class\' when declaring a template templa..."}, | [i]={"78e1ca692bf0",1402933882,"[C++1z] Implement N4051: \'typename\' is permitted instead of \'class\' when declaring a template templa..."}, | ||
[j]={{"clang/lib/Parse/ParseTemplate.cpp",935,"/// 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 // 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 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());"}} | [j]={{"clang/lib/Parse/ParseTemplate.cpp",935,"/// 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 // 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 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());"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx-template-decl.cpp"]={"clang/test/Parser/cxx-template-decl.cpp:31:31: warning: template template parameter using \'typename\' is a C++17 extension [-Wc++17-extensions]"} | |||
} | |||
}, | }, | ||
["ext_thread_before"]={ | ["ext_thread_before"]={ | ||
[ | [c]="\'__thread\' before \'A\' [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="\'__thread\' before \'%0\'", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'__thread\' before \'(.*?)\'", | ||
[a]=X, | |||
[e]=y, | |||
[i]={C,1236199783,D}, | |||
[j]={{H,3946,"/// 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 while (true) {\n case tok::kw_extern:\n if (DS.getThreadStorageClassSpec() == DeclSpec::TSCS___thread)\n Diag(Tok, diag::ext_thread_before) << \"extern\";"},{H,3958,"/// 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 while (true) {\n case tok::kw_static:\n if (DS.getThreadStorageClassSpec() == DeclSpec::TSCS___thread)\n Diag(Tok, diag::ext_thread_before) << \"static\";"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/thread-specifier.c"]={"clang/test/Sema/thread-specifier.c:10:10: warning: \'__thread\' before \'extern\' [-Wpedantic]","clang/test/Sema/thread-specifier.c:11:10: warning: \'__thread\' before \'static\' [-Wpedantic]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_token_used"]={ | ["ext_token_used"]={ | ||
[ | [c]="extension used [-Wlanguage-extension-token]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"language-extension-token",v}, | |||
[m]="language-extension-token", | |||
[h]="extension used", | |||
[b]=o, | [b]=o, | ||
[ | [g]="extension used", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wlanguage\\-extension\\-token[^\\]]*\\]", | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[ | [j]={{"clang/lib/Lex/Preprocessor.cpp",855,"/// HandleIdentifier - This callback is invoked when the lexer reads an\n/// identifier. This callback looks up the identifier in the map and/or\n/// potentially macro expands it or turns it into a named token (like \'for\').\n///\n/// Note that callers of this method are guarded by checking the\n/// IdentifierInfo\'s \'isHandleIdentifierCase\' bit. If this method changes, the\n/// IdentifierInfo methods that compute these properties will need to change to\n/// match.\nbool Preprocessor::HandleIdentifier(Token &Identifier) {\n // If this is an extension token, diagnose its use.\n // We avoid diagnosing tokens that originate from macro definitions.\n // FIXME: This warning is disabled in cases where it shouldn\'t be,\n // like \"#define TY typeof\", \"TY(1) x\".\n if (II.isExtensionToken() && !DisableMacroExpansion)\n Diag(Identifier, diag::ext_token_used);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/extension-warning.c"]={"clang/test/Preprocessor/extension-warning.c:9:1: warning: extension used [-Wlanguage-extension-token]"} | |||
[ | } | ||
[i]={ | |||
[j]={{"clang/lib/Lex/Preprocessor.cpp",855,"/// HandleIdentifier - This callback is invoked when the lexer reads an\n/// identifier. This callback looks up the identifier in the map and/or\n/// potentially macro expands it or turns it into a named token (like \'for\').\n///\n/// Note that callers of this method are guarded by checking the\n/// IdentifierInfo\'s \'isHandleIdentifierCase\' bit. If this method changes, the\n/// IdentifierInfo methods that compute these properties will need to change to\n/// match.\nbool Preprocessor::HandleIdentifier(Token &Identifier) {\n // If this is an extension token, diagnose its use.\n // We avoid diagnosing tokens that originate from macro definitions.\n // FIXME: This warning is disabled in cases where it shouldn\'t be,\n // like \"#define TY typeof\", \"TY(1) x\".\n if (II.isExtensionToken() && !DisableMacroExpansion)\n Diag(Identifier, diag::ext_token_used);"}} | |||
}, | }, | ||
["ext_type_defined_in_offsetof"]={ | ["ext_type_defined_in_offsetof"]={ | ||
[ | [c]="defining a type within \'...\' is a Clang extension [-Wgnu-offsetof-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-offsetof-extensions",v}, | |||
[m]="gnu-offsetof-extensions", | |||
[h]="defining a type within \'%select{__builtin_offsetof|offsetof}0\' is a Clang extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="defining a type within \'(?:__builtin_offsetof|offsetof)\' is a Clang extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-offsetof\\-extensions[^\\]]*\\]", | |||
[e]=n, | |||
[i]={O,1625925174,N}, | |||
[j]={{x,17549,"CreateNewDecl:\n if (OOK != OOK_Outside && TUK == TUK_Definition && !getLangOpts().CPlusPlus)\n Diag(New->getLocation(), diag::ext_type_defined_in_offsetof) << (OOK == OOK_Macro) << New->getSourceRange();"}}, | |||
[k]={ | |||
[ | ["clang/test/C/drs/dr4xx.c"]={"clang/test/C/drs/dr4xx.c:353:36: warning: defining a type within \'__builtin_offsetof\' is a Clang extension [-Wgnu-offsetof-extensions]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_typecheck_addrof_temporary"]={ | ["ext_typecheck_addrof_temporary"]={ | ||
[ | [c]="taking the address of a temporary object of type A [-Waddress-of-temporary]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"address-of-temporary"}, | ||
[ | [m]="address-of-temporary", | ||
[ | [h]="taking the address of a temporary object of type %0", | ||
[ | [b]=R, | ||
[ | [g]="taking the address of a temporary object of type (.*?)", | ||
[ | [a]=" \\[[^\\]]*\\-Waddress\\-of\\-temporary[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function"}, | [i]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function"}, | ||
[j]={{ | [j]={{z,14950,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n Diag(OpLoc, isSFINAEContext() ? diag::err_typecheck_addrof_temporary : diag::ext_typecheck_addrof_temporary) << op->getType() << op->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/address-of-temporary.cpp"]={"clang/test/SemaCXX/address-of-temporary.cpp:8:19: warning: taking the address of a temporary object of type \'X\' [-Waddress-of-temporary]","clang/test/SemaCXX/address-of-temporary.cpp:9:19: warning: taking the address of a temporary object of type \'X\' [-Waddress-of-temporary]","clang/test/SemaCXX/address-of-temporary.cpp:10:19: warning: taking the address of a temporary object of type \'X\' [-Waddress-of-temporary]","clang/test/SemaCXX/address-of-temporary.cpp:11:19: warning: taking the address of a temporary object of type \'X\' [-Waddress-of-temporary]"} | |||
} | |||
}, | }, | ||
["ext_typecheck_addrof_void"]={ | ["ext_typecheck_addrof_void"]={ | ||
[ | [c]="ISO C forbids taking the address of an expression of type \'void\' [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="ISO C forbids taking the address of an expression of type \'void\'", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C forbids taking the address of an expression of type \'void\'", | ||
[a]=X, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"b8c4fd8cfd27",1241390165,"PR2524: downgrade taking address of expression of type \'void\' to an "}, | [i]={"b8c4fd8cfd27",1241390165,"PR2524: downgrade taking address of expression of type \'void\' to an "}, | ||
[j]={{ | [j]={{z,15073,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n if (lval == Expr::LV_IncompleteVoidType) {\n Diag(OpLoc, diag::ext_typecheck_addrof_void) << op->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/Sema/deref.c"]={"clang/test/Sema/deref.c:21:12: warning: ISO C forbids taking the address of an expression of type \'void\' [-Wpedantic]","clang/test/Sema/deref.c:35:10: warning: ISO C forbids taking the address of an expression of type \'void\' [-Wpedantic]"} | |||
} | |||
}, | }, | ||
["ext_typecheck_base_super"]={ | ["ext_typecheck_base_super"]={ | ||
[ | [c]="method parameter type A does not match super class method parameter type B [-Wsuper-class-method-mismatch]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={"super-class-method-mismatch"}, | |||
[m]="super-class-method-mismatch", | |||
[h]="method parameter type %diff{$ does not match super class method parameter type $|does not match super class method parameter type}0,1", | |||
[b]=o, | [b]=o, | ||
[ | [g]="method parameter type (?:(.*?) does not match super class method parameter type (.*?)|does not match super class method parameter type)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wsuper\\-class\\-method\\-mismatch[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"10ff786e1eb8",1249348036,"Compare matching selectors in current and"}, | [i]={"10ff786e1eb8",1249348036,"Compare matching selectors in current and"}, | ||
[j]={{ | [j]={{pb,4528,"void Sema::CheckObjCMethodOverrides(ObjCMethodDecl *ObjCMethod, ObjCInterfaceDecl *CurrentClass, ResultTypeCompatibilityKind RTC) {\n for (ObjCMethodDecl *overridden : overrides) {\n if (CurrentClass && overridden->getDeclContext() != CurrentClass && isa<ObjCInterfaceDecl>(overridden->getDeclContext()) && !overridden->isImplicit() /* not meant for properties */) {\n for (; ParamI != E && PrevI != PrevE; ++ParamI, ++PrevI) {\n // If type of argument of method in this class does not match its\n // respective argument type in the super class method, issue warning;\n if (!Context.typesAreCompatible(T1, T2)) {\n Diag((*ParamI)->getLocation(), diag::ext_typecheck_base_super) << T1 << T2;"}}, | ||
[k]={ | |||
["clang/test/SemaObjC/warn-superclass-method-mismatch.m"]={"clang/test/SemaObjC/warn-superclass-method-mismatch.m:24:29: warning: method parameter type \'struct A *\' does not match super class method parameter type \'int *\' [-Wsuper-class-method-mismatch]","clang/test/SemaObjC/warn-superclass-method-mismatch.m:25:25: warning: method parameter type \'Sub *\' does not match super class method parameter type \'Base *\' [-Wsuper-class-method-mismatch]","clang/test/SemaObjC/warn-superclass-method-mismatch.m:27:29: warning: method parameter type \'Sub *\' does not match super class method parameter type \'Base *\' [-Wsuper-class-method-mismatch]","clang/test/SemaObjC/warn-superclass-method-mismatch.m:29:50: warning: method parameter type \'Sub *\' does not match super class method parameter type \'int *\' [-Wsuper-class-method-mismatch]","clang/test/SemaObjC/warn-superclass-method-mismatch.m:30:30: warning: method parameter type \'float\' does not match super class method parameter type \'double\' [-Wsuper-class-method-mismatch]","clang/test/SemaObjC/warn-superclass-method-mismatch.m:31:31: warning: method parameter type \'double\' does not match super class method parameter type \'float\' [-Wsuper-class-method-mismatch]"} | |||
} | |||
}, | }, | ||
["ext_typecheck_cast_nonscalar"]={ | ["ext_typecheck_cast_nonscalar"]={ | ||
[ | [c]="C99 forbids casting nonscalar type A to the same type [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="C99 forbids casting nonscalar type %0 to the same type", | |||
[b]=o, | [b]=o, | ||
[ | [g]="C99 forbids casting nonscalar type (.*?) to the same type", | ||
[a]=X, | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{Bb,3007,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n if (DestRecordTy && Self.Context.hasSameUnqualifiedType(DestType, SrcType)) {\n Self.Diag(OpRange.getBegin(), diag::ext_typecheck_cast_nonscalar) << DestType << SrcExpr.get()->getSourceRange();"}} | |||
[ | |||
[ | |||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_typecheck_cast_to_union"]={ | ["ext_typecheck_cast_to_union"]={ | ||
[ | [c]="cast to union type is a GNU extension [-Wgnu-union-cast]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,"gnu-union-cast",v}, | |||
[m]="gnu-union-cast", | |||
[h]="cast to union type is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="cast to union type is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-union\\-cast[^\\]]*\\]", | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[ | [j]={{Bb,3017,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n // GCC\'s cast to union extension.\n if (DestRecordTy && DestRecordTy->getDecl()->isUnion()) {\n if (CastExpr::getTargetFieldForToUnionCast(RD, SrcType)) {\n Self.Diag(OpRange.getBegin(), diag::ext_typecheck_cast_to_union) << SrcExpr.get()->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/Sema/cast-to-union.c"]={"clang/test/Sema/cast-to-union.c:7:5: warning: cast to union type is a GNU extension [-Wgnu-union-cast]","clang/test/Sema/cast-to-union.c:12:13: warning: cast to union type is a GNU extension [-Wgnu-union-cast]","clang/test/Sema/cast-to-union.c:16:14: warning: cast to union type is a GNU extension [-Wgnu-union-cast]"} | |||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_typecheck_compare_complete_incomplete_pointers"]={ | ["ext_typecheck_compare_complete_incomplete_pointers"]={ | ||
[ | [c]="pointer comparisons before C11 need to be between two complete or two incomplete types; A is ...complete and B is ...complete [-Wc11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={Pb,v}, | |||
[m]=Pb, | |||
[h]="pointer comparisons before C11 need to be between two complete or two incomplete types; %0 is %select{|in}2complete and %1 is %select{|in}3complete", | |||
[b]=o, | [b]=o, | ||
[ | [g]="pointer comparisons before C11 need to be between two complete or two incomplete types; (.*?) is (?:|in)complete and (.*?) is (?:|in)complete", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wc11\\-extensions[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata"}, | [i]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata"}, | ||
[j]={{ | [j]={{z,13131,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n if ((LHSType->isIntegerType() && !LHSIsNull) || (RHSType->isIntegerType() && !RHSIsNull)) {\n } else if (getLangOpts().CPlusPlus) {\n } else if (LHSType->isPointerType() && RHSType->isPointerType()) { // C99 6.5.8p2\n // C99 6.5.9p2 and C99 6.5.8p2\n if (Context.typesAreCompatible(LCanPointeeTy.getUnqualifiedType(), RCanPointeeTy.getUnqualifiedType())) {\n if (IsRelational) {\n // Pointers both need to point to complete or incomplete types\n if ((LCanPointeeTy->isIncompleteType() != RCanPointeeTy->isIncompleteType()) && !getLangOpts().C11) {\n Diag(Loc, diag::ext_typecheck_compare_complete_incomplete_pointers) << LHS.get()->getSourceRange() << RHS.get()->getSourceRange() << LHSType << RHSType << LCanPointeeTy->isIncompleteType() << RCanPointeeTy->isIncompleteType();"}}, | ||
[k]={ | |||
["clang/test/Sema/complete-incomplete-pointer-relational-c99.c"]={"clang/test/Sema/complete-incomplete-pointer-relational-c99.c:8:23: warning: pointer comparisons before C11 need to be between two complete or two incomplete types; \'int (*)[]\' is incomplete and \'int (*)[6]\' is complete [-Wc11-extensions]","clang/test/Sema/complete-incomplete-pointer-relational-c99.c:9:23: warning: pointer comparisons before C11 need to be between two complete or two incomplete types; \'int (*)[]\' is incomplete and \'int (*)[6]\' is complete [-Wc11-extensions]","clang/test/Sema/complete-incomplete-pointer-relational-c99.c:10:23: warning: pointer comparisons before C11 need to be between two complete or two incomplete types; \'int (*)[]\' is incomplete and \'int (*)[6]\' is complete [-Wc11-extensions]","clang/test/Sema/complete-incomplete-pointer-relational-c99.c:11:23: warning: pointer comparisons before C11 need to be between two complete or two incomplete types; \'int (*)[]\' is incomplete and \'int (*)[6]\' is complete [-Wc11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_typecheck_comparison_of_distinct_pointers"]={ | ["ext_typecheck_comparison_of_distinct_pointers"]={ | ||
[ | [c]="comparison of distinct pointer types (A and B) [-Wcompare-distinct-pointer-types]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"compare-distinct-pointer-types"}, | |||
[m]="compare-distinct-pointer-types", | |||
[h]="comparison of distinct pointer types%diff{ ($ and $)|}0,1", | |||
[b]=o, | [b]=o, | ||
[ | [g]="comparison of distinct pointer types(?: \\((.*?) and (.*?)\\)|)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wcompare\\-distinct\\-pointer\\-types[^\\]]*\\]", | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{z,12364,"static void diagnoseDistinctPointerComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) { S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_distinct_pointers : diag::ext_typecheck_comparison_of_distinct_pointers) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); }"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:74:12: warning: comparison of distinct pointer types (\'id<P1>\' and \'A *\') [-Wcompare-distinct-pointer-types]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_typecheck_comparison_of_fptr_to_void"]={ | ["ext_typecheck_comparison_of_fptr_to_void"]={ | ||
[ | [c]="equality comparison between function pointer and void pointer (A and B) [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="equality comparison between function pointer and void pointer (%0 and %1)", | |||
[b]=o, | [b]=o, | ||
[ | [g]="equality comparison between function pointer and void pointer \\((.*?) and (.*?)\\)", | ||
[a]=X, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"16c209610c8b",1250987267,"Catch a few more cases of illegal comparisons."}, | [i]={"16c209610c8b",1250987267,"Catch a few more cases of illegal comparisons."}, | ||
[j]={{ | [j]={{z,12500,"static void diagnoseFunctionPointerToVoidComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) { S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_fptr_to_void : diag::ext_typecheck_comparison_of_fptr_to_void) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); }"}}, | ||
[k]={ | |||
["clang/test/Sema/compare.c"]={"clang/test/Sema/compare.c:225:12: warning: equality comparison between function pointer and void pointer (\'int (*)(int)\' and \'void *\') [-Wpedantic]"} | |||
} | |||
}, | }, | ||
["ext_typecheck_comparison_of_pointer_integer"]={ | ["ext_typecheck_comparison_of_pointer_integer"]={ | ||
[ | [c]="comparison between pointer and integer (A and B) [-Wpointer-integer-compare]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"pointer-integer-compare"}, | |||
[m]="pointer-integer-compare", | |||
[h]="comparison between pointer and integer (%0 and %1)", | |||
[b]=o, | [b]=o, | ||
[ | [g]="comparison between pointer and integer \\((.*?) and (.*?)\\)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wpointer\\-integer\\-compare[^\\]]*\\]", | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{z,13479,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n if (LangOpts.DebuggerSupport) {\n } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n } else if (getLangOpts().CPlusPlus) {\n } else if (IsOrdered)\n else\n DiagID = diag::ext_typecheck_comparison_of_pointer_integer;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaObjC/comptypes-7.m"]={"clang/test/SemaObjC/comptypes-7.m:49:11: warning: comparison between pointer and integer (\'id\' and \'int\') [-Wpointer-integer-compare]","clang/test/SemaObjC/comptypes-7.m:50:9: warning: comparison between pointer and integer (\'int\' and \'id\') [-Wpointer-integer-compare]","clang/test/SemaObjC/comptypes-7.m:54:13: warning: comparison between pointer and integer (\'MyClass *\' and \'int\') [-Wpointer-integer-compare]","clang/test/SemaObjC/comptypes-7.m:55:9: warning: comparison between pointer and integer (\'int\' and \'MyClass *\') [-Wpointer-integer-compare]","clang/test/SemaObjC/comptypes-7.m:59:13: warning: comparison between pointer and integer (\'id<MyProtocol>\' and \'int\') [-Wpointer-integer-compare]","clang/test/SemaObjC/comptypes-7.m:60:9: warning: comparison between pointer and integer (\'int\' and \'id<MyProtocol>\') [-Wpointer-integer-compare]","clang/test/SemaObjC/comptypes-7.m:64:13: warning: comparison between pointer and integer (\'Class\' and \'int\') [-Wpointer-integer-compare]","clang/test/SemaObjC/comptypes-7.m:65:9: warning: comparison between pointer and integer (\'int\' and \'Class\') [-Wpointer-integer-compare]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_typecheck_cond_incompatible_operands"]={ | ["ext_typecheck_cond_incompatible_operands"]={ | ||
[ | [c]="incompatible operand types (A and B)", | ||
[ | [d]=q, | ||
[f]=p, | |||
[h]="incompatible operand types (%0 and %1)", | |||
[b]=o, | [b]=o, | ||
[ | [g]="incompatible operand types \\((.*?) and (.*?)\\)", | ||
[a]=Mb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"1b821b4fc583",1241666054,"Improve semantic checking for blocks. Radar 6441502"}, | [i]={"1b821b4fc583",1241666054,"Improve semantic checking for blocks. Radar 6441502"}, | ||
[j]={{ | [j]={{z,9352,"/// FindCompositeObjCPointerType - Helper method to find composite type of\n/// two objective-c pointer types of the two input expressions.\nQualType Sema::FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n // Check constraints for Objective-C object pointers types.\n if (LHSTy->isObjCObjectPointerType() && RHSTy->isObjCObjectPointerType()) {\n // FIXME: Consider unifying with \'areComparableObjCPointerTypes\'.\n // It could return the composite type.\n if (!(compositeType = Context.areCommonBaseCompatible(LHSOPT, RHSOPT)).isNull()) {\n } else if (Context.canAssignObjCInterfaces(LHSOPT, RHSOPT)) {\n } else if (Context.canAssignObjCInterfaces(RHSOPT, LHSOPT)) {\n } else if ((LHSOPT->isObjCQualifiedIdType() || RHSOPT->isObjCQualifiedIdType()) && Context.ObjCQualifiedIdTypesAreCompatible(LHSOPT, RHSOPT, true)) {\n } else if (LHSTy->isObjCIdType() || RHSTy->isObjCIdType()) {\n } else {\n Diag(QuestionLoc, diag::ext_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:78:16: warning: incompatible operand types (\'id<P1>\' and \'A *\')"} | |||
} | |||
}, | }, | ||
["ext_typecheck_cond_incompatible_pointers"]={ | ["ext_typecheck_cond_incompatible_pointers"]={ | ||
[ | [c]="pointer type mismatch (A and B) [-Wpointer-type-mismatch]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"pointer-type-mismatch"}, | |||
[m]="pointer-type-mismatch", | |||
[h]="pointer type mismatch%diff{ ($ and $)|}0,1", | |||
[b]=o, | [b]=o, | ||
[ | [g]="pointer type mismatch(?: \\((.*?) and (.*?)\\)|)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wpointer\\-type\\-mismatch[^\\]]*\\]", | |||
[e]=n, | |||
[i]={nb,1405733957,lb}, | |||
[j]={{z,8784,"/// Checks compatibility between two pointers and return the resulting\n/// type.\nstatic QualType checkConditionalPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n if (CompositeTy.isNull()) {\n S.Diag(Loc, diag::ext_typecheck_cond_incompatible_pointers) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Sema/conditional-expr.c"]={"clang/test/Sema/conditional-expr.c:9:7: warning: pointer type mismatch (\'double *\' and \'int *\') [-Wpointer-type-mismatch]","clang/test/Sema/conditional-expr.c:38:21: warning: pointer type mismatch (\'int *\' and \'enum (unnamed enum at clang/test/Sema/conditional-expr.c:36:3) *\') [-Wpointer-type-mismatch]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_typecheck_cond_one_void"]={ | ["ext_typecheck_cond_one_void"]={ | ||
[ | [c]="C99 forbids conditional expressions with only one void side [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="C99 forbids conditional expressions with only one void side", | |||
[b]=o, | [b]=o, | ||
[ | [g]="C99 forbids conditional expressions with only one void side", | ||
[a]=X, | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[ | [j]={{z,9184,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // C99 6.5.15p5: \"If both operands have void type, the result has void type.\"\n // The following || allows only one side to be void (a GCC-ism).\n if (LHSTy->isVoidType() || RHSTy->isVoidType()) {\n if (LHSTy->isVoidType() && RHSTy->isVoidType()) {\n } else if (RHSTy->isVoidType()) {\n Diag(RHS.get()->getBeginLoc(), diag::ext_typecheck_cond_one_void) << RHS.get()->getSourceRange();"},{z,9243,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // C99 6.5.15p5: \"If both operands have void type, the result has void type.\"\n // The following || allows only one side to be void (a GCC-ism).\n if (LHSTy->isVoidType() || RHSTy->isVoidType()) {\n if (LHSTy->isVoidType() && RHSTy->isVoidType()) {\n } else if (RHSTy->isVoidType()) {\n } else {\n Diag(LHS.get()->getBeginLoc(), diag::ext_typecheck_cond_one_void) << LHS.get()->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/Sema/conditional-expr.c"]={"clang/test/Sema/conditional-expr.c:89:60: warning: C99 forbids conditional expressions with only one void side [-Wpedantic]"} | |||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_typecheck_cond_pointer_integer_mismatch"]={ | ["ext_typecheck_cond_pointer_integer_mismatch"]={ | ||
[ | [c]="pointer/integer type mismatch in conditional expression (A and B) [-Wconditional-type-mismatch]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"conditional-type-mismatch"}, | |||
[m]="conditional-type-mismatch", | |||
[h]="pointer/integer type mismatch in conditional expression%diff{ ($ and $)|}0,1", | |||
[b]=o, | [b]=o, | ||
[ | [g]="pointer\\/integer type mismatch in conditional expression(?: \\((.*?) and (.*?)\\)|)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wconditional\\-type\\-mismatch[^\\]]*\\]", | |||
[e]=n, | |||
[i]={nb,1405733957,lb}, | |||
[j]={{z,8883,"/// Return false if the first expression is not an integer and the second\n/// expression is not a pointer, true otherwise.\nstatic bool checkPointerIntegerMismatch(Sema &S, ExprResult &Int, Expr *PointerExpr, SourceLocation Loc, bool IsIntFirstExpr) {\n S.Diag(Loc, diag::ext_typecheck_cond_pointer_integer_mismatch) << Expr1->getType() << Expr2->getType() << Expr1->getSourceRange() << Expr2->getSourceRange();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Sema/conditional-expr.c"]={"clang/test/Sema/conditional-expr.c:99:12: warning: pointer/integer type mismatch in conditional expression (\'int\' and \'void *\') [-Wconditional-type-mismatch]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_typecheck_convert_discards_qualifiers"]={ | ["ext_typecheck_convert_discards_qualifiers"]={ | ||
[ | [c]="... discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={Lc,"incompatible-pointer-types-discards-qualifiers"}, | |||
[m]="incompatible-pointer-types-discards-qualifiers", | |||
[h]="%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 discards qualifiers", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(?:(?: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)) discards qualifiers", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-pointer\\-types\\-discards\\-qualifiers[^\\]]*\\]", | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{bb,3199,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n if (!AddrType.isAtLeastAsQualifiedAs(ValType)) {\n Diag(DRE->getBeginLoc(), diag::ext_typecheck_convert_discards_qualifiers) << PointerArg->getType() << Context.getPointerType(AddrType) << AA_Passing << PointerArg->getSourceRange();"},{z,17638,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case CompatiblePointerDiscardsQualifiers:\n if (getLangOpts().CPlusPlus) {\n } else {\n DiagKind = diag::ext_typecheck_convert_discards_qualifiers;"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:29:9: warning: initializing \'void *\' with an expression of type \'const void *\' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]"} | ||
[i]={ | } | ||
[j]={{bb,3199,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n if (!AddrType.isAtLeastAsQualifiedAs(ValType)) {\n Diag(DRE->getBeginLoc(), diag::ext_typecheck_convert_discards_qualifiers) << PointerArg->getType() << Context.getPointerType(AddrType) << AA_Passing << PointerArg->getSourceRange();"},{ | |||
}, | }, | ||
["ext_typecheck_convert_incompatible_function_pointer"]={ | ["ext_typecheck_convert_incompatible_function_pointer"]={ | ||
[ | [c]="incompatible function pointer types ...... [-Wincompatible-function-pointer-types]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"incompatible-function-pointer-types",Lc}, | ||
[ | [m]="incompatible-function-pointer-types", | ||
[ | [h]="incompatible function pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", | ||
[ | [b]=R, | ||
[ | [g]="incompatible function pointer types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)", | ||
[ | [a]=" \\[[^\\]]*\\-Wincompatible\\-function\\-pointer\\-types[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"d9b7dfe4a4df",1468874226,"[Sema] Create a separate group for incompatible function pointer warning"}, | [i]={"d9b7dfe4a4df",1468874226,"[Sema] Create a separate group for incompatible function pointer warning"}, | ||
[j]={{ | [j]={{z,17561,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case IncompatibleFunctionPointer:\n if (getLangOpts().CPlusPlus) {\n } else {\n DiagKind = diag::ext_typecheck_convert_incompatible_function_pointer;"}}, | ||
[k]={ | |||
["clang/test/C/C2x/n2975.c"]={"clang/test/C/C2x/n2975.c:65:6: error: incompatible function pointer types initializing \'fp\' (aka \'void (*)(...)\') with an expression of type \'void (int, int, ...)\' [-Wincompatible-function-pointer-types]"} | |||
} | |||
}, | }, | ||
["ext_typecheck_convert_incompatible_pointer"]={ | ["ext_typecheck_convert_incompatible_pointer"]={ | ||
[ | [c]="incompatible pointer types ...... [-Wincompatible-pointer-types]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={Lc}, | |||
[m]=Lc, | |||
[h]="incompatible pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", | |||
[b]=o, | [b]=o, | ||
[ | [g]="incompatible pointer types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-pointer\\-types[^\\]]*\\]", | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{z,17580,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case IncompatiblePointer:\n if (Action == AA_Passing_CFAudited) {\n } else if (getLangOpts().CPlusPlus) {\n } else {\n DiagKind = diag::ext_typecheck_convert_incompatible_pointer;"},{Y,4479,"/// 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 case ICK_Pointer_Conversion: {\n if (SCS.IncompatibleObjC && Action != AA_Casting) {\n // Diagnose incompatible Objective-C conversions\n if (Action == AA_Initializing || Action == AA_Assigning)\n Diag(From->getBeginLoc(), diag::ext_typecheck_convert_incompatible_pointer) << ToType << From->getType() << Action << From->getSourceRange() << 0;"},{Y,4484,"/// 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 case ICK_Pointer_Conversion: {\n if (SCS.IncompatibleObjC && Action != AA_Casting) {\n // Diagnose incompatible Objective-C conversions\n if (Action == AA_Initializing || Action == AA_Assigning)\n else\n Diag(From->getBeginLoc(), diag::ext_typecheck_convert_incompatible_pointer) << From->getType() << ToType << Action << From->getSourceRange() << 0;"}}, | |||
[ | [k]={ | ||
[ | [Tb]={"clang/test/Parser/declarators.c:60:10: warning: incompatible pointer types returning \'int *\' from a function with result type \'float *\' [-Wincompatible-pointer-types]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_typecheck_convert_incompatible_pointer_sign"]={ | ["ext_typecheck_convert_incompatible_pointer_sign"]={ | ||
[ | [c]="... converts between pointers to integer types ... [-Wpointer-sign]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"pointer-sign"}, | |||
[m]="pointer-sign", | |||
[h]="%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 converts between pointers to integer types %select{with different sign|where one is of the unique plain \'char\' type and the other is not}3", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(?:(?: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)) converts between pointers to integer types (?:with different sign|where one is of the unique plain \'char\' type and the other is not)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wpointer\\-sign[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"80160bd483b3",1237766384,"Partial implementation of PR3342: break out pointer sign "}, | [i]={"80160bd483b3",1237766384,"Partial implementation of PR3342: break out pointer sign "}, | ||
[j]={{ | [j]={{z,17588,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case IncompatiblePointerSign:\n if (getLangOpts().CPlusPlus) {\n } else {\n DiagKind = diag::ext_typecheck_convert_incompatible_pointer_sign;"},{z,17743,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n if (DiagKind == diag::ext_typecheck_convert_incompatible_pointer_sign || DiagKind == diag::err_typecheck_convert_incompatible_pointer_sign) {"}}, | ||
[k]={ | |||
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-fetch-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-fetch-error.c:10:19: warning: passing \'volatile unsigned int *\' to parameter of type \'volatile int *\' converts between pointers to integer types with different sign [-Wpointer-sign]","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-fetch-error.c:17:21: warning: passing \'volatile unsigned long *\' to parameter of type \'volatile long *\' converts between pointers to integer types with different sign [-Wpointer-sign]"} | |||
} | |||
}, | }, | ||
["ext_typecheck_convert_int_pointer"]={ | ["ext_typecheck_convert_int_pointer"]={ | ||
[ | [c]="incompatible integer to pointer conversion ...... [-Wint-conversion]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"conversion","int-conversion","int-conversions","non-gcc"}, | ||
[ | [m]="int-conversion", | ||
[ | [h]="incompatible integer to pointer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", | ||
[ | [b]=R, | ||
[ | [g]="incompatible integer to pointer conversion (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)", | ||
[ | [a]=" \\[[^\\]]*\\-Wint\\-conversion[^\\]]*\\]", | ||
[ | [e]="Value Conversion Issue", | ||
[i]={ | [i]={I,1237025389,J}, | ||
[j]={{ | [j]={{z,17545,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case IntToPointer:\n if (getLangOpts().CPlusPlus) {\n } else {\n DiagKind = diag::ext_typecheck_convert_int_pointer;"}}, | ||
[k]={ | |||
["clang/test/SemaObjC/argument-checking.m"]={"clang/test/SemaObjC/argument-checking.m:20:16: error: incompatible integer to pointer conversion passing \'int\' to parameter of type \'char *\' [-Wint-conversion]","clang/test/SemaObjC/argument-checking.m:23:21: error: incompatible integer to pointer conversion sending \'int\' to parameter of type \'char *\' [-Wint-conversion]"} | |||
} | |||
}, | }, | ||
["ext_typecheck_convert_pointer_int"]={ | ["ext_typecheck_convert_pointer_int"]={ | ||
[ | [c]="incompatible pointer to integer conversion ...... [-Wint-conversion]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"conversion","int-conversion","int-conversions","non-gcc"}, | ||
[ | [m]="int-conversion", | ||
[ | [h]="incompatible pointer to integer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", | ||
[ | [b]=R, | ||
[ | [g]="incompatible pointer to integer conversion (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)", | ||
[ | [a]=" \\[[^\\]]*\\-Wint\\-conversion[^\\]]*\\]", | ||
[ | [e]="Value Conversion Issue", | ||
[i]={ | [i]={I,1237025389,J}, | ||
[j]={{ | [j]={{z,17535,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case PointerToInt:\n if (getLangOpts().CPlusPlus) {\n } else {\n DiagKind = diag::ext_typecheck_convert_pointer_int;"}}, | ||
[k]={ | |||
["clang/test/SemaObjC/argument-checking.m"]={"clang/test/SemaObjC/argument-checking.m:21:12: error: incompatible pointer to integer conversion passing \'char[4]\' to parameter of type \'char\' [-Wint-conversion]"} | |||
} | |||
}, | }, | ||
["ext_typecheck_convert_pointer_void_func"]={ | ["ext_typecheck_convert_pointer_void_func"]={ | ||
[ | [c]="... converts between void pointer and function pointer [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="%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 converts between void pointer and function pointer", | |||
[b]=o, | [b]=o, | ||
[ | [g]="(?:(?: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)) converts between void pointer and function pointer", | ||
[a]=X, | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{z,17603,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n case FunctionVoidPointer:\n if (getLangOpts().CPlusPlus) {\n } else {\n DiagKind = diag::ext_typecheck_convert_pointer_void_func;"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/function-ptr.c"]={"clang/test/Sema/function-ptr.c:6:7: warning: assigning to \'unary_int_func *\' (aka \'int (*)(int)\') from \'void *\' converts between void pointer and function pointer [-Wpedantic]","clang/test/Sema/function-ptr.c:7:4: warning: assigning to \'void *\' from \'unary_int_func *\' (aka \'int (*)(int)\') converts between void pointer and function pointer [-Wpedantic]","clang/test/Sema/function-ptr.c:9:9: warning: returning \'void *\' from a function with result type \'unary_int_func *\' (aka \'int (*)(int)\') converts between void pointer and function pointer [-Wpedantic]"} | ||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_typecheck_decl_incomplete_type"]={ | ["ext_typecheck_decl_incomplete_type"]={ | ||
[ | [c]="tentative definition of variable with internal linkage has incomplete non-array type A [-Wtentative-definition-incomplete-type]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"tentative-definition-incomplete-type"}, | |||
[m]="tentative-definition-incomplete-type", | |||
[h]="tentative definition of variable with internal linkage has incomplete non-array type %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="tentative definition of variable with internal linkage has incomplete non\\-array type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wtentative\\-definition\\-incomplete\\-type[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"47d2859b3e27",1248115619,"Improve GCC compatibility by allowing static tentative definitions of"}, | [i]={"47d2859b3e27",1248115619,"Improve GCC compatibility by allowing static tentative definitions of"}, | ||
[j]={{ | [j]={{x,13816,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n case VarDecl::TentativeDefinition:\n // File scope. C99 6.9.2p2: A declaration of an identifier for an\n // object that has file scope without an initializer, and without a\n // storage-class specifier or with the storage-class specifier \"static\",\n // constitutes a tentative definition. Note: A tentative definition with\n // external linkage is valid (C99 6.2.2p5).\n if (!Var->isInvalidDecl()) {\n if (const IncompleteArrayType *ArrayT = Context.getAsIncompleteArrayType(Type)) {\n } else if (Var->getStorageClass() == SC_Static) {\n // C99 6.9.2p3: If the declaration of an identifier for an object is\n // a tentative definition and has internal linkage (C99 6.2.2p3), the\n // declared type shall not be an incomplete type.\n // NOTE: code such as the following\n // static struct s;\n // struct s { int a; };\n // is accepted by gcc. Hence here we issue a warning instead of\n // an error and we do not invalidate the static declaration.\n // NOTE: to avoid multiple warnings, only check the first declaration.\n if (Var->isFirstDecl())\n RequireCompleteType(Var->getLocation(), Type, diag::ext_typecheck_decl_incomplete_type);"}}, | ||
[k]={ | |||
["clang/test/Sema/tentative-decls.c"]={"clang/test/Sema/tentative-decls.c:5:17: warning: tentative definition of variable with internal linkage has incomplete non-array type \'struct a\' [-Wtentative-definition-incomplete-type]"} | |||
} | |||
}, | }, | ||
["ext_typecheck_indirection_through_void_pointer"]={ | ["ext_typecheck_indirection_through_void_pointer"]={ | ||
[ | [c]="ISO C does not allow indirection on operand of type A [-Wvoid-ptr-dereference]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"void-ptr-dereference"}, | |||
[m]="void-ptr-dereference", | |||
[h]="ISO C does not allow indirection on operand of type %0", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C does not allow indirection on operand of type (.*?)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wvoid\\-ptr\\-dereference[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"80877c228d01",1399499607,"Add an Extension warning for applying unary * to an operand of type \'void*\' in"}, | [i]={"80877c228d01",1399499607,"Add an Extension warning for applying unary * to an operand of type \'void*\' in"}, | ||
[j]={{ | [j]={{z,15294,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n if (Result->isVoidType()) {\n if (LO.CPlusPlus)\n else if (!(LO.C99 && IsAfterAmp) && !S.isUnevaluatedContext())\n S.Diag(OpLoc, diag::ext_typecheck_indirection_through_void_pointer) << OpTy << Op->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/Sema/deref.c"]={"clang/test/Sema/deref.c:21:13: warning: ISO C does not allow indirection on operand of type \'void *\' [-Wvoid-ptr-dereference]"} | |||
} | |||
}, | }, | ||
["ext_typecheck_ordered_comparison_of_function_pointers"]={ | ["ext_typecheck_ordered_comparison_of_function_pointers"]={ | ||
[ | [c]="ordered comparison of function pointers (A and B) [-Wordered-compare-function-pointers]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"ordered-compare-function-pointers"}, | |||
[m]="ordered-compare-function-pointers", | |||
[h]="ordered comparison of function pointers (%0 and %1)", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ordered comparison of function pointers \\((.*?) and (.*?)\\)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wordered\\-compare\\-function\\-pointers[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"d466ea1b0873",1246343045,"Implement PR4175, catching some questionable comparisons. Patch by"}, | [i]={"d466ea1b0873",1246343045,"Implement PR4175, catching some questionable comparisons. Patch by"}, | ||
[j]={{ | [j]={{z,13109,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n if (IsOrdered && LHSType->isFunctionPointerType() && RHSType->isFunctionPointerType()) {\n auto DiagID = IsError ? diag::err_typecheck_ordered_comparison_of_function_pointers : getLangOpts().CPlusPlus ? diag::warn_typecheck_ordered_comparison_of_function_pointers : diag::ext_typecheck_ordered_comparison_of_function_pointers;"}} | ||
}, | }, | ||
["ext_typecheck_ordered_comparison_of_pointer_and_zero"]={ | ["ext_typecheck_ordered_comparison_of_pointer_and_zero"]={ | ||
[ | [c]="ordered comparison between pointer and zero (A and B) is an extension [-Wpedantic]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v}, | |||
[m]=v, | |||
[h]="ordered comparison between pointer and zero (%0 and %1) is an extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ordered comparison between pointer and zero \\((.*?) and (.*?)\\) is an extension", | ||
[a]=X, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"d99bd52c7395",1250985824,"Eli points out that we really must diagnose \"void* > 0\" as an extension. "}, | [i]={"d99bd52c7395",1250985824,"Eli points out that we really must diagnose \"void* > 0\" as an extension. "}, | ||
[j]={{ | [j]={{z,13352,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n if (LangOpts.DebuggerSupport) {\n } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n if (IsOrdered) {\n DiagID = isError ? diag::err_typecheck_ordered_comparison_of_pointer_and_zero : diag::ext_typecheck_ordered_comparison_of_pointer_and_zero;"}}, | ||
[k]={ | |||
["clang/test/Sema/compare.c"]={"clang/test/Sema/compare.c:215:12: warning: ordered comparison between pointer and zero (\'int *\' and \'int\') is an extension [-Wpedantic]"} | |||
} | |||
}, | }, | ||
["ext_typecheck_ordered_comparison_of_pointer_integer"]={ | ["ext_typecheck_ordered_comparison_of_pointer_integer"]={ | ||
[ | [c]="ordered comparison between pointer and integer (A and B)", | ||
[ | [d]=q, | ||
[f]=p, | |||
[h]="ordered comparison between pointer and integer (%0 and %1)", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ordered comparison between pointer and integer \\((.*?) and (.*?)\\)", | ||
[a]=Mb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"d466ea1b0873",1246343045,"Implement PR4175, catching some questionable comparisons. Patch by"}, | [i]={"d466ea1b0873",1246343045,"Implement PR4175, catching some questionable comparisons. Patch by"}, | ||
[j]={{ | [j]={{z,13357,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n if (LangOpts.DebuggerSupport) {\n } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n } else if (getLangOpts().CPlusPlus) {\n } else if (IsOrdered)\n DiagID = diag::ext_typecheck_ordered_comparison_of_pointer_integer;"}}, | ||
[k]={ | |||
["clang/test/Parser/pointer_promotion.c"]={"clang/test/Parser/pointer_promotion.c:14:10: warning: ordered comparison between pointer and integer (\'int *\' and \'int\')","clang/test/Parser/pointer_promotion.c:15:12: warning: ordered comparison between pointer and integer (\'short\' and \'int *\')"} | |||
} | |||
}, | }, | ||
["ext_typecheck_zero_array_size"]={ | ["ext_typecheck_zero_array_size"]={ | ||
[ | [c]="zero size arrays are an extension [-Wzero-length-array]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,v,"zero-length-array"}, | |||
[m]="zero-length-array", | |||
[h]="zero size arrays are an extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="zero size arrays are an extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wzero\\-length\\-array[^\\]]*\\]", | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[ | [j]={{U,2075,"void InitListChecker::CheckArrayType(const InitializedEntity &Entity, InitListExpr *IList, QualType &DeclType, llvm::APSInt elementIndex, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n if (!hadError && DeclType->isIncompleteArrayType() && !VerifyOnly) {\n if (maxElements == Zero && !Entity.isVariableLengthArrayNew()) {\n SemaRef.Diag(IList->getBeginLoc(), diag::ext_typecheck_zero_array_size);"},{S,2649,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n if (!ArraySize) {\n } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n } else {\n if (!R.isUsable()) {\n } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n } else {\n if (ConstVal == 0 && !T.isWebAssemblyReferenceType()) {\n Diag(ArraySize->getBeginLoc(), isSFINAEContext() ? diag::err_typecheck_zero_array_size : diag::ext_typecheck_zero_array_size) << 0 << ArraySize->getSourceRange();"}}, | ||
[k]={ | |||
["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:3:24: warning: zero size arrays are an extension [-Wzero-length-array]"} | |||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_typedef_without_a_name"]={ | ["ext_typedef_without_a_name"]={ | ||
[ | [c]="typedef requires a name [-Wmissing-declarations]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={jc}, | |||
[m]=jc, | |||
[h]="typedef requires a name", | |||
[b]=o, | [b]=o, | ||
[ | [g]="typedef requires a name", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmissing\\-declarations[^\\]]*\\]", | |||
[e]=n, | |||
[ | [i]={C,1236199783,D}, | ||
[j]={{x,5239,"/// 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 if (!DS.isMissingDeclaratorOk()) {\n // Customize diagnostic for a typedef missing a name.\n if (DS.getStorageClassSpec() == DeclSpec::SCS_typedef)\n Diag(DS.getBeginLoc(), diag::ext_typedef_without_a_name) << DS.getSourceRange();"}}, | |||
[k]={ | |||
[ | ["clang/test/Sema/decl-invalid.c"]={"clang/test/Sema/decl-invalid.c:4:1: warning: typedef requires a name [-Wmissing-declarations]","clang/test/Sema/decl-invalid.c:17:1: warning: typedef requires a name [-Wmissing-declarations]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_typename_missing"]={ | ["ext_typename_missing"]={ | ||
[ | [c]="missing \'typename\' prior to dependent type name \'AB\' [-Wtypename-missing]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"typename-missing"}, | |||
[m]="typename-missing", | |||
[h]="missing \'typename\' prior to dependent type name \'%0%1\'", | |||
[b]=o, | [b]=o, | ||
[ | [g]="missing \'typename\' prior to dependent type name \'(.*?)(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wtypename\\-missing[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"32506ed8be37",1402614228,"Recover from missing \'typename\' in sizeof(T::InnerType)"}, | [i]={"32506ed8be37",1402614228,"Recover from missing \'typename\' in sizeof(T::InnerType)"}, | ||
[j]={{ | [j]={{x,821,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n if (!SS || (!SS->isSet() && !SS->isInvalid()))\n else if (DeclContext *DC = computeDeclContext(*SS, false))\n else if (SS->isValid() && SS->getScopeRep()->containsErrors()) {\n } else if (isDependentScopeSpecifier(*SS)) {\n if (getLangOpts().MSVCCompat && isMicrosoftMissingTypename(SS, S))\n DiagID = diag::ext_typename_missing;"},{z,2880,"/// BuildQualifiedDeclarationNameExpr - Build a C++ qualified\n/// declaration name, generally during template instantiation.\n/// There\'s a large number of things which don\'t need to be done along\n/// this path.\nExprResult Sema::BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, bool IsAddressOfOperand, const Scope *S, TypeSourceInfo **RecoveryTSI) {\n if (const TypeDecl *TD = R.getAsSingle<TypeDecl>()) {\n if (RecoveryTSI && getLangOpts().MSVCCompat)\n DiagID = diag::ext_typename_missing;"}}, | ||
[k]={ | |||
["clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp"]={"clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:34:76: warning: missing \'typename\' prior to dependent type name \'Bar::InnerType\' [-Wtypename-missing]","clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:36:72: warning: missing \'typename\' prior to dependent type name \'Bar::InnerType\' [-Wtypename-missing]","clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:8:52: warning: missing \'typename\' prior to dependent type name \'X::type\' [-Wtypename-missing]"} | |||
} | |||
}, | }, | ||
["ext_typename_outside_of_template"]={ | ["ext_typename_outside_of_template"]={ | ||
[ | [c]="\'typename\' occurs outside of a template [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="\'typename\' occurs outside of a template", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'typename\' occurs outside of a template", | ||
[a]=Z, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"f7d77718123f",1276727468,"Fix the recently-added warning about \'typename\' and \'template\'"}, | [i]={"f7d77718123f",1276727468,"Fix the recently-added warning about \'typename\' and \'template\'"}, | ||
[j]={{ | [j]={{F,10811,"TypeResult Sema::ActOnTypenameType(Scope *S, SourceLocation TypenameLoc, const CXXScopeSpec &SS, const IdentifierInfo &II, SourceLocation IdLoc, ImplicitTypenameContext IsImplicitTypename) {\n if (TypenameLoc.isValid() && S && !S->getTemplateParamParent())\n Diag(TypenameLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_typename_outside_of_template : diag::ext_typename_outside_of_template) << FixItHint::CreateRemoval(TypenameLoc);"},{F,10843,"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);"}}, | ||
[k]={ | |||
["clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:61:5: warning: \'typename\' occurs outside of a template [-Wc++11-extensions]","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:62:5: warning: \'typename\' occurs outside of a template [-Wc++11-extensions]","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:63:5: warning: \'typename\' occurs outside of a template [-Wc++11-extensions]","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:64:5: warning: \'typename\' occurs outside of a template [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_undeclared_unqual_id_with_dependent_base"]={ | ["ext_undeclared_unqual_id_with_dependent_base"]={ | ||
[ | [c]="use of undeclared identifier A; unqualified lookup into dependent bases of class template B is a Microsoft extension [-Wmicrosoft-template]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,eb}, | |||
[m]=eb, | |||
[h]="use of undeclared identifier %0; unqualified lookup into dependent bases of class template %1 is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of undeclared identifier (.*?); unqualified lookup into dependent bases of class template (.*?) is a Microsoft extension", | ||
[a]=Db, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"10ca24c63162",1402444888,"Allow lookup into dependent bases in more places under -fms-compatibility"}, | [i]={"10ca24c63162",1402444888,"Allow lookup into dependent bases in more places under -fms-compatibility"}, | ||
[j]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",798,"/// 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 // In Microsoft mode, if we are within a templated function and we can\'t\n // resolve Identifier, then extend the SS with Identifier. This will have\n // the effect of resolving Identifier during template instantiation.\n // The goal is to be able to resolve a function call whose\n // nested-name-specifier is located inside a dependent base class.\n // Example:\n //\n // class C {\n // public:\n // static void foo2() { }\n // };\n // template <class T> class A { public: typedef C D; };\n //\n // template <class T> class B : public A<T> {\n // public:\n // void foo() { D::foo2(); }\n // };\n if (getLangOpts().MSVCCompat) {\n if (DC->isDependentContext() && DC->isFunctionOrMethod()) {\n if (ContainingClass && ContainingClass->hasAnyDependentBases()) {\n Diag(IdInfo.IdentifierLoc, diag::ext_undeclared_unqual_id_with_dependent_base) << IdInfo.Identifier << ContainingClass;"},{ | [j]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",798,"/// 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 // In Microsoft mode, if we are within a templated function and we can\'t\n // resolve Identifier, then extend the SS with Identifier. This will have\n // the effect of resolving Identifier during template instantiation.\n // The goal is to be able to resolve a function call whose\n // nested-name-specifier is located inside a dependent base class.\n // Example:\n //\n // class C {\n // public:\n // static void foo2() { }\n // };\n // template <class T> class A { public: typedef C D; };\n //\n // template <class T> class B : public A<T> {\n // public:\n // void foo() { D::foo2(); }\n // };\n if (getLangOpts().MSVCCompat) {\n if (DC->isDependentContext() && DC->isFunctionOrMethod()) {\n if (ContainingClass && ContainingClass->hasAnyDependentBases()) {\n Diag(IdInfo.IdentifierLoc, diag::ext_undeclared_unqual_id_with_dependent_base) << IdInfo.Identifier << ContainingClass;"},{x,645,"ParsedType Sema::ActOnMSVCUnknownTypeName(const IdentifierInfo &II, SourceLocation NameLoc, bool IsTemplateTypeArg) {\n if (IsTemplateTypeArg && getCurScope()->isTemplateParamScope()) {\n } else if (const CXXRecordDecl *RD = findRecordWithDependentBasesOfEnclosingMethod(CurContext)) {\n Diag(NameLoc, diag::ext_undeclared_unqual_id_with_dependent_base) << &II << RD;"},{z,2561,"/// In Microsoft mode, if we are inside a template class whose parent class has\n/// dependent base classes, and we can\'t resolve an unqualified identifier, then\n/// assume the identifier is a member of a dependent base class. We can only\n/// recover successfully in static methods, instance methods, and other contexts\n/// where \'this\' is available. This doesn\'t precisely match MSVC\'s\n/// instantiation model, but it\'s close enough.\nstatic Expr *recoverFromMSUnqualifiedLookup(Sema &S, ASTContext &Context, DeclarationNameInfo &NameInfo, SourceLocation TemplateKWLoc, const TemplateArgumentListInfo *TemplateArgs) {\n auto DB = S.Diag(Loc, diag::ext_undeclared_unqual_id_with_dependent_base);"}}, | ||
[k]={ | |||
["clang/test/SemaTemplate/lookup-dependent-bases.cpp"]={"clang/test/SemaTemplate/lookup-dependent-bases.cpp:15:5: warning: use of undeclared identifier \'D\'; unqualified lookup into dependent bases of class template \'B\' is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/lookup-dependent-bases.cpp:49:7: warning: use of undeclared identifier \'D\'; unqualified lookup into dependent bases of class template \'C\' is a Microsoft extension [-Wmicrosoft-template]"} | |||
} | |||
}, | }, | ||
["ext_undefined_internal_type"]={ | ["ext_undefined_internal_type"]={ | ||
[ | [c]="ISO C++ requires a definition in this translation unit for ... A because its type does not have linkage [-Wundefined-internal-type]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v,"undefined-internal-type"}, | |||
[m]="undefined-internal-type", | |||
[h]="ISO C++ requires a definition in this translation unit for %select{function|variable}0 %q1 because its type does not have linkage", | |||
[b]=o, | [b]=o, | ||
[ | [g]="ISO C\\+\\+ requires a definition in this translation unit for (?:function|variable) (.*?) because its type does not have linkage", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wundefined\\-internal\\-type[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"405e2dbf3767",1505892120,"Implement C++ [basic.link]p8."}, | [i]={"405e2dbf3767",1505892120,"Implement C++ [basic.link]p8."}, | ||
[j]={{"clang/lib/Sema/Sema.cpp",884,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n for (const auto &Undef : Undefined) {\n if (S.isExternalWithNoLinkageType(VD)) {\n S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage()) ? diag::ext_undefined_internal_type : diag::err_undefined_internal_type) << isa<VarDecl>(VD) << VD;"}} | [j]={{"clang/lib/Sema/Sema.cpp",884,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n for (const auto &Undef : Undefined) {\n if (S.isExternalWithNoLinkageType(VD)) {\n S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage()) ? diag::ext_undefined_internal_type : diag::err_undefined_internal_type) << isa<VarDecl>(VD) << VD;"}}, | ||
[k]={ | |||
["clang/test/CXX/basic/basic.link/p8.cpp"]={"clang/test/CXX/basic/basic.link/p8.cpp:45:26: warning: ISO C++ requires a definition in this translation unit for function \'visible_no_linkage1\' because its type does not have linkage [-Wundefined-internal-type]","clang/test/CXX/basic/basic.link/p8.cpp:46:26: warning: ISO C++ requires a definition in this translation unit for function \'visible_no_linkage2\' because its type does not have linkage [-Wundefined-internal-type]","clang/test/CXX/basic/basic.link/p8.cpp:47:26: warning: ISO C++ requires a definition in this translation unit for function \'visible_no_linkage3\' because its type does not have linkage [-Wundefined-internal-type]"} | |||
} | |||
}, | }, | ||
["ext_unelaborated_friend_type"]={ | ["ext_unelaborated_friend_type"]={ | ||
[ | [c]="unelaborated friend declaration is a C++11 extension; specify \'...\' to befriend A [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="unelaborated friend declaration is a C++11 extension; specify \'%select{struct|interface|union|class|enum}0\' to befriend %1", | |||
[b]=o, | [b]=o, | ||
[ | [g]="unelaborated friend declaration is a C\\+\\+11 extension; specify \'(?:struct|interface|union|class|enum)\' to befriend (.*?)", | ||
[a]=Z, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"3b4abb679211",1270663032,"Improve handling of friend types in several ways:"}, | [i]={"3b4abb679211",1270663032,"Improve handling of friend types in several ways:"}, | ||
[j]={{ | [j]={{A,17212,"/// 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 // 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 } 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 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);"}}, | ||
[k]={ | |||
["clang/test/CXX/class/class.friend/p2.cpp"]={"clang/test/CXX/class/class.friend/p2.cpp:13:10: warning: unelaborated friend declaration is a C++11 extension; specify \'struct\' to befriend \'B0\' [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_unicode_whitespace"]={ | ["ext_unicode_whitespace"]={ | ||
[ | [c]="treating Unicode character as whitespace [-Wunicode-whitespace]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"unicode-whitespace"}, | |||
[m]="unicode-whitespace", | |||
[h]="treating Unicode character as whitespace", | |||
[b]=o, | [b]=o, | ||
[ | [g]="treating Unicode character as whitespace", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunicode\\-whitespace[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"7f43dddae066",1359060646,"Handle universal character names and Unicode characters outside of literals."}, | [i]={"7f43dddae066",1359060646,"Handle universal character names and Unicode characters outside of literals."}, | ||
[j]={{ | [j]={{ab,3537,"bool Lexer::CheckUnicodeWhitespace(Token &Result, uint32_t C, const char *CurPtr) {\n if (!isLexingRawMode() && !PP->isPreprocessedOutput() && isUnicodeWhitespace(C)) {\n Diag(BufferPtr, diag::ext_unicode_whitespace) << makeCharRange(*this, BufferPtr, CurPtr);"}}, | ||
[k]={ | |||
["clang/test/Lexer/unicode.c"]={"clang/test/Lexer/unicode.c:9:11: warning: treating Unicode character as whitespace [-Wunicode-whitespace]","clang/test/Lexer/unicode.c:10:11: warning: treating Unicode character as whitespace [-Wunicode-whitespace]"} | |||
} | |||
}, | }, | ||
["ext_union_member_of_reference_type"]={ | ["ext_union_member_of_reference_type"]={ | ||
[ | [c]="union member A has reference type B, which is a Microsoft extension [-Wmicrosoft-union-member-reference]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,"microsoft-union-member-reference"}, | |||
[m]="microsoft-union-member-reference", | |||
[h]="union member %0 has reference type %1, which is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="union member (.*?) has reference type (.*?), which is a Microsoft extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-union\\-member\\-reference[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"ed0ae1d70bf8",1369930800,"Microsoft has a language extension which allows union members to be"}, | [i]={"ed0ae1d70bf8",1369930800,"Microsoft has a language extension which allows union members to be"}, | ||
[j]={{ | [j]={{x,18240,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n if (!InvalidDecl && getLangOpts().CPlusPlus) {\n if (Record->isUnion()) {\n // C++ [class.union]p1: If a union contains a member of reference type,\n // the program is ill-formed, except when compiling with MSVC extensions\n // enabled.\n if (EltTy->isReferenceType()) {\n Diag(NewFD->getLocation(), getLangOpts().MicrosoftExt ? diag::ext_union_member_of_reference_type : diag::err_union_member_of_reference_type) << NewFD->getDeclName() << EltTy;"}}, | ||
[k]={ | |||
["clang/test/CodeGenCXX/ms-union-member-ref.cpp"]={"clang/test/CodeGenCXX/ms-union-member-ref.cpp:4:9: warning: union member \'ref\' has reference type \'int *&\', which is a Microsoft extension [-Wmicrosoft-union-member-reference]"} | |||
} | |||
}, | }, | ||
["ext_unknown_escape"]={ | ["ext_unknown_escape"]={ | ||
[ | [c]="unknown escape sequence \'\\A\' [-Wunknown-escape-sequence]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"unknown-escape-sequence"}, | |||
[m]="unknown-escape-sequence", | |||
[h]="unknown escape sequence \'\\%0\'", | |||
[b]=o, | [b]=o, | ||
[ | [g]="unknown escape sequence \'\\\\(.*?)\'", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wunknown\\-escape\\-sequence[^\\]]*\\]", | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[j]={{db,340,"/// 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 default:\n if (isPrintable(ResultChar))\n Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::ext_unknown_escape) << std::string(1, ResultChar);"},{db,344,"/// 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 default:\n if (isPrintable(ResultChar))\n else\n Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::ext_unknown_escape) << \"x\" + llvm::utohexstr(ResultChar);"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/Lexer/null-character-in-literal.c"]={"clang/test/Lexer/null-character-in-literal.c:7:11: warning: unknown escape sequence \'\\x0\' [-Wunknown-escape-sequence]","clang/test/Lexer/null-character-in-literal.c:11:16: warning: unknown escape sequence \'\\x0\' [-Wunknown-escape-sequence]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_unqualified_base_class"]={ | ["ext_unqualified_base_class"]={ | ||
[ | [c]="unqualified base initializer of class templates is a Microsoft extension [-Wmicrosoft-template]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={G,eb}, | |||
[m]=eb, | |||
[h]="unqualified base initializer of class templates is a Microsoft extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="unqualified base initializer of class templates is a Microsoft extension", | ||
[a]=Db, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | [i]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | ||
[j]={{ | [j]={{A,4461,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n if (TemplateTypeTy) {\n } else if (DS.getTypeSpecType() == TST_decltype) {\n } else if (DS.getTypeSpecType() == TST_decltype_auto) {\n } else {\n if (!TyD) {\n if (getLangOpts().MSVCCompat && !getLangOpts().CPlusPlus20) {\n if (auto UnqualifiedBase = R.getAsSingle<ClassTemplateDecl>()) {\n for (auto const &Base : ClassDecl->bases()) {\n if (BaseTemplate && Context.hasSameTemplateName(BaseTemplate->getTemplateName(), TN)) {\n Diag(IdLoc, diag::ext_unqualified_base_class) << SourceRange(IdLoc, Init->getSourceRange().getEnd());"}}, | ||
[k]={ | |||
["clang/test/SemaTemplate/ms-unqualified-base-class.cpp"]={"clang/test/SemaTemplate/ms-unqualified-base-class.cpp:17:15: warning: unqualified base initializer of class templates is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/ms-unqualified-base-class.cpp:31:27: warning: unqualified base initializer of class templates is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/ms-unqualified-base-class.cpp:43:25: warning: unqualified base initializer of class templates is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/ms-unqualified-base-class.cpp:52:22: warning: unqualified base initializer of class templates is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/ms-unqualified-base-class.cpp:91:13: warning: unqualified base initializer of class templates is a Microsoft extension [-Wmicrosoft-template]","clang/test/SemaTemplate/ms-unqualified-base-class.cpp:98:13: warning: unqualified base initializer of class templates is a Microsoft extension [-Wmicrosoft-template]"} | |||
} | |||
}, | }, | ||
["ext_unterminated_char_or_string"]={ | ["ext_unterminated_char_or_string"]={ | ||
[ | [c]="missing terminating ... character [-Winvalid-pp-token]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"invalid-pp-token"}, | |||
[m]="invalid-pp-token", | |||
[h]="missing terminating %select{\'|\'\"\'}0 character", | |||
[b]=o, | [b]=o, | ||
[ | [g]="missing terminating (?:\'|\'\"\') character", | ||
[a]=" \\[(?:\\-Werror,)?\\-Winvalid\\-pp\\-token[^\\]]*\\]", | |||
[e]=B, | |||
[ | |||
[ | |||
[i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC"}, | [i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC"}, | ||
[j]={{ | [j]={{ab,2100,"/// 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 while (C != \'\"\') {\n if (C == \'\\n\' || C == \'\\r\' || // Newline.\n if (!isLexingRawMode() && !LangOpts.AsmPreprocessor)\n Diag(BufferPtr, diag::ext_unterminated_char_or_string) << 1;"},{ab,2325,"/// 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 while (C != \'\\\'\') {\n if (C == \'\\n\' || C == \'\\r\' || // Newline.\n if (!isLexingRawMode() && !LangOpts.AsmPreprocessor)\n Diag(BufferPtr, diag::ext_unterminated_char_or_string) << 0;"}}, | ||
[k]={ | |||
["clang/test/SemaHLSL/cb_error.hlsl"]={"clang/test/SemaHLSL/cb_error.hlsl:40:11: warning: missing terminating \' character [-Winvalid-pp-token]"} | |||
} | |||
}, | }, | ||
["ext_use_out_of_scope_declaration"]={ | ["ext_use_out_of_scope_declaration"]={ | ||
[ | [c]="use of out-of-scope declaration of A... [-Wout-of-scope-function]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"out-of-scope-function"}, | |||
[m]="out-of-scope-function", | |||
[h]="use of out-of-scope declaration of %0%select{| whose type is not compatible with that of an implicit declaration}1", | |||
[b]=o, | [b]=o, | ||
[ | [g]="use of out\\-of\\-scope declaration of (.*?)(?:| whose type is not compatible with that of an implicit declaration)", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wout\\-of\\-scope\\-function[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"9bfa970a4009",1507081762,"PR34822: Fix a collection of related bugs with our handling of C89 implicit function declarations."}, | [i]={"9bfa970a4009",1507081762,"PR34822: Fix a collection of related bugs with our handling of C89 implicit function declarations."}, | ||
[j]={{ | [j]={{x,16040,"/// 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 if (ExternCPrev) {\n // C89 footnote 38:\n // If in fact it is not defined as having type \"function returning int\",\n // the behavior is undefined.\n if (!isa<FunctionDecl>(ExternCPrev) || !Context.typesAreCompatible(cast<FunctionDecl>(ExternCPrev)->getType(), Context.getFunctionNoProtoType(Context.IntTy))) {\n Diag(Loc, diag::ext_use_out_of_scope_declaration) << ExternCPrev << !getLangOpts().C99;"}}, | ||
[k]={ | |||
["clang/test/Sema/function-redecl.c"]={"clang/test/Sema/function-redecl.c:87:13: warning: use of out-of-scope declaration of \'outer6\' [-Wout-of-scope-function]"} | |||
} | |||
}, | }, | ||
["ext_using_attribute_ns"]={ | ["ext_using_attribute_ns"]={ | ||
[ | [c]="default scope specifier for attributes is a C++17 extension [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={P,hb}, | |||
[m]=P, | |||
[h]="default scope specifier for attributes is a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="default scope specifier for attributes is a C\\+\\+17 extension", | ||
[a]=ib, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"b7d7a046d8e0",1466770512,"Using for attributes voted into C++17."}, | [i]={"b7d7a046d8e0",1466770512,"Using for attributes voted into C++17."}, | ||
[j]={{ | [j]={{M,4540,"/// 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_using)) {\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_using_attribute_ns : diag::ext_using_attribute_ns);"}} | ||
}, | }, | ||
["ext_using_decl_scoped_enumerator"]={ | ["ext_using_decl_scoped_enumerator"]={ | ||
[ | [c]="using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="using declaration naming a scoped enumerator is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="using declaration naming a scoped enumerator is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=n, | |||
[i]={uc,1615397021,vc}, | |||
[j]={{A,13032,"/// 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 if (NamedContext) {\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();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:18:7: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:43:9: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:88:7: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:114:7: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:141:9: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:129:9: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:135:9: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:129:9: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:135:9: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:170:7: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:203:9: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:225:7: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:231:7: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:239:9: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:252:7: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p7-cxx20.cpp:259:7: warning: using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_using_declaration_pack"]={ | ["ext_using_declaration_pack"]={ | ||
[ | [c]="pack expansion of using declaration is a C++17 extension [-Wc++17-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={P,hb}, | |||
[m]=P, | |||
[h]="pack expansion of using declaration is a C++17 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="pack expansion of using declaration is a C\\+\\+17 extension", | ||
[a]=ib, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"22a250cd5d8e",1482120533,"[c++1z] P0195R2: Support pack-expansion of using-declarations."}, | [i]={"22a250cd5d8e",1482120533,"[c++1z] P0195R2: Support pack-expansion of using-declarations."}, | ||
[j]={{ | [j]={{M,662,"/// 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 if (TryConsumeToken(tok::ellipsis, D.EllipsisLoc))\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx17_compat_using_declaration_pack : diag::ext_using_declaration_pack);"}} | ||
}, | }, | ||
["ext_using_enum_declaration"]={ | ["ext_using_enum_declaration"]={ | ||
[ | [c]="using enum declaration is a C++20 extension [-Wc++20-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={K,cb}, | |||
[m]=K, | |||
[h]="using enum declaration is a C++20 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="using enum declaration is a C\\+\\+20 extension", | ||
[a]=gb, | |||
[e]=y, | |||
[i]={tb,1612659633,vb}, | |||
[j]={{M,702,"/// 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 if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n Diag(UELoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_using_enum_declaration : diag::ext_using_enum_declaration);"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaCXX/cxx20-using-enum.cpp"]={"clang/test/SemaCXX/cxx20-using-enum.cpp:19:7: warning: using enum declaration is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/cxx20-using-enum.cpp:23:7: warning: using enum declaration is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/cxx20-using-enum.cpp:27:7: warning: using enum declaration is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/cxx20-using-enum.cpp:37:7: warning: using enum declaration is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/cxx20-using-enum.cpp:44:9: warning: using enum declaration is a C++20 extension [-Wc++20-extensions]","clang/test/SemaCXX/cxx20-using-enum.cpp:60:7: warning: using enum declaration is a C++20 extension [-Wc++20-extensions]"} | ||
[i]={tb,1612659633, | } | ||
[j]={{ | |||
}, | }, | ||
["ext_using_undefined_std"]={ | ["ext_using_undefined_std"]={ | ||
[ | [c]="using directive refers to implicitly-defined namespace \'std\'", | ||
[ | [d]=q, | ||
[f]=p, | |||
[h]="using directive refers to implicitly-defined namespace \'std\'", | |||
[b]=o, | [b]=o, | ||
[ | [g]="using directive refers to implicitly\\-defined namespace \'std\'", | ||
[a]=Mb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"cdf87024edb7",1277834026,"Allow a using directive to refer to the implicitly-defined namespace"}, | [i]={"cdf87024edb7",1277834026,"Allow a using directive to refer to the implicitly-defined namespace"}, | ||
[j]={{ | [j]={{A,11948,"Decl *Sema::ActOnUsingDirective(Scope *S, SourceLocation UsingLoc, SourceLocation NamespcLoc, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *NamespcName, const ParsedAttributesView &AttrList) {\n if (R.empty()) {\n // Allow \"using namespace std;\" or \"using namespace ::std;\" even if\n // \"std\" hasn\'t been defined yet, for GCC compatibility.\n if ((!Qualifier || Qualifier->getKind() == NestedNameSpecifier::Global) && NamespcName->isStr(\"std\")) {\n Diag(IdentLoc, diag::ext_using_undefined_std);"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/using-directive.cpp"]={"clang/test/SemaCXX/using-directive.cpp:126:17: warning: using directive refers to implicitly-defined namespace \'std\'","clang/test/SemaCXX/using-directive.cpp:127:19: warning: using directive refers to implicitly-defined namespace \'std\'"} | |||
} | |||
}, | }, | ||
["ext_variable_sized_type_in_struct"]={ | ["ext_variable_sized_type_in_struct"]={ | ||
[ | [c]="field A with variable sized type B not at the end of a struct or class is a GNU extension [-Wgnu-variable-sized-type-not-at-end]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={L,"gnu-variable-sized-type-not-at-end"}, | |||
[m]="gnu-variable-sized-type-not-at-end", | |||
[h]="field %0 with variable sized type %1 not at the end of a struct or class is a GNU extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="field (.*?) with variable sized type (.*?) not at the end of a struct or class is a GNU extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-variable\\-sized\\-type\\-not\\-at\\-end[^\\]]*\\]", | |||
[e]=n, | |||
[i]={I,1237025389,J}, | |||
[j]={{x,18864,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n if (FDTy->isFunctionType()) {\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n if (Record && FDTTy->getDecl()->hasFlexibleArrayMember()) {\n if (!Record->isUnion()) {\n // If this is a struct/class and this is not the last element, reject\n // it. Note that GCC supports variable sized arrays in the middle of\n // structures.\n if (!IsLastField)\n Diag(FD->getLocation(), diag::ext_variable_sized_type_in_struct) << FD->getDeclName() << FD->getType();"}}, | |||
[ | [k]={ | ||
[ | ["clang/test/SemaCXX/flexible-array-test.cpp"]={"clang/test/SemaCXX/flexible-array-test.cpp:18:3: warning: field \'\' with variable sized type \'Rec::(anonymous union at clang/test/SemaCXX/flexible-array-test.cpp:18:3)\' not at the end of a struct or class is a GNU extension [-Wgnu-variable-sized-type-not-at-end]"} | ||
[i]={ | } | ||
[j]={{ | |||
}, | }, | ||
["ext_variable_template"]={ | ["ext_variable_template"]={ | ||
[ | [c]="variable templates are a C++14 extension [-Wc++14-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={kb,Kb}, | |||
[m]=kb, | |||
[h]="variable templates are a C++14 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="variable templates are a C\\+\\+14 extension", | ||
[a]=Wb, | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som..."}, | [i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som..."}, | ||
[j]={{ | [j]={{x,7653,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n if (!getLangOpts().CPlusPlus) {\n } else {\n if (TemplateParams) {\n if (!TemplateParams->size() && D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n } else {\n if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {\n } else { // if (TemplateParams->size() > 0)\n Diag(D.getIdentifierLoc(), getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_variable_template : diag::ext_variable_template);"}}, | ||
[k]={ | |||
["clang/test/CXX/dcl.decl/dcl.meaning/p1-0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/p1-0x.cpp:41:39: warning: variable templates are a C++14 extension [-Wc++14-extensions]","clang/test/CXX/dcl.decl/dcl.meaning/p1-0x.cpp:42:39: warning: variable templates are a C++14 extension [-Wc++14-extensions]"} | |||
} | |||
}, | }, | ||
["ext_variadic_macro"]={ | ["ext_variadic_macro"]={ | ||
[ | [c]="variadic macros are a C99 feature [-Wvariadic-macros]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={v,xc}, | |||
[m]=xc, | |||
[h]="variadic macros are a C99 feature", | |||
[b]=o, | [b]=o, | ||
[ | [g]="variadic macros are a C99 feature", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wvariadic\\-macros[^\\]]*\\]", | |||
[e]=B, | |||
[i]={C,1236199783,D}, | |||
[ | [j]={{W,2680,"/// 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 while (true) {\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);"}}, | ||
[k]={ | |||
["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:7:18: warning: variadic macros are a C99 feature [-Wvariadic-macros]","clang/test/Preprocessor/macro_fn.c:8:20: warning: variadic macros are a C99 feature [-Wvariadic-macros]","clang/test/Preprocessor/macro_fn.c:35:11: warning: variadic macros are a C99 feature [-Wvariadic-macros]","clang/test/Preprocessor/macro_fn.c:51:35: warning: variadic macros are a C99 feature [-Wvariadic-macros]"} | |||
[ | } | ||
[i]={ | |||
[j]={{W,2680,"/// 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 while (true) {\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);"}} | |||
}, | }, | ||
["ext_variadic_main"]={ | ["ext_variadic_main"]={ | ||
[ | [c]="\'main\' is not allowed to be declared variadic [-Wmain]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={gc}, | |||
[m]=gc, | |||
[h]="\'main\' is not allowed to be declared variadic", | |||
[b]=o, | [b]=o, | ||
[ | [g]="\'main\' is not allowed to be declared variadic", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"1710cc994ecd",1429805562,"Diagnose variadic main() as an extension; addresses PR17905."}, | [i]={"1710cc994ecd",1429805562,"Diagnose variadic main() as an extension; addresses PR17905."}, | ||
[j]={{ | [j]={{x,12162,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n if (FTP->isVariadic()) {\n Diag(FD->getLocation(), diag::ext_variadic_main);"}}, | ||
[k]={ | |||
["clang/test/Sema/warn-main.c"]={"clang/test/Sema/warn-main.c:33:5: warning: \'main\' is not allowed to be declared variadic [-Wmain]"} | |||
} | |||
}, | }, | ||
["ext_variadic_templates"]={ | ["ext_variadic_templates"]={ | ||
[ | [c]="variadic templates are a C++11 extension [-Wc++11-extensions]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={T,E}, | |||
[m]=E, | |||
[h]="variadic templates are a C++11 extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="variadic templates are a C\\+\\+11 extension", | ||
[a]=Z, | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"b25d8c3af4a9",1295474355,"Downgrade the \"variadic templates are a C++0x feature\" error to an"}, | [i]={"b25d8c3af4a9",1295474355,"Downgrade the \"variadic templates are a C++0x feature\" error to an"}, | ||
[j]={{"clang/lib/Parse/ParseTemplate.cpp",828,"/// 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 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",960,"/// 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 if (TryConsumeToken(tok::ellipsis, EllipsisLoc))\n Diag(EllipsisLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"},{ | [j]={{"clang/lib/Parse/ParseTemplate.cpp",828,"/// 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 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",960,"/// 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 if (TryConsumeToken(tok::ellipsis, EllipsisLoc))\n Diag(EllipsisLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"},{S,5946,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\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 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 else\n S.Diag(D.getEllipsisLoc(), LangOpts.CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"}}, | ||
[k]={ | |||
["clang/test/Parser/cxx0x-in-cxx98.cpp"]={"clang/test/Parser/cxx0x-in-cxx98.cpp:5:21: warning: variadic templates are a C++11 extension [-Wc++11-extensions]"} | |||
} | |||
}, | }, | ||
["ext_vla"]={ | ["ext_vla"]={ | ||
[ | [c]="variable length arrays are a C99 feature [-Wvla-extension]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[w]=false, | |||
[l]={L,v,"vla","vla-extension"}, | |||
[m]="vla-extension", | |||
[h]="variable length arrays are a C99 feature", | |||
[b]=o, | [b]=o, | ||
[ | [g]="variable length arrays are a C99 feature", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wvla\\-extension[^\\]]*\\]", | |||
[e]=n, | |||
[i]={C,1236199783,D}, | |||
[ | [j]={{S,2592,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n if (getLangOpts().OpenCL) {\n } else if (getLangOpts().C99) {\n } else if (isSFINAEContext()) {\n } else if (getLangOpts().OpenMP && isInOpenMPTaskUntiedContext()) {\n } else {\n VLADiag = diag::ext_vla;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/warn-vla.cpp"]={"clang/test/SemaCXX/warn-vla.cpp:4:9: warning: variable length arrays are a C99 feature [-Wvla-extension]","clang/test/SemaCXX/warn-vla.cpp:7:25: warning: variable length arrays are a C99 feature [-Wvla-extension]","clang/test/SemaCXX/warn-vla.cpp:10:25: warning: variable length arrays are a C99 feature [-Wvla-extension]","clang/test/SemaCXX/warn-vla.cpp:14:9: warning: variable length arrays are a C99 feature [-Wvla-extension]","clang/test/SemaCXX/warn-vla.cpp:18:25: warning: variable length arrays are a C99 feature [-Wvla-extension]","clang/test/SemaCXX/warn-vla.cpp:22:25: warning: variable length arrays are a C99 feature [-Wvla-extension]","clang/test/SemaCXX/warn-vla.cpp:25:23: warning: variable length arrays are a C99 feature [-Wvla-extension]"} | |||
[ | } | ||
[i]={ | |||
[j]={{ | |||
}, | }, | ||
["ext_vla_folded_to_constant"]={ | ["ext_vla_folded_to_constant"]={ | ||
[ | [c]="variable length array folded to constant array as an extension [-Wgnu-folding-constant]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={L,oc}, | |||
[m]=oc, | |||
[h]="variable length array folded to constant array as an extension", | |||
[b]=o, | [b]=o, | ||
[ | [g]="variable length array folded to constant array as an extension", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgnu\\-folding\\-constant[^\\]]*\\]", | |||
[e]=n, | |||
[ | |||
[ | |||
[i]={"f35de48c9058",1308033490,"when compiling in a GNU mode (e.g. gnu99) treat VLAs with a size that can be folded to a constant"}, | [i]={"f35de48c9058",1308033490,"when compiling in a GNU mode (e.g. gnu99) treat VLAs with a size that can be folded to a constant"}, | ||
[j]={{ | [j]={{x,6602,"/// Attempt to fold a variable-sized type to a constant-sized type, returning\n/// true if we were successful.\nbool Sema::tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo, QualType &T, SourceLocation Loc, unsigned FailedFoldDiagID) {\n if (FixedTInfo) {\n Diag(Loc, diag::ext_vla_folded_to_constant);"},{x,6722,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n if (T->isVariablyModifiedType()) {\n if (S->getFnParent() == nullptr) {\n if (FixedTInfo) {\n Diag(NewTD->getLocation(), diag::ext_vla_folded_to_constant);"},{x,8725,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n if ((isVM && NewVD->hasLinkage()) || (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {\n Diag(NewVD->getLocation(), diag::ext_vla_folded_to_constant);"},{S,2425,"/// Check whether the specified array bound can be evaluated using the relevant\n/// language rules. If so, returns the possibly-converted expression and sets\n/// SizeVal to the size. If not, but the expression might be a VLA bound,\n/// returns ExprResult(). Otherwise, produces a diagnostic and returns\n/// ExprError().\nstatic ExprResult checkArraySize(Sema &S, Expr *&ArraySize, llvm::APSInt &SizeVal, unsigned VLADiag, bool VLAIsError) {\n // If the size is an ICE, it certainly isn\'t a VLA. If we\'re in a GNU mode\n // (like gnu99, but not c99) accept any evaluatable value as an extension.\n class VLADiagnoser : public Sema::VerifyICEDiagnoser {\n Sema::SemaDiagnosticBuilder diagnoseFold(Sema &S, SourceLocation Loc) override { return S.Diag(Loc, diag::ext_vla_folded_to_constant); }"}}, | ||
[k]={ | |||
["clang/test/Sema/offsetof-64.c"]={"clang/test/Sema/offsetof-64.c:8:8: warning: variable length array folded to constant array as an extension [-Wgnu-folding-constant]","clang/test/Sema/offsetof-64.c:9:8: warning: variable length array folded to constant array as an extension [-Wgnu-folding-constant]"} | |||
} | |||
}, | }, | ||
["ext_warn_duplicate_declspec"]={ | ["ext_warn_duplicate_declspec"]={ | ||
[ | [c]="duplicate \'A\' declaration specifier [-Wduplicate-decl-specifier]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={"duplicate-decl-specifier"}, | |||
[m]="duplicate-decl-specifier", | |||
[h]="duplicate \'%0\' declaration specifier", | |||
[b]=o, | [b]=o, | ||
[ | [g]="duplicate \'(.*?)\' declaration specifier", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-decl\\-specifier[^\\]]*\\]", | |||
[e]=r, | |||
[ | |||
[ | |||
[i]={"150ca5309e7c",1538608169,"[SEMA] split ExtWarn dupl-decl-spec\'s into Extension and ExtWarn"}, | [i]={"150ca5309e7c",1538608169,"[SEMA] split ExtWarn dupl-decl-spec\'s into Extension and ExtWarn"}, | ||
[j]={{ | [j]={{H,4488,"#include \"clang/Basic/TransformTypeTraits.def\"\n // If the specifier wasn\'t legal, issue a diagnostic.\n if (isInvalid) {\n if (DiagID == diag::ext_duplicate_declspec || DiagID == diag::ext_warn_duplicate_declspec || DiagID == diag::err_duplicate_declspec)"},{wc,482,"template <class T> static bool BadSpecifier(T TNew, T TPrev, const char *&PrevSpec, unsigned &DiagID, bool IsExtension = true) {\n if (TNew != TPrev)\n else\n DiagID = IsExtension ? diag::ext_warn_duplicate_declspec : diag::warn_duplicate_declspec;"},{wc,1046,"bool DeclSpec::setFunctionSpecExplicit(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, ExplicitSpecifier ExplicitSpec, SourceLocation CloseParenLoc) {\n // \'explicit explicit\' is ok, but warn as this is likely not what the user\n // intended.\n if (hasExplicitSpecifier()) {\n DiagID = (ExplicitSpec.getExpr() || FS_explicit_specifier.getExpr()) ? diag::err_duplicate_declspec : diag::ext_warn_duplicate_declspec;"},{wc,1093,"bool DeclSpec::setModulePrivateSpec(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n if (isModulePrivateSpecified()) {\n DiagID = diag::ext_warn_duplicate_declspec;"}} | ||
}, | }, | ||
["ext_warn_gnu_final"]={ | ["ext_warn_gnu_final"]={ | ||
[ | [c]="__final is a GNU extension, consider using C++11 final [-Wgcc-compat]", | ||
[ | [d]=q, | ||
[f]=p, | |||
[l]={tc}, | |||
[m]=tc, | |||
[h]="__final is a GNU extension, consider using C++11 final", | |||
[b]=o, | [b]=o, | ||
[ | [g]="__final is a GNU extension, consider using C\\+\\+11 final", | ||
[a]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | |||
[e]=y, | |||
[ | |||
[ | |||
[i]={"276055bb2f4a",1469788968,"[GCC] Support for __final specifier"}, | [i]={"276055bb2f4a",1469788968,"[GCC] Support for __final specifier"}, | ||
[j]={{ | [j]={{M,2469,"/// 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 if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n } else if (Specifier == VirtSpecifiers::VS_Sealed) {\n } else if (Specifier == VirtSpecifiers::VS_Abstract) {\n } else if (Specifier == VirtSpecifiers::VS_GNU_Final) {\n Diag(Tok.getLocation(), diag::ext_warn_gnu_final);"},{M,3536,"/// 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 // Parse the optional \'final\' keyword.\n if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n while (true) {\n if (TagType == DeclSpec::TST_interface)\n else if (Specifier == VirtSpecifiers::VS_Final)\n else if (Specifier == VirtSpecifiers::VS_Sealed)\n else if (Specifier == VirtSpecifiers::VS_Abstract)\n else if (Specifier == VirtSpecifiers::VS_GNU_Final)\n Diag(FinalLoc, diag::ext_warn_gnu_final);"}}, | ||
[k]={ | |||
["clang/test/Parser/gcc-__final-compatibility.cpp"]={"clang/test/Parser/gcc-__final-compatibility.cpp:7:10: warning: __final is a GNU extension, consider using C++11 final [-Wgcc-compat]","clang/test/Parser/gcc-__final-compatibility.cpp:8:20: warning: __final is a GNU extension, consider using C++11 final [-Wgcc-compat]"} | |||
} | |||
}, | }, | ||
["ext_wchar_t_sign_spec"]={ | ["ext_wchar_t_sign_spec"]={ | ||
[ | [c]="\'A\' cannot be signed or unsigned [-Wsigned-unsigned-wchar]", | ||
[ | [d]=s, | ||
[ | [f]=Q, | ||
[ | [l]={"signed-unsigned-wchar"}, | ||
[ | [m]="signed-unsigned-wchar", | ||
[ | [h]="\'%0\' cannot be signed or unsigned", | ||
[ | [b]=R, | ||
[ | [g]="\'(.*?)\' cannot be signed or unsigned", | ||
[ | [a]=" \\[[^\\]]*\\-Wsigned\\-unsigned\\-wchar[^\\]]*\\]", | ||
[ | [e]=n, | ||
[i]={"e8b659fc1ff0",1564430446,"Give the \'signed/unsigned wchar_t\' extension a warning flag, and follow"}, | [i]={"e8b659fc1ff0",1564430446,"Give the \'signed/unsigned wchar_t\' extension a warning flag, and follow"}, | ||
[j]={{ | [j]={{S,1307,"/// 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 case DeclSpec::TST_wchar:\n if (DS.getTypeSpecSign() == TypeSpecifierSign::Unspecified)\n else if (DS.getTypeSpecSign() == TypeSpecifierSign::Signed) {\n S.Diag(DS.getTypeSpecSignLoc(), diag::ext_wchar_t_sign_spec) << DS.getSpecifierName(DS.getTypeSpecType(), Context.getPrintingPolicy());"},{S,1314,"/// 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 case DeclSpec::TST_wchar:\n if (DS.getTypeSpecSign() == TypeSpecifierSign::Unspecified)\n else if (DS.getTypeSpecSign() == TypeSpecifierSign::Signed) {\n } else {\n S.Diag(DS.getTypeSpecSignLoc(), diag::ext_wchar_t_sign_spec) << DS.getSpecifierName(DS.getTypeSpecType(), Context.getPrintingPolicy());"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/wchar_t.cpp"]={"clang/test/SemaCXX/wchar_t.cpp:8:3: error: \'wchar_t\' cannot be signed or unsigned [-Wsigned-unsigned-wchar]","clang/test/SemaCXX/wchar_t.cpp:9:3: error: \'wchar_t\' cannot be signed or unsigned [-Wsigned-unsigned-wchar]"} | |||
} | |||
}, | }, | ||
["fatal_too_many_errors"]={ | ["fatal_too_many_errors"]={ | ||
[c]="too many errors emitted, stopping now [-ferror-limit=]", | [c]="too many errors emitted, stopping now [-ferror-limit=]", | ||
[d]="fatal error\\: ", | [d]="fatal error: ", | ||
[ | [f]="Fatal", | ||
[ | [h]="too many errors emitted, stopping now [-ferror-limit=]", | ||
[ | [b]="fatal error\\: ", | ||
[g]="too many errors emitted, stopping now \\[\\-ferror\\-limit\\=\\]", | |||
[a]=r, | |||
[e]=r, | |||
[i]={"75a0393eb580",1270671718,"add capabilities to stop emitting errors after some limit."}, | [i]={"75a0393eb580",1270671718,"add capabilities to stop emitting errors after some limit."}, | ||
[j]={{ | [j]={{Dc,563,"/// Based on the way the client configured the Diagnostic\n/// object, classify the specified diagnostic ID into a Level, consumable by\n/// the DiagnosticClient.\n///\n/// \\param Loc The source location we are interested in finding out the\n/// diagnostic state. Can be null in order to query the latest state.\ndiag::Severity DiagnosticIDs::getDiagnosticSeverity(unsigned DiagID, SourceLocation Loc, const DiagnosticsEngine &Diag) const {\n if (Result == diag::Severity::Fatal && Diag.CurDiagID != diag::fatal_too_many_errors && Diag.FatalsAsError)"},{Dc,806,"/// ProcessDiag - This is the method used to report a diagnostic that is\n/// finally fully formed.\nbool DiagnosticIDs::ProcessDiag(DiagnosticsEngine &Diag) const {\n if (DiagLevel >= DiagnosticIDs::Error) {\n // If we\'ve emitted a lot of errors, emit a fatal error instead of it to\n // stop a flood of bogus errors.\n if (Diag.ErrorLimit && Diag.NumErrors > Diag.ErrorLimit && DiagLevel == DiagnosticIDs::Error) {\n Diag.SetDelayedDiagnostic(diag::fatal_too_many_errors);"},{Dc,813,"/// ProcessDiag - This is the method used to report a diagnostic that is\n/// finally fully formed.\nbool DiagnosticIDs::ProcessDiag(DiagnosticsEngine &Diag) const {\n if (Diag.CurDiagID == diag::fatal_too_many_errors)"},{"clang/lib/Frontend/TextDiagnosticPrinter.cpp",59,"/// Print any diagnostic option information to a raw_ostream.\n///\n/// This implements all of the logic for adding diagnostic options to a message\n/// (via OS). Each relevant option is comma separated and all are enclosed in\n/// the standard bracketing: \" [...]\".\nstatic void printDiagnosticOptions(raw_ostream &OS, DiagnosticsEngine::Level Level, const Diagnostic &Info, const DiagnosticOptions &DiagOpts) {\n if (DiagOpts.ShowOptionNames) {\n if (Info.getID() == diag::fatal_too_many_errors) {"},{"clang/tools/libclang/CXStoredDiagnostic.cpp",62,"CXString CXStoredDiagnostic::getDiagnosticOption(CXString *Disable) const {\n if (ID == diag::fatal_too_many_errors) {"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/concept-fatal-error.cpp"]={"fatal error: too many errors emitted, stopping now [-ferror-limit=]"} | |||
} | |||
}, | }, | ||
["note_access_constrained_by_path"]={ | ["note_access_constrained_by_path"]={ | ||
[ | [c]="constrained by ...... inheritance here", | ||
[ | [d]="note: ", | ||
[ | [f]="Note", | ||
[ | [h]="constrained by %select{|implicitly }1%select{private|protected}0 inheritance here", | ||
[ | [b]="note\\: ", | ||
[ | [g]="constrained by (?:|implicitly )(?:private|protected) inheritance here", | ||
[ | [a]=r, | ||
[ | [e]=n, | ||
[i]={"553c0796eedc",1264207592,"Implement elementary access control."}, | [i]={"553c0796eedc",1264207592,"Implement elementary access control."}, | ||
[j]={{ | [j]={{Bc,1266,"/// Diagnose the path which caused the given declaration or base class\n/// to become inaccessible.\nstatic void DiagnoseAccessPath(Sema &S, const EffectiveContext &EC, AccessTarget &entity) {\n if (entity.isMemberAccess() || constrainingBase + 1 != path.end()) {\n diagnostic = diag::note_access_constrained_by_path;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/microsoft-super.cpp"]={"clang/test/SemaCXX/microsoft-super.cpp:23:14: note: constrained by private inheritance here"} | |||
} | |||
}, | }, | ||
["note_access_natural"]={ | ["note_access_natural"]={ | ||
[ | [c]="...declared ... here", | ||
[ | [d]="note: ", | ||
[ | [f]="Note", | ||
[ | [h]="%select{|implicitly }1declared %select{private|protected}0 here", | ||
[ | [b]="note\\: ", | ||
[ | [g]="(?:|implicitly )declared (?:private|protected) here", | ||
[ | [a]=r, | ||
[ | [e]=n, | ||
[i]={"553c0796eedc",1264207592,"Implement elementary access control."}, | [i]={"553c0796eedc",1264207592,"Implement elementary access control."}, | ||
[j]={{ | [j]={{Bc,1167,"/// We are unable to access a given declaration due to its direct\n/// access control; diagnose that.\nstatic void diagnoseBadDirectAccess(Sema &S, const EffectiveContext &EC, AccessTarget &entity) {\n S.Diag(D->getLocation(), diag::note_access_natural) << (unsigned)(D->getAccess() == AS_protected) << isImplicit;"},{Bc,1268,"/// Diagnose the path which caused the given declaration or base class\n/// to become inaccessible.\nstatic void DiagnoseAccessPath(Sema &S, const EffectiveContext &EC, AccessTarget &entity) {\n if (entity.isMemberAccess() || constrainingBase + 1 != path.end()) {\n } else {\n diagnostic = diag::note_access_natural;"}}, | ||
[k]={ | |||
["clang/test/SemaCXX/access-control-check.cpp"]={"clang/test/SemaCXX/access-control-check.cpp:8:7: note: implicitly declared private here","clang/test/SemaCXX/access-control-check.cpp:9:7: note: implicitly declared private here"} | |||
} | |||
}, | }, | ||
["note_access_protected_restricted_ctordtor"]={ | ["note_access_protected_restricted_ctordtor"]={ | ||
[ | [c]="protected ... can only be used to ... a base class subobject", | ||
[ | [d]="note: ", | ||
[ | [f]="Note", | ||
[ | [h]="protected %select{constructor|destructor}0 can only be used to %select{construct|destroy}0 a base class subobject", | ||
[ | [b]="note\\: ", | ||
[ | [g]="protected (?:constructor|destructor) can only be used to (?:construct|destroy) a base class subobject", | ||
[ | [a]=r, | ||
[ | [e]=n, | ||
[i]={"5dadb65e0722",1333767860,"Fix several problems with protected access control:"}, | [i]={"5dadb65e0722",1333767860,"Fix several problems with protected access control:"}, | ||
[j]={{ | [j]={{Bc,1102,"/// Given that an entity has protected natural access, check whether\n/// access might be denied because of the protected member access\n/// restriction.\n///\n/// \\return true if a note was emitted\nstatic bool TryDiagnoseProtectedAccess(Sema &S, const EffectiveContext &EC, AccessTarget &Target) {\n for (EffectiveContext::record_iterator I = EC.Records.begin(), E = EC.Records.end(); I != E; ++I) {\n // Use a special diagnostic for constructors and destructors.\n if (isa<CXXConstructorDecl>(D) || isa<CXXDestructorDecl>(D) || (isa<FunctionTemplateDecl>(D) && isa<CXXConstructorDecl>(cast<FunctionTemplateDecl>(D)->getTemplatedDecl()))) {\n return S.Diag(D->getLocation(), diag::note_access_protected_restricted_ctordtor) << isa<CXXDestructorDecl>(D->getAsFunction());"}}, | ||
[k]={ | |||
["clang/test/CXX/class.access/class.protected/p1.cpp"]={"clang/test/CXX/class.access/class.protected/p1.cpp:463:5: note: protected constructor can only be used to construct a base class subobject","clang/test/CXX/class.access/class.protected/p1.cpp:465:5: note: protected destructor can only be used to destroy a base class subobject","clang/test/CXX/class.access/class.protected/p1.cpp:463:5: note: protected constructor can only be used to construct a base class subobject","clang/test/CXX/class.access/class.protected/p1.cpp:465:5: note: protected destructor can only be used to destroy a base class subobject","clang/test/CXX/class.access/class.protected/p1.cpp:464:5: note: protected constructor can only be used to construct a base class subobject","clang/test/CXX/class.access/class.protected/p1.cpp:465:5: note: protected destructor can only be used to destroy a base class subobject"} | |||
} | |||
} | } | ||
}; | }; |
edits